252-0216-00L  Software Architecture and Engineering

SemesterSpring Semester 2013
LecturersM. Vechev, M. Pradel
Periodicityyearly course
Language of instructionEnglish

AbstractThis 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
ObjectiveThe 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.
ContentSome 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.
LiteratureWill be announced in the lecture.