Qualitätssicherung für Embedded-Linux-Projekte Unit-Tests mit Open-Source-Werkzeugen

Standard-Tools der Open-Source-Welt

Das Standard-Build-System unter Unix und GNU/Linux. Obwohl es Alternativen gibt, ist es das am weitesten verbreitete Framework unter Verwendung von Makefiles, die die Abhängigkeiten der zusammenzubindenden Objekte, Executables und Bibliotheken beschreiben. Im Makefile werden Abhängigkeiten zwischen Quelldateien und zu erzeugenden Objekt-, Bibliotheks- und ausführbaren Dateien angegeben, zusammen mit nötigen Befehlsfolgen zur Compilierung, zum Binden etc. Diese Abhängigkeiten werden von Make automatisch aufgelöst und führen nach dem Aufruf „make“ zum automatischen Übersetzen aller noch nicht erstellten bzw. veralteten Zieldateien.

Die GNU-Compiler-Kollektion, oftmals auch als „GNU C Compiler“ bezeichnet, obwohl gcc weitere Compiler für Fortran, Java, C++, ObjectiveC etc. beinhaltet. Es wird aber nicht nur unter GNU genutzt, sondern auch mit BSD, Solaris etc. Der wichtigste Vertreter der enthaltenen Tool-Sammlung ist zweifelsohne der C-Compiler (cc/gcc), aber ebenso wichtig sind Assembler (as/gas, zum Erzeugen des Maschinencodes), Linker (ld, zum Binden der Objektdateien zu ausführbaren oder Bibliotheksdateien), C-Präprozessor (cpp, u.a. zum Einbinden von Include-Dateien in die Quelltextdateien).

Die Konfiguration eines portierbaren Programms (üblicherweise in C/C++ geschrieben) für eine spezifische Plattform ist eine komplizierte Angelegenheit; autoconf kann automatisch ein configure-Skript generieren, wie es für GNU/Linux-Software-Pakete üblich ist, und erzeugt die Symbole, welche einfach in die Programme eingebunden und genutzt werden können. Darüber hinaus erzeugt ein Lauf mit configure die erforderlichen Makefiles, welche an das Build-System angepasst werden. Hierbei wird autoconf vom Paket- Maintainer aufgerufen, der das configure- Skript im Source-Paket mitliefert. Die Ausführung dieses Skriptes bleibt dem Anwender des Paketes überlassen.

Ein einfaches Tool, um eine erste configure. ac zu erzeugen, mit der man die Arbeit beginnen kann. Das ist hilfreich in Projekten, die bereits eine gewisse Komplexität im Source-Code erreicht haben und mit dem GNU-Framework erweitert werden sollen. Diese Quellen werden gescannt und mit einem heuristischen Ansatz in configure.ac behandelt. Die Ausgabe von autoscan ist eine Datei namens configure.scan, die vom Paketentwickler angepasst (Paketname, div. Parameter) werden muss, bevor sie in configure. ac umbenannt wird und offiziell zum Paket hinzugefügt wird.

autoconf benutzt Makefile-Templates (Makefile. in) als Input. Diese haben einen langen und komplizierten Inhalt; automake kann dabei helfen, diese Dateien mit einem Satz einfacher Definitionen in Makefile.am zu überführen. Makefile.am listet dabei normalerweise nur die Quelldateien auf und gibt ggf. zusätzliche Compilerschalter an, die von Voreinstellungen abweichen. Daraus erzeugt automake ausführliche Anweisungen im Makefile-Format, die später vom configure- Skript leicht in Makefiles umgewandelt werden können.

Die Eingaben für autoconf (configure.ac) sind in der Makro-Sprache M4 geschrieben. Normalerweise werden nur einige Standard- Makros genutzt. Einige, die mit automake in Verbindung stehen, befinden sich in aclocal. m4 und werden einfach mit aclocal erzeugt.

autoconf erzeugt eine Liste mit Makro-Definitionen, die von C-Programmen (config.h) benutzt werden können. Für gewisse Fälle ist es jedoch nützlich, über eine Liste der Templates für diese Makros (config.h.in) zu verfügen. Diese wird von autoheader erzeugt. In einer idealen Welt wäre autoheader nicht nötig, aber in der Praxis ist es eine große Hilfe beim Debugging.

Ein Werkzeug, das bei der automatischen Erzeugung statischer und „shared“ Libraries hilft und hierbei von diesen unterschiedlichen Konzepten abstrahiert. Zusammen mit autoconf kann dieses die Software auf das aktuelle Target-System anpassen. Die normalerweise unterschiedliche Behandlung von statischen und shared Libraries wird hiermit dem Entwickler komplett abgenommen und führt auf dem übersetzenden System zur automatischen Erzeugung der am besten zum System passenden Bibliotheksimplementierung.

Ein einfaches Tool, das Programme wie autoconf, autoheader, aclocal, automake, libtoolize und andere (z.B. bei Bedarf gettextize zur Internationalisierung von Paketen) in der korrekten Reihenfolge aufruft. Üblicherweise wurde bei entsprechenden Paketen ggf. auch ein Skript autogen.sh mitgeliefert, das die genannten autotools in der richtigen Reihenfolge aufruft. Dies ist mit autoreconf für die meisten Fälle nicht nötig. autoreconf muss immer dann aufgerufen werden, wenn die jeweiligen Eingabedateien für die genannten Programme geändert wurden.

Eine C-Bibliothek als Derivat des originalen Unit-Test-Frameworks von Kent Beck und Erich Gamma. Sie ist gut mit den GNU autotools integriert und bietet die erwarteten Schnittstellen zum Auf- und Abbau von Testumgebungen (Harness), der Implementierung der Tests selbst und eine übersichtliche Aufbereitung der Testergebnisse.

Zu allen hier genannten Programmen wird eine umfangreiche Dokumentation im Manoder Info-Format mitgeliefert. Dort werden viele nützliche Detailinformationen, insbesondere alle Kommandozeilen-Parameter, genannt.