This preview has intentionally blurred sections. Sign up to view the full version.View Full Document
Unformatted text preview: Inculcating Invariants in Introductory Courses David Evans Department of Computer Science University of Virginia [email protected] Michael Peck Department of Computer Science Johns Hopkins University [email protected] ABSTRACT One goal of introductory software engineering courses is to motivate and instill good software engineering habits. Unfortu- nately, 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 in- feasible 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. Categories and Subject Descriptors D.2.4 [ Software Engineering ]: Software/Program Verification: assertion checkers, class invariants, formal methods, programming by contract, reliability , F.3.1 [ Logics and Meanings of Programs ]: Specifying and Verifying and Reasoning about Programs - assertions, invariants, logics of programs, mechanical verification, pre- and post-conditions, specification techniques , K.3.2 [ Computers and Education ]: Computer and Information Science . General Terms Reliability, Security, Verification. Keywords Software engineering, dependability, security, invariants, static analysis, dynamic inference, introductory software engineering. 1. INTRODUCTION Teaching software engineering is extremely difficult. The root of the problem lies in the impact of scale. Most of the principles central to software engineering are crucial for producing large, robust, long-lived programs, but hardly relevant (and oftentimes counterproductive) for the smaller, non-critical, short-lived programs that are typically developed in the scope of an academic course. This means the methods and theories taught in software engineering courses are often regarded by students as abstract, academic concepts which are quickly forgotten after the final exam. Without experiencing their practical impact on realistic programs, students rarely develop a deep understanding or appreciation of important...
View Full Document
This note was uploaded on 02/24/2012 for the course CSE 503 taught by Professor Davidnotikin during the Spring '11 term at University of Washington.
- Spring '11
- Software engineering