test automation Implementation Operability Can execute automated processes smoothly Simple setup procedure Observability Easy to observe outputs (including indirect outputs and side-effects) from automated tests Easy to recognize errors, appropriate logging design, less side effects (e.g. stateless), debugging feature for observation Controllability Automated tests can easily control direct/indirect inputs Easy-to-use API, Stubbing, Debugger support Decomposability Easy to isolate automatable target. Easy to identify the issues with the automated test Appropriate seams (e.g. Dependency injection), appropriate association design Simplicity Specs, architecture and procedure of the test target are simple Reduce redundancy of design and code Stability Fewer bugs and instability that block automated tests Fewer bugs and spec changes, immutable interfaces Understandability Specs, architectures and procedures of test target are easy to understand Specs, code, and documentation that are easy to understand Common reason for test automation to fail: lack of testability ※Definitions of quality characteristics: Software engineering: a practitioner's approach, Roger S Pressman, McGraw-Hill Education / Asia