24.12.2012 Aufrufe

Software Engineering in der Praxis - National Instruments Germany ...

Software Engineering in der Praxis - National Instruments Germany ...

Software Engineering in der Praxis - National Instruments Germany ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!