We as developers hesitate to add unit testing to our work routine. Some refuse to do so because writing extra code adds more time and effort to an already busy day.
What is often not considered is that going the extra mile may save time in the long run. Eliminating unit testing is only time-saving if your code is going to work bug free….
If you need more reasoning, here is a short overview of the major benefits:
1. Reduce the Number of Bugs
Many developers have to deal with bugs in production code. Taking care of it, is not only tedious and time-consuming, but issues that appear in production are much more complex than if they’d have been discovered in development or staging. By adding unit tests to the work routine, failure can be detected early on, pretty much as soon as the code is written, and the development team will be able to take care of any unintended effect pretty much from the beginning without major complications. If you consider yourself Agile, unit testing is part of your work.
2. Easily Change and Refactor Code
Automated unit tests can catch bugs easily, and knowing that makes you feel more confident. Once an issue is detected, you feel more at ease when you have to make changes to your code, even if the changes are beyond trivial ones – any code issue detected before it’s released to production is a victory!
3. Automated Tests
We run tests, so we can predict the outcome and make sure our code will work once delivered – even if it becomes ‘legacy’. Manual tests can only go so far, and that’s when automated tests come into the picture. Automated tests are fast, allow us to run tests as frequently as required, even if we are busy with other tasks. Once written, it can be used as often you need it. If the code is changed later, these tests can point to problems without additional effort.
4. Improve Code design
Unit testing can improve code design, especially in test-driven developments (TDD).
This is a topic in its own right, but when you consider implementing unit testing, you have to make sure that your code is testable. Think about it, when you deal with the overall design concept, and you need break down the high-level design to ‘single entity-multiple components’, you’ll be forced to think of each unit and make sure each of them is testable. This improves the overall code design by clear unit separation, defining better unit interfaces and the design concept.
5. Unit tests are a Form of Documentation.
Even if you don’t document your code but you unit test, you provide documentation of the system when you test. Unit tests fix the software’s behavior – and only pass if the software works as intended. Developers looking to find out what functionality is provided by a unit, only need to look at a test and can conclude how the unit is supposed to work. It’s a huge benefit for us developers to understand the thought behind the code, even when it comes to your own code. After a few months you might forget why you wrote it like that.
6. Unit Testing Improves Teamwork.
Another gain of unit testing, as well as documentation, is that it improves teamwork. Your colleagues can review the logic behind your code and coordinate their code accordingly. Being able to review each other’s code, the teamwork is more cohesive and Agile.
Writing extra code to your code may seem counterintuitive but eliminating #unittesting saves only time if the code is bug-free. #DevOps #Agile pic.twitter.com/B7AozLrCoz
— Typemock (@typemock) November 8, 2017
7. Unit Testing Inspires Confidence and is Fun!
You develop software and then you write tests to examine if it works. You will be able to validate in the early stages whether your code is actually functional.
Once your tests are passed, you feel confident knowing that your software is in good shape. Many issues can be avoided this way (although not all). Knowing that your code is legit gives you a good feeling…and this is fun!