{"id":37336,"date":"2020-05-19T16:37:39","date_gmt":"2020-05-19T14:37:39","guid":{"rendered":"http:\/\/arcadsoftware.com\/?p=37336"},"modified":"2026-03-18T10:56:43","modified_gmt":"2026-03-18T08:56:43","slug":"unit-testing-beating-technical-debt","status":"publish","type":"post","link":"https:\/\/www.arcadsoftware.com\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/","title":{"rendered":"Unit Testing: Beating technical debt"},"content":{"rendered":"<p><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-justify-content-center fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_2_3 2_3 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:66.666666666667%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.88%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.88%;--awb-width-medium:66.666666666667%;--awb-spacing-right-medium:2.88%;--awb-spacing-left-medium:2.88%;--awb-width-small:100%;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-1\"><h3 style=\"text-align: center; margin-top: 10px; margin-bottom: 20px; font-size: 15px;\">By Olenka Van Schendel&nbsp;<\/h3>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-1 fusion_builder_column_2_3 2_3 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:66.666666666667%;--awb-margin-top-large:25px;--awb-spacing-right-large:2.88%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.88%;--awb-width-medium:100%;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-2\"><p>On modern, distributed systems, unit testing is arguably the most effective element of your testing strategy.\u00a0 A battery of well-designed unit tests &#8220;forces&#8221; the quality of your application <em>as it is being developed<\/em> &#8211; and ideally even before.\u00a0 Unit test assets are then re-used continuously right across the lifetime of the application to catch any regressions in the system.<\/p>\n<p>Yet how can unit testing benefit legacy applications on IBM i \u2013 and especially those that were not designed with &#8220;units&#8221; in mind, and where monolithic code has been the norm?<\/p>\n<p>In this article we will examine the importance of unit testing in general and assess how relevant the technique is on IBM i.<\/p>\n<\/div><div class=\"fusion-text fusion-text-3 summary\"><h2 style=\"text-align: center;\">Summary<\/h2>\n<ol>\n<li><a class=\"fusion-one-page-text-link\" href=\"\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/#quality-from-quantity\">Quality from Quantity<\/a><\/li>\n<li><span class=\"TextRun Highlight SCXW210949484 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW210949484 BCX0\"><a class=\"fusion-one-page-text-link\" href=\"\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/#classification-of-defects\">Classification of defects<\/span><\/span><span class=\"EOP SCXW210949484 BCX0\" data-ccp-props=\"{\"><\/a><\/span><\/li>\n<li><a class=\"fusion-one-page-text-link\" href=\"\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/#Shift-Left-fail-early\">Shift Left \u2013 fail early<\/a><\/li>\n<li><a class=\"fusion-one-page-text-link\" href=\"\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/#Clean-atomic-code\">Clean, atomic code<\/a><\/li>\n<li><a class=\"fusion-one-page-text-link\" href=\"\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/#What-about-the-IBM-i\"><span class=\"TextRun Highlight SCXW117303680 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW117303680 BCX0\">What about the IBM i?<\/span><\/span><\/a><\/li>\n<li><span class=\"TextRun Highlight SCXW202233006 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW202233006 BCX0\"><a class=\"fusion-one-page-text-link\" href=\"\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/#The-importance-of-test-automation-on-IBM-i\">The importance of test automation on IBM i<\/a><\/span><\/span><span class=\"EOP SCXW202233006 BCX0\" data-ccp-props=\"{\">\u00a0<\/span><\/li>\n<li><span class=\"TextRun Highlight SCXW202233006 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW202233006 BCX0\"><a class=\"fusion-one-page-text-link\" href=\"\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/#Ensuring-developer-adoption-of-Unit-Testing\">Ensuring developer adoption of Unit Testing<\/a><\/span><\/span><\/li>\n<\/ol>\n<\/div><div class=\"fusion-text fusion-text-4\"><div class=\"fusion-menu-anchor\" id=\"quality-from-quantity\"><\/div>\n<h2><strong>1. <span class=\"TextRun SCXW46831198 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW46831198 BCX0\">Quality from Quantity<\/span><\/span><span class=\"TextRun SCXW46831198 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW46831198 BCX0\">\u00a0<\/span><\/span><span class=\"EOP SCXW46831198 BCX0\" data-ccp-props=\"{\">\u00a0<\/span><\/strong><\/h2>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-37339\" src=\"https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/Unit-Testing-Quality-from-Quantity-300x215.png\" alt=\"\" width=\"300\" height=\"210\" \/><\/p>\n<p>Unit testing is often disregarded in favour of more &#8220;business-facing&#8221; techniques like functional or end-to-end testing.\u00a0 Unit testing takes up valuable developer time and especially so on a legacy code base like IBM i not overly structured in &#8220;units&#8221;.\u00a0 So how can a &#8220;white box&#8221; unit test, with no knowledge of the actual functionality of the application, safeguard the quality and accuracy of your system, let alone drive down your develoment costs as well?<\/p>\n<p>The key is in the <em>quantity<\/em> and the <em>coverage<\/em> of the tests.<\/p>\n<p>Unit testing involves creating a multitude of small, very simple test cases.\u00a0 Each test isolates a particular section of code (such as procedure, subroutine, conditional block), defining success or failure in terms of the expected output parameter values for a given input. \u00a0The test run is then stored as the &#8220;base line&#8221;, and subsequent tests are evaluated against this result.\u00a0 This makes unit tests very effective for detecting regressions in the system.\u00a0 They can be reused, grouped and executed as part of a suite at any time, such as after every system build, after an environment change, or before a particular component is transferred to QA.\u00a0 Unit tests created early on in the development phase can be used later to &#8220;smoke test&#8221; an application, to catch basic errors before any further time is wasted on more sophisticated testing.<\/p>\n<div class=\"fusion-menu-anchor\" id=\"classification-of-defects\"><\/div>\n<h2><strong>2. Classification of defects<\/strong><\/h2>\n<p>Indeed, typical defect classifications reveal that software defects can be attributed to a wide variety of causes, including:<\/p>\n<ul>\n<li>Errors in the specification, design and implementation of the application<\/li>\n<li>Errors in use of the application<\/li>\n<li>Environment issues<\/li>\n<li>Intentional damage<\/li>\n<li>Potential consequences of earlier errors<\/li>\n<\/ul>\n<p>Recent surveys have shown that as many as 55% of all defects arise due to mistakes present in the specification.<\/p>\n<p>It has also been observed that about 40% of a tester\u2019s time is consumed because of the environment issues and this has a great impact on quality and productivity.<\/p>\n<p>The many &#8220;peripheral&#8221; causes of defects means that overall testing costs can be significantly reduced by reusing unit test cases in &#8220;smoke testing&#8221;, before large scale and expensive system tests are undertaken.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-37340\" src=\"https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/typical-defect-classification-300x242.png\" alt=\"\" width=\"300\" height=\"242\" srcset=\"https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/typical-defect-classification-177x142.png 177w, https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/typical-defect-classification-200x162.png 200w, https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/typical-defect-classification-300x242.png 300w, https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/typical-defect-classification-400x323.png 400w, https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/typical-defect-classification-600x485.png 600w, https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/typical-defect-classification-768x620.png 768w, https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/typical-defect-classification-800x646.png 800w, https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/typical-defect-classification.png 952w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-2 fusion_builder_column_2_3 2_3 fusion-flex-column\" style=\"--awb-padding-top:40px;--awb-padding-right:40px;--awb-padding-bottom:25px;--awb-padding-left:40px;--awb-bg-color:rgba(232,232,232,0.38);--awb-bg-color-hover:rgba(232,232,232,0.38);--awb-bg-size:cover;--awb-border-color:#ea5050;--awb-border-left:7px;--awb-border-style:solid;--awb-width-large:66.666666666667%;--awb-margin-top-large:45px;--awb-spacing-right-large:2.88%;--awb-margin-bottom-large:20px;--awb-spacing-left-large:2.88%;--awb-width-medium:66.666666666667%;--awb-order-medium:0;--awb-spacing-right-medium:2.88%;--awb-spacing-left-medium:2.88%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-5 fusion-text-no-margin\" style=\"--awb-margin-bottom:5px;\"><p><strong>Implementing a DevOps strategy on IBM i? Influencing IBM i DevOps maturity and success in the enterprise?<\/strong><\/p>\n<\/div><div style=\"text-align:right;\"><a class=\"fusion-button button-flat button-xlarge button-custom fusion-button-default button-1 fusion-button-span-no fusion-button-default-type\" style=\"--button_accent_color:#ea5050;--button_border_color:#ea5050;--button_accent_hover_color:#437cb4;--button_border_hover_color:#437cb4;--button_border_width-top:0px;--button_border_width-right:0px;--button_border_width-bottom:0px;--button_border_width-left:0px;--button-border-radius-top-left:0px;--button-border-radius-top-right:0px;--button-border-radius-bottom-right:0px;--button-border-radius-bottom-left:0px;--button_gradient_top_color:rgba(255,255,255,0);--button_gradient_bottom_color:rgba(255,255,255,0);--button_gradient_top_color_hover:rgba(255,255,255,0);--button_gradient_bottom_color_hover:rgba(255,255,255,0);\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"\/arcad\/resource-items\/devops-for-ibm-i-white-paper\/\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Download our White Paper <\/span><i class=\"fa-arrow-right fas awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-2 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-justify-content-center fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-3 fusion_builder_column_2_3 2_3 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:66.666666666667%;--awb-margin-top-large:25px;--awb-spacing-right-large:3.84%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.88%;--awb-width-medium:100%;--awb-spacing-right-medium:2.56%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-6\"><div class=\"fusion-menu-anchor\" id=\"Shift-Left-fail-early\"><\/div>\n<h2><strong>3.\u00a0<span class=\"TextRun SCXW221884155 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW221884155 BCX0\">Shift Left \u2013 fail early<\/span><\/span><span class=\"EOP SCXW221884155 BCX0\" data-ccp-props=\"{\">\u00a0<\/span><\/strong><\/h2>\n<p>Unit testing is just one of a number of &#8220;developer-side&#8221; techniques for detecting defects as early as possible in the development lifecycle. Along with static code analysis, peer code reviews, code coverage analysis and other code-level practices, unit testing catches errors at the earliest possible phase, when they cost the least.<\/p>\n<p>The investment in developer time to create the test in the first instance can be offset by automating the creation process. The key is to focus on typical use cases that affect the behaviour of the system. Combining both &#8220;happy path&#8221; and &#8220;edge cases&#8221; makes unit tests even more effective.<\/p>\n<p>Used continuously in a CI\/CD cycle, unit testing pinpoints precisely in which lines of code the defect lies. Bugs are fixed before they ever leave the hands of the developer!<\/p>\n<div class=\"fusion-menu-anchor\" id=\"Clean-atomic-code\"><\/div>\n<h2><strong>4. Clean, atomic code<\/strong><\/h2>\n<p>More than 90% of software development cost is spent on maintenance of existing systems.<strong>\u00a0 <\/strong>Creating unit tests as you develop code actually improves the code design and makes the code easier to understand by development teams in the future.\u00a0 As well as being more reliable, unit tested code is simpler, more modular, and hence more reusable.\u00a0 This reduces technical debt and lowers development costs in the long term.<\/p>\n<p>In its extreme form, Test Driven Development (TDM) brings extra clarity even to the definition of requirements by creating tests before the code itself.<\/p>\n<div class=\"fusion-menu-anchor\" id=\"What-about-the-IBM-i\"><\/div>\n<h2><strong>5. What about the IBM i?<\/strong><\/h2>\n<p>Modern IBM i applications designed with an ILE architecture already separate the business rules, data persistence and user interface into distinct modules or functions making unit test automation much easier.\u00a0 The entry and exit points of a module are clear so defining a \u201csucceed\/fail\u201d status is relatively easy.<\/p>\n<p>However many applications on IBM i still contain sections of source code that were developed as long as 40 years ago and are &#8220;too important to touch&#8221;.\u00a0 This creates a very precarious situation where the risk and cost of refactoring monolithic or spaghetti code into units or modules is too high to take action.\u00a0 Yes the price of doing nothing is to be outpaced by more agile competition.\u00a0 Luckily, unit testing creates that safety net you need as you modularize your legacy code. Generating and re-running unit tests over &#8220;backend&#8221; applications as you refactor them makes sure that previous deployments still work when combined with new functionality.<\/p>\n<p>This kind of &#8220;Test Driven Maintenance&#8221; technique runs unit tests on demand and in batch as a kind of early warning system to prevent regressions emerging as you &#8220;untangle&#8221;\u00a0your legacy code.<\/p>\n<p>To be fully adopted by developers, any unit test functionality on IBM i must be integrated within the RDi development environment, and also with standard tools such as Jenkins and JUnit to encourage the sharing of tools between multi-technology teams.\u00a0 The best unit testing solutions on IBM i can automate both the creation and execution of test cases, using parsing technology to search for parameters and their data types, rapidly identifying all the inputs and outputs of the program under test.\u00a0 Cross-referencing and dependency knowledge also help manage test cases and re-use cases between versions.<\/p>\n<div class=\"fusion-menu-anchor\" id=\"The-importance-of-test-automation-on-IBM-i\"><\/div>\n<h2><strong>6. The importance of test automation on IBM i<span class=\"EOP BCX0 SCXW194425078\" data-ccp-props=\"{\">\u00a0<\/span><\/strong><\/h2>\n<p>There are still some extreme cases where IBM i applications cannot be easily refactored and the cost\/time of restructuring the code is prohibitive.<\/p>\n<p>Here functional test automation is the far more practical option.\u00a0 Test cases are created automatically as users execute application functions from the standard application UI.\u00a0 Unlike unit testing where the underlying data environment is dynamic, functional test data is static and restored prior to each test run to detect regressions by simple comparison of data, spool output and UI.\u00a0 There is no notion of success or failure, only <em>different<\/em>.<\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-37341\" src=\"https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/test-automation-1024x435.png\" alt=\"\" width=\"789\" height=\"335\" srcset=\"https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/test-automation-200x85.png 200w, https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/test-automation-300x128.png 300w, https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/test-automation-400x170.png 400w, https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/test-automation-600x255.png 600w, https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/test-automation-768x327.png 768w, https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/test-automation-800x340.png 800w, https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/test-automation-940x400.png 940w, https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/test-automation-1024x435.png 1024w, https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/test-automation-1200x510.png 1200w, https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/test-automation.png 1385w\" sizes=\"(max-width: 789px) 100vw, 789px\" \/><\/p>\n<p>Of course an optimal testing strategy combines both unit test and functional test automation to minimize the Mean Time to Repair (MTTR) of defects overall.\u00a0 The re-use and sharing of test assets avoids costly wastage of developer time and makes testing a continuous activity, an integral part of the overall CI\/CD cycle.<\/p>\n<div class=\"fusion-menu-anchor\" id=\"Ensuring-developer-adoption-of-Unit-Testing\"><\/div>\n<h2><strong>7. Ensuring developer adoption of Unit Testing<\/strong><\/h2>\n<p><span data-contrast=\"none\">In conclusion,\u00a0<\/span><span data-contrast=\"none\">we<\/span><span data-contrast=\"none\">\u00a0have\u00a0<\/span><span data-contrast=\"none\">seen<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">that<\/span><span data-contrast=\"none\">\u00a0unit\u00a0<\/span><span data-contrast=\"none\">testing<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">facilitates<\/span><span data-contrast=\"none\">\u00a0a\u00a0<\/span><span data-contrast=\"none\">bottom<\/span><span data-contrast=\"none\">-up style of\u00a0<\/span><span data-contrast=\"none\">testing<\/span><span data-contrast=\"none\">, by\u00a0<\/span><span data-contrast=\"none\">validating<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">individual<\/span><span data-contrast=\"none\">\u00a0parts of a program\u00a0<\/span><span data-contrast=\"none\">before<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">testing<\/span><span data-contrast=\"none\">\u00a0the\u00a0<\/span><span data-contrast=\"none\">&#8220;<\/span><span data-contrast=\"none\">sum<\/span><span data-contrast=\"none\">\u00a0of\u00a0<\/span><span data-contrast=\"none\">its<\/span><span data-contrast=\"none\">\u00a0parts<\/span><span data-contrast=\"none\">&#8220;<\/span><span data-contrast=\"none\">\u00a0&#8211; an\u00a0<\/span><span data-contrast=\"none\">approach<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">that<\/span><span data-contrast=\"none\">\u00a0shifts\u00a0<\/span><span data-contrast=\"none\">defects<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">left<\/span><span data-contrast=\"none\">\u00a0and\u00a0<\/span><span data-contrast=\"none\">reduces<\/span><span data-contrast=\"none\">\u00a0effort in<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">integration<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">testing<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">later<\/span><span data-contrast=\"none\">.\u00a0\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">Unit tests\u00a0<\/span><span data-contrast=\"none\">act<\/span><span data-contrast=\"none\">\u00a0as a\u00a0<\/span><span data-contrast=\"none\">kind<\/span><span data-contrast=\"none\">\u00a0of &#8220;living documentation&#8221; of the system,\u00a0<\/span><span data-contrast=\"none\">enabling<\/span><span data-contrast=\"none\">\u00a0an\u00a0<\/span><span data-contrast=\"none\">rapid<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">understanding<\/span><span data-contrast=\"none\">\u00a0of a\u00a0<\/span><span data-contrast=\"none\">unit\u2019s<\/span><span data-contrast=\"none\">\u00a0interface. In the case of test-<\/span><span data-contrast=\"none\">driven<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">development<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">they<\/span><span data-contrast=\"none\">\u00a0can\u00a0<\/span><span data-contrast=\"none\">even<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">take<\/span><span data-contrast=\"none\">\u00a0the place of\u00a0<\/span><span data-contrast=\"none\">formal<\/span><span data-contrast=\"none\">\u00a0design.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">Yet<\/span><span data-contrast=\"none\">\u00a0unit\u00a0<\/span><span data-contrast=\"none\">testing<\/span><span data-contrast=\"none\">\u00a0must\u00a0<\/span><span data-contrast=\"none\">be<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">done<\/span><span data-contrast=\"none\">\u00a0in\u00a0<\/span><span data-contrast=\"none\">conjunction<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">with<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">other<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">forms<\/span><span data-contrast=\"none\">\u00a0of\u00a0<\/span><span data-contrast=\"none\">testing<\/span><span data-contrast=\"none\">\u00a0as\u00a0<\/span><span data-contrast=\"none\">it<\/span><span data-contrast=\"none\">\u00a0not catch system-<\/span><span data-contrast=\"none\">level<\/span><span data-contrast=\"none\">\u00a0or\u00a0<\/span><span data-contrast=\"none\">functional<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">errors<\/span><span data-contrast=\"none\">\u00a0and\u00a0<\/span><span data-contrast=\"none\">also<\/span><span data-contrast=\"none\">\u00a0non-<\/span><span data-contrast=\"none\">functional<\/span><span data-contrast=\"none\">\u00a0aspects\u00a0<\/span><span data-contrast=\"none\">such<\/span><span data-contrast=\"none\">\u00a0as performance.\u00a0\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">The principal challenge\u00a0<\/span><span data-contrast=\"none\">with<\/span><span data-contrast=\"none\">\u00a0unit\u00a0<\/span><span data-contrast=\"none\">testing<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">is<\/span><span data-contrast=\"none\">\u00a0the\u00a0<\/span><span data-contrast=\"none\">creation<\/span><span data-contrast=\"none\">\u00a0of\u00a0<\/span><span data-contrast=\"none\">realistic<\/span><span data-contrast=\"none\">\u00a0and\u00a0<\/span><span data-contrast=\"none\">useful<\/span><span data-contrast=\"none\">\u00a0tests,\u00a0<\/span><span data-contrast=\"none\">to<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">establish<\/span><span data-contrast=\"none\">\u00a0the relevant initial conditions\u00a0<\/span><span data-contrast=\"none\">that<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">mirror<\/span><span data-contrast=\"none\">\u00a0a normal application\u00a0<\/span><span data-contrast=\"none\">execution<\/span><span data-contrast=\"none\">.\u00a0 Most\u00a0<\/span><span data-contrast=\"none\">importantly<\/span><span data-contrast=\"none\">, unit tests must\u00a0<\/span><span data-contrast=\"none\">be<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">maintained<\/span><span data-contrast=\"none\">\u00a0in\u00a0<\/span><span data-contrast=\"none\">parallel<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">with<\/span><span data-contrast=\"none\">\u00a0the application change process\u00a0<\/span><span data-contrast=\"none\">itself<\/span><span data-contrast=\"none\">, to\u00a0<\/span><span data-contrast=\"none\">ensure<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">that<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">impacted<\/span><span data-contrast=\"none\">\u00a0tests are\u00a0<\/span><span data-contrast=\"none\">kept<\/span><span data-contrast=\"none\">\u00a0up to date and are\u00a0<\/span><span data-contrast=\"none\">executed<\/span><span data-contrast=\"none\">\u00a0for\u00a0<\/span><span data-contrast=\"none\">every<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">dependent<\/span><span data-contrast=\"none\">\u00a0code change.\u00a0<\/span><span data-contrast=\"none\">To\u00a0<\/span><span data-contrast=\"none\">make<\/span><span data-contrast=\"none\">\u00a0the maintenance of unit tests\u00a0<\/span><span data-contrast=\"none\">easy<\/span><span data-contrast=\"none\">,\u00a0<\/span><span data-contrast=\"none\">it<\/span><span data-contrast=\"none\">\u00a0has to\u00a0<\/span><span data-contrast=\"none\">be<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">easy<\/span><span data-contrast=\"none\">\u00a0to re-<\/span><span data-contrast=\"none\">identify<\/span><span data-contrast=\"none\">\u00a0new input and output\u00a0<\/span><span data-contrast=\"none\">fields<\/span><span data-contrast=\"none\">\u00a0as the application\u00a0<\/span><span data-contrast=\"none\">evolves<\/span><span data-contrast=\"none\">.<\/span><span data-contrast=\"none\">\u00a0If not, unit tests can\u00a0<\/span><span data-contrast=\"none\">become<\/span><span data-contrast=\"none\">\u00a0as buggy as the code\u00a0<\/span><span data-contrast=\"none\">they<\/span><span data-contrast=\"none\">\u00a0are\u00a0<\/span><span data-contrast=\"none\">expected<\/span><span data-contrast=\"none\">\u00a0to\u00a0<\/span><span data-contrast=\"none\">test!<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">To\u00a0<\/span><span data-contrast=\"none\">overcome<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">these<\/span><span data-contrast=\"none\">\u00a0challenges unit\u00a0<\/span><span data-contrast=\"none\">testing<\/span><span data-contrast=\"none\">\u00a0must\u00a0<\/span><span data-contrast=\"none\">be<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">highly<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">automated<\/span><span data-contrast=\"none\">\u00a0and made an\u00a0<\/span><span data-contrast=\"none\">integral<\/span><span data-contrast=\"none\">\u00a0part of the\u00a0<\/span><span data-contrast=\"none\">continuous<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">delivery<\/span><span data-contrast=\"none\">\u202f<\/span><span data-contrast=\"none\">cycle:<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"-\" data-font=\"Arial\" data-listid=\"1\" aria-setsize=\"-1\" data-aria-posinset=\"5\" data-aria-level=\"1\"><span data-contrast=\"none\">Auto-<\/span><span data-contrast=\"none\">discovery<\/span><span data-contrast=\"none\">\u00a0of inputs and outputs to automate the\u00a0<\/span><span data-contrast=\"none\">creation<\/span><span data-contrast=\"none\">\u00a0of\u00a0<\/span><span data-contrast=\"none\">realistic<\/span><span data-contrast=\"none\">\/<\/span><span data-contrast=\"none\">useful<\/span><span data-contrast=\"none\">\u00a0tests<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"-\" data-font=\"Arial\" data-listid=\"1\" aria-setsize=\"-1\" data-aria-posinset=\"5\" data-aria-level=\"1\"><span data-contrast=\"none\">Integration<\/span><span data-contrast=\"none\">\u00a0of unit\u00a0<\/span><span data-contrast=\"none\">testing<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">into<\/span><span data-contrast=\"none\">\u00a0the version control process\u00a0<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"-\" data-font=\"Arial\" data-listid=\"1\" aria-setsize=\"-1\" data-aria-posinset=\"5\" data-aria-level=\"1\"><span data-contrast=\"none\">Auto-execution<\/span><span data-contrast=\"none\">\u00a0of tests as\u00a0<\/span><span data-contrast=\"none\">continuous<\/span><span data-contrast=\"none\">\u00a0part of the CI\/CD flow<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"-\" data-font=\"Arial\" data-listid=\"1\" aria-setsize=\"-1\" data-aria-posinset=\"5\" data-aria-level=\"1\"><span data-contrast=\"none\">Re-use of unit test assets for\u00a0<\/span><span data-contrast=\"none\">each<\/span><span data-contrast=\"none\">\u00a0program change<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"-\" data-font=\"Arial\" data-listid=\"1\" aria-setsize=\"-1\" data-aria-posinset=\"5\" data-aria-level=\"1\"><span data-contrast=\"none\">Dependency-driven<\/span><span data-contrast=\"none\">\u00a0maintenance<\/span><span data-contrast=\"none\">\/update<\/span><span data-contrast=\"none\">\u00a0of unit tests\u00a0<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"none\">In short, unit\u00a0<\/span><span data-contrast=\"none\">testing<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">is<\/span><span data-contrast=\"none\">\u00a0a\u00a0<\/span><span data-contrast=\"none\">highly<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">beneficial<\/span><span data-contrast=\"none\">\u00a0but\u00a0<\/span><span data-contrast=\"none\">rigorous<\/span><span data-contrast=\"none\">\u00a0discipline,\u00a0<\/span><span data-contrast=\"none\">requiring<\/span><span data-contrast=\"none\">\u00a0<\/span><span data-contrast=\"none\">maximal\u00a0<\/span><span data-contrast=\"none\">automation for adoption in the long\u00a0<\/span><span data-contrast=\"none\">term<\/span><span data-contrast=\"none\">\u202f!<\/span><\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-4 fusion_builder_column_2_3 2_3 fusion-flex-column\" style=\"--awb-padding-top:40px;--awb-padding-right:40px;--awb-padding-bottom:25px;--awb-padding-left:40px;--awb-bg-color:rgba(232,232,232,0.38);--awb-bg-color-hover:rgba(232,232,232,0.38);--awb-bg-size:cover;--awb-border-color:#ea5050;--awb-border-left:7px;--awb-border-style:solid;--awb-width-large:66.666666666667%;--awb-margin-top-large:45px;--awb-spacing-right-large:2.88%;--awb-margin-bottom-large:20px;--awb-spacing-left-large:2.88%;--awb-width-medium:66.666666666667%;--awb-order-medium:0;--awb-spacing-right-medium:2.88%;--awb-spacing-left-medium:2.88%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-7 fusion-text-no-margin\" style=\"--awb-margin-bottom:5px;\"><p><strong>Your unit testing is tedious or incomplete? Automate with ARCAD iUnit !<\/strong><\/p>\n<\/div><div style=\"text-align:right;\"><a class=\"fusion-button button-flat button-xlarge button-custom fusion-button-default button-2 fusion-button-span-no fusion-button-default-type\" style=\"--button_accent_color:#ea5050;--button_border_color:#ea5050;--button_accent_hover_color:#437cb4;--button_border_hover_color:#437cb4;--button_border_width-top:0px;--button_border_width-right:0px;--button_border_width-bottom:0px;--button_border_width-left:0px;--button-border-radius-top-left:0px;--button-border-radius-top-right:0px;--button-border-radius-bottom-right:0px;--button-border-radius-bottom-left:0px;--button_gradient_top_color:rgba(255,255,255,0);--button_gradient_bottom_color:rgba(255,255,255,0);--button_gradient_top_color_hover:rgba(255,255,255,0);--button_gradient_bottom_color_hover:rgba(255,255,255,0);\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"\/arcad\/resource-items\/arcad-iunit\/\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Download the datasheet<\/span><i class=\"fa-arrow-right fas awb-button__icon awb-button__icon--default button-icon-right\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-3 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-padding-top:30px;--awb-margin-top:45px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-stretch fusion-flex-justify-content-center fusion-flex-content-wrap\" style=\"max-width:1248px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-5 fusion_builder_column_2_3 2_3 fusion-flex-column\" style=\"--awb-padding-top:25px;--awb-padding-right:25px;--awb-padding-bottom:25px;--awb-padding-left:25px;--awb-bg-color:var(--awb-color1);--awb-bg-color-hover:var(--awb-color1);--awb-bg-size:cover;--awb-box-shadow:2px 1px 4px 0px rgba(33,41,52,0.41);;--awb-width-large:66.666666666667%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.88%;--awb-margin-bottom-large:20px;--awb-spacing-left-large:2.88%;--awb-width-medium:66.666666666667%;--awb-order-medium:0;--awb-spacing-right-medium:2.88%;--awb-spacing-left-medium:2.88%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-stretch fusion-flex-justify-content-center fusion-flex-content-wrap\" style=\"--awb-flex-grow:0;--awb-flex-grow-medium:0;--awb-flex-grow-small:0;--awb-flex-shrink:0;--awb-flex-shrink-medium:0;--awb-flex-shrink-small:0;width:104% !important;max-width:104% !important;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-0 fusion_builder_column_inner_1_5 1_5 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:20%;--awb-margin-top-large:0px;--awb-spacing-right-large:0%;--awb-margin-bottom-large:5px;--awb-spacing-left-large:9.6%;--awb-width-medium:20%;--awb-order-medium:0;--awb-spacing-right-medium:0%;--awb-spacing-left-medium:9.6%;--awb-width-small:20%;--awb-order-small:0;--awb-spacing-right-small:0%;--awb-margin-bottom-small:0px;--awb-spacing-left-small:9.6%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-image-element \" style=\"--awb-max-width:130px;--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-1 hover-type-none\" style=\"border-radius:50px;\"><img decoding=\"async\" width=\"250\" height=\"250\" alt=\"Olenka Van schendel\" title=\"olenka-van-schendel\" src=\"https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2026\/03\/olenka-van-schendel.png\" class=\"img-responsive wp-image-75388\" srcset=\"https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2026\/03\/olenka-van-schendel-200x200.png 200w, https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2026\/03\/olenka-van-schendel.png 250w\" sizes=\"(max-width: 640px) 100vw, 250px\" \/><\/span><\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-1 fusion_builder_column_inner_4_5 4_5 fusion-flex-column fusion-flex-align-self-flex-start\" style=\"--awb-padding-left:5px;--awb-bg-size:cover;--awb-width-large:80%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.4%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.4%;--awb-width-medium:80%;--awb-order-medium:0;--awb-spacing-right-medium:2.4%;--awb-spacing-left-medium:2.4%;--awb-width-small:80%;--awb-order-small:0;--awb-margin-top-small:0px;--awb-spacing-right-small:2.4%;--awb-spacing-left-small:2.4%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-1 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-text-color:rgba(48,135,120,0.59);--awb-margin-top:0px;--awb-margin-bottom:7px;--awb-margin-top-small:0px;--awb-margin-bottom-small:0px;--awb-font-size:13px;\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:&quot;Poppins&quot;;font-style:normal;font-weight:500;margin:0;font-size:1em;--fontSize:13;--minFontSize:13;line-height:1.2;\">About the Author<\/h2><\/div><div class=\"fusion-title title fusion-title-2 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-color5);--awb-margin-top:0px;--awb-margin-bottom:0px;--awb-margin-top-small:0px;--awb-margin-bottom-small:0px;--awb-font-size:22px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:&quot;Poppins&quot;;font-style:normal;font-weight:600;margin:0;font-size:1em;--fontSize:22;--minFontSize:22;line-height:1.3;\">Olenka Van Schendel<\/h3><\/div><div class=\"fusion-title title fusion-title-3 fusion-sep-none fusion-title-text fusion-title-size-four\" style=\"--awb-text-color:var(--awb-color5);--awb-margin-top:0px;--awb-margin-bottom:5px;--awb-margin-top-small:0px;--awb-margin-bottom-small:10px;--awb-font-size:16px;\"><h4 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"font-family:&quot;Poppins&quot;;font-style:normal;font-weight:400;margin:0;font-size:1em;--fontSize:16;--minFontSize:16;line-height:1.36;\">VP Marketing &amp; Business Development, Arcad Software<\/h4><\/div><div class=\"fusion-text fusion-text-8 fusion-text-no-margin\" style=\"--awb-font-size:14px;--awb-line-height:1.4;--awb-margin-bottom:0px;--awb-text-font-family:&quot;Poppins&quot;;--awb-text-font-style:normal;--awb-text-font-weight:400;\"><p>With over 30 years in IT, Olenka started out in the Artificial Intelligence domain and natural language processing, working as software engineer developing principally on Unix. She soon specialized in the development of integrated software tooling including compilers, debuggers, source code management systems, and development environments. Now focused on Business Development worldwide in the ARCAD Software group, she remains deeply engaged in DevSecOps tooling, seeking to bridge the gap between the IBM i and mainframe world and modern developer stacks.<\/p>\n<\/div><\/div><\/div><\/div><\/div><\/div>\n<\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-4 nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-6 fusion_builder_column_1_1 1_1 fusion-one-full fusion-column-first fusion-column-last\" style=\"--awb-bg-size:cover;--awb-margin-bottom:0px;\"><div class=\"fusion-column-wrapper fusion-flex-column-wrapper-legacy\"><div class=\"fusion-text fusion-text-9\"><\/div><div class=\"fusion-clearfix\"><\/div><\/div><\/div><\/div><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this article we will examine the importance of unit testing in general and assess how relevant the technique is on IBM i.<\/p>\n","protected":false},"author":3,"featured_media":37338,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[219],"tags":[563,371],"class_list":["post-37336","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-blog-article","tag-ibm-i-devops"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Unit Testing: Beating technical debt - ARCAD<\/title>\n<meta name=\"description\" content=\"In this article we will examine the importance of unit testing in general and assess how relevant the technique is on IBM i.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.arcadsoftware.com\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Unit Testing: Beating technical debt - ARCAD\" \/>\n<meta property=\"og:description\" content=\"In this article we will examine the importance of unit testing in general and assess how relevant the technique is on IBM i.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.arcadsoftware.com\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/\" \/>\n<meta property=\"og:site_name\" content=\"ARCAD\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/pages\/Arcad-Software\/116086138469235\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-19T14:37:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-18T08:56:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/Beating-Technical-Debt.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1959\" \/>\n\t<meta property=\"og:image:height\" content=\"721\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"administrator\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"administrator\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/news-events\\\/blog\\\/unit-testing-beating-technical-debt\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/news-events\\\/blog\\\/unit-testing-beating-technical-debt\\\/\"},\"author\":{\"name\":\"administrator\",\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/#\\\/schema\\\/person\\\/ac3c33678907c9c414148df7a202dfbf\"},\"headline\":\"Unit Testing: Beating technical debt\",\"datePublished\":\"2020-05-19T14:37:39+00:00\",\"dateModified\":\"2026-03-18T08:56:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/news-events\\\/blog\\\/unit-testing-beating-technical-debt\\\/\"},\"wordCount\":2867,\"publisher\":{\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/news-events\\\/blog\\\/unit-testing-beating-technical-debt\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/Beating-Technical-Debt.png\",\"keywords\":[\"Blog Article\",\"DevOps for IBM i\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/news-events\\\/blog\\\/unit-testing-beating-technical-debt\\\/\",\"url\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/news-events\\\/blog\\\/unit-testing-beating-technical-debt\\\/\",\"name\":\"Unit Testing: Beating technical debt - ARCAD\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/news-events\\\/blog\\\/unit-testing-beating-technical-debt\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/news-events\\\/blog\\\/unit-testing-beating-technical-debt\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/Beating-Technical-Debt.png\",\"datePublished\":\"2020-05-19T14:37:39+00:00\",\"dateModified\":\"2026-03-18T08:56:43+00:00\",\"description\":\"In this article we will examine the importance of unit testing in general and assess how relevant the technique is on IBM i.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/news-events\\\/blog\\\/unit-testing-beating-technical-debt\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/news-events\\\/blog\\\/unit-testing-beating-technical-debt\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/news-events\\\/blog\\\/unit-testing-beating-technical-debt\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/Beating-Technical-Debt.png\",\"contentUrl\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/Beating-Technical-Debt.png\",\"width\":1959,\"height\":721,\"caption\":\"Beating Technical Debt\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/news-events\\\/blog\\\/unit-testing-beating-technical-debt\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"ARCAD\",\"item\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Unit Testing: Beating technical debt\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/#website\",\"url\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/\",\"name\":\"ARCAD\",\"description\":\"Experts DevOps &amp; Modernisation sur IBM i (alias AS\\\/400 ou AS400)\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/#organization\",\"name\":\"ARCAD Software\",\"url\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/arcad-group-logo-text-144.png\",\"contentUrl\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/arcad-group-logo-text-144.png\",\"width\":144,\"height\":200,\"caption\":\"ARCAD Software\"},\"image\":{\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/pages\\\/Arcad-Software\\\/116086138469235\",\"https:\\\/\\\/x.com\\\/arcad_software\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/arcad-software\",\"https:\\\/\\\/www.youtube.com\\\/user\\\/ARCADSoftwareInc\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/#\\\/schema\\\/person\\\/ac3c33678907c9c414148df7a202dfbf\",\"name\":\"administrator\",\"url\":\"https:\\\/\\\/www.arcadsoftware.com\\\/arcad\\\/author\\\/administrator\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Unit Testing: Beating technical debt - ARCAD","description":"In this article we will examine the importance of unit testing in general and assess how relevant the technique is on IBM i.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.arcadsoftware.com\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/","og_locale":"en_US","og_type":"article","og_title":"Unit Testing: Beating technical debt - ARCAD","og_description":"In this article we will examine the importance of unit testing in general and assess how relevant the technique is on IBM i.","og_url":"https:\/\/www.arcadsoftware.com\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/","og_site_name":"ARCAD","article_publisher":"https:\/\/www.facebook.com\/pages\/Arcad-Software\/116086138469235","article_published_time":"2020-05-19T14:37:39+00:00","article_modified_time":"2026-03-18T08:56:43+00:00","og_image":[{"width":1959,"height":721,"url":"https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/Beating-Technical-Debt.png","type":"image\/png"}],"author":"administrator","twitter_misc":{"Written by":"administrator","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.arcadsoftware.com\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/#article","isPartOf":{"@id":"https:\/\/www.arcadsoftware.com\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/"},"author":{"name":"administrator","@id":"https:\/\/www.arcadsoftware.com\/arcad\/#\/schema\/person\/ac3c33678907c9c414148df7a202dfbf"},"headline":"Unit Testing: Beating technical debt","datePublished":"2020-05-19T14:37:39+00:00","dateModified":"2026-03-18T08:56:43+00:00","mainEntityOfPage":{"@id":"https:\/\/www.arcadsoftware.com\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/"},"wordCount":2867,"publisher":{"@id":"https:\/\/www.arcadsoftware.com\/arcad\/#organization"},"image":{"@id":"https:\/\/www.arcadsoftware.com\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/#primaryimage"},"thumbnailUrl":"https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/Beating-Technical-Debt.png","keywords":["Blog Article","DevOps for IBM i"],"articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.arcadsoftware.com\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/","url":"https:\/\/www.arcadsoftware.com\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/","name":"Unit Testing: Beating technical debt - ARCAD","isPartOf":{"@id":"https:\/\/www.arcadsoftware.com\/arcad\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.arcadsoftware.com\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/#primaryimage"},"image":{"@id":"https:\/\/www.arcadsoftware.com\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/#primaryimage"},"thumbnailUrl":"https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/Beating-Technical-Debt.png","datePublished":"2020-05-19T14:37:39+00:00","dateModified":"2026-03-18T08:56:43+00:00","description":"In this article we will examine the importance of unit testing in general and assess how relevant the technique is on IBM i.","breadcrumb":{"@id":"https:\/\/www.arcadsoftware.com\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.arcadsoftware.com\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.arcadsoftware.com\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/#primaryimage","url":"https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/Beating-Technical-Debt.png","contentUrl":"https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2020\/05\/Beating-Technical-Debt.png","width":1959,"height":721,"caption":"Beating Technical Debt"},{"@type":"BreadcrumbList","@id":"https:\/\/www.arcadsoftware.com\/arcad\/news-events\/blog\/unit-testing-beating-technical-debt\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"ARCAD","item":"https:\/\/www.arcadsoftware.com\/arcad\/"},{"@type":"ListItem","position":2,"name":"Unit Testing: Beating technical debt"}]},{"@type":"WebSite","@id":"https:\/\/www.arcadsoftware.com\/arcad\/#website","url":"https:\/\/www.arcadsoftware.com\/arcad\/","name":"ARCAD","description":"Experts DevOps &amp; Modernisation sur IBM i (alias AS\/400 ou AS400)","publisher":{"@id":"https:\/\/www.arcadsoftware.com\/arcad\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.arcadsoftware.com\/arcad\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.arcadsoftware.com\/arcad\/#organization","name":"ARCAD Software","url":"https:\/\/www.arcadsoftware.com\/arcad\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.arcadsoftware.com\/arcad\/#\/schema\/logo\/image\/","url":"https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2017\/09\/arcad-group-logo-text-144.png","contentUrl":"https:\/\/www.arcadsoftware.com\/arcad\/wp-content\/uploads\/2017\/09\/arcad-group-logo-text-144.png","width":144,"height":200,"caption":"ARCAD Software"},"image":{"@id":"https:\/\/www.arcadsoftware.com\/arcad\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/pages\/Arcad-Software\/116086138469235","https:\/\/x.com\/arcad_software","https:\/\/www.linkedin.com\/company\/arcad-software","https:\/\/www.youtube.com\/user\/ARCADSoftwareInc"]},{"@type":"Person","@id":"https:\/\/www.arcadsoftware.com\/arcad\/#\/schema\/person\/ac3c33678907c9c414148df7a202dfbf","name":"administrator","url":"https:\/\/www.arcadsoftware.com\/arcad\/author\/administrator\/"}]}},"_links":{"self":[{"href":"https:\/\/www.arcadsoftware.com\/arcad\/wp-json\/wp\/v2\/posts\/37336","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.arcadsoftware.com\/arcad\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.arcadsoftware.com\/arcad\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.arcadsoftware.com\/arcad\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.arcadsoftware.com\/arcad\/wp-json\/wp\/v2\/comments?post=37336"}],"version-history":[{"count":6,"href":"https:\/\/www.arcadsoftware.com\/arcad\/wp-json\/wp\/v2\/posts\/37336\/revisions"}],"predecessor-version":[{"id":75471,"href":"https:\/\/www.arcadsoftware.com\/arcad\/wp-json\/wp\/v2\/posts\/37336\/revisions\/75471"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.arcadsoftware.com\/arcad\/wp-json\/wp\/v2\/media\/37338"}],"wp:attachment":[{"href":"https:\/\/www.arcadsoftware.com\/arcad\/wp-json\/wp\/v2\/media?parent=37336"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.arcadsoftware.com\/arcad\/wp-json\/wp\/v2\/categories?post=37336"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.arcadsoftware.com\/arcad\/wp-json\/wp\/v2\/tags?post=37336"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}