kinds of programs: nonsense (syntactically incorrect), illegal (maybe undefined at runtime), almost working (missing some cases), fragile (undefined action if incorrect data), suspicious (some parts don't do anything), wrong (performs the wrong function), correct