6 Test Plans

Collection of test cases
(Equivalence classes and boundary values)
Use cases: not just a single data item, but a situation.

For a test case, you need:
1. Identifier: An identifier for the test case. 
2. Test Case: A description of the test case and what it is testing. 
3. Preconditions: 
4. Input Values: 
5. Execution Steps: The actual steps of the test, to be executed by the tester. 
6. [expected] Output Values: 
7. Postconditions: what should hold true after 

Remember that MANY factors can cause a problem;
information can change while test is running
system errors can occur
user might not be logged in correctly

[registration system; ways it can go wrong; tests that need to be done]
[canvas]
ALWAYS think about illegal values;
other routines can have errors, that propogate
cases: base, edge, corner
	normal, limits, extreme,overlapping problems
flags and globals are preconditions; passed parameters are input
watch for side effects and aliasing!

Always be explicit enough about the execution steps that you [believe you] can replicate problems.
Someone running tests not familiar with the system needs more details;
you should ALWAYS have someone with minimal knowledge of the system attempt to run it

Know what output and postconditions SHOULD occur
The difference between expected behavior and observed behavior is what you are trying to discover!

Test Plan:
how detailed?  Boundary, base, edge, corner; risks
Start with testing each requirment
happy path; boundary; equivalence classes; edge; corner
(How much resources do you have for testing?
How bad are the potential consequences of a failure?)
Exhaustive testing is not just exhausting; it can be impossible

testing non-functional requirements can be trivial, or a great challenge
how testable and quantifiable is the non-functional requirement?

Consider all possible states of the system.
(It is finite; but usually very large)
Any interactions between different conditions and input values can cause an error.
But can you test all possible states of the system?
[I went to enter a grade in Canvas just as a student was withdrawing from my class.
How often does that happen?]
At least be sure you have a good understanding of the domain of the system;
if you do not understand how colleges work, can you really test Canvas?

Implementation CAN make a difference.
Java ALWAYS throws a division by zero exception.
Javascript can return +infinity, -infinity, or NAN (not a number).
How does this affect testing?

Test Fixtures:
a script or program that gets the system ready for a test

Executing a test plan is called a Test Run.
(Should be straightforward; automatic testing can be great.)

A test case can be:
Passed
Failed
Paused
Running
Blocked
Error 

Track date, time, which system,  which test, which code tested, test plan, final status, defects
(This helps track what fixes need to be made, but does not tell you how to fix the bug.)

Traceability Matrices 
requirements compared to test cases