Changing your testing as your world changes Flashcards
What are the 5 worlds of Software
Shrinkwrap (open-source, configurable, web-based) Internal Embedded Games Throwaway
Exploratory Testing
Simultaneous learning, test design and test execution. Learn about the software as you test.
Limitations of exploratory testing
- no concept of completeness
- not systematic
- expensive in terms of tester skill, may want more explicit process.
Specification Based Testing
Evaluating software based on explicit claims in specification.
Benefits of specification based testing
- Systemic (follow SRS)
- Spec is usually simpler than software
- Captures what matters most about the purpose of the software
Limitation of informal specs
Hard to verify. Perhaps no mechanical way to convert it into tests
Model-based testing
Using models of expected behaviour to produce test case specs that can reveal discrepancies between actual program behaviour and the model.
Goal: test a program specified by a model to find faults.
Fuzz testing
Feeding random inputs until program crash or assertion violations.
Give an example of model-based testing
Creating a control flow graph and testing inputs to ensure the program follows the same behaviour of the model.
What is a test oracle?
Tells you whether a test result is good or not. Not always able to do this, however! you can use an oracle to determine if an answer may be invalid.
a, b > 0
oracle can make sure sum of a, b is above zero.
a + b > 0
Partition testing
Partition the input domain based on their significance for the program. Then select values within those partitions to test. Recall Parnas Tables!
Boundary Testing
Choosing inputs on semantically significant boundaries.
int increment(int i) { return i + 1; } You may want to set i to MAX_INT? this is a boundary since + 1 would set an error!
Coverage Based Testing
Testing until you meet some pre-agreed code coverage goal.
Could be: All modules, All classes, All methods. Maybe every statement? or True/False decision?
What if coverage criteria shows you do not hit every part of the code?
You could have dead branches of code that are never able to be run.
Fault Injection
Introducing faults into the software to test.