Software Engineering in der Praxis - National Instruments Germany ...
Software Engineering in der Praxis - National Instruments Germany ...
Software Engineering in der Praxis - National Instruments Germany ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>Software</strong> <strong>Eng<strong>in</strong>eer<strong>in</strong>g</strong> <strong>in</strong> <strong>der</strong> <strong>Praxis</strong> –<br />
Werkzeuge für optimierte LabVIEW-<br />
Entwicklung<br />
Abb.: Die grafische Entwicklungsumgebung NI LabVIEW<br />
Kundenzitat:<br />
"NI bietet im Umfeld von LabVIEW mittlerweile e<strong>in</strong>e Vielzahl von Möglichkeiten, die die<br />
Entwicklung im Team und die E<strong>in</strong>haltung von Qualitätsstandards ermöglichen."<br />
– Taubert Helge, Zühlke <strong>Eng<strong>in</strong>eer<strong>in</strong>g</strong> GmbH<br />
Die Aufgabe:<br />
Anwendung von Best Practices bei <strong>der</strong> Entwicklung mit LabVIEW<br />
Die Lösung:<br />
Betrachtet werden die Aspekte Requirements Management, Versionsverwaltung, Unit- und<br />
Systemtests, statische und dynamische Code-Analyse und die Build-Automatisierung.<br />
Autor(en):<br />
Taubert Helge - Zühlke <strong>Eng<strong>in</strong>eer<strong>in</strong>g</strong> GmbH<br />
ni.com/de
Kurzfassung<br />
<strong>Software</strong> <strong>Eng<strong>in</strong>eer<strong>in</strong>g</strong> <strong>in</strong> klassischen <strong>Software</strong>entwicklungsprojekten – ohne den E<strong>in</strong>satz von<br />
LabVIEW – be<strong>in</strong>haltet die Anwendung von Best Practices, die die Qualität <strong>der</strong> entwickelten<br />
<strong>Software</strong> sicherstellen und die Entwicklung im Team überhaupt erst möglich machen. Dieser<br />
Artikel beleuchtet, wie sich e<strong>in</strong>ige dieser Best Practices bei <strong>der</strong> Entwicklung mit LabVIEW<br />
umsetzen lassen. Betrachtet werden die Aspekte Requirements Management,<br />
Versionsverwaltung, Unit- und Systemtests, statische und dynamische Code-Analyse und die<br />
Build-Automatisierung.<br />
Requirements Management und Traceability<br />
Mit dem Requirements Gateway existiert e<strong>in</strong> Werkzeug zur Verknüpfung <strong>der</strong> Anfor<strong>der</strong>ungen<br />
mit Implementierung und Test. Als Quellen für Anfor<strong>der</strong>ungen werden diverse verbreitete<br />
Requirements Management Tools als auch e<strong>in</strong>fache Varianten auf Dokumentenbasis<br />
unterstützt. Bei entsprechen<strong>der</strong> Verl<strong>in</strong>kung <strong>der</strong> Anfor<strong>der</strong>ungen <strong>in</strong> den LabVIEW-VIs und<br />
Testfällen s<strong>in</strong>d mit dem Requirements Gateway Coverage und Impact-Analysen möglich. Die<br />
Ergebnisse können visualisiert und als Report exportiert werden.<br />
Versionsmanagement<br />
Grundsätzlich gibt es zwei Ansätze, Versionsmanagement mit LabVIEW zu betreiben:<br />
<strong>in</strong>tegriert <strong>in</strong> LabVIEW über e<strong>in</strong>en Source-Control-Provi<strong>der</strong> o<strong>der</strong> unabhängig von LabVIEW<br />
auf Dateibasis mit e<strong>in</strong>em beliebigen Versionierungssystem. Im <strong>in</strong>tegrierten Fall hängt die<br />
Verwendbarkeit im Alltag stark davon ab, welche Möglichkeiten <strong>der</strong> Souce-Control-Provi<strong>der</strong><br />
bietet. Hier kann es zu erheblichen E<strong>in</strong>schränkungen <strong>der</strong> Möglichkeiten gegenüber e<strong>in</strong>er<br />
nativen Nutzung des jeweiligen Versionskontrollsystems kommen. Ebenso muss häufig die<br />
Arbeitsweise des Teams an die Möglichkeiten des Source-Control-Provi<strong>der</strong>s angepasst<br />
werden, da diese häufig kaum E<strong>in</strong>stellmöglichkeiten bieten. Im aktiven E<strong>in</strong>satz s<strong>in</strong>d bei<br />
manchen Source-Control-Provi<strong>der</strong>n Inkonsistenzen bezüglich des Source Control Status zu<br />
beobachten, die zum Beispiel dazu führen können, dass e<strong>in</strong> VI nicht bearbeitbar ist, obwohl es<br />
ausgecheckt wurde. Diese Inkonsistenzen können vermehrt auftreten, wenn zusätzlich mit<br />
dem nativen Client des Versionskontrollsystems auf <strong>der</strong> gleichen Arbeitskopie gearbeitet<br />
wird.<br />
Verzichtet man auf die direkte Integration <strong>in</strong> LabVIEW und arbeitet nur mit den nativen<br />
Clients <strong>der</strong> Versionskontrollsysteme, so bietet LabVIEW mit den mitgelieferten Tools<br />
LVCompare und LVMerge die notwendigen Voraussetzungen, um mit e<strong>in</strong>em<br />
Versionierungssystem e<strong>in</strong>e Integration für graphischen Diff und Merge durchzuführen. Diese<br />
beiden Tools s<strong>in</strong>d im Vergleich zu an<strong>der</strong>en Diff/Merge-Werkzeugen bei grafischen<br />
Entwicklungsumgebungen weit ausgereift und bei entsprechen<strong>der</strong> Parametrierung gut nutzbar.<br />
Im Allgeme<strong>in</strong>en gibt es bei Versionskontrollsystemen unterschiedliche Strategien für den<br />
Dateizugriff: Manche Systeme erlauben nur die exklusive Bearbeitung e<strong>in</strong>er Datei durch<br />
e<strong>in</strong>en Benutzer, an<strong>der</strong>e setzen auf parallele Bearbeitung mit nachfolgendem Merge.<br />
Exklusiver Zugriff vermeidet die Notwendigkeit des Mergens, hat aber erhebliche Nachteile<br />
bei <strong>der</strong> Arbeit im Team, wo es immer wie<strong>der</strong> zu Zugriffkonflikten und erhöhtem<br />
Abstimmungsaufwand bei zentralen Dateien kommt. Beispielsweise s<strong>in</strong>d die LabVIEW<br />
Projektdateien zwar versionskontrollfreundlich als Text abgespeichert, enthalten aber sehr<br />
ni.com/de
viele Detail<strong>in</strong>formationen, die ständige Modifikationen nach sich ziehen. Um<br />
Zugriffskonflikte <strong>in</strong>sgesamt zu vermeiden, bietet es sich an, die Programmfunktionalität auf<br />
viele möglichst kle<strong>in</strong>e VIs zu verteilen. Dadurch muss aber jedes Teammitglied häufig die<br />
Projektdatei modifizieren, was dann wie<strong>der</strong> zu Zugriffskonflikten führt.<br />
Ist die gleichzeitige Bearbeitung von Dateien durch das Versionskontrollsystem erlaubt,<br />
entsteht häufig die Notwendigkeit, diese Än<strong>der</strong>ungen zu mergen. Dies kann durch Aufteilung<br />
<strong>der</strong> Funktionalität <strong>in</strong> viele kle<strong>in</strong>e VIs m<strong>in</strong>imiert werden. Ist es dennoch notwendig, leistet<br />
LVMerge gute Dienste, wenn die Än<strong>der</strong>ungen nicht zu stark die Struktur des VIs än<strong>der</strong>n.<br />
Lei<strong>der</strong> s<strong>in</strong>d die VI-Eigenschaften beim Vergleich außen vor. Die LabVIEW-Projektdatei<br />
kommt hier mit ihrem Textformat deutlich besser weg, da <strong>der</strong> Merge hier häufig problemlos<br />
funktioniert. Konflikte s<strong>in</strong>d allerd<strong>in</strong>gs durch den Detailgrad nicht zu vermeiden und<br />
LabVIEW bietet ke<strong>in</strong>erlei Unterstützung zur Auflösung dieser Konflikte. Daher bedarf es hier<br />
<strong>in</strong> manchen Fällen genauer Kenntnisse des verwendeten XML-Formats.<br />
Insgesamt stellen sich Punkte, wie die Verwendung von proprietären B<strong>in</strong>ärformaten, <strong>der</strong> hohe<br />
Detailgrad von manchen Dateien und teilweise fehlende Toolunterstützung beim Diff und<br />
Merge, als Faktoren zur Reduzierung <strong>der</strong> Produktivität im Team heraus.<br />
Test<br />
Basis aller qualitätssichernden Maßnahmen im Bereich <strong>der</strong> <strong>Software</strong>-<strong>Eng<strong>in</strong>eer<strong>in</strong>g</strong>-Diszipl<strong>in</strong><br />
Test s<strong>in</strong>d Unittests. Das LabVIEW Unit Test<strong>in</strong>g Framework bietet e<strong>in</strong>e solide Grundlage für<br />
die Erstellung, Verwaltung und Ausführung von Unittests. Setup- und Cleanup-VIs sowie<br />
selbsterstelle Test-VIs bieten ausreichende Möglichkeiten zur Umsetzung e<strong>in</strong>er Vielzahl von<br />
Testszenarien. Die bei <strong>der</strong> Ausführung erstellte Codecoverage ermöglicht e<strong>in</strong>e fundierte<br />
Aussage über die erreichte Testtiefe und kann gut zur Bestimmung von Testende-Kriterien<br />
herangezogen werden.<br />
Fortgeschrittene Testszenarien erreichen allerd<strong>in</strong>gs schnell die Grenzen des Unit-Test<strong>in</strong>g-<br />
Frameworks. Als Beispiele seien die fehlende Unterstützung für kont<strong>in</strong>uierlich laufende VIs,<br />
Events o<strong>der</strong> das Statemach<strong>in</strong>e Toolkit genannt. Ebenso ist es bei komplexeren VIs nicht<br />
möglich, Sub-VIs durch sogenannte Mocks zu ersetzen, um die Reaktion auf <strong>der</strong>en<br />
Rückgaben gezielt zu prüfen.<br />
E<strong>in</strong> weiteres Manko ist, dass die Ausführung <strong>der</strong> e<strong>in</strong>zelnen Testfälle nicht unabhängig<br />
vone<strong>in</strong>an<strong>der</strong> ist. Dies führt zu Problemen bei <strong>der</strong> Verwendung von nicht <strong>in</strong>itialisierten Shift-<br />
Registern zur Datenspeicherung, bei Feedback-Nodes und beim First-Call Operator.<br />
Diese E<strong>in</strong>schränkungen machen deutlich, dass e<strong>in</strong> Design for Testability unabd<strong>in</strong>gbar ist, um<br />
die Vorteile nutzen zu können und e<strong>in</strong>ige <strong>der</strong> vorhandenen Schwächen auszugleichen.<br />
GUI-Test<strong>in</strong>g<br />
Zur Unterstützung von Tests des graphischen User Interfaces e<strong>in</strong>er LabVIEW-Applikation<br />
bietet NI selbst ke<strong>in</strong>e Tool-Unterstützung an. Dennoch ist es grundsätzlich möglich, gängige<br />
GUI Test<strong>in</strong>g Tools e<strong>in</strong>zusetzen. Um hier e<strong>in</strong>e adäquate Testabdeckung zu erhalten ist<br />
allerd<strong>in</strong>gs die Beschränkung auf die sogenannten System Controls notwendig. Etwas bessere<br />
Unterstützung für die LabVIEW-native GUI-Elemente bietet das Tool „Ranorex“ mithilfe des<br />
ni.com/de
LabVIEW Plug<strong>in</strong>s von nte Systems. Aber auch hier werden viele Elemente nicht im Detail<br />
unterstützt und man muss gegebenenfalls auf re<strong>in</strong> grafische Vergleiche zurückgreifen.<br />
Dynamische Code-Analyse<br />
Das Desktop Execution Trace Toolkit ist <strong>der</strong> Schlüssel zu vielfältigen Erkenntnissen über das<br />
Laufzeitverhalten e<strong>in</strong>es VIs und von LabVIEW im allgeme<strong>in</strong>en. Nach e<strong>in</strong>er gewissen<br />
E<strong>in</strong>arbeitungsphase bietet es reichhaltige Informationen über den genauen zeitlichen Ablauf<br />
e<strong>in</strong>er LabVIEW-Applikation. Der Trace ist essentiell zum Beispiel bei <strong>der</strong> Suche nach<br />
Memory Leaks, Performance-Analysen und <strong>der</strong> Suche nach Absturzursachen. Die Detailtiefe<br />
ist sehr fe<strong>in</strong> konfigurierbar und mittels benutzerdef<strong>in</strong>ierter Trace Events s<strong>in</strong>d sehr detaillierte<br />
Analysen möglich.<br />
Statische Code-Analyse<br />
Die Aufgabe <strong>der</strong> statischen Code-Analyse übernimmt <strong>der</strong> VI Analyzer. Er ermöglicht<br />
detaillierte Analysen von e<strong>in</strong>zelnen VIs bis h<strong>in</strong> zu ganzen Projekten. Dabei können die zu<br />
prüfenden Regeln <strong>in</strong> <strong>der</strong> Konfiguration sehr fe<strong>in</strong> e<strong>in</strong>gestellt werden. Die verfügbaren<br />
Prüfungen gehen von <strong>der</strong> Drahtführung über verdeckte Code-Teile bis h<strong>in</strong> zur Prüfung von<br />
Standard- und LabVIEW-spezifischen Code-Metriken. Mithilfe <strong>der</strong> mitgelieferten API lassen<br />
sich auch komplexe Analyseszenarien abbilden. Die m<strong>in</strong>imale Granularität bei <strong>der</strong> Analyse ist<br />
e<strong>in</strong> VI, e<strong>in</strong>zelne Code-Blöcke lassen sich nicht von <strong>der</strong> Analyse ausnehmen. So ist es auch<br />
nicht möglich, für e<strong>in</strong>zelne Code-Blöcke Regeln außer Kraft zu setzen. In <strong>der</strong> <strong>Praxis</strong> kommen<br />
daher eher Konfigurationen zum E<strong>in</strong>satz, die wenige wichtige Regeln prüfen, da die Analyse<br />
ansonsten e<strong>in</strong>e unüberschaubare Anzahl an Regelverletzungen ergibt.<br />
Build-Automatisierung<br />
Zur kont<strong>in</strong>uierlichen Absicherung <strong>der</strong> Qualität werden <strong>in</strong> vielen <strong>Software</strong>projekten<br />
regelmäßige automatisierte Builds ausgeführt, bis h<strong>in</strong> zur sogenanntne Cont<strong>in</strong>uous<br />
Integration, bei <strong>der</strong> jede Än<strong>der</strong>ung am Versionskontroll-Repository e<strong>in</strong>en Build auslöst. E<strong>in</strong><br />
Build besteht dabei im Wesentlichen aus folgenden Schritten:<br />
1. Abruf des Repositories <strong>in</strong> e<strong>in</strong> leeres Verzeichnis<br />
2. Installation benötigter Tools für den Build<br />
3. Erzeugen aller sogenanter Build-Artefakte aus den Quellen<br />
4. Installation <strong>der</strong> erzeugten Bibliotheken und Programme<br />
5. Ausführung von Tests<br />
6. Erstellung e<strong>in</strong>es o<strong>der</strong> mehrerer Reports.<br />
Spielt <strong>in</strong> e<strong>in</strong>em solchen Szenario LabVIEW e<strong>in</strong>e Rolle, kommen verschiedene Aspekte zum<br />
Tragen. Solche Builds s<strong>in</strong>d üblicherweise kommandozeilenorientiert. VIs können ohne<br />
Erzeugung e<strong>in</strong>es Executables direkt <strong>in</strong> <strong>der</strong> LabVIEW-Entwicklungsumgebung ausgeführt<br />
werden. LabVIEW bietet dabei Unterstützung für die Auswertung von Kommandozeilen-<br />
Parametern. Es ist aber notwendig, vor dem Aufruf sicher zu stellen, das die Runtime Eng<strong>in</strong>e<br />
wirklich nicht läuft, sonst s<strong>in</strong>d die Parameter nicht verfügbar. Ausgaben auf die Konsole für<br />
die Reporterstellung gehen nur über e<strong>in</strong>en Aufruf <strong>der</strong> W<strong>in</strong>dows-API. Die LabVIEW<br />
Community bietet jedoch VIs dafür an. Den Returncode kann man nicht wie <strong>in</strong> <strong>der</strong><br />
ni.com/de
Kommandozeilenwelt üblich zur Rückgabe von Fehlern verwenden, dazu muss e<strong>in</strong> separater<br />
Mechanismus def<strong>in</strong>iert werden.<br />
Muss <strong>der</strong> Build auch Executables und Installer aus LabVIEW-Projekten erzeugen, kommt <strong>der</strong><br />
ApplicationBuil<strong>der</strong> zum E<strong>in</strong>satz. Er be<strong>in</strong>haltet auch e<strong>in</strong> VI zum Aufruf von Build-<br />
Spezifikationen aus e<strong>in</strong>em Projekt, was ihn skriptfähig macht. Lei<strong>der</strong> s<strong>in</strong>d häufig zusätzliche<br />
Schritte notwendig, um den ApplicationBuil<strong>der</strong> erfolgreich <strong>in</strong> e<strong>in</strong>en Build zu <strong>in</strong>tegrieren. Die<br />
Probleme beg<strong>in</strong>nen bei <strong>der</strong> Verwendung von absoluten Pfaden <strong>in</strong> den Build-Spezifikationen.<br />
Diese müssen an die Gegebenheiten auf dem sogenannten Build-Rechner angepasst werden.<br />
Dies ist grundsätzlich über Property-Nodes e<strong>in</strong>es Projektes möglich, allerd<strong>in</strong>gs s<strong>in</strong>d diese<br />
Properties kaum dokumentiert und man ist häufig auf Trial-and-Error und Workarounds<br />
angewiesen. Enthält e<strong>in</strong> Projekt externe Abhängigkeiten zum Beispiel zu .NET Assemblies,<br />
die im Rahmen des Builds neu erzeugt werden, müssen zunächst die Referenzen im<br />
LabVIEW-Projekt und den beteiligten VIs aktualisiert werden. Dies ist durch Laden des<br />
Projektes und Speichern <strong>der</strong> modifizierten VIs per Skript möglich, muss aber als extra Schritt<br />
vor dem Aufruf des ApplicationBuil<strong>der</strong>s durchgeführt werden.<br />
Hat man dann im Rahmen <strong>der</strong> Builds die benötigen Installer erzeugt, lassen sich diese per<br />
Kommandozeile auch ohne Benutzer<strong>in</strong>teraktion unter eventueller Angabe e<strong>in</strong>er<br />
Parameterdatei <strong>in</strong>stallieren. Damit s<strong>in</strong>d dann die Voraussetzungen erfüllt, um <strong>in</strong> die Testphase<br />
des Builds überzugehen.<br />
LabVIEW lässt sich <strong>in</strong> e<strong>in</strong>en solchen typischen automatisierten Build e<strong>in</strong>b<strong>in</strong>den. Die gebotene<br />
Unterstützung für solche Szenarien ist allerd<strong>in</strong>gs nicht sehr komfortabel. Daher ist mit<br />
Mehraufwand für die Realisierung gegenüber klassischen Werkzeugketten zu rechnen, <strong>der</strong> <strong>in</strong><br />
<strong>der</strong> Projektplanung berücksichtigt werden muss.<br />
Zusammenfassung<br />
NI bietet im Umfeld von LabVIEW mittlerweile e<strong>in</strong>e Vielzahl von Möglichkeiten, die die<br />
Entwicklung im Team und die E<strong>in</strong>haltung von Qualitätsstandards ermöglichen. Die Kenntniss<br />
dieser Möglichkeiten und <strong>der</strong> Produktive<strong>in</strong>satz empfehlen sich für jedes professionell<br />
durchgeführte Entwicklungsprojekt mit LabVIEW. Vorhandene Schwächen müssen mit<br />
Mehraufwand umgangen werden o<strong>der</strong> machen den E<strong>in</strong>satz mancher Best Practices<br />
unmöglich. Hier bleibt abzuwarten, was zukünftige Versionen an Verbesserungen br<strong>in</strong>gen.<br />
Autor:<br />
Taubert Helge<br />
Zühlke <strong>Eng<strong>in</strong>eer<strong>in</strong>g</strong> GmbH<br />
Düsseldorfer Straße 40a<br />
Eschborn D-65760<br />
Deutschland<br />
Tel: +49 6196 77754-0<br />
helge.taubert@zuehlke.com<br />
Nächste Schritte<br />
Unter folgendem L<strong>in</strong>k f<strong>in</strong>den Sie die e<strong>in</strong>gesetzte NI-<strong>Software</strong>:<br />
ni.com/de
Zum Referenzsystem »<br />
Testen Sie LabVIEW: Evaluierungsversion zum Download »<br />
LabVIEW Homepage »<br />
Ressourcen zum <strong>Software</strong>-<strong>Eng<strong>in</strong>eer<strong>in</strong>g</strong>-Prozess mit LabVIEW:<br />
Webcast: Große Projekte mit <strong>der</strong> LabVIEW-Plattform entwickeln »<br />
Technische Bibliothek "Advanced Application Development with LabVIEW" »<br />
Tra<strong>in</strong><strong>in</strong>gskurse:<br />
Kurs "Manag<strong>in</strong>g <strong>Software</strong> <strong>Eng<strong>in</strong>eer<strong>in</strong>g</strong> <strong>in</strong> LabVIEW" »<br />
Kurs "Advanced Architectures for LabVIEW" »<br />
RF-Produkte von <strong>National</strong> <strong>Instruments</strong> »<br />
Fragen?<br />
Sie suchen e<strong>in</strong>e Lösung für Ihr Mess- o<strong>der</strong> Prüfsystem? Sie wünschen Informationen für Ihre<br />
spezielle Applikation?<br />
E-Mail-Kontaktformular: Wir beraten Sie gerne und unverb<strong>in</strong>dlich! »<br />
NI-Produktübersicht<br />
Seit mehr als 20 Jahren gehört <strong>National</strong> <strong>Instruments</strong> zu den Vorreitern im Bereich <strong>der</strong> Mess-<br />
und Automatisierungstechnik. Wir haben hier unsere Hard- und <strong>Software</strong> kompakt für Sie<br />
zusammengestellt.<br />
PDF zum Download »<br />
Me<strong>in</strong> Benutzerprofil | RSS | Datenschutz | AGB | Kontakt © 2011 <strong>National</strong> <strong>Instruments</strong> Corporation. All rights reserved.<br />
| Seite empfehlen<br />
ni.com/de