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.
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 |