Frage

Hat jemand hatte Erfolg Tests direkt auf Embedded-Hardware zu automatisieren?

Insbesondere denke ich an eine Batterie von Unit-Tests für Hardware-Layer-Module automatisieren. Wir müssen mehr Vertrauen in unserer Hardware-Layer-Code. Viele unserer Projekte verwenden Interrupt-Timer, ADCs, seriellen io, serielle SPI-Geräte (Flash-Speicher) usw. angetrieben ..

Ist das auch die Mühe wert?

Wir haben das Ziel typisch:

Prozessor: 8 oder 16 Bit-Mikrocontroller (einige DSP Sachen)
Sprache: C (manchmal c ++).

War es hilfreich?

Lösung

Klar. In der Automobilindustrie nutzen wir $ 100.000 speziell angefertigten Tester für jedes neue Produkt die Hardware und die Software korrekt arbeiten zu überprüfen.

Die Entwickler jedoch bauen auch einen billigen (sub $ 1.000) Tester, der eine Reihe von USB enthält I / O, A / D, PWM-in / out, etc. und entweder Verwendung Scripting auf der Workstation oder Zweckbau HIL / SIL-Test-Software wie MxVDev.

Hardware in the Loop (HIL) Test ist wahrscheinlich das, was Sie meinen, und es geht einfach einige USB-Hardware-I / O an die I / O des Geräts verbunden ist, mit Software auf dem Computer-Tests gegen sie ausgeführt wird.

Ob es sich lohnt, es hängt davon ab.

In der hohen Zuverlässigkeit der Industrie (Flugzeug, Automobil, etc.) Der Kunde gibt sehr umfangreiche Hardware-Tests, so dass Sie sie haben nur das Angebot zu erhalten.

In der Konsumgüterindustrie, mit nicht komplexen Projekten ist es meist nicht wert.

Mit jedem Projekt, wo es mehr als ein paar Programmierer beteiligt, obwohl, ist es wirklich schön, einen nächtlichen Regressionstestlauf auf der Hardware zu haben - es ist schwer, die Hardware auf den Grad richtig simulieren mußte überzeugen Sie sich, dass die Software-Testen ist genug.

Die Prüfung zeigt dann sofort, wenn ein Problem das Build eingegeben hat.

Im Allgemeinen führen Sie beide Black Box und White-Box-Test - Sie Diagnosecode auf dem Gerät ausgeführt, die Sie auf Signale und Speicher in der Hardware auszuspionieren ermöglicht (was nur ein Debugger sein könnte, oder könnte Code sein, das Sie schrieb, dass reagiert In den Nachrichten auf einem Bus, zum Beispiel). Dies würde White-Box-Tests, wo man sehen kann, was intern passiert (und sogar einige Dinge verursachen passieren, wie kritische Speicherfehler, die nicht ohne die Einführung der Fehler getestet werden können, sich selbst).

Wir haben auch eine Reihe von ‚Black Box‘ Tests durchführen, wo der Diagnosepfad ignoriert und nur die E / A stimuliert / lesen.

Für einen viel billiger Setup können Sie $ 100 Mikrocontroller-Boards mit USB und / oder Ethernet (wie die Atmel UC3-Familie) erhalten, die Sie mit Ihrem Gerät verbinden können und grundlegende Tests ausgeführt werden.

Es ist besonders nützlich für die Produktpflege - wenn das Projekt abgeschlossen ist, speichert einige Arbeitsplatten, den Tester und einen kompletten Satz von Software auf CD. Wenn Sie eine Änderung vornehmen müssen oder ein Problem zu debuggen, ist es einfach alles wieder bis zu setzen und mit Vorkenntnissen daran arbeitet (nach der Prüfung), dass die Hauptfunktionalität nicht von Änderungen betroffen war.

-Adam

Andere Tipps

