
Software maintenance and testing are critical aspects of the software life cycle, often consuming more than two-thirds of the total effort invested in a software system. These efforts focus on modifications after delivery to correct faults, enhance performance, and adapt to evolving requirements such as platform updates or business changes. To manage these challenges effectively, it is essential to employ advanced techniques and tools that reduce costs and optimize resource utilization during development and testing.
This course provides an in-depth exploration of the foundations of software evolution, maintenance, and testing. Students will examine key topics, including the management of successful but aging software systems (i.e., legacy software), object-oriented reengineering, refactoring, change patterns, defect prediction models, software quality analysis, and software evolution visualization.
In the testing module, students will delve into software testing methodologies in the context of object-oriented systems (e.g., Java systems) and cyber-physical systems, such as autonomous drones and self-driving cars. The course also introduces cutting-edge analysis platforms and simulation tools, including PX4, BeamNG, Carla, and SDC-scissor. Students will learn about test case generation and continuous delivery technologies, gaining hands-on experience in applying these techniques to Java systems and autonomous systems.
By the end of the course, students will have a strong foundation in advanced techniques for software maintenance, evolution, and testing, equipping them with the skills needed to address real-world challenges in these critical domains.
The lecture provides terminology and practical clarifications on the "Foundations of Software Testing, Maintenance and Evolution" for diverse systems
This course offers a combination of lectures and exercises. The exercises are required for the course as they will provide a better understanding of how the theory (published in research works) can be applied in practice.
This way the students actively learn during the lecture and through preparation before and after the lecture based on concrete examples.
There will be exercises for the students to do individually and a project. The project will be done in groups of students formed by max 3-4 people. The group project will be about one of the main topics of the course itself with presentations from the students. In specific cases, individual projects are accepted.
Sometimes, successful projects lead to the publication of relevant conferences or journals.
This lecture explains the meaning of "Empirical Software Engineering" with practical studies applying empirical methods and methodologies to specific software engineering problems.
This lecture focuses on the automation need for enabling Defect Prediction for Software Systems based on "Change Type Analysis"
The lecture describe studies on mining structure and unstructured data (among the topics, traceability recovery, and reverse engineering)
The lecture describes studies on mining structure and unstructured data (among the topics, NLP applied to software engineering problems)
This lecture focuses on Code review, an important area of software engineering, aimed at ensuring high software/systems quality.
This lecture focuses on test automation, an important area of software engineering, aimed at ensuring high software/systems quality. The lecture will focus on automated methods leveraging AI-techniques and approaches to solve this critical problem for traditional systems.
This lecture focuses on test automation, an important area of software engineering, aimed at ensuring high software/systems quality. The lecture will focus on automated methods leveraging AI techniques and approaches to solve this critical problem for traditional systems. Compared to the previous lecture, the target is to learn how to automatically generate code that is easy to understand as well as I will provide examples on how AI/NLP techniques can be used to solve other related problems.
Software maintenance and testing are critical aspects of the software life cycle, often consuming more than two-thirds of the total effort invested in a software system. These efforts focus on modifications after delivery to correct faults, enhance performance, and adapt to evolving requirements such as platform updates or business changes. To manage these challenges effectively, it is essential to employ advanced techniques and tools that reduce costs and optimize resource utilization during development and testing.
This course provides an in-depth exploration of the foundations of software evolution, maintenance, and testing. Students will examine key topics, including the management of successful but aging software systems (i.e., legacy software), object-oriented reengineering, refactoring, change patterns, defect prediction models, software quality analysis, and software evolution visualization.
In the testing module, students will delve into software testing methodologies in the context of object-oriented systems (e.g., Java systems) and cyber-physical systems, such as autonomous drones and self-driving cars. The course also introduces cutting-edge analysis platforms and simulation tools, including PX4, BeamNG, Carla, and SDC-scissor. Students will learn about test case generation and continuous delivery technologies, gaining hands-on experience in applying these techniques to Java systems and autonomous systems.
By the end of the course, students will have a strong foundation in advanced techniques for software maintenance, evolution, and testing, equipping them with the skills needed to address real-world challenges in these critical domains.
Course mode:
The lecture is done regularly:
The lecture is done regularly over Microsoft Teams. After each lecture, a video of the live lecture is made available to students (even the ones who were not able to participate). If requested the course can be done fully in offline mode, with the videos of the lectures shared weekly. However, the exercises and projects will be discussed with the lecturer on a regular basis.
The slides and material of each lecture are shared upfront on the webpage of the course. Questions can be made during the lectures.
Projects and exercise meetings are in general done on a weekly basis via MS Teams. The time slots for them are discussed between the lecturer and the students. On request, other channels (e.g., Slack) can be created for running the projects, but the default way is to use sub-channels of the MS teams dedicated to the course.
“We encourage all students to contact the lecturer(s) via MS teams and/or email for any doubt about the projects and exercises
Format:
This course offers a combination of lectures and exercises. The exercises are required for the course as they will provide a better understanding of how the theory (published in research works) can be applied in practice.
This way the students actively learn during the lecture and through preparation before and after the lecture based on concrete examples.
There will be exercises for the students to do individually and a project. The project will be done in groups of students formed by max 3-4 people. The group project will be about one of the main topics of the course itself with presentations from the students. In specific cases, individual projects are accepted.
Sometimes, successful projects lead to the publication of relevant conferences or journals.
Grading will be based on:
(i) the practical exercise (not too complicated) performed during the course (35% of the grade);
(iii) the (bigger) project (65% of the grade).
You gain skills and competencies covered in central modules:
- Foundations of software testing and software maintenance and evolution for traditional (object-oriented) and modern (Cyber-physical) systems
- Motivation, challenges, and definitions in the field of software testing and software maintenance and evolution
- Techniques and technologies of software testing and software maintenance and evolution
- Variants of software maintenance, relations to software development life-cycle
- Quantitative analyses, empirical analyses, and qualitative analyses of software. Evolution dynamics
- The participants will also leverage platforms and Digital Twins (i.e., Simulation environments) tools (e.g., PX4, BeamNG, Carla, SDC-scissor, etc.), test case generation and continuous delivery technologies in the context of Java and autonomous systems (e.g., drones and self-driving cars).