As we write a lot about Agile, about CI and TDD, we couldn’t not mention Unit testing and this time we will talk about what unit testing is, why for us it is part of Agile methodology and what are the main benefits of unit testing.
In computer programming, unit testing is a software testing method by which individual units of source code are tested to determine whether they are fit for use. To understand it better, a unit test is the smallest possible testable software component. Usually it performs a single cohesive function. As unit is small, it is easier to design, execute, record and analyze test results than for larger chunks of code. Defects revealed by a unit test are easy to locate and relatively easy to repair.
The goal of unit testing is to segregate each part of the program and test that the individual parts are working correctly. It isolates the smallest piece of testable software from the remainder of the code, and determine whether it behaves exactly as you expect. Unit testing has proven its value in that a large percentage of defects are identified during its use. It allows automation of the testing process, reduces difficulties of discovering errors contained in more complex pieces of the application, and test coverage is often enhanced because attention is given to each unit.
Just to give you an example, if you have two units and decide it would be more cost effective to glue them together and initially test them as an integrated unit, an error could occur in a variety of places:
- Error in unit 1?
- Error in unit 2?
- Error in both units?
- Error in the interface between the units?
- Error because of a defect in the test?
As you can see, finding the error in the integrated module is much more complicated than first isolating the units, testing each, then integrating them and testing the whole.
As you may know, in Apiumtech we work using Agile methodology, and we work a lot with unit tests. Unit testing became a signature of Extreme Programming (XP); another agile software development methodology we use quite often, which led quickly to Test Driven Development. We strongly believe that being Agile is doing CI and TDD. Using Test Driven Development, developers create Unit Tests as they develop their code so that each Unit Test tests a tiny piece of software code usually before the code is written.
Unit Testing really provides numerous benefits including finding software bugs early, facilitating change, simplifying integration, providing a source of documentation and many others, which we will look right now in more details.
TOP 8 BENEFITS OF UNIT TESTING
1. MAKE THE PROCESS AGILE
One of the main benefits of unit testing is that it makes the coding process more agile. When you add more and more features to a software, you sometimes need to change old design and code. But changing already tested code is both risky and costly. If we have unit tests in place, then we can proceed for refactoring confidently.
Unit testing really goes hand in hand with agile programming of all flavors because it builds in tests that allow you to make changes more easily. In other words, unit tests facilitate safe refactoring.
2. QUALITY OF CODE
Unit testing improves the quality of the code; it identifies every defect which may have aroused, before code is sent further for integration testing. Writing tests before actual coding makes you think harder on the problem. It exposes the edge cases and makes you write better code.
3. FIND SOFTWARE BUGS EARLY
Issues are found at early stage. Since unit testing are carried out by developers where they test their individual code before the integration, issues can be found very early and can be resolved then and there without impacting the other piece of codes. This includes both bugs in the programmer’s implementation and flaws or missing parts of the specification for the unit.
4. FACILITATES CHANGES & SIMPLIFIES INTEGRATION
Unit testing allows the programmer to refactor code or upgrade system libraries at a later date, and make sure the module still works correctly. Unit tests detect changes which may break a design contract. They help with maintaining and changing the code.
Unit testing really reduces defects in the newly developed features or reduces bugs when changing the existing functionality.
Unit Testing verifies the accuracy of the each unit. Afterward, the units are integrated into an application, by testing parts of the application via unit testing, later testing of the application during the integration process is easier due to the verification of the individual units.
5. PROVIDES DOCUMENTATION
Unit testing provides a documentation of the system. Developers looking to learn what functionality is provided by a unit, and how to use it, can look at the unit tests to gain a basic understanding of the unit’s interface (API).
6. DEBUGGING PROCESS
Unit testing helps in simplifying the debugging process. If a test fails then only latest changes made in code needs to be debugged.
Writing the test first forces you to think through your design and what it must accomplish before you write the code. This not only keeps you focused, it makes you create better designs.
Testing a piece of code forces you to define what that code is responsible for. If you can do this easily, that means the code’s responsibility is well-defined and therefore that it has high cohesion.
8. REDUCE THE COSTS
Since the bugs are found early in unit testing, it helps in reducing the cost of bug fixes. Just imagine the cost of bug found during the later stages of development like during system testing or during acceptance testing. And of course, bugs detected earlier are easier to fix, because bugs detected later are usually the result of many changes, and you don’t really know which one caused the bug.
Here are the benefits of unit testing we find crucial for us to build working software. If you saw other benefits of unit testing, I will be happy to discuss it in the comments section below.
If you find our articles interesting, we recommend you to subscribe to our monthly newsletter to always receive latest news and trends in the software world. Next ones will be about extreme programming, round robin and promising tech startups to watch in 2017. Keep posted!