SE450: DBC: Common assertion usage [8/24] Previous pageContentsNext page

Internal Invariants
replace


if(i == 0) {
 ...
} else if(i == 1) {
 ...
} else { // i == 2
 ...
}

with


if(i == 0) {
 ...
} else if(i == 1) {
 ...
} else { 
 assert i == 2;
 ...
}

Control Flow Invariants
replace


switch(value) {
 case command2.A:
  ...
  break;
 case Foo.B:
  ...
  break;
}
with

switch(value) {
 case Foo.A:
  ...
  break;
 case Foo.B:
  ...
  break;
 default:
  assert false;
}

Place assert false; in code you think will not be reached. You'll find out if it is!

Never allow assertion code to have side affects, since assertions can be disabled. Example:


  assert i++ == 3;

Previous pageContentsNext page