Unit tests
Unit tests focus on testing the smallest possible unit of code, and are crucial for more complex projects. They allow the team to instantaneously detect changes that impact other parts of the system, greatly increasing the maintainability and flexibility of the application.
Integration tests
The tests check the application as a whole with minimal mocking of dependencies to make sure the code doesn’t cause errors at the interface between modules. This gives us the confidence that newly introduced changes won’t break the flow of the solution.
Branch tests
Very detailed tests ensuring that a functionality was implemented correctly and that it didn’t break anything in other parts of the application and can be safely mergech into the master branch.
Code review
Every piece of source code is reviewed and approved by at least 2 other developers. This allows us to catch non-trivial logical errors and edge cases and maintain the same consistent code style among all team members.
Manual tests
Performed after features are merged into the application, on a deployed testing environment. Manual tests check if the feature was merged correctly, nothing was overwritten, and the deployment went well.
Automated GUI tests
The final batch of testing ensuring the app works and performs correctly in production-like scenarios divided into two stages. First are smoke tests ensruring the most important functions of the software work while the second one tests the application on all levels and subsystems.
PO signoff
The Project Owner signoff makes the process of accepting changes faster for you—before features finally make their way to you for final acceptance, they have already been checked by a professional who knows your business context.