Testing and Debugging
Precondition Check
Testing a condition before a calculation keeps invalid input from reaching the risky line.
precondition
A precondition is a fact that must be true before the next operation is safe.
guarded calculation
The guarded branch performs the calculation only when the input passes the check.
Precondition Check
PreconditionCheck.java
Replay: real traced execution (multi-file project)
public class PreconditionCheck {
public static void main(String[] args) {
int divisor = 5;
boolean valid = divisor != 0;
if (valid) {
int quotient = 40 / divisor;
System.out.println("valid=" + valid + " quotient=" + quotient);
} else {
System.out.println("valid=" + valid + " quotient=skipped");
}
}
}
public class PreconditionCheck {
public static void main(String[] args) {
int divisor = 0;
boolean valid = divisor != 0;
if (valid) {
int quotient = 40 / divisor;
System.out.println("valid=" + valid + " quotient=" + quotient);
} else {
System.out.println("valid=" + valid + " quotient=skipped");
}
}
}
public class PreconditionCheck {
public static void main(String[] args) {
int divisor = 8;
boolean valid = divisor != 0;
if (valid) {
int quotient = 40 / divisor;
System.out.println("valid=" + valid + " quotient=" + quotient);
} else {
System.out.println("valid=" + valid + " quotient=skipped");
}
}
}
divisor ← 5, valid ← true
1public class PreconditionCheck {2 public static void main(String[] args) {3 int divisor→ 5 = 5; //@divisor=0, 84 boolean valid→ true = divisor5 != 0;quotient ← 8
6if (validtrue) {7 int quotient→ 8 = 40 / divisor5;8 System.out.println("valid=" + validtrue + " quotient=" + quotient8);9} else {outputvalid=true quotient=8
divisor ← 0, valid ← false
1public class PreconditionCheck {2 public static void main(String[] args) {3 int divisor→ 0 = 0;4 boolean valid→ false = divisor0 != 0;else
8 System.out.println("valid=" + valid + " quotient=" + quotient);9} else {10 System.out.println("valid=" + validfalse + " quotient=skipped");11}outputvalid=false quotient=skipped
divisor ← 8, valid ← true
1public class PreconditionCheck {2 public static void main(String[] args) {3 int divisor→ 8 = 8;4 boolean valid→ true = divisor8 != 0;quotient ← 5
6if (validtrue) {7 int quotient→ 5 = 40 / divisor8;8 System.out.println("valid=" + validtrue + " quotient=" + quotient5);9} else {outputvalid=true quotient=5