[Note for minor students: take this course in your third year; `Modelleren en systeemontwikkeling' is a required course.]
The IEEE Computer Society defines software engineering as
The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software.
Thus software engineering comprises everything that is involved in building and maintaining software systems, including design and construction, manufacturing and distribution, project management, and human factors of software use and development. Many aspects of software engineering are adequately treated in the rest of the computer science curriculum, e.g., algorithms, data structures, programming languages, programming methodology, and software design. In this course we focus on those aspects of the software process that are required to turn programming into software development, i.e., the activities that are complementary to design and construction of software, including the following topics:
- Formal requirements specification
- Design through specification languages
- Aspect oriented programming
- Software engineering support (tools):
- Configuration management
- Version management
- Build management
- Testing and profiling
- Software comprehension and metrics
- Empirical software engineering
These topics will be studied in theory in the form of lectures and papers, and in practice by means of lab exercises. The course features a number of guest lectures from academia and industry.