Aus der Spezifikation ergibt sich die Realisierung als Software.
Der Softwareentwicklungsprozeß besteht aus den Schritten:
- Entwickeln nach den Vorgaben -> Software Spezifikation
- Fehler finden – Testen der einzelnen C-Funktionen als Unittest
- Fehler beheben – Im Fehlerfall die Fehlersuche -> ‚Debuggen‘
Diese Schritte werden wiederholt, bis die Software fertiggestellt ist. Ein Teil davon lässt sich automatisieren, z.B. mittels ‚Continuous Integration‘ mit den Tools ‚Hudson‘ oder ‚Jenkins‘. Und hin und wieder werden fertiggestellte Teile in der Softwarekonfiguration abgelegt -> ‚Check In‘, z.B. mit Subversion.
Entwickeln nach den Vorgaben
Die Software wird für den Zielprozessor entwickelt. Mit der internen Maßgabe, die hardwarenahe Schicht getrennt zu halten. Zum einen, um die Software portabel zu machen, zum anderen, um auf dem PC zu ‚Debuggen‘, also Fehler suchen und beheben zu können.
Fehler finden
Damit können dann für jede Software ‚Unit‘ alle erforderlichen Testfälle definiert und geschrieben werden. Die werden dann nach jeder Änderung oder Erweiterung möglichst automatisch ausgeführt.
Fehler beheben
Für jeden Testfall, der einen Fehler findet, muss ich dann zum ‚Debuggen‘ eine Simulation erstellen, die mir den Testfall nachstellt. Insbesondere für eine Hardware auf einem Mikrocontroller in einem embedded System brauche ich so eine Simulation, damit ich ohne Zielhardware auf dem PC arbeiten kann, mit den PC Entwicklungstools und damit nur die logische Funktion teste.
Wenn ich direkt auf der Zielhardware arbeiten will, ist es dann ein ‚In Circuit Emulator‘ (ICE) und ich muss die Hardware direkt manipulieren, um den Testfall nachzustellen. Dann bin ich allerdings schon beim Systemtest und suche den Fehler im gesamten System. Der kann dann auch in der Hardware liegen.
Literaturhinweise und Links
Secure Programming Lint
http://www.splint.org
Testsuite im Unit Test erstellen
Softwareentwicklungsprozeß Übersicht
Dokumentation nachträglich erstellen
Arbeiten mit Secure Programming Lint
Andreas Zeller
– Why Programs Fail
Kathrin Passig / Johannes Jander
– Weniger schlecht programmieren
Martin Fowler
– Refactoring: Improving the Design of Existing Code