Ich werde nächste Woche in meiner Abteilung einen Vortrag über Unit-Tests und testgetriebene Entwicklung halten. Als Teil davon werde ich einige reale Beispiele aus einem Code zeigen, den ich kürzlich geschrieben habe, aber ich möchte auch einige sehr einfache Beispiele zeigen, die ich im Vortrag schreiben werde.
Ich habe im Internet nach guten Beispielen gesucht, aber ich habe mich bemüht, solche zu finden, die besonders für unseren Entwicklungsbereich geeignet sind. Fast die gesamte Software, die wir schreiben, besteht aus tief eingebetteten Steuerungssystemen, die auf kleinen Mikrocontrollern ausgeführt werden. Es gibt eine Menge C-Code, der sich leicht auf Unit-Tests anwenden lässt (ich spreche über Unit-Tests auf dem PC und nicht auf dem Ziel selbst), solange Sie sich von der „untersten“ Ebene fernhalten: dem Material, das direkt spricht zu den Mikrocontroller-Peripheriegeräten. Die meisten Beispiele, die ich gefunden habe, basieren jedoch auf der Verarbeitung von Zeichenfolgen (z. B. das hervorragende Beispiel für römische Dive Into Python-Zahlen), und da wir kaum Zeichenfolgen verwenden, ist dies nicht wirklich geeignet (was die einzigen Bibliotheksfunktionen betrifft, die in unserem Code normalerweise verwendet werden) sind memcpy
, memcmp
und memset
,strcat
oder reguläre Ausdrücke sind nicht ganz richtig).
Fahren Sie mit der Frage fort: Kann jemand einige gute Beispiele für Funktionen anbieten, mit denen ich Unit-Tests in einer Live-Sitzung demonstrieren kann? Eine gute Antwort nach meiner (vorbehaltlich Änderungen) Meinung wäre wahrscheinlich:
- Eine Funktion, die einfach genug ist, dass jeder (auch diejenigen, die nur gelegentlich Code schreiben) verstehen kann;
- Eine Funktion, die nicht sinnlos erscheint (dh das Ermitteln der Parität oder der CRC ist wahrscheinlich besser als eine Funktion, die zwei Zahlen miteinander multipliziert und eine Zufallskonstante hinzufügt);
- Eine Funktion, die kurz genug ist, um vor einem Raum von Menschen zu schreiben (ich kann die vielen Zwischenablagen von Vim nutzen, um Fehler zu reduzieren ...);
- Eine Funktion, die Zahlen, Arrays, Zeiger oder Strukturen als Parameter verwendet und etwas Ähnliches zurückgibt, anstatt Zeichenfolgen zu verarbeiten.
- Eine Funktion mit einem einfachen Fehler (z. B.
>
nicht>=
), der einfach einzufügen ist, funktioniert in den meisten Fällen noch, bricht jedoch mit einem bestimmten Randfall: Einfach zu identifizieren und mit einem Komponententest zu beheben.
Irgendwelche Gedanken?
Obwohl dies wahrscheinlich nicht relevant ist, werden die Tests selbst wahrscheinlich mit dem Google Test Framework in C ++ geschrieben: Alle unsere Header sind bereits mit dem #ifdef __cplusplus extern "C" {
Wrapper versehen. Dies hat mit den Tests, die ich bisher durchgeführt habe, gut funktioniert.