Authors
Affiliations

Gesellschaft für Informatik

deRSE

Gesellschaft für Informatik

deRSE

Florian Goth

Jan Phillip Thiele

Anna-Lena Lambrecht

Classical Software Engineering

To summarise the vast range of the skills a software engineer is typically equipped with, we refer to the Guide to the Software Engineering Body of Knowledge (Bourque, Fairley, and IEEE Computer Society 2014). Because research software engineering is an interface discipline, RSEs are often stronger in topics more commonly encountered in research software contexts (e.g., mathematical and engineering foundations) than in other areas (e.g., software engineering economics). However, they bring a solid level of competence in all software engineering topics. Therefore, RSEs can set and analyse software requirements in the context of open-ended, question-driven research. They can design software so that it can sustainably grow, often in an environment of rapid turnover of contributors. They are competent in implementing solutions themselves in a wide range of technologies fit for different scientific applications. They can formulate and implement various types of tests, they can independently maintain software and automate operations of the integration and release process. They can provide working, scalable, and future-proof solutions in a professional context and with common project and software management techniques, adapted to the needs of the research environment. Finally, as people who have often gained significant research experience in a particular discipline, they combine the necessary foundations from their domain with software engineering skills to develop complex software.(Goth et al. 2024)

This module tries to lay the foundations for the advanced RSE software engineering training.

Bourque, Pierre, Richard E. Fairley, and IEEE Computer Society. 2014. Guide to the Software Engineering Body of Knowledge (SWEBOK(R)): Version 3.0. 3rd ed. Washington, DC, USA: IEEE Computer Society Press.
Goth, F, R Alves, M Braun, LJ Castro, G Chourdakis, S Christ, J Cohen, et al. 2024. “Foundational Competencies and Responsibilities of a Research Software Engineer [Version 1; Peer Review: Awaiting Peer Review].” F1000Research 13 (1429). https://doi.org/10.12688/f1000research.157778.1.

Software Engineering I

Basic concepts of software engineering, software and product life cycle, process models for the design of large software systems, semantic aspects of domain description, hierarchy, parallelism, real-time and embedded systems as fundamental paradigms, organizational principles of complex software systems, design by contract, patterns in modeling and design methods of quality assurance, evolution and re-engineering, selected languages and tools for process- and object-oriented modeling, methods and languages for object-oriented design, architectures and architectural patterns of software systems, architecture of enterprise applications, design and implementation models in the object-oriented paradigm, e.g., Java 2 SE, design patterns, software testing methods.

Lecture: Software Engineering I

SWS: 2 ECTS: 4

Exercise: Software Engineering I Exercise

SWS: 2 ECTS: 2

Software Engineering 2

The module covers a selection of advanced topics in the field of software engineering, such as software quality assurance, service engineering, virtualization, programming languages and design, and formal methods in system design.

Lecture: Software Engineering II

SWS: 2 ECTS: 4

Exercise: Software Engineering II Exercise

SWS: 2 ECTS: 2

Module Competences

ID Description Disciplines Prerequisites Evidence Author Source
gen_programming_1 Understand the fundamental concepts of software engineering Computer Science Demonstrate understanding through theoretical assessments and practical examples University of Potsdam Link
gen_programming_2 Apply various approaches of software engineering Computer Science gen_programming_1 Complete assignments or projects using different software engineering methods University of Potsdam Link
gen_programming_3 Identify and utilize essential technologies and tools for specification, component-based development, and quality assurance of modern software systems Computer Science gen_programming_1 Work with selected tools and technologies in practical exercises and case studies University of Potsdam Link
gen_programming_4 Demonstrate an in-depth understanding and ability to apply various approaches of software engineering Computer Science gen_programming_1, gen_programming_2 Successfully complete advanced projects employing different software engineering methods University of Potsdam Link
gen_programming_5 Understand the characteristics of a wide range of technologies and tools for specification, component-based development, and quality assurance of modern software systems, and apply them in various contexts Computer Science gen_programming_3 Apply appropriate technologies and tools in complex case studies and demonstrate their use in different application scenarios University of Potsdam Link

Sources & Implementations:

Curricula

Courses

Programs

Bourque, Pierre, Richard E. Fairley, and IEEE Computer Society. 2014. Guide to the Software Engineering Body of Knowledge (SWEBOK(R)): Version 3.0. 3rd ed. Washington, DC, USA: IEEE Computer Society Press.
Goth, F, R Alves, M Braun, LJ Castro, G Chourdakis, S Christ, J Cohen, et al. 2024. “Foundational Competencies and Responsibilities of a Research Software Engineer [Version 1; Peer Review: Awaiting Peer Review].” F1000Research 13 (1429). https://doi.org/10.12688/f1000research.157778.1.