Ja. Ich habe Erfolg gehabt, aber es ist kein stragiht-forward Problem zu lösen. Auf den Punkt gebracht ist hier, was mein Team hat:

  1. eine Vielzahl von Unit-Tests definiert eine Eigenbau-C Unit-Testing Framework. Im Grunde genommen nur eine Menge von Makros, von denen die meisten TEST_EQUAL genannt wurden, TEST_BITSET, TEST_BITVLR, etc.

  2. Schrieb einen Boot-Code-Generator, der diese kompilierten Tests nahm und orchestriert sie in einer Ausführungsumgebung. Es ist nur ein kleiner Fahrer, dass unsere normale Startroutine ausführt - aber statt in den Regelkreis geht, führt er eine Testsuite. Wenn Sie fertig sind, speichert es die letzte Suite im Flash-Speicher laufen, dann setzt er die CPU. Es wird dann dann nächste Suite laufen. Dies ist Isolation bereitzustellen einhüllen eine Suite stirbt. (Allerdings Sie kann dies deaktivieren, um sicherzustellen, dass Ihre Module zusammenarbeiten. Aber das ist ein Integrationstest, kein Unit-Test).

  3. Einzeltests würden ihre Ausgabe protokollieren die serielle Schnittstelle. Das war in Ordnung für unser Design, da die serielle Schnittstelle frei war. Sie müssen einen Weg finden, um Ihre Ergebnisse zu speichern, wenn alle IO verbraucht wird.

Es hat funktioniert! Und es war toll zu haben. Mit unserem benutzerdefinierten Datenlogger, können Sie den „Test“ Knopf drücken, und ein paar Minuten später, würden Sie alle Ergebnisse haben. Ich empfehle es sehr.

Aktualisiert zu klären, wie die Testfahrer funktioniert.

Ja.

Die Schwierigkeit hängt von der Art der Hardware, die Sie zu testen versuchen. Wie andere gesagt haben früher die Frage wird die Komplexität des externen Stimulus sein, die Sie anwenden müssen. Äußeren Reiz ist wahrscheinlich am besten mit einem externen Prüfstand erreicht (wie Adam Davis beschrieben).

Eine Sache zu prüfen, obwohl, ist genau , was es ist, dass man, um zu überprüfen versuchen.

Es ist verlockend, anzunehmen, dass die Interaktion der Hardware zu überprüfen und die Firmware dann haben Sie wirklich keine andere Wahl, sondern direkt externen Stimulus anzuwenden (dh. DACs, um alle Ihre ADC-Eingänge Anwendung, etc.). In diesen Fällen können die Ecke Fällen aber, dass Sie wirklich testen wollen, gehen zu sein, oft unter Fragen der Zeitlage (z. B. unterbricht ankommen, wenn Sie Funktion foo sind Ausführung ()), die unglaublich schwierig sein werden zu testen eine sinnvolle Art und Weise - und noch schwerer, aussagekräftige Ergebnisse aus zu bekommen. (Dh. Die erste 100K mal liefen wir diesen Test war es in Ordnung. Das letzte Mal, dass wir es liefen es gescheitert. Warum?!?)

Aber die Überprüfung der Hardware sollte separat erfolgen. Sobald dies geschehen ist, es sei denn, es (durch herunterladbare fpga Bilder oder dergleichen) regelmäßig ändert sich dann sollten Sie davon ausgehen können, dass die Hardware funktioniert und rein Firmware testen.

Also in diesem Fall, dass Sie auf die Überprüfung der Algorithmen konzentrieren können, die für die Bearbeitung Ihrer externen stimulii verwendet werden. Zum Beispiel ruft Ihre ADC Konvertierungsroutinen mit einem festen Wert, als ob sie von Ihrem ADC direkt kamen. Diese Tests sind wiederholbar und daher von Vorteil. Sie erfordern spezielle Test baut aber.

die Kommunikationswege des Geräts Testen wird relativ einfach sein und sollte nicht erfordern spezielle Code erstellt.

Wir haben mit automatisierten Tests auf unseren Embedded-Systemen gute Ergebnisse haben. Wir haben Test in hohem Niveau geschrieben (einfach zu programmieren und zu debuggen) Sprachen, die auf dedizierte Testmaschinen laufen. Diese Tests im Allgemeinen tun geistige Gesundheit Überprüfung oder erzeugen zufällige Eingaben in die Geräte, dann überprüfen Sie für das richtige Verhalten. Es gibt eine Menge Arbeit zu generieren und diese Tests aufrechtzuerhalten. Wir haben einen Rahmen und dann lassen Praktikanten auf die Tests arbeiten selbst.

