CS709 : Formal Methods for Software Engineering

Course Overview

Course Synopsis

This is a course in formal methods for specifying, validating and verifying software systems. Topics include program specification and verification through Hoare's logic and Dijkstra's weakest preconditions, formal specification and refinement towards implementation, integration of formal methods with existing programming languages and object-oriented approaches, model-based specifications, comparison of formal techniques.

Course Learning Outcomes

Upon successful completion of this course, students should be able to:

  • Understand the basics of Hoare’s logic.
  • Write program specifications in terms of pre- and post-conditions.
  • Use formal techniques for verification of programs.
  • Use formal techniques for derivation of programs from their formal specifications.
  • Learn Design by Contract and Object Constraint Language (OCL).
  • Develop basic understanding of Algebraic and Model based specifications.


Course Calendar

1 Introduction to Formal Methods
2 Dijkstra's Algorithm, Implications, Some useful equivalances
3 Model Building Tools, Propositional and Predicate Calculus
4 Logic and Set Theory, Properties of Equivalance
5 Logic and Proposition
6 Introduction to Hoare's Logic
7 Hoare's Logic (Weakest Pre-condition and Loops)
8 Hoare's Logic (Conditional and Control Flow, Invariant Condition)
9 Hoare's Logic with Example (Tower of Hanoi)
10 Hoare's Logic, Verification of Functions
11 Specification of Functions using Pre and Post-Conditions, Dijkstra's Guarded if Statement, Constructing Conditional Statement
12 Output Variables, Ghost Variables, Simultaneous Assignment, Example: Max.of Two Numbers, Constructing Loops
13 Constructing Loops (Cont.), The Dutch National Flag Problem
14 The Dutch National Flag Problem (Cont.)
15 Defensive Programming, Design by Contract
16 Design by Contract and its Components
17 Implementation of Design by Contract (jContractor)
18 A Pure Java Implementation - Design by Contract
19 Object Constraint Language (OCL)
20 Object Constraint Language (OCL) (Cont.)
21 The Structure of an Algebraic Specification
22 The Structure of an Algebraic Specification (Cont.)
23 Algebraic Specification: Rules and Methods
24 New_List Specification Methods: Queue Operations, Errors Specification and Boolean Function with Tools and Techniques
25 Structure of the File System Specification
26 Structure of the File System Specification (Cont.)
27 How to use Specification of Boolean, Pair, List, Quad and Bimap
28 Tools for Algebraic Specification (Sub-System Interfaces)
29 Larch Specification Langauges
30 Interface of Algebraic Specification and Larch (Family of Specification) Languages
31 OBJ (Family of Specification)
32 OBJ (Family of Specification) (Cont.)
33 Model Based Specification, VDM: Vienna Development Method, Incubator, Main Operations on Sets, Sequences and Mappings
34 Z-Specification, Structure and Schema (A Birthday Book)
35 Z-Specification, Structure and Schema (A Birthday Book) (Cont.)
36 Z-Specification, Structure and Schema (A Birthday Book) (Cont...)
37 Z-Specification, Refinement and Totalization
38 Z-Specification, Refinement and Totalization (Cont.)
39 Z-Specification, (A Program Refinement, Different Operations Simulation, Lifting, Forward Simulation)
40 Using Z-Specification, Application of Operating System Components
41 Using Z-Specification, Operating System Scheduler, Operations: Delete Start, Middle and End
42 How to Specify Concurrent and Real Time System, Introduction to Petri Nets
43 Development of Concurrent System (Petri Nets), Conflict, Concurrency and Confusion, Behavioural Properties
44 Development of Concurrent System (Petri Nets), Behavioural Properties with Examples
45 Activities, Limitations and Acceptance of Formal Methods, Seven Myths of Formal Methods