Search course

Use the search function to find more information about the study programmes and courses available at Chalmers. When there is a course homepage, a house symbol is shown that leads to this page.

Graduate courses

Departments' graduate courses for PhD-students.


Syllabus for

Academic year
TDA594 - Software engineering principles for complex systems  
Software engineering principles for complex systems
Syllabus adopted 2020-02-20 by Head of Programme (or corresponding)
Owner: TKITE
7,5 Credits
Grading: TH - Pass with distinction (5), Pass with credit (4), Pass (3), Fail
Education cycle: First-cycle
Major subject: Computer Science and Engineering, Software Engineering

Teaching language: English
Application code: 52113
Open for exchange students: No
Block schedule: B+
Only students with the course round in the programme plan

Module   Credit distribution   Examination dates
Sp1 Sp2 Sp3 Sp4 Summer course No Sp
0119 Project 6,0 c Grading: TH   6,0 c    
0219 Written and oral assignments 1,5 c Grading: TH   1,5 c    

In programs



Gregory Gay

  Go to Course Homepage


General entry requirements for bachelor's level (first cycle)
Applicants enrolled in a programme at Chalmers where the course is included in the study programme are exempted from fulfilling the requirements above.

Specific entry requirements

The same as for the programme that owns the course.
Applicants enrolled in a programme at Chalmers where the course is included in the study programme are exempted from fulfilling the requirements above.

Course specific prerequisites

The student must know Java programming and must have taken courses on data structures and algorithms (e.g., TDA416) as well as on object-oriented programming (e.g., TDA552, TDA367). Courses on user-interface development (e.g., DAT216, TDA289), and on testing (e.g., TDA567) are recommended.


Real-world software systems are becoming increasingly complex and pervasive. Consider application domains such as enterprise computing (e.g., data-processing/AI systems), business information systems (e.g., web portals), cyber-physical systems (e.g., automotive software), systems software (e.g., operating system kernels), or mobile software and software ecosystems (e.g., Android apps). All these domains boast software systems of unprecedented complexity, many of which are long-living and exist in many different variants. As such, these software systems require dedicated planning, modeling, design, realization, and advanced analysis techniques presented in this course.

Learning outcomes (after completion of the course the student should be able to)

Identify and reason about recurrent problems of engineering complex systems and being able to apply appropriate solutions. The learning is driven by a concrete example of a software engineering or re-engineering project that will be developed in group work.

1. Knowledge and understanding

    • Explain the challenges of engineering complex software systems
    • Explain industrial practice and examples of complex software systems engineering
    • Explain processes and concepts for engineering complex and variant-rich software systems
    • Explain business-, architecture-, process-, and organization-related aspects of engineering complex software systems

    2. Skills and abilities

    • Model a software system from different perspectives (e.g., using feature models, UML diagrams, architecture description languages)
    • Engineer a variant-rich software system (e.g., variant-rich software system, software product line, software ecosystem)
    • Analyze and re-engineer a complex software system
    • Use and reason about modularization techniques
    • Use modern component or service frameworks

    3. Judgement and approach

    • Analyze existing software systems and discuss potentials for improvement or re-engineering
    • Reason about characteristics software modularity concepts
    • Recognize in which situations which principles for handling of complex software systems are appropriate
    • Read and analyze scientific literature


    Programming expertise is only one of many skills required to engineer complex software systems. In this course we will critically analyse what software-engineering principles support the engineering of complex software systems. We will discuss these principles in the lectures and will apply them in project work.


    There will be weekly lectures covering the theoretical course content. Additionally, there will be project work in groups and, as a part of this, weekly compulsory supervision meetings in the groups. The students will be introduced also to the concepts of working in groups and group dynamics via tailored lecture. Each student will be responsible for a certain part of the overall project.

    In addition to the project and the written assignment, there will be a final presentation of the project work at the end of the course.


    Information about literature can be found on the course web-page.

    Examination including compulsory elements

    The examination consists of two parts: an individual written report and oral assignment (1.5 hec) and a group project (6 hec). The two sub-courses are graded individually, both of which comprising the grading scale: 3, 4, 5, and Fail (U). The final grade of the course is calculated as follows:

    • Grade 3: at least 3 to the project grade and at least 3 to the written assignment
    • Grade 4: at least 4 to the project grade and at least 4 to the written assignment
    • Grade 5: 5 to both the project and written assignment
    • Fail (U): otherwise

    Page manager Published: Thu 04 Feb 2021.