Intro to Software Verification
Definition: Verify that a software product conforms to the
requirements.
Two approaches: empirical and formal.
Empirical ("Testing")
Make a hypothesis (Expected results), run an
experiment (execute the program with known inputs), observe the actual
results and see if they confirm the hypothesis.
Formal ("Proof")
Construct a logical proof of the correctness of the
program.
Testing Objective
Executing a program with the intent of producing errors. (Different
than developers objective).
Testing Principles
- Testing can only demonstrated the presence of defects, not the absence of defects
- All tests must be traceable to the requirements (SRS).
- Most effective testing is performed by a third party.
- 80% of the errors will be in 20% of the code.
Test Qualities
- A good test is one that has a high probability of uncovering an
error.
- Not redundant.
- Reveals a whole class of errors.
- Can be implemented in an automated fashion
Test Case (definition)
A set of preconditions and inputs to the software, procedures for how
to carry out the test, and expected outputs.
Testing Phases (Testing
Lifecycle)
Testing Styles
Functional
- Manual
- ad-hoc
- planned
- Automated
- regression
- coverage
Non-Functional
Testing Techniques