E0 272 Formal Methods in Software Engineering

January-May 2012, 5:00pm-6:30pm Tue Thu, Room 252 CSA

Credits 3:1

Instructors: K. V. Raghavan, Deepak D'Souza, Prahlad Sampath. Guest lectures by Nigamanth Sridhar.

TAs: Anirudh Kushwah (anirudhkushwah@csa), Arjun Suresh (arjunsuresh@csa)

Lecture slides

Assignments

Motivation

Software is used for an increasing range of business and personal activities, and to control vital processes and tasks. This makes it important that software be developed efficiently, and the software be correct and reliable. However, software development and maintenance has largely remained mostly a human activity, with sub-optimal usage of tools and formal processes. This course will equip students with knowledge of the latest advances in the role of tools and formal methods in software engineering. The course will focus on all stages of software engineering, from requirements, design, coding, and verification. The methodology will be to study a series of advanced tools that address challenges faced in these steps. This will include both an introduction to the theoretical underpinnings of these tools, as well as hands-on exploration in class as well as well as in assignments.

Syllabus

Conceptual modeling of requirements using logic -- Alloy. Refinement of models -- Rodin and Resolve. Detailed design of state-based systems -- SAL, and Spin. Code development using refactoring -- Eclipse Refactorings. Identifying errors in code during development using dataflow analysis -- FindBugs. Proving properties of code using logical reasoning -- Spec#. White-box testing of applications -- Pex.

Prerequisites: Exposure to programming, and the basics of mathematical logic and discrete structures.

Tentative grading breakup

Assignments: 60%
Midsem exam: 15%
Final exam: 25%