Complex software systems are difficult to develop. Complexity arises from the need to integrate heterogeneous data models, programming languages and standards, the challenge of providing dependable services on open, networked systems, and the reality of continuously changing business requirements. Such systems are difficult to understand, to develop and to maintain. Software Engineering comprises state-of-the-art techniques in developing quality software products within time and budget constraints.
The track Advanced Software Engineering offers a study program that explores new and emerging techniques for managing the complexity of developing modern, dependable and flexible software systems. Certain courses examine trends in software engineering, such as agile methodologies and current development environments. Other courses examine the role of software engineering in modern application domains, such as web engineering, service oriented architecture (SOA), RESTful Web Services and mashups frameworks. Programming and development techniques are examined in courses dedicated to topics such as concurrent programming, compiler construction, and programming languages. Techniques to support software evolution are also studied, in particular the analysis of both static source code and running software systems to build up software models that can be studied, queried, and visualized to reveal hidden design knowledge and to expose potential problems.