Ich habe eine Situation, in der ich Folgendes schreiben muss algunos Unit-Tests für einige Gerätetreiber für eingebettete Hardware. Der Code ist ziemlich alt und groß und hat leider nicht viele Tests. Im Moment ist die einzige Art von Tests, die möglich ist, das Betriebssystem vollständig zu kompilieren, es auf das Gerät zu laden, es in realen Szenarien zu verwenden und zu sagen, dass es funktioniert. Es gibt keine Möglichkeit, einzelne Komponenten zu testen.
Ich bin auf eine schöner Thread hier, der Unit-Tests für eingebettete Geräte diskutiert von dem ich viele Informationen erhalten habe. Ich möchte ein wenig spezifischer werden und fragen, ob jemand irgendwelche "Best Practices" für das Testen von Gerätetreibern in einem solchen Szenario kennt. Ich erwarte nicht, dass ich in der Lage sein werde, eines der Geräte zu simulieren, mit denen die fragliche Karte kommuniziert, und werde sie daher wahrscheinlich auf der tatsächlichen Hardware selbst testen müssen.
Auf diese Weise hoffe ich, Daten zur Testabdeckung für die Treiber zu erhalten und die Entwickler dazu zu bewegen, Tests zu schreiben, um die Abdeckung ihrer Treiber zu erhöhen.
Eine Möglichkeit, die mir einfällt, ist das Schreiben von eingebetteten Anwendungen, die auf dem Betriebssystem laufen und den Treibercode trainieren und dann die Ergebnisse zurück an das Test-Harness übermitteln. Das Gerät verfügt über eine Reihe von Schnittstellen, über die ich die Anwendung wahrscheinlich von meinem Test-PC aus steuern kann, um den Code zu üben.
Für weitere Vorschläge oder Erkenntnisse wären wir sehr dankbar.
Update: Auch wenn es vielleicht nicht die exakte Terminologie ist, meinte ich mit "Unit Testing" die Möglichkeit, Code zu testen/zu üben, ohne das gesamte Betriebssystem und die Treiber kompilieren und auf das Gerät laden zu müssen. Wenn ich das tun müsste, würde ich es Integrations-/Systemtests nennen.
Das Problem ist, dass die Hardware, die wir haben, begrenzt ist und oft von den Entwicklern benutzt wird, um Fehler zu beheben usw. Einen dedizierten Rechner zu haben, der mit dem Rechner verbunden ist, auf dem der CI-Server und die automatisierten Tests durchgeführt werden, könnte in diesem Stadium nicht in Frage kommen. Deshalb suche ich nach Möglichkeiten, den Treiber zu testen, ohne das ganze Ding tatsächlich zu bauen und auf das Gerät zu laden.
Zusammenfassung
Basierend auf den ausgezeichneten Antworten unten, denke ich, dass ein vernünftiger Weg, um das Problem zu nähern wäre, um Treiber-Funktionalität mit IOCTLs und dann schreiben Tests in den Anwendungsbereich des eingebetteten Geräts, um tatsächlich den Treiber-Code ausüben.
Es wäre auch sinnvoll, ein kleines Programm im Anwendungsbereich des Geräts zu haben, das eine API zur Verfügung stellt, die den Treiber über die serielle Schnittstelle oder den USB-Anschluss ansprechen kann, so dass der Kern des Einheitstests auf einem PC geschrieben werden kann, der mit der Hardware kommuniziert und den Test ausführt.
Wenn das Projekt erst am Anfang stünde, hätten wir meiner Meinung nach mehr Kontrolle über die Art und Weise, wie die Komponenten isoliert werden, so dass die Tests hauptsächlich auf PC-Ebene durchgeführt werden können. In Anbetracht der Tatsache, dass die Codierung bereits abgeschlossen ist und wir versuchen, das Testsystem und die Testfälle nachträglich in das System einzubauen, halte ich den oben beschriebenen Ansatz für praktischer.
Ich danke Ihnen allen für Ihre Antworten.