Software Testing Fundaments

https://www.computersprofessor.com/2017/09/software-testing-fundaments.html
The goal of testing
is to find errors, and a good test is one that has a high probability of
finding an error.
Testability : “Software testability is simply how
easily [a computer program] can be tested.” The following characteristics lead
to testable software.
Operability : If a system is designed and implemented
with quality in mind, relatively few bugs will block the execution of tests,
allowing testing to progress without fits and starts.
Observability : Inputs provided as part of testing
produce distinct outputs. Incorrect output is easily identified. Internal
errors are automatically detected and reported. Source code is accessible.
Controllability : All possible outputs can be
generated through some combination of input, and I/O formats are consistent and
structured. All code is executable through some combination of input. Software
and hardware states and variables can be controlled directly by the test
engineer.
Decomposability : By controlling the scope of
testing, we can more quickly isolate problems and perform smarter retesting.
Simplicity : “The program should exhibit functional
simplicity (e.g., the feature set is the minimum necessary to meet
requirements); structural simplicity (e.g., architecture is modularized to
limit the propagation of faults), and code simplicity.
Stability : “Changes to the software are
infrequent, controlled when they do occur, and do not invalidate existing
tests. The software recovers well from failures.
Understandability : “The architectural design and the dependencies
between internal, external, and shared components are well understood,
Technical documentation is instantly accessible, well organized, specific and
detailed, and accurate. Changes to the design are communicated to testers.