Software Architecture and Engineering
Software engineering is an engineering discipline whose focus is the cost-effective development of high-quality software systems. The emphasis in software engineering is on both words, software and engineering. An engineer is able to build a high-quality product using off-the-shelf components and integrating them under time and budget constraints.
This course will cover key techniques for building reliable software. These include: modeling, design patterns, code refactoring, testing, symbolic execution, as well as static and dynamic program analysis. To gain a deeper understanding of how to apply these techniques in practice, the course will also involve two hands-on projects based on the principles introduced in the lectures.
Course Catalogue: 252-0216-00
Lecturers: Prof. Peter Müller, Prof. Martin Vechev
Hours: 4V, 3U
- Alexandra Bugariu, CHN F46
- Marco Eilers, CHN G22
- Matthew Mirman, HG E33.1
- Valentin Wüstholz, CHN D44
- Martin Kucera, CHN D48
- Bernd Bruegge, Allen H. Dutoit: Object-Oriented Software Engineering. Prentice Hall, 2004.
- Martin Fowler: UML Distilled: A Brief Guide to the Standard Object Modeling Language. Addison-Wesley, 2004.
- Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Design Patterns. Addison-Wesley, 1995.
- Steve McConnell: Code Complete. Microsoft Press, 2004.
- John D. Musa: Software Reliability Engineering: More Reliable Software Faster and Cheaper. AuthorHouse, 2004.
- Mary Shaw, David Garlan: Software Architecture. Prentice Hall, 1996.
- Joel Spolsky: Joel on Software. Apress, 2004.
- Perdita Stevens, Rob Pooley: Using UML: Software Engineering with Objects and Components. Addison-Wesley, 2000.