- Language: English
- Type: 3V + 2Ü
- Module: IN0006
- ECTS Credits: 6
- Prerequisites: Lab Course – Foundations of Programming (IN0002)
- Only students, who passed IN0002 or a comparable course, can participate in this course
- You must have experience with object oriented programming in Java
- TUM Online: You must register for this course in TUM Online before the course starts
- Course Material: You can find slides and exercises on Artemis
- Time and Location:
- Lecture: Time TBA, MI HS 1 (in-person), MW 2001 (live-stream), 2750 at Stammgelände (live-stream)
- Exercises: half of them offered in-person, half of them online (zoom)
- Post your questions to the corresponding channels on eist2023.slack.com .
- You can contact us at firstname.lastname@example.org. Do not contact instructors on their personal email addresses!
- You must have your own computer and you are required to use it and during the tutor groups!
- You must have experience with object oriented programming in Java and with an IDE (e.g., Eclipse, IntelliJ)
Intended Learning Outcomes
After successful completion of this module, students are familiar with the basic concepts and methods of the different phases of a project, e.g. modeling the problem, reuse of classes and components, and delivery of the software. They have the ability to select and apply suitable concepts and methods for concrete problems.
The students know the most important software engineering terms and workflows and are able to analyze and evaluate given problems. In addition, students can solve concrete problems in software engineering, e.g. with the help of design patterns.
Software engineering is the establishment and systematic use of engineering principles, methods, and tools for the division of work, the development and application of extensive, complex software systems. It deals with the development and production of software, the organization and modeling of data structures and objects, and the operation of software systems. Topics of the lecture include, among others:
- Configuration management, build management, release management, and container deployment in dependable clouds
- Requirements elicitation and analysis (functional model, dynamic model, and object model)
- System design (specification, software architecture, architectural patterns, and design goals)
- Object design and implementation (reuse, design patterns, and interface specification)
- Testing (unit, integration and system tests, mock object pattern)
- Automated testing at scale, static vs dynamic analysis (Clang + infer + spotbugs vs Sanitizer + Fuzzing)
- Quality management, software maintenance and evolution
- Source-code-, lifecycle-management, CI and deployment
- Process models in software development, in particular agile development with Scrum
- Project organization and communication
Teaching and Learning Methods
By means of slide presentations with animations, the interactive lecture introduces the basic concepts and methods of software engineering and explains them using examples. Small exercises, e.g. quizzes, modeling, and programming tasks, with individual feedback help students to identify whether they have understood the basic concepts and methods.
Accompanying tutorials deepen the understanding of the concepts explained in the lecture by means of suitable team exercises and show the application of the different methods with the help of manageable problems in the different phases of software engineering. Homework enables students to deepen their knowledge in self-study. The presentation of the own solution in the accompanying tutorials improves communication skills, which are essential in software engineering. Individual feedback on homework allows students to measure learning progress and improve their skills.
Lecture with digital slides, live stream recordings, online exercises (programming, modeling, quiz, text) with individual feedback, a communication platform for the exchange between instructors, tutors, and students.
Bernd Bruegge, Allen H. Dutoit: Object-Oriented Software Engineering: Using UML, Design Patterns and Java, 3rd Edition, Pearson Education, 2010.