Participation in the Software Engineering Lab requires extensive programming skills as taught in the courses Programming 1 and Programming 2.
Students are required to bring their own laptops.
The goal of the Software Engineering Lab is to develop a non-trivial software system, partly in team effort and partly in individual effort. In this course, a number of documents (design models, documentation, etc.) and artifacts (source code, tests, etc.) need to be developed and submitted. Correctness, quality, and timely submission of all documents and artifacts are major grading criteria.
The Software Engineering Lab consists of three phases: exercise, group, and individual phase. In the exercise phase, participants will complete mini-tests on a daily basis, covering current topics from the lecture.
In the group phase, participants will design, implement, and test a substantial software system in a team effort. Only participants that have passed the exercise phase will be admitted to the group phase.
In the individual phase, participants will design, develop, and test a smaller system (or extension to a larger system) in an individual effort. Only participants that have passed the group phase will be admitted to the individual phase.
All documents (design models, documentation, etc.) and artifacts (source code, tests, etc.) of the three phases will be evaluated based on the principles and quality standard conveyed in the lectures. More details on the exams will be announced at the beginning of the course.
Daily exercises and lectures (first few weeks)
Daily project work with tutoring
35 h of lectures and exercises + 235 h project work = 270 h (= 9 ECTS)
Participants acquire the ability to solve complex software development problems individually and in teams.
Participants are aware of common problems and pitfalls of software development and know how to address them.
Participants are able to accomplish and coordinate software development tasks based on a set of given requirements. For this purpose, they are able to select proper methods and techniques to minimize risks and maximize software quality.
Participants know about foundations and principles of software design, including cohesion, coupling, modularity, encapsulation, abstraction, and information hiding. They are acquainted with a whole array of design patterns, knowing their aim and individual strengths and weaknesses. They are able to apply design patterns beneficially and to judge and improve the quality of software designs.
Participants master fundamental techniques and tools for software testing, debugging, and version control.
This module is identical in content to the German-language module Softwarepraktikum.
This module is part of the following study programmes: