Software engineers often need to develop tests that are appropriate for a given software artifact. The software testing literature is replete with testing methods tailored to the various specification, design, and implementation methods used in software engineering, especially embedded, safety critical, and real time software. Generally speaking, a description of the software that is at a more abstract level than the implementation is considered to be a model, and any model can be used to generate tests. Models include formal specifications and design documents such as UML diagrams.
This tutorial takes a novel inverted view to model-based testing. Instead of starting with a specific artifact, we identify two general sets of coverage criteria - one based on graphs and the other based on predicates. We then ask two questions with respect to the specific artifact under test:
(1) What graphs are suitable abstractions of the artifact for the purpose of testing?
(2) What predicates should be extracted from this artifact for the purpose of testing?
Combining the answers to these two questions with the standard graph-based and logic-based coverage criteria yields test requirements for embedded, safety critical and real time applications. The test engineer can then proceed to identify test cases that satisfy the requirements. This tutorial illustrates this technique in the context of testing safety-critical software that is modeled by state-based specifications. It will present a representative sample of graph-based and logic-based test coverage criteria. Appropriate graphs and predicates will be extracted from specific examples of state based specifications of embedded software, and the coverage criteria will be applied.
Tentative Outline:
1. Overview
1.1. Graphs and Test Paths
1.2. Logic Predicates and Clauses
2. Graph Coverage
2.1. Graph Coverage Criteria
2.2. Graph Coverage for Specification
2.3. Examples
3. Logic Coverage
3.1. Logic Expression Coverage Criteria
3.2. Logic Coverage for Specifications
3.3. Examples