Entwicklungs-Tools

Wie sich der Entwicklungsprozess für Embedded-Software optimieren lässt

19. Oktober 2010, 15:38 Uhr | Von Joe Fabbre

Fortsetzung des Artikels von Teil 1

Automatismen ersetzen ermüdende Tätigkeiten

Während eine minimale Komplexität Vorteile für die Langzeit-Wartung und Gesamteffizienz des Entwicklungsprozesses bietet, gibt es viele kleine Aufgaben in der täglichen Entwicklungsarbeit, die sich automatisieren lassen und so unmittelbar zur Produktivitäts- und Effizienzsteigerung beitragen.

  • Statische Quell-Code-Analyse: Diese Tools finden automatisch unterschiedlichste Fehler: Buffer Overflow, Ressourcen-Lecks, Lesen nicht initialisierter Objekte, Out-of-Scope-Speicherreferenzen und eine Reihe anderer Probleme, die während des Laufzeittests und im Feldbetrieb oft nicht erkannt werden. Eine statische Quell- Code-Analyse ermöglicht die Früherkennung solcher Fehler. Bleiben diese unentdeckt, führen sie zu Problemen, die das Debugging erschweren. Das frühzeitige Erkennen und Beseitigen dieser Art von Fehlern verspricht einen Nutzen.
  • Einhaltung von Codierungsstandards automatisch überwachen: Die meisten Unternehmen haben Codierungsstandards und verschwenden viel Zeit mit Code Reviews, nur um nach Verletzungen des Codierungsstandards zu suchen. Ein automatisiertes Tool, das diese Standards überprüft, schon während der Entwickler den Code schreibt, spart Zeit für alle Beteiligten.
  • Dynamische Quell-Code-Analyse: Während die statische Quell-Code-Analyse Fehler vor und während des Compilierens findet, spürt die dynamische Quell-Code-Analyse weitere Fehler auf, die von statischen Analyzern nicht entdeckt werden. Dynamische Tools instrumentieren den Quell-Code und spüren Fehler während der Programmausführung auf.
  • Generierung der Testfälle und deren Ausführung automatisieren: Um eine gute Unit-Test-Code-Abdeckung zu erzielen, ist oft eine Zeile Test-Code für jede Zeile Quell-Code nötig. Dies erfolgt meist erst spät im Prozess und wird sogar weggelassen, wenn das Projekt hinter dem Zeitplan liegt. Tools für die automatisierte Testgenerierung analysieren den Quell-Code und erstellen automatisch Testfälle, die gewartet und über die Lebensdauer eines Projekts hinweg angewendet werden können – und das zu einem Bruchteil der Kosten, die sonst bei einem manuellen Eingriff fällig wären.

Fehler suchen wie die Profis

Es gibt nicht das „eine“ Debugging-Tool oder die „eine“ Debugging- Technik zum Auffinden und Beseitigen aller Software- Fehler. Erfahrene Entwickler wissen, dass sie eine Vielzahl von Tools benötigen, mit denen sie Fehler in den verschiedensten Kategorien lokalisieren und beseitigen können. Während das automatische Auffinden von Fehlern mit den oben genannten Tools die effizienteste Methode ist, können darüber aber nicht alle Software-Fehler ausfindig gemacht werden. Ein effizientes Auffinden der restlichen Fehler erfolgt hauptsächlich über die Einsehbarkeit in das System. Falls etwas nicht sichtbar ist, kann es auch nicht gefunden werden. Ein komplettes Paket mit Debugging- Tools sollte folgendes enthalten:

  • „Run-Mode-Debugging“ – Debugging eines Single Threads oder einer Gruppe von Threads, während der Rest des Systems weiterläuft.
  • „Stop-Mode-Debugging“ – Debugging durch JTAG- oder anderen hardwareseitigen Zugriff auf die CPU. Dabei wird das gesamte System beim Erreichen eines Breakpoints angehalten.
  • Kernel Awareness – der Debugger „kennt“ das Betriebssystem des Targets. Dazu zählt die Möglichkeit, task-spezifische Break-points zu setzen und durch Kernelobjekte zu browsen, um den Systemzustand zu einem beliebigen Zeitpunkt zu untersuchen.
  • Post-Mortem-Debugging – Speicherabbilder des Betriebssystemkerns abspeichern und debuggen.
  • System-Profiler – veranschaulicht die CPU- und Speicherausnutzung.
  • Event-Analyzer – Aufzeichung und Darstellung einer Zeitachse von Ereignissen wie Kontextwechsel, Interrupts, Message Passing und anwenderdefinierter Ereignisse.
  • Speicherleck-Erkennung.
  • Code Coverage Analyzer.
  • Systemsimulatoren.
  • System Logging – printf() etc.
  • Trace – Aufzeichnen des Befehlsablaufs und der Daten: Erfordert entsprechende Möglichkeiten in der Target- CPU, z.B. Nexus oder ETM, sowie externe Hardware zur Erfassung des Trace. Ähnelt einem Rekorder für Software- Debugging und bietet die Möglichkeit, sich im Code vorwärts und rückwärts zu bewegen. Bietet hervorragende Einsehbarkeit und Kontrolle über die erfassten Trace-Daten.

Dabei sollten die Entwickler erfahrene Benutzer dieser Tools sein. Nur das richtige Handwerkszeug und das Wissen, wie es angewendet wird, führen zum Erfolg. Daher müssen dem Entwickler nicht nur die richtigen Tools bereitstehen, er muss auch wissen, welches Tool er in welcher Situation einsetzt.

Wunsch und Wirklichkeit

 Die hier genannten Empfehlungen sind nicht neu – überraschenderweise halten sich aber viele Software-Hersteller nicht daran. Viele Entwickler geben zu, dass sie als einziges Debug-Tool „printf“ nutzen. Dabei handelt es sich um Personen, die in führenden Unternehmen arbeiten und deren Applikationen Millionen von Code-Zeilen enthalten. Ohne die richtigen Tools wirken sie relativ unbeholfen. Was in diesem Beitrag eigentlich als selbstverständlich beschrieben wird, sieht in der Realität leider meist ganz anders aus.

 

Der Autor:

Anbieter zum Thema

zu Matchmaker+
Joe Fabbre
ist Technical Solutions Manager für das Integrity- Betriebssystem bei Green Hills Software. Er hat an der Univerity of Notre Dame einen Bachelor in Computer Engineering erworben sowie einen Master in Computerwissenschaften am Illinois Institute of Technology. Er verfügt über mehr als 15 Jahre Erfahrung in der Embedded-Computer-Industrie.

  1. Wie sich der Entwicklungsprozess für Embedded-Software optimieren lässt
  2. Automatismen ersetzen ermüdende Tätigkeiten

Das könnte Sie auch interessieren

Verwandte Artikel

Green Hills Software GmbH