Software is everywhere. It is in my gas pump, my phone, and even my audio receiver. The increase in complexity and interconnectedness make software testing even harder, and testers yearn for better testability.
Testability is being able to observe and control the software we are testing.
Although it is essential to test as the customer will experience it, for complex software it helps to have additional control and observability.
Observability helps make problems more noticeable, and can point to the root cause.
Control helps simulate situations that may be difficult to test in the system.
Dave Catlett developed the SOCK model of testability, which is a cool mnemonic for attributes of a testability interface:
S – Simplicity
O – Observability
C – Control
K – Knowledge of expected results
The two most essential of these are observability and control, since at least one of those is required in order to have testability.
But testability isn’t just for testers.
At Microsoft, most groups have a triad of disciplines:
PM – Program Managers
SDE – Developers (Software Development Engineers)
SDET – Testers (Software Development Engineers in Test)
And it shouldn’t only be the testers that care about testability.
For PM’s, building interfaces that allow customers and 3rd party developers to create solutions that extend the product helps make for a better overall system. Instead of talking to PM’s about testability, emphasize programmability, extensibility, and the ability to diagnose customer issue.
For developers (SDE’s), better logging, diagnosis, and debugging allows bugs to be less mysterious, more reproducible, and easier to fix. Developers usually have a good understanding of the code architecture, including components that are well encapsulated and with clean interfaces. These encapsulated components are an excellent spot to look for testability interfaces.
For testers (SDET’s), the testability interfaces help find bugs that would be otherwise hard to discover.
Testers should push for testability not only for their own benefit, but for the long-term product benefits. Testability isn’t just for testers.