Testing
Principles, strategies, and practices for evaluating the behavior and the quality of software.
13 guides
Fundamentals
- What is testing?
What tests can tell us about a system, what their limits are, and how they help evaluate its quality.
Unit testing
- What is a unit test?
What characterizes a unit test, what isolating a unit means, and how to keep the test from depending too much on the implementation.
- F.I.R.S.T.: principles for unit tests
Five criteria for writing tests that are fast, independent, and repeatable, with clear results and written at the right moment.
- AAA: how to structure a test
Set up the scenario, run an action, check the result. How to use Arrange, Act, Assert to write tests that are easy to follow.
- Test doubles: dummy, stub, spy, mock, and fake
What role each kind of double plays and how to pick the right one for controlling a test's dependencies.
- Test-Driven Development (TDD)
How the cycle of writing a test, making it pass, and refactoring guides the implementation and helps you review the design.
Test levels
- Integration testing
What problems show up when you connect components, and how to test those interactions beyond unit tests.
- System testing
How to evaluate the behavior of the complete system, and how it differs from testing the integration between components.
- User acceptance testing (UAT)
Meeting a specification doesn't guarantee the system answers the business's needs. How to evaluate its acceptance, and who takes part.
Non-functional testing
- Performance testing
How to evaluate response times and capacity under different loads, without relying on averages alone.
- Security testing
How to evaluate access controls and find vulnerabilities with tests and static and dynamic analysis. What each approach contributes.
- Usability testing and its relationship with UX
How to evaluate whether people can understand and use the system, and how it differs from other UX research activities.
- Compatibility testing
How to verify that software works in the environments you support, and that its changes keep the backward compatibility you need.