252-0216-00L Software Architecture and Engineering
|Semester||Spring Semester 2013|
|Lecturers||M. Vechev, M. Pradel|
|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
- 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.|