Es ist keine perfekte Lösung, und die Tests sind sicherlich anfällig für Fehler, aber der wichtigste Teil ist auf der bestehenden Versorgungslöcher zu verbessern. Hier finden Sie das größte Loch und Design etwas bedecken sie in einer automatisierten Art und Weise, auch wenn es nicht perfekt ist oder nicht die gesamte Funktion abzudecken. Später, wenn alle Ihre Sachen etwas bedeckt ist, können Sie zurückkommen und adressieren die schlechteste Abdeckung oder die kritischsten Funktionen.

Einige Dinge zu beachten:

  • Was ist die Strafe eines Firmware-Bug? Wie einfacher ist es, Firmware im Feld zu aktualisieren.
  • Welche Art von Deckung Sie meinen Test zur Verfügung stellen? Ist es eine einfache Plausibilitätsprüfung? Ist es konfigurierbar genug, dass es viele verschiedene Szenarien testen kann?
  • Sobald ein Test nicht bestanden hat, wie werden Sie diesen Wert, um zu debuggen es reproduzieren? Haben Sie sich alle Geräte- und Testeinstellungen, so dass Sie so viele Variablen wie möglich beseitigen? Geräte-Konfiguration, Firmware-Version, Test-Software-Version, alle externen Eingänge, alle beobachteten Verhalten?
  • Was testen Sie gegen? Ist die Spezifikation klar genug auf das, was das erwartete Verhalten des Geräts Sie testen oder validieren Sie gegen das, was denken Sie, sollte der Code tun?

Wenn Ihr Ziel ist, Low-Level-Treiber-Code zu testen, müssen Sie wahrscheinlich eine Art Testvorrichtung zu schaffen, Loopback-Kabel verwenden oder mehrere miteinander verbundene Einheiten, damit Sie jeden Fahrer trainieren. ein Brett mit bekannten-gute Software mit einem Brett Paarung eine Entwicklung bauen laufen können Sie für Regressionen in Kommunikationsprotokolle testen, etc.

Spezielle Teststrategien hängen von der Hardware, die Sie testen möchten. Zum Beispiel kann ADCs durch die Vorlage eine bekannte Wellenform und Umwandlung eine Reihe von Proben getestet werden, dann für den richtigen Bereich Überprüfung, Frequenz, Mittelwert, etc.

Ich habe diese Art von Tests gefunden in der Vergangenheit als sehr wertvoll zu sein, so dass ich sicher ändern und Treibercode, ohne Angst zu brechen bestehende Anwendungen zu verbessern.

Ja, das tue ich dies, obwohl ich immer eine serielle Schnittstelle für Test-I / O hatte.

Es ist häufig schwierig, die Einheit zu verlassen total unverändert. Einige Tests erfordern eine Zeile auf Kommentar oder einen Anruf hinzugefügt z.B. mit einem Watchdog befassen.

IMHO, das ist besser als gar keine Unit-Tests überhaupt. Und natürlich müssen Sie die vollständigen Integration / Systemtests zu tun, auch.

Unit-Tests Projekte eingebettet ganz diffucult ist, wie es in der Regel einen externen Stimulus und externen measurment erfordert.

Wir haben ein externes serielles Protokoll in der Entwicklung (entweder RS232- oder UDP- oder tcpip Nachrichten) mit grundlegenden Befehlen für die Ausübung des hw mit Debug-Protokollierung in den niedrigen Leveln-Treiber suchen fehlerhafte Bedingungen oder sogar leicht anormale Bedingungen (espcially für Grenze erfolgreich Überprüfung)

Aber einmal entwickelten wir können dann die Tests laufen nach jedem bei Bedarf bauen. Es wird auf jeden Fall ermöglicht es Ihnen, ein besseres Qualitätsprodukt zu liefern.

Ich weiß, das alte ist jetzt, aber vielleicht wird es helfen. Ja, Sie können es tun, aber es hängt davon ab, wie viel Sie in der Lösung, die Sie investieren möchten. Mehr als zwei Jahre habe ich auf Test und Validierung für die MCAL Schicht von AUTOSAR gearbeitet. Dies ist eine Art der niedrigsten Sie bekommen können, wenn es um Software-Test kommt. Es war eine Art von Komponentenebene Tests. Manche mögen es Unit-Ebene nennen, aber es war etwas höher als das, weil wir die APIs der MCAL Komponenten Testen wurden. Dinge wie:. ADC, SPI, ICU, DIO und so weiter

Die verwendete Lösung beteiligt: - ein Test-Framework, das auf dem Zielmikro ausgeführt wurde - ein dSPACE Kasten zu schaffen und Signale zu und von dem Ziel zu lesen, wenn erforderlich - XCP Zugang durch Vector CANape auszulösen die Testdurchführung und Ergebnisse Sammlung - ein Python-Framework die Testkontrolle und Validierung der Ergebnisse durchführen

Die Testfälle wurden in C geschrieben und sie wurden zusammen mit der zu testende Software auf dem Ziel geflasht. Es war ein Black-Box-Test, da wir keine Möglichkeit, die Umsetzung der MCAL ändern in haben. Und ich glaube, nicht einmal die Startreihenfolge berührt wurde. Ein Leerlauf-Task verwendet wurde kontinuierlich den Zustand einer Flag zu überprüfen, dass das Signal war zu starten einen Test auszuführen. Eine 10 ms wurde Aufgabe verwendet, um tatsächlich den Test ausführen. Ein Testfall war in der Tat ein Schaltergehäuse. Jeder Fall in diesem Schalter war ein Testschritt. Python wurde das Auslösen der Testausführung bei dem Testschritt Ebene. Eine gute Sache mit diesem Ansatz war die Wiederverwendung von Schritten mit unterschiedlichen Parametern. Diese Testkontrolle, was die Ausführung und wie wurde durch Python durch eine Teststeuerdatenstruktur, die als eine API zwischen der Testdurchführung und der Testauslösung und Bewertungsmechanismus erfolgen. Dies ist, was CANape wurde verwendet für. So stellen Sie den Test ausgeführt werden und die Ergebnisse des Tests zu lesen. Jeder Wert, der durch einen Testschritt erhalten wurde, in einem Array-Teil der Datenstruktur gespeichert. Der Prüfschritt selbst war in jeder Validierung nicht beteiligt, weil das Ziel eines nicht vertrauens Lage Bestandteil der Testumgebung betrachtet wurde. Die Validierung wurde von Python getan auf der Grundlage der Testspezifikationen. Python wurde diese Spezifikationen Parsen und war in der Lage, automatisch Testauslöse Skripte einschließlich der Validierungskriterien für jeden Prüfschritt zu erstellen. Die Spezifikation eines jeden Testfall war eine Reihe von Testbeschreibungen Schritte mit ihren Validierungskriterien zusammen. Einige dieser Schritte waren dSPACE erforderlichen Schritte. Als Beispiel wurde ein Schritt der Initialisierung etwas und war für einige Erfassung einige Kanten auf einem bereits konfigurierten Kanal fordern, und der nächste Schritt auf diesem Kanal Das Signal wurde durch die Anwendung Anweisen des dSPACE Ausrüstung.

Eine billigere Lösung würde bedeuten, ein hauseigenes Board anstelle der dSPACE Ausrüstung. Zu einem gewissen Grad auch ein programmierbarer Signalgenerator verwendet werden kann, aber das würde nicht helfen, wenn Sie Signale Ausgabe-ed durch das Ziel bestätigen müssen.

Wenn Ihr Ziel-Test ist für die Produktion (um sicherzustellen, dass die Module richtig montiert sind, keine versehentlichen Kurzschlüsse / öffnet / etc), sollten Sie zunächst auf Test Kabel und Anschlüsse konzentrieren, gefolgt von gesockelt und Lötverbindungen, dann die Platine selbst. Diese Elemente können alle für kurze Hosen werden getestet und öffnet sich durch Zugriffsmuster zu finden, die jede einzelne Linie hoch fahren, während seine Nachbarn sind niedrig und umgekehrt, dann die Werte Zeilen lesen zurück.

Ohne weitere Details Ihrer Hardware zu wissen, es schwierig ist, um genauer zu sein, aber die meisten Embedded-Prozessoren können I / O-Pins zu einem GPIO-Modus eingestellt, die diese Art von Tests vereinfacht.

Wenn Sie nicht Bett-Nägel Testen auf PKA durchführen, soll diese Prüfung einen obligatorischen ersten Schritt bei neu hergestellten Brettern berücksichtigt werden.

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