Unit Tests gehören mittlerweile zu den Standardmaßnahmen im Softwareentwicklungsprozess. Mit ihrer Hilfe wird die Fehlerquote einzelner Module reduziert und die spätere Integration vereinfacht. Unit Tests erlauben die Überprüfung von Fehlerkonditionen, die bei einem Systemtest nicht erreicht werden können oder dürfen.
FORTecH setzt seit der Publikation der ersten Frameworks Unit Test im eigenen Entwicklungsprozess ein. Aufgrund der großen Diversität der Zielumgebungen im Embedded-Umfeld setzen wir hier auf ein eigenes, einfach und pragmatisch gehaltenes Framework für C und C++, das sich an die Konzepte von CppUnit anlehnt.
Im Gegensatz zu komplexen, integrierten Testsystemen gehen wir davon aus, dass Testbarkeit bereits mit dem Design beginnt. Module verwenden Schnittstellen, die einen isolierten Test ermöglichen. Dadurch kann der Produktcode für C und C++ in statischen Bibliotheken getestet werden, die in unveränderter Form im Produkt ausgeführt werden. Fehlerquellen wie die Verwendung unterschiedlicher Compileroptionen können so ausgeschlossen werden. Testergebnisse werden in einem JUnit-kompatiblen Format erzeugt, das eine einfache Integration in Continuous-Integration-Systeme wie Jenkins/Hudson erlaubt.
Auf leistungsfähigeren Zielsystemen mit eigenem Betriebssystem und Shell-Funktionalität verwenden wir typisch skriptgesteuertes Deployment und Ergebnistransfer. Für kleinere Mikrocontrollerapplikationen z.B. auf Basis der ARM-Cortex M0...M4 wird die Teststeuerung und -auswertung auf die Entwicklungsmaschine verlagert. Auf den Microcontroller werden nur der zu testende Code, die Testfälle und ein minimalistischer Server geladen. Die für die Kommunikation verwendete Schnittstelle richtet sich nach den Ressourcen des Zielsystems (USB, CAN, LIN, ...) und kann angepasst werden. Der Entwicklungsrechner steuert über eine grafische Oberfläche oder Kommandozeile die Testausführung. Entwicklungsumgebung und Teststeuerung arbeiten dabei parallel, sodass die gezielte Ausführung einzelner Unit Tests im Debugger möglich ist.
Wir unterstützen Sie gern bei der Anpassung unserer Tools an Ihre konkrete Entwicklungsumgebung. Bei Bedarf stehen wir Ihnen bei der Integration des Unit Testing in Ihre Prozesse zur Verfügung.