Vorgaben für die Softwareentwicklung

  • Ziel ist ein Programm, welches seine Aufgabe zuverlässig erfüllt und dessen Aufbau auch von anderen Personen verstanden werden kann. Neben der Funktion zählen deshalb auch die Lesbarkeit, die Dokumentation und eine interessante, gut bedienbare Umsetzung.
  • Verwenden Sie für Bezeichner und Code-Kommentare einheitlich Englisch. Die Projektbeschreibung im Wiki und die Bedienungsanleitung können auf Deutsch geschrieben werden.
  • Verwenden Sie für C-Beispiele C99 oder einen neueren Sprachstandard. Dokumentieren Sie die im Projekt gewählte Compiler-Einstellung.
  • Planen Sie zunächst, welche Aufgaben das Programm erfüllen soll. Überlegen Sie anschließend, welche Funktionen, Daten und Schnittstellen dafür benötigt werden.
  • Unterscheiden Sie Eingabe, Verarbeitung und Ausgabe. Eine Änderung an der Anzeige sollte z.B. nicht gleichzeitig eine Änderung an der Berechnung eines Messwertes erfordern.
  • Nutzen Sie vorhandene Libraries, wo dies sinnvoll ist. Geben Sie deren Herkunft und Version an. Kennzeichnen Sie, welche Teile selbst entwickelt oder verändert wurden, und beachten Sie die jeweiligen Lizenzbedingungen.
  • Die folgenden Beispiele sind teilweise Programmausschnitte. Deklarationen und Funktionen, welche zum jeweiligen Thema nichts beitragen, können darin fehlen. Mit SCHLECHT gekennzeichnete Beispiele sollen typische Fehler zeigen und nicht übernommen werden.
  • Formulierungen wie „Verwenden Sie“ oder „Vermeiden Sie“ beschreiben die Vorgaben für die Abgabe. Empfehlungen wie „Es bietet sich an“ lassen eine begründete andere Lösung zu.
  • Stellen Sie jeder C-Datei einen beschreibenden Kommentar voran. Orientieren Sie sich dabei an den Übungsprogrammen.
  • Beschreiben Sie die Funktion des Programms, die Bedienung und die benötigte Hardware. Geben Sie insbesondere an, ob weitere Dateien eingebunden, Jumper gesetzt oder zusätzliche Bauteile angeschlossen werden müssen.
  • Dokumentieren Sie auch Einstellungen, welche für das Übersetzen oder Ausführen notwendig sind, z.B. Mikrocontrollertyp, Taktfrequenz, Compileroptionen und Simulator-Einstellungen.
  • Stellen Sie jeder Funktionsdefinition eine kurze Beschreibung voran. Beschreiben Sie ihren Zweck und bei Bedarf Parameter, Rückgabewerte, Voraussetzungen und wichtige Nebenwirkungen.
  • Nutzen Sie für Datei- und Funktionsbeschreibungen /* … */. Verwenden Sie für Kommentare innerhalb der Funktionen und hinter Deklarationen //.
  • Dokumentieren Sie den Code ausführlich und möglichst zeilennah. Erklären Sie, was Sie mit einer Anweisung bezwecken. Eine bloße Übersetzung der C-Anweisung hilft meist wenig. Besonders wichtig sind Sonderfälle, Grenzen und Annahmen.
  • Eine Kurzbeschreibung gehört hinter jede Variablendeklaration und jedes #define. Beschreiben Sie dabei auch die Einheit, wenn diese nicht bereits eindeutig aus dem Namen hervorgeht.
  • Richten Sie Kommentare an zusammengehörigen Codezeilen an derselben Spalte aus. Vermeiden Sie doppelte Kommentare und Kommentare, welche nur die Formatierungsregeln wiedergeben.
  • Passen Sie Kommentare bei Änderungen des Codes mit an. Entfernen Sie für die Abgabe auskommentierte Versuche und überholte Hinweise. Frühere Versionen gehören in die Versionsverwaltung.
  • Falls alternative Einstellungen sinnvoll sind, können Sie deren Bedeutung und Konsequenzen in einem Kommentar erklären.

Beispiel für die Dateibeschreibung

Beispiel für zweckorientierte Kommentare

  • Testen Sie nach kleinen, zusammenhängenden Änderungen. Prüfen Sie zunächst die betroffene Funktion und anschließend ihr Zusammenspiel mit den übrigen Modulen.
  • Prüfen Sie neben dem Normalfall auch Grenzen und Sonderfälle: erster und letzter Arrayeintrag, leere Datenmenge, ungültige Eingabe, Zählergrenzen und maximale Belegung.
  • Prüfen Sie bei zeitgesteuerten Programmen auch Start, Pause, Neustart und einen längeren Betrieb. Ein Programm kann nach dem Einschalten korrekt aussehen und erst später durch einen Überlauf oder einen blockierenden Ablauf ausfallen.
  • Halten Sie wesentliche Tests und deren Ergebnis kurz fest. Bei Änderungen an Geschwindigkeit oder Speicherbedarf gehören auch die verwendeten Einstellungen und Messbedingungen dazu.
  • Übersetzen Sie das Programm mit aktivierten Compilerwarnungen, z.B. -Wall und -Wextra. Klären und beheben Sie Warnungen, statt diese ohne Begründung auszublenden.
  • Geben Sie die tatsächlich geprüfte Konfiguration an: Mikrocontroller, Taktfrequenz, Compiler-/Linkeroptionen, Library-Versionen und notwendige Simulator-Einstellungen. F_CPU muss für alle betroffenen Übersetzungseinheiten zur tatsächlich verwendeten Taktfrequenz passen.
  • Prüfen Sie, ob das Projekt nach einem vollständigen Neuübersetzen aus den abgegebenen Dateien lauffähig ist. Entfernen Sie alte Versuche, unbenutzte Dateien und irreführende Versionsstände.
  • Legen Sie eine kurze Bedienungsbeschreibung bei. Eine andere Person muss das Projekt ohne mündliche Ergänzungen starten und die vorgesehenen Funktionen ausprobieren können.

Zur Bewertung lege ich die für die Veranstaltung bereitgestellte Bewertungscheckliste sowie die hier beschriebenen Vorgaben zugrunde. Beachten Sie auch die Hinweise zur Präsentation und Abgabe.

Prüfen Sie vor der Abgabe insbesondere:

  • Erfüllt das Programm die vereinbarte Aufgabe und lässt es sich nachvollziehbar bedienen?
  • Sind Namen, Funktionen und Module verständlich aufgebaut?
  • Stimmen Kommentare, Bedienungsbeschreibung und tatsächliches Verhalten überein?
  • Sind Arraygrenzen, Wertebereiche und Rückgabewerte korrekt behandelt?
  • Bleiben ISR kurz und Rasteraufgaben zeitlich begrenzt?
  • Sind gemeinsame Daten und Hardware-Ressourcen konsistent behandelt?
  • Ist das Projekt vollständig und ohne ungeklärte Compilerwarnungen übersetzbar?
  • Sind wichtige Normal-, Grenz- und Fehlerfälle geprüft?

Weiterführende Hinweise:

Diese überarbeitete Fassung basiert auf den bisherigen MEXLE-Vorgaben für die Softwareentwicklung und den ergänzenden Vorgaben von Prof. Tim Fischer. Die bisherige Wikiseite steht unter CC BY-SA 4.0; diese bearbeitete Fassung wird unter derselben Lizenz bereitgestellt.