Ziel der Übung
Analog zur Vorlesung befassen sich die Übungsaufgaben mit der zuverlässigen Entwicklung zuverlässiger Software. Im Rahmen eines Produktentwicklungszyklus werden in den Übungsaufgaben sowohl selbstgeschriebene als auch fremde Codestücke unter die Lupe genommen. Die Programmiersprache ist hierbei vorwiegend C. Als Vorraussetzung für die Übung sollte man deshalb grundlegende C-Kenntnisse mitbringen. Das Ziel der Übungsaufgaben ist die Entwicklung eines konkreten Echtzeitsystems auf Anwendungsebene. Zu diesem Zweck kommt das Echtzeitbetriebssystem eCos als Entwicklungsplattform zum Einsatz. eCos wird in den verschiedensten Anwendungen (Kommunikation, Steuerung, ...) und Produkten (z.B. NETGEAR-Routern) eingesetzt und ist auch als Open-Source-Variante verfügbar. In den Übungen wird ein konkretes Echtzeitsystem auf Basis von eCos aufgebaut, anhand dessen sich die verschiedenen Problemstellungen bei der Entwicklung solcher Systeme zeigen lassen.Zuverlässige Software entwickeln
Während der erste Teil sich auf das Finden von Entwicklungsfehlern konzentriert, betrachten wir in der zweiten Hälfte auch Fehler, die zur Laufzeit auftreten können. Hierzu zählen vor allem unerwartete Hardwarefehler, die den Programmfluss bzw. Rechenergebnisse beeinflussen können. In der Übung werden wir hierzu verschiedene konstruktive Maßnahmen kennenlernen und umsetzen, die die Software gegen derartige Fehlerszenarien härten können.Zuverlässig entwickeln
Ein wesentlicher Bestandteil dieser Veranstaltung ist das Kennenlernen und der Umgang mit Werkzeugen, die die Entwicklung verlässlicher Systeme unterstützen. Hierzu zählen u.a.:- Versionsverwaltung von Quellcode mit Hilfe von git
- Softwaretest mittels CMake und CTest
- Codeüberdeckungsanalyse mittels gcov (lcov)
- Überdeckungsorientiertes Fuzzing mittels libFuzzer
- Fehlerinjektion mittels FAIL*
- Statische Bestimmung des Speicherbedarfs (StackAnalyzer)
- Statische Codeanalyse mit Hilfe abstrakter Interpretation (Astrée)
- Formale Verifikation mittels Frama-C
Umfang der Übungen
Der Umfang der Übungen richtet sich nach den angestrebten Prüfung und den dafür notwendigen ECTS-Punkten (zusätzlich zu den 2,5 ECTS der Vorlesung):- 2,5 ECTS: Die Bearbeitung aller Basis-Übungsaufgaben ist verpflichtend.
- 5,0 ECTS: Die Bearbeitung aller Basis- und Erweiterungs-Übungsaufgaben ist verpflichtend.
Folien und Dokumentation
| Kapitel | Thema | Datum | Folien |
|---|---|---|---|
| U1 | Organisation | 14.10.2024 | handout, animiert |
| U2 | Einführung in den Umgang mit git | 14.10.2024 | handout, animiert |
| U3 | Implementieren eines Filters mit Festkommaarithmetik | 21.10.2024 | handout, animiert |
| U4 | Triple Modular Redundancy | 28.10.2024 | handout, animiert |
| U5 | EAN Codes und Fehlerinjektion | 11.11.2024 | handout, animiert |
| U6 | Testen | 18.11.2024 | handout, animiert |
| U7 | Stackverbrauchs Analyse | 09.12.2024 | handout, animiert |
| U8 | Abstrakte Interpretation | 13.01.2025 | handout, animiert |
| U9 | Zusammenfassung | 03.02.2025 | handout, animiert |
Übungsaufgaben
| Nr. | Titel | Kurzbeschreibung | Ausgabetermin | Fester Termin | Vorgaben |
|---|---|---|---|---|---|
| 1 | git | Einführung in den Umgang mit git | 14.10.2024 | 25.10.2024 | Aufgabe 1 |
| 2 | Filter | Implementieren eines Filters mit Festkommaarithmetik | 21.10.2024 | 08.11.2024 | Aufgabe 2 |
| 3 | TMR | Schutz durch Einbringung von Redundanz | 28.10.2024 | 22.11.2024 | Aufgabe 3 |
| 4 | EAN | Schutz durch arithmetische Codierung | 11.11.2024 | 29.11.2024 | Aufgabe 4 |
| 5.1 | Testen | Manuelles und automatisiertes Testen | 18.11.2024 | 13.12.2024 | Aufgabe 5.1 |
| 5.2 | Testen | Manuelles und automatisiertes Testen | 25.11.2024 | 20.12.2024 | Aufgabe 5.2 |
| 5.3 | Testen | Manuelles und automatisiertes Testen | 02.12.2024 | 10.01.2025 | Aufgabe 5.3 |
| 6 | Statische Analyse | Clang Static Analyzer, Stack Analyse, WCET | 09.12.2024 | 17.01.2025 | Aufgabe 6 |
| 7 | Abstrakte Interpretation | Implementierung und Korrektheitsnachweis eines einfachen Ringpuffers und Filters | 13.01.2025 | 24.01.2025 | Aufgabe 7 |