Die Entwicklung der Applikations-Software für Industriesteuerungen ähnelt zunehmend der Software-Entwicklung für PC-Anwendungen. Informatiker entwickeln solche Anwendungen meist nach einem bewährten Vorgehensmodell wie etwa dem V-Modell. Darin wird der Entwicklungsprozess in Phasen eingeteilt, deren Ergebnis nach Abschluss der Entwicklung durch Tests verifiziert wird. Um diese Vorgehensweise zu unterstützen, stehen für Hochsprachen-Entwicklungssysteme zahlreiche Zusatz-Tools zur Verfügung. Warum sollten nicht auch Automatisierer von solchen Angeboten profitieren?
Im Gegensatz zur Software-Entwicklung mit Hochsprachen gab es bislang kein toolgeführtes Angebot für SPS-Programmierer, die Steuerungsapplikationen in den Sprachen der IEC 61131-3 erstellen. Das bedeutet, dass die erforderlichen Tests entsprechend den Phasen des Vorgehensmodells manuell durchgeführt werden müssen. Manuelles Testen ist jedoch zeitaufwändig und fehlerträchtig. Codesys-Hersteller 3S-Smart Software Solutions schließt mit dem Codesys Test Manager genau diese Lücke. Das Zusatz-Tool lässt sich nahtlos im IEC61131-3-Entwicklungssystem integrieren.
Einführung in die Testautomation
Gemäß dem V-Modell gibt es zwei grundsätzliche Anwendungsszenarien beim Testen der IEC61131-3-Applikationen:
Einerseits die Integrations- und System- oder Regressionstests für kontinuierliche Software-Prüfung parallel zur Weiterentwicklung des Projekts.
Andererseits die Unit-Tests für die implementierten abgeschlossenen Einheiten des SPS-Programms.
Der Codesys Test Manager unterstützt beide Szenarien – gegebenenfalls können sie miteinander kombiniert werden. Die meisten der grundsätzlichen Eigenschaften des Test Managers sind für beide Anwendungsszenarien anwendbar.
Alle Tests werden zu sogenannten Testskripten zusammengefasst. Die Verwaltung dieser Skripte erfolgt vom Zusatztool aus in einem Test Repository, einer Art Testdatenbank, die vom Codesys Development System auf der Festplatte des Arbeitsplatzes verwaltet wird. Zum vereinfachten Handling der Testskripte hat der Anwender die Möglichkeit, gleichzeitig mehrere Repositories anzulegen und zu verwalten. So kann er zum Beispiel verschiedene Steuerungsapplikationen eindeutig voneinander trennen und für jede Applikation einen vollständigen Satz von spezifischen Skripten komplett durchlaufen.
Ein Testskript selbst besteht seinerseits aus einer Reihe von Testfällen. In jedem Testfall wird typischerweise ein zu untersuchender Aspekt der Steuerungsapplikation getestet. Dazu sind in jedem Testfall meist mehrere Testaktionen hinterlegt, die damit den eigentlichen Test darstellen. Die Befehle sind in verschiedenen Kommandogruppen zusammengefasst. Sie enthalten Kommandos zur Auswahl von Steuerungen oder Gateways, Befehle zum Öffnen oder Schließen von Projekten, Onlinebefehle beispielsweise zum Starten oder Stoppen der Applikation, Befehle zum Online-Zugriff auf Variablen wie Lesen/Schreiben/Werte vergleichen. Darüber hinaus stehen tiefergehende Systemkommandos bereit, mit denen Objekte erzeugt, gelöscht oder verändert, Bibliotheken hinzugefügt oder entfernt, Zeiten gemessen oder sogar Python-Skripts ausgeführt werden können.
Nach Abschluss des Tests wird in jedem Fall ein Testreport ausgegeben, in dem neben Basisinformationen zum Projekt und Tester sämtliche korrekt oder fehlerhaft durchlaufenen Testfälle aufgelistet werden. Dieser Testreport wird im Rahmen des Testrepositories verwaltet, kann aber auch per XML/HTML exportiert werden. Bei Bedarf stehen spezielle Kommandos bereit, um Zusatzinformationen wie weitergehende Projektinformationen im Testreport zu vermerken. Die Ergebnisse des Tests können zur internen Dokumentation beziehungsweise für eine Abnahme der Maschine durch eine Zertifizierungsstelle verwendet werden. Für größere Projekte werden mit den genannten Methoden mehrere Testskripte für unterschiedliche Phasen des Vorgehensmodells angelegt und nacheinander abgearbeitet.
Testdurchführung
Nach dem Start eines automatisierten Tests wird mit geeigneten Testaktionen das zu testende Projekt zunächst vorbereitet und mit entsprechenden Parametern auf die Steuerung geladen. Sinnvollerweise geschieht das in einem eigenen Testfall. Der Test selbst erfolgt durch gezieltes Schreiben und Lesen von Variablenwerten sowie deren Vergleich mit Vorgaben. Entspricht das erwartete Ergebnis nicht der Vorgabe, so wird der Testlauf entweder abgebrochen oder so konfiguriert, dass nachfolgende Testfälle und -kommandos dennoch abgearbeitet werden.
Je nach Testtyp wird sich die nachfolgende Vorgehensweise unterscheiden. Für Integrations-, Regressions- oder Systemtests bedient das integrierte Test-Tool die Funktionen des Entwicklungssystems über die Monitoring-Schnittstelle und führt die Testskripte aus. Oder anders formuliert: Das mit Hilfe von Dialogen im Tool aufgebaute Testskript ersetzt die manuelle Ausführung der einzelnen Kommandos. Die Applikation läuft dabei auf der Steuerung, die Ausführung der Testfälle und -aktionen erfolgt jedoch nicht in Echtzeit. Bei Bedarf kann der Anwender die Fortschritte in einem Zusatzfenster überwachen und gegebenenfalls den Test abbrechen.
Für Unit-Tests erstellt der Anwender einen speziellen Testcode in den Sprachen der IEC 61131-3, der ausschließlich zum Testen beispielsweise eines Funktionsbausteins zum Einsatz kommt. Abgelegt wird dieser Code in eigens dafür angelegten Programmbausteinen innerhalb des Projekts, die mit speziellen Steuerkommandos (Pragmata) als reine Testroutine gekennzeichnet sind. Sie werden nicht in die finale Applikation geladen und verändern daher deren Laufzeitverhalten nicht.
Beim Durchlaufen eines Unit-Tests durch Aufruf in einem Testfall durchsucht der Codesys Test Manager das gesamte Projekt nach solchen Testbausteinen, legt eigens für den Test eine neue Applikation innerhalb des Projekts an und führt die zu testenden Bausteine direkt auf der Steuerung aus. In diesem Fall werden die ausprogrammierten Testaktionen im Kontext der SPS-Applikation und damit in Echtzeit abgearbeitet. Über eine Kommandierungsschnittstelle mit festgelegter Rückgabevariable innerhalb des Testcodes meldet das System den erfolgreichen Test beziehungsweise einen Fehler. Die Ergebnisse der Unit-Tests werden ebenfalls im Testreport dokumentiert. Dabei entspricht jeder Testbaustein einem Testfall.
Minimaler Testaufwand
Der Codesys Test Manager als kostenpflichtiges Zusatz-Tool zum Codesys Development System ist bereits bei zahlreichen Geräteherstellern und Maschinenbauern zur Qualitätssicherung im Einsatz. Ziel ist es, durch Testreports die fehlerfreie Abarbeitung zu bescheinigen und damit das Gesamtsystem freigeben zu können – und das bei minimalem manuellem Testaufwand. Zwar ist die Entwicklung der Skripte initial eine nicht unbeträchtliche Arbeit, diese zahlt sich aber bereits nach wenigen wiederverwendeten Testfällen aus.