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


CS 655 David Evans - Publications
University of Virginia
Department of Computer Science
David Evans
evans@cs.virginia.edu