252-0216-00L  Software Architecture and Engineering

Semester Spring Semester 2013
Lecturers M. Vechev, M. Pradel
Periodicity yearly course
Language of instruction English

Abstract This course introduces both theoretical and applied aspects of software analysis and engineering. We will cover both the theoretical and practical aspects of:

- Software Architecture
- Modelling
- Design Patterns
- Code Refactoring
- Program Testing
- Dynamic Program Analysis
- Static Program Analysis
Objective The course has 2 main objectives:

- Obtain an end-to-end (both, theoretical and practical) understanding of the core techniques used for building quality software.

- Understand how to apply these techniques in practice.
Content Some of the core technical topics covered will be:

- modeling and mapping of models to code
- common code design patterns and how to apply them
- refactoring (as used in all modern development environments today): why, when and what to refactor
- testing: functional, model-based, structural, object-oriented, fault-based testing
- dynamic analysis: semantics, race detection, typestate analysis
- symbolic execution
- static program analysis: lattices, abstractions, fixed points, abstract domains.

To aid in practical understanding, the course will contain 2 projects: one for testing and the other for static program analysis where for both the students will build practical analyzers gaining hands-on understanding for how the concepts work.
Literature Will be announced in the lecture.