Functional testing Unit testing Both external interface and internal implementation are tested. Final code coverage is over 90%.
Tools:
Googletest,
gcovr.
Unit testing with sanitizersThe test uses a set of GCC and CLang compiler-based sanitizers. The code is instrumented with additional instructions at the compilation stage and then run in a controlled environment. Among other things sanitizers help detect:
- Memory errors.
- Memory leaks.
- Data races.
- Overflow errors.
- Initialization errors.
- Type errors.
- Invalid arithmetic operations.
- etc.
Tools:
Integration testing Comprehensive external function testing (API) that helps recognize:
- Boundary values.
- Invalid input data.
- Changes in intermediate data.
- Different entropy source porting.
Integration test documentation is included directly in the code comments. Scenarios and parameters are described using doxygen tags. Integration testing provides ready test documentation in BDD format.
Tools:
Googletest,
Doxygen End-To-End testing A final package containing all the necessary software and documentation is prepared for the customer. Each package is automatically tested in a clean testing environment. We check the following things:
- Package name
- Package contents
- Package setup
- Usage examples
- Documentation
Tools:
pytest.
Integration testing with other productsWe link the product to specific versions of dependent products, such as a tag name, or at most, a branch name. Ready-made CI artifacts are used as well. Thus, the testing runs with already collected artifacts. As a result, we get continuous integration.
Tools:
pytest