Frage

Was gute Praktiken und Strategien gibt es für Regressionstests in eingebetteten Umgebungen ausgeführt werden oder in anderen Situationen, in denen die Möglichkeit, Tests zu automatisieren sehr begrenzt ist.

Nach meiner Erfahrung viele der Tests durchgeführt werden muss manuell das heißt ein Tester muss eine Folge von Tasten drücken und überprüfen, ob die Maschine korrekt verhält. Als Entwickler ist es wirklich schwer, sich zu versichern, dass die Änderungen nicht brechen etwas anderes.

Ohne die richtigen Regressionstests die Situation wird noch schlimmer, während große Refactorings und so weiter.

Hat jemand das Problem erkennen? Haben Sie eine gute Lösung oder Verfahren finden, mit dieser Art von Problem umgehen?

War es hilfreich?

Lösung

Ich persönlich bin ein großer Fan meinen eingebetteten Code mit beide kompiliert auf die Zielhardware und meinen eigenen Computer. Wenn zum Beispiel eines 8086-Targeting, eingeschlossen ich einen sowohl Einstiegspunkt, der auf der 8086-Hardware und ein DOS Einstiegspunkt zurücksetzen abbildet. Die Hardware wurde so konzipiert, alle IO wurde Speicher gemappt. Ich habe dann bedingt in einem Hardware-Simulator erstellt und geändert bedingt die Hardware-Speicherplatz auf simulierten Hardware-Speicher.

Wenn ich auf einer nicht-x86-Plattform arbeiten, würde ich wahrscheinlich stattdessen einen Emulator schreiben.

Ein weiterer Ansatz ist es, einen Prüfstand zu schaffen, in der alle Ein- und Ausgängen für die Hardware durch Software gesteuert. Wir verwenden diese viel in der Fabrik Tests.

Eine Zeit, die wir einen Simulator in die IO-Hardware integriert. So kann der Rest des Systems durch das Senden einig Befehle über CAN getestet werden, könnte die Hardware in simuliertem Modus zu schalten. Ebenso gut einkalkuliert Software einen „simulierten Modus“ haben könnte, wo die IO in Reaktion auf Software-Befehle simuliert wird.

Andere Tipps

Für Embedded-Tests, ich würde vorschlagen, dass Sie entwerfen Sie Ihre Möglichkeit, dies aus sehr früh im Entwicklungsprozess. Ihre eingebetteten Code Sandbox auf einer PC-Plattform laufen hilft viel, und dann danach :)

Sie spöttisch

Dies wird integrety für die meisten es gewährleisten, aber Sie würden immer noch System und Akzeptanz tun müssen manuell später testen.

  

Hat jemand das Problem erkennen?

auf jeden Fall Most.

  

Haben Sie eine gute Lösung finden oder   Verfahren dieser Art zu behandeln von   Problem?

Eine Kombination von Techniken:

  • Automatisierte Tests;
  • Brute-Force-Tests, das heißt solche, die als automatisierte Tests nicht so intelligent sind, die aber testen immer wieder eine Funktion über einen langen Zeitraum (Stunden oder Tage) und kann ohne menschliches Eingreifen laufen gelassen werden;
  • Manuelle Tests (oft schwer zu vermeiden);
  • Prüfung auf einem Software-Emulator auf einem PC (oder als letztes Mittel, ein Hardware-Emulator).

Im Hinblick auf einem PC-Compiler zu kompilieren., Die durchaus Sinn für High-Level-Module machen würden, und für Low-Level-Module mit einem Test geeignet Baum

Wenn es darum geht, zum Beispiel Teile des Codes, die mit Echtzeitsignalen von mehreren Quellen zu tun haben, Emulation ist ein guter Anfang, aber ich glaube nicht, es ist ausreichend. Oft gibt es keinen Ersatz für die Prüfung des Code auf der tatsächlichen Hardware, in so realistisch eine Umgebung wie möglich.

Im Gegensatz zu den meisten Responder so weit, ich arbeite mit eingebetteten Umgebungen, die keine Desktop-Systeme überhaupt ähneln und daher können die Embedded-System auf dem Desktop nicht emulieren.

Um ein guten Testsysteme zu schreiben, müssen Sie Ihr Testsystem Vor und Feedback. JTAG ist der häufigste Feedforward-Weg, um das Gerät zu steuern. Sie können den vollständigen Zustand des Gerätes eingestellt (vielleicht sogar das gesamte Board, wenn man Glück hat) und dann den Test-Code auszuführen. An welcher Stelle Sie Ihr Feedback. JTAG kann auch als Rückkopplungseinrichtung dienen. Allerdings ist ein Logikanalysator mit einem Software-API die beste in dieser Situation. Sie können auf Stifte sucht bestimmte Ebenen, Impulse zählen und sogar Datenströme von Streaming-Peripheriegeräte analysieren.

Geben Sie Test Geschirre / Sandkästen / Mockups für einzelne Subsysteme und für das gesamte Projekt, das die Zielumgebung zu emulieren.

Dies ist nicht die Notwendigkeit für Tests in der realen Umgebung zu entfernen, aber stark reduziert ihre Zahl als die Simulation der meisten Probleme fangen wird so durch die Zeit, sie alle passieren und Sie führen den teueren menschlichen getriebene Test Sie einigermaßen sicher sind, werden Sie passieren, dass die erste Zeit.

Neben den Vorschlägen bisher über Ihre App gewährleisten können bauen und zumindest teilweise zu testen, auf normalen PCs (die auch nützlich ist für mit Tools wie Valgrind) Ich würde denken Sie über Ihre Software-Design.

Ein Projekt arbeitete ich hatte auf eine Komponente für die Hardware-Fahren, ein für Managementaufgaben und eine andere Netzwerk-Managements. Das Netzwerkmanagement wurde von SNMP behandelt und so war es einfach zu schreiben Skripte, die remote lief die Hardware zu fahren, etwas zu tun.

Um die geringen Hardware-Tests zu laufen habe ich einen einfachen Skript Leser dass analysierten Testskripte und injiziert Befehle in die IPC meiner Treiber. Da der Ausgang wurde videobasierte war es schwer, das zu automatisieren Überprüfung der Umgang mit anderen als mit dem Auge, aber es sicherlich gerettet me RSI. Es war auch sehr nützlich in Skripten, dass Stress zu erzeugen getestet oder bekannte Fehlerbedingungen simuliert Bugs, um sicherzustellen, hat nicht wieder auftreten.

Wenn ich es zu tun alle immer wieder, wo würde ich wahrscheinlich eine gemeinsame Umsetzung Bibliothek von Test-Harnisch und dem realen Code verwendet, um den Kern zu senden Mitteilungen. Ich würde dann die lib in Python einpacken (oder etwas ähnlich), so könnten meine Tests „skriptfähige“ etwas mehr sein.

ich mit jedem zustimmen, der sagt, automatisierte Hardware ist ein Muss - wir diesen Ansatz verwenden mit einigen unseren Einheiten Embedded-Software zu testen. Wir haben große Zwei-Rack Prüfstationen voller Hardwaresimulatoren aufgebaut und wir verwenden NI Teststand mit einer Mischung aus Labview VIs, C # -Code, Anbieter DLLs, etc, alles zu verwalten. Wir haben eine Menge Hardware zu testen - das ist, warum wir alle diesen Mist haben. Wenn Sie testen Software nur dann können Sie es skalieren auf das Wesentliche zurück. Testen eine serielle Schnittstelle? baut nur ein Gerät den seriellen Datenverkehr zu simulieren und alle Nachrichten (und ein paar nicht-gültigen Nachrichten) übt die Software richtig reagiert zu gewährleisten. Testing DIO? Das ist einfach es gibt viele USB-Geräte oder eingebettete Geräte zu DIO zu simulieren. Wenn das Timing wichtig ist, werden Sie ein anderes Embedded-Gerät zu bekommen, die enge Toleranzen verwenden müssen Sie suchen, sonst ein PC nur gut tun wird.

Der wichtigste Teil ist immer wissen, was Sie testen und nichts anderes als das zu testen. Wenn es Software ist, stellen Sie sicher, dass der Test möglich die Hardware auf den größten Grad unabhängig ist. Wenn Sie Wellenformerzeugung oder etwas mit einem D / A-Prüfung sind, trennen Sie die Aufgaben aus - testen Sie die D / A-Hardware mit einem speziellen Build von Software auf dem Embedded-Gerät, das nichts tut Phantasie außer ausspucken eine verabredeten Folge von Spannungspegel. Dann können Sie sehen, ob Ihre Referenzen sind aus, wenn Ihr Filter auf die falsche Frequenz eingestellt wird, usw. Dann sollten Sie die Software unabhängig von der Hardware testen können - ein Entwicklungsboard verwenden, um die Software zu testen und Verhalten am Prozessor überprüfen Pins korrekt ist.

Eine Lösung im Einsatz, wo ich automatisiert arbeiten nächtlichen bauen und Testverfahren.

  1. Überprüfen Sie Stamm Kopf Code aus der Quellcodeverwaltung aus.
  2. Build-Projekt und lädt auf Ziel.
  3. Ausführen PC gesteuerte automatisierte Testskripts.

Die Testskripte sind einfach zu laufen, wenn Sie irgendeine Art von Kommunikationsprotokoll verwenden. Das ist gut für die internen Unit-Tests. Was die Situation noch interessanter macht (und gründliche) ist ein Kabelbaum zu machen, die in die Platine Stecker externe IO zu simulieren.

Emulating ist gut für die Entwicklung und die grundlegenden erste Tests, aber reale physische Betriebszeit ist die einzige zuverlässige Methode zur Systemvalidierung. Physikalischer Betrieb kann Nicht-Code Probleme aufstöbern (verursacht durch Codierverfahren) wie Spannungseinbrüche, Lärm, Pannen, debounce Probleme, Rennbedingungen, etc.

Längerer Systemtest ist ebenso wichtig. Einrichten eines automatisierten Test ein System kontinuierlich für Tage / Wochen zu missbrauchen ist gerade eine gute Möglichkeit, Fragen zu erzwingen, die nicht erst einige Monate später auf dem Gebiet auftauchen können. einen Kunden Telling Zyklus Macht nur, wenn die Dinge handeln beginnen lustig ist kein Luxus, dass alle Branchen unterhalten können.

Nach meiner Erfahrung, automatisierte Hardware-Tests hat sich kritisch. - Investitionen in Dual-Compilation in beide PC & Ziel ist eine Funktion „nice to have“, aber die Wahl hat, würde ich viel lieber in automatisierten Hardware-Tests investieren. Es wird eine kosteneffektive Lösung am Ende sein, da die Herstellungs Arme die Fähigkeit sowieso für die Fehleranalyse wollen / müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top