What does specification-based testing do?
Specify the correct behavior of the unit under test
Generate inputs e.g. using fuzzing
Check wether the specification holds
What does the oracle problem describe?
Fully specifying large system is highly non-trivial:
-> it requires significant amounts of time and effort
How does differential testing work?
Run multiple implementations
of the same functionality
on the same input
Compare their responses for disagreement
If a disagreement exists, then at least one implementation must be wrong (Or: only one of them can be right)
What are the pros and cons of differential testing?
Pros:
Does not require a specification of correct behavior
Cons:
Requires more than one implementation
It’s unclear which implementation is to blame for a disagreement
(It could be that the majority is wrong and a single one correct)
How do you know that there is a bug in metamorphic testing?
There is a bug if outputs o and o' do not satisfy Ro(o,o')
-> e.g. if P simply returns the input, o' > o should hold when i' > i
What are the pros of metamorphic testing?
only requires defining metamorphic transformations
(which is much easier than writing full/blown specifications)
does not require the existence of multiple implementations
What is the SMT problem?
= the decision problem of determining wheter logical formulas are satifiable with respect to a set of background theories
SMT - The Satisfiability Modulo Theories
What kind of different bugs do exist in SMT solvers?
How are SAT solvers metamorphically tested?
Given a seed, transform it to generate ONLY SAT instances
Detect a bug if solver returns UNSAT
How does seed fragmentation work?
Generate a random assignment for all free variables in F
Fragment F and populate initial pool
How does Formula generation work?
How does instance generation work?
Last changed5 days ago