Level 1: Test-Driven Development
Test-Driven Development (TDD) using unit testing is an approach when there is a test function created prior to the actual code. In theory, for each line of testable production code there should be a line of test function, and each testable part of the code should be checked independently. This approach helps the developer catch mistakes in the code they write at the time when they write it and it’s also a way to think through the architecture before building functional code. It significantly reduces the time spent fixing bugs, which in turn reduces the overall development time. At STRV, we use some of TDD principles on our backend, iOS and Android projects.
Level 2: Integration Tests
Integration Tests are the next step of the software testing process. They help our developers to get the app tested at a user level. In this stage, individual software modules that have previously passed Unit Tests are combined and tested as a group. The main purpose of this testing is to test the interaction and integration between different software modules, find accidental bugs, minimize subsequent errors and reduce future development costs. We use several tools to run automated UI tests at STRV - in our recent blog post, we’ve covered automated UI testing for Android projects.
Level 3: Continuous Integration
This practice allows the developer to verify the functionality after every piece of code is committed to a shared repository. Continuous Tests are an important part of the delivery pipeline: every change of the code is automatically tested by unit and integration tests and reports are integrated into GitHub. Travis CI and Jenkins are our favorite tools for Continuous Integration. There are two main purposes for this practice. It helps reduce the time required by each new integration - because the tests are run remotely, it doesn't slow down the development process. And it also allows the developer to deliver a production-ready version of the software at a moment’s notice. We use continuous integration on all our backend, frontend, iOS and Android projects.
Level 4: QA Department
The human touch is irreplaceable in QA. Testers work closely with our engineering team - especially in the final stage of the development process - to detect all remaining bugs. They follow checklists based on the most recent development timeline and specifications as well as complex testing scenarios to go through different user stories. They also check the overall user experience and all UI details, such as fonts readability, image resolution, proper translations, etc. Feedback from testers is evaluated and may result in both development and design fixes.