Abstract
Most software metrics measure syntactic qualities of a program: number of lines, number of procedure calls, etc. While measuring such properties may reveal problems in programs, these metrics fail to measure the essence of programs: (partial) correctness and robustness. We therefore propose to base metrics on semantic, instead of syntactic, criteria.To illustrate the idea of semantics-based metrics, we have built static debuggers, which are tools that detect potential run-time failures. More specifically, a static debugger analyzes programs written in safe programming languages and pinpoints those program operations that might trigger a run-time error. The following section brie y recalls what safety means for a programming language. The third section sketches how a static debugger works and the role it plays in measuring the robustness of a program. The last section discusses the use of static debuggers in the classroom, an NSF Educational Innovation Project.