Faculdade de Ciências e Tecnologia

Software Construction and Verification

Code

11159

Academic unit

Faculdade de Ciências e Tecnologia

Department

Departamento de Informática

Credits

6.0

Teacher in charge

Luís Manuel Marques da Costa Caires

Weekly hours

4

Teaching language

Português

Objectives

Knowledge:

Students consolidate their software construction skills for building trustworthy software, in the broad context of modern software systems, where concurrency and security are major concerns.

The CU develops the perspective that verification should be tightly integrated with the software construction process, guided by the use of code analysis tools, such as those made available by Microsoft Research (http://rise4fun.com).

Basic static analysis and software model-checking techniques are also covered, as well as principles and techniques for sofware testing.

Knowledge Application:

Use programming methods and verification techniques to enforce safety of monitor based concurrent programs (using java.util.concurrent) and transactions.

Specify information flow policies for a sofware system and verify that the policies are enforced using assertions and tools.

Develop, in team work, a project of a statically verified and tested (with resonable coverage) medium scale application.

Use logical assertions to specify, check, and reason about program correctness, and associated tools  (DAFNY, VERIFAST, JIF).

Specify behavioral specifications (invariants, pre-conditions and post-conditions) for module implementations and their interfaces.

Develop test plans and implement them. 

Prerequisites

Programming practice and basic knowledge of object oriented programming, data-structures, and elementary logic.

Subject matter

1. Verified Software Construction

Assertion methods and Hoare and Separation Logic; Assertion Inference; Abstract and Behavioral types. Representation Invariants. Abstract interpretation; Model-checking. Tools.

2. Software Testing Model-based testing; Test selection and test generation; Fault-based testing. Symbolic execution; Automated testing. Tools.

3. Concurrent Programming

Sharing, confinement, ownership. Control of interference. Reasoning about concurrent code with monitors and locks based on resource invariants. Construction of concurrency control code from behavioral specs.

4. Secure Programming

Information flow security and non-interference. Language based security. Programming models for access control. Certification of code. Tools.

5. Hands On Exercises / Final Project

Sequence of programming challenges, involving tool usage (Dafny, JBoss, Verifast, SPIN; Jif). Final (team work) project.

Bibliography

Dafny Guide : http://rise4fun.com/Dafny/tutorial/guide

"Program Development In Java: Abstraction, Specification, And Object-Oriented Design". Liskov/Guttag; MIT Press.

Java Concurrency in Practice, Goetz et al. Addison-Wesley, 2006.

VeriFast for Java: A Tutorial Jan Smans, Bart Jacobs, and Frank Piessens (http://people.cs.kuleuven.be/~bart.jacobs/verifast/verifast-java-tutorial.pdf).

Language Based Information Flow Security, A. Sabelfeld, A. C. Myers, 2004.

Several classical papers by Liskov, Hoare, Dijkstra, Brinch Hansen, Doug Lea, O’Hearn, Schneider.

Related course ar MIT: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-005-elements-of-software-construction-fall-2011/index.htm

Evaluation method

Midterm test: 40%

Final Test: 40%

4 small handhouts: 5% each

The two first handouts will be integrated in a single one (worth 10%)

Courses