Inculcating Invariants in Introductory Courses*
David Evans
28th
International Conference on Software Engineering, Education
Track
Shanghai, China
20-28 May 2006
Abstract
One goal of introductory software engineering courses is to motivate and
instill good software engineering habits. Unfortunately, practical
constraints on typical courses often lead to student experiences that
are antithetical to that goal: instead of working in large teams and
dealing with changing requirements and maintaining programs over many
years, courses generally involve students working alone or in small
teams with short projects that end the first time the program works
correctly on some selected input. Small projects tend to reinforce poor
software engineering practices. Since the programs are small enough to
manage cognitively in ad hoc ways, effort spent more precisely
documenting assumptions seems wasteful. It is infeasible to carry out
full industrial software development within the context of a typical
university course. However, it is possible to simulate some aspects of
safety critical software engineering in an introductory software
engineering course. This paper describes an approach that focuses on
thinking about and precisely documenting invariants, and checking
invariants using lightweight analysis tools. We describe how
assignments were designed to emphasize the importance of invariants and
to incorporate program analysis tools with typical software engineering
material and report on results from an experiment measuring students
understanding of program invariants.
Keywords: Software engineering, dependability, security,
invariants, static analysis, dynamic inference, introductory software
engineering.
Complete Paper (6 pages)
[PDF]
Talk
Slides [PPT]
[PDF]
* This paper really should have been titled, Inculcating Invariants in
Introductory Instruction, but I was inexcusably inept in inflicting
the in-prefix invariant incompletely.
Inexpensive Program Analysis
Group Page
Perracotta