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