Back to the basics: Tests
This is the first article about all the things that involve tests on a day-to-day for a software engineer.
And let's start with the most important question:
Why test?
Testing application brings a lot of benefits, like catching bugs easily, after a change you only run a test to check if everything still works, without make to compile and create the whole application flow, this as said, create a faster feedback cycle to identify problems and increase the confidence to change or add code to the base.
Also, improve code quality, is a code is poorly written it is really difficult to write tests to it, techniques like TDD (test driven development) are a great design tool to write a better code focused on tests, because if it's easy to test, probably the code has a good separation on concerns, size, single responsibility and so on.
Well written tests, can be used to documenting the code base, if well descriptive and confident, new developers can easily found what the application does and how the components work together, this increase the scalability of the team, also allowing make regressions tests to see how the new features have been impacted the system.
After all these motivations, of course we have a cost saving, if your team have accomplished everything that was described, code is highly maintainable, making it easier for developers works and the business grow.
There are a lot of tests types when we look at the software development perspective, like:
Unit Testing, Integration Testing, System Testing, Acceptance Testing, Regression Testing, Performance Testing, Security Testing, Usability Testing, Compatibility Testing, Exploratory Testing, Smoke Testing, Sanity Testing, Ad-Hoc Testing, Load Testing, Stress Testing, Recovery Testing, End-to-end Testing, Localization Testing, Globalization Testing, A/B Testing, Usability Testing, Boundary Testing, Mutation Testing, Non-Functional Testing, Installation Testing, Configuration Testing, Accessibility Testing, Conformance Testing, Security Penetration Testing, Exploratory Testing, Compatibility Testing, and more and more.
But for the developer perspective and for some quality assurance people, the most important are: Unit Test, Integration test, and end-to-end test. That we will look deeper in the next part! Bye!