Effiziente Qualitätssicherung und Testen mit Visual Studio 2012

Donnerstag, 13. Juni 2013

Das folgende Whitepaper/Artikel gibt einen Einblick in die Möglichkeiten der Qualitätssicherung mit Visual Studio 2012. Zielgruppe sind Tester, Testmanager und Verantwortliche für Qualitätssicherung in Software-Projekten.

Dabei werden Themen wie Anforderungsmanagement, Testmanagement, Testautomatisierung sowie Testvirtualisierung und deren Umsetzung mit Visual Studio 2012 betrachtet. Am Ende gibt der Autor einen Überblick über weitere Qualitätssicherungsthemen, die weit über das eigentliche Testen hinausgehen, aber zum Methodenbaukasten eines Qualitätsverantwortlichen gehören sollten.

Überblick und Zielgruppe

Das folgende Whitepaper soll einen Einblick in die Möglichkeiten der Qualitätssicherung mit Visual Studio 2012 geben mit Schwerpunkt auf das funktionale Testen. Betrachtet werden dazu vor allem Visual Studio 2012, Test Professional 2012 und Team Foundation Server 2012. Das Whitepaper richtet sich an Tester, Testmanager und Verantwortliche für Qualitätssicherung in Software-Projekten. Dabei werden Themen wie Anforderungsmanagement, Testmanagement, Testautomatisierung sowie Testvirtualisierung und deren Umsetzung mit Visual Studio 2012 betrachtet. Am Ende geben wir einen Überblick über Qualitätssicherungsthemen, die weit über das eigentliche Testen hinausgehen, aber zum Methodenbaukasten eines Qualitätsverantwortlichen dazu gehören sollten.

Hauptziele von VS 2012 im Testbereich

  • Bessere Verbindung von Fachseite, Entwicklung und Qualitätssicherung durch Integration in eine ALM-Plattform
  • Bereitstellung neuer, integrierter Werkzeuge speziell für Testmanager, Testanalysten und manuelle Tester
  • Unterstützung agiler Testmethoden
  • Unterstützung bewährter Technologien wie Windows 7, .NET 4, 64bit Testumgebungen
  • Unterstützung der Trends im Bereich Mobility wie Windows 8
  • Unterstützung neuester Webtechnologien wie HTML5
  • Höhere Testeffizienz durch Testautomatisierung
  • Einfacherer Fehleranalyse durch automatisches Aufzeichnen wichtiger Testdaten
  • Einfache Verwaltung physikalischer und virtueller Testlabore in heterogenen Umgebungen wie z.B. Microsoft Hyper-V und VM-Ware
  • Mit Visual Studio 2012 Update 2 (VS 2012.2) gibt es die Möglichkeit, das Testmanagement über einen Browser zu bedienen. Dies erspart für einige Szenarien das Rollout des Microsoft Test Managers

Anforderungsbasiertes Testen

Sehr häufig sind die Themen Anforderungsmanagement und Testmanagement sowie Testausführung voneinander getrennt. Dabei kommt es häufig zu missverstandenen Anforderungen, falschen oder fehlenden Testfällen und damit zu Kostenüberschreitungen und Qualitätsmängeln. Aus diesen Gründen ist es notwendig, die Themen Anforderungsmanagement und Testmanagement enger miteinander zu verbinden. Die Testfälle sind dann direktes Ergebnis der Anforderungen, eine Testausführung und aufgetretene Fehler lassen sich bis zu den Anforderungen zurückverfolgen.

Anforderungs- und Testmanagement mit Visual Studio 2012

Visual Studio 2012 bietet eine enge Integration der Themen Testausführung, Testmanagement, Anforderungsmanagement, Test-Auswertung, Fehlerverfolgung, und Buildmanagement. Nach der Erstellung und Überprüfung der funktionalen und nichtfunktionalen Anforderungen kann man Testfälle entwerfen und jeden Testfall den relevanten Anforderungen, Use Cases oder User Stories (je nach Vorgehensmodell) zuordnen. Außerdem ist es möglich, zu jedem manuellen Testfall eine Testautomatisierung zuzuordnen.

Im "Microsoft Test Manager" als Teil von Visual Test Professional bzw. Visual Studio 2012 Ultimate in der Integration mit dem Team Foundation Server haben Sie folgende Funktionen integriert:

  • Verschiedene Eingabemöglichkeiten der Anforderungen, u.a. im Testmanager, Webbasiert, Excel, Visual Studio Team Explorer
  • Erstellung der Testpläne, Testsuiten und Testschritte
  • Testplanung auf Basis der Anforderungen
  • Testparametrisierung (datengetriebene Tests)
  • Aufbau einer Testfall- und Testschrittbibliothek
  • Verlinkung zum Buildmanagement
  • Steuerung für manuelle und automatisierte Testausführung
  • Aufzeichnen relevanter Daten während des Testens
  • Testauswertung, Fehlerverfolgung, Reporting

Unterstützung agiler Testmethoden

In den letzten Jahren haben agile Entwicklungsmethoden wie Scrum massiv an Bedeutung gewonnen. Die sollte auch im Testbereich seine Entsprechung finden, d.h. auch hier müssen agile Methoden an Bedeutung gewinnen. Eine Möglichkeit ist, hier das sogenannte Explorative Testen zu nutzen.

Exploratives Testen bedeutet, eine Anwendung zu testen, ohne vorher genau einen definierten Satz an Testfällen und Testschritten zu erstellen.

Der Microsoft Testmanager hilft dabei, indem die Aktionen, die während des explorativen Tests ausgeführt werden, aufgezeichnet werden können. Man kann Bildschirmabbildungen, Kommentare, Dateianhänge sowie Audio- und Videokommentare aufzeichnen. Diese Aufzeichnung ermöglicht es, jeden Fehler, der gefunden wurde, automatisch zu protokollieren und zu speichern, sowie daraus Testfälle zu generieren, die dann in eine Regressions-Testsuite einfließen können. Ausgangspunkt für einen explorativen Test ist immer eine Nutzeranforderung bzw. ein Szenario, die als WorkItem im TFS hinterlegt sind.

Wenn Fehler oder Testfälle erstellt werden, werden diese automatisch mit der zugrunden liegenden Anforderung verknüpft, d.h. es gibt eine vollständige Unterstützung formaler Anforderungen trotz agiler Vorgehensweise und ist somit beispielsweise CMMI konform bzgl. Anforderungen wie Auditierbarkeit und Traceability. Die Arbeitsaufgabe und alle Testfälle, die während der explorativen Testphase erstellt werden, werden automatisch dem Testplan hinzugefügt.

Aufzeichnen relevanter Daten während des Testens in der Testumgebung

Während einer Testausführung müssen normalerweise sehr viele Daten erfasst werden. Hauptsächlich sind das Daten der Konfiguration der Testumgebung, Prozessdaten der zu testenden Anwendung und Code-Testabdeckungsinformationen.

Im Detail können in der Testumgebung folgende Daten erfasst werden:

  • "Action log" und "Action Recording"
  • Aufzeichnen der Klick-Pfade bei manueller Testausführung
  • Erlaubt Erstellung automatischer Test-Protokolle bei manuellen Tests
  • Testschritte können ohne Benutzerinteraktion beschleunigt wiedergegeben werden (Fast Forward Replay)
  • Ist eine mögliche Grundlage für die Testautomatisierung

Videoaufzeichnung und Screenshot während eines Testlaufs

  • Zeichnet ein Video der Testsituation auf
  • Im Fehlerfall kann zusätzlich automatisch oder manuell ein Screenshot der Fehlersituation erzeugt werden
  • Für manuelle und automatisierte Tests
  • Hilft, Testabläufe besser zu verstehen
  • Gut geeignet auch für Usability Testszenarien, da benötigte Zeiten bei manuellen Tests mit protokolliert werden

IntelliTrace

  • Sammelt Informationen, die helfen, die Fehlersuche und -diagnose zu vereinfachen
  • Verbessert massiv die Produktivität beim Debugging
  • Aus den IntelliTrace-Daten kann die Test-Session auf einem Entwickler-Rechner wiederhergestellt werden und vereinfacht somit, Fehler schneller zu reproduzieren

Test Impact Analyse

  • Sammelt Informationen, welche Methoden der getesteten Anwendung aufgerufen wurden während eines Testlaufs
  • Ermittelt zusammen mit der Code-Änderungsrate aus der Versionierung und dem Build-System, welche Testfälle von Code-Änderungen betroffen sind
  • Hilft dabei, Testfälle zu priorisieren und zu selektieren, insbesondere bei Regressionstestszenarien

ASP.Net Client Proxy für IntelliTrace und Test Impact Analyse

  • Sammelt Informationen über http-Aufrufe von einem Client zu einem Web Server
  • Kann genutzt werden für IntelliTrace und Test Impace Analyse von Web-Anwendungen

ASP.NET Profiler

  • Sammelt Performance-Daten (Profiling) bei ASP.NET Web Anwendungen

Code Coverage

  • Ermittelt selbständig, wie hoch die Code-Abdeckung während eines Testlaufs ist
  • Hilft, die Qualität der Testfälle in Bezug zur Code-Basis einzuschätzen und zu verbessern

Event Log

  • Zeichnet automatisch Ereignisse aus dem Event-Log (Ereignisanzeige) auf
  • Fügt die Event-Log Informationen dem Testergebnis hinzu

Netzwerk Emulation

  • Während des Tests kann künstlich die Netzwerkbandbreite eingeschränkt werden
  • Hilft dabei, realistischere Testszenarien aufzubauen

System Informationen

  • Sammelt automatisch Systeminformationen über die eingesetzte Testumgebung, u.a. Betriebssystemversion, Patch-Level, eingestelltes Gebietsschema, Bildschirmauflösung und vieles mehr

Eigene Diagnose-Daten

Es ist möglich, einen eigenen Diagnose Adapter zu bauen, der relevante Daten der eigenen Anwendung während des Testausführung sammelt. Das können z.B. eigene Events, Log-Files oder Datenbankinhalte sein. Diese können an die Testausführung angehängt werden und stehen dann dem Testanalysten bzw. Entwickler zur Fehleranalyse zur Verfügung.

Verbindung zur Testauswertung

Alle gesammelten Informationen werden automatisch an die Testergebnisse angehängt. Über die Verbindung der Testfallverfolgung und Testauswertung mit dem Bugtracking bzw. Fehlermanagement kann man mit Hilfe dieser Informationen sehr schnell den Fehler nachstellen und beheben. Damit können die "Develop-Test-Repro-Fix" Zyklen massiv verkürzt werden.

Testautomatisierung

Die Testautomatisierung hat die Aufgabe, die Testeffizienz zu verbessern sowie für verlässlichere Testergebnisse zu sorgen. Insbesondere spielt Testautomatisierung eine große Rolle bei Regressionstest und bei agilen Praktiken wie z.B. "Continues Integration and Test".

Unterstütze Technologien

In Visual Studio 2012 können verschiedene Typen von automatisierten Tests erstellt werden. Dabei können unterschiedliche GUI/Oberflächentechnologien getestet werden, wie z.B. Windows Forms, WPF und Webanwendungen. Neben Web-Anwendungen werden Oberflächentechnologien unterstützt, die entweder MS AA (Active Accessability) oder MS UIA (User Interface Automation) unterstützen.

Unterstützte Testarten

Die folgende Tabelle zeigt die Automatisierungstypen, die als Teil eines Testplans aus dem Test Manager bzw. aus Visual Studio heraus gestartet werden können:

TesttypDetailsAusführung aus Visual StudioAusführung innerhalb eines Testplans im Test Manager über Verbindung zu einem logischen Testfall
Coded UI TestTested die grafische Oberfläche einer Anwendung durch Simulation von BenutzerinteraktionenJa (ab VS Premium)Ja
Unit TestsTest von Quellcode auf der Methodenebene.
Eine Neuerung in Visual Studio 2012 ist, das auch andere Testframeworks außer MS Test eingebunden werden können, z.B.
Ja (ab VS Prof.)Ja
Database Unit TestsTest einer Stored procedure, DB Function oder eines Triggers in einer Datenbank.Ja (ab VS Premium)Ja
Load testsTest der Anwendungsperformance und Stresstests unter Nutzung vorhandener Unit-Tests, Web Performance Tests oder Coded UI TestsJa (VS Ultimate)
Anm: VS Ultimate enthält unlimitierte virtuelle User,d.h. es kann unbegrenzt Last zur Verfügung gestellt werden.
Ja
Web Performance TestsTesten von Web-Anwendungen auf Protokollebene durch Absendung von http Requests und validieren der http ResponsesJa (VS Ultimate)Ja.
Generic TestsTesten über API-Aufrufe oder Kommandozeilenfunktionen der zu testenden AnwendungenJa (ab VS Premium)Ja

Oberflächen-Test-Automatisierung mit VS 2012 in der Praxis

VS 2012 (ab der Premium Variante) bietet die Möglichkeit, "Coded UI Tests" zu erstellen. Diese Tests sind Testautomatisierungs-Programme bzw. Testtreiber. Als Technologie für diese Testtreiber wird das .NET 4.5 Framework genutzt, als Testprogrammiersprachen stehen C# und VB.NET zur Verfügung. Diese "Coded UI Tests" führen Aktionen auf der Benutzerschnittstelle aus und validieren, also überprüfen, die Korrektheit der Darstellung der vorhandenen Oberflächenelemente und deren Inhalte.

Das bietet folgende Vorteile:

  • Kein zusätzliches Know-How für eine neue Testsprache notwendig
  • Nutzung sämtlicher Komfort-Features des Visual Studio 2012 für die Testautomatisierung
  • Nutzen aller Möglichkeiten des .NET 4.5 Frameworks für die Testautomatisierung
  • Integration mit der Team Foundation Server Infrastruktur (u.a. für Validation Builds, Versionierung der Testtreiber, Fehlermanagement und Test-Reporting)

In VS 2012 gibt es drei Möglichkeiten, Testautomatisierungsscripte zu erstellen:

  • Testfall-Recording
  • Nutzung des Coded UI Test Builders
  • Umwandlung der beim manuellen Test aufgezeichneten Action Recordings eines manuellen Test

Testfall-Recording

  • Zeichnet alle Benutzerinteraktionen auf der Programmoberfläche (GUI) auf
  • Erzeugt Testscripte in C# oder VB aus diesen Benutzerinteraktionen
  • Validierungen für unterschiedlichste Merkmale der Oberflächenelemente lassen sich hinzufügen

Testautomatisierung mit dem "Coded UI Test Builder"

  • Erlaubt sehr schnell, neue GUI-Elemente und Verifizierungen für einen neuen oder zu einem bestehenden automatischen Testfall hinzuzufügen
  • Einfache Nutzung
  • Erzeugt Code sowohl für die Ansteuerung der GUI-Elemente als auch Validierung

Umwandlung eines manuellen Tests in einen automatisierten Test

  • Erzeugt automatisch Testscripte in C# oder VB aus den Action Recordings der manuellen Testausführung
  • Tests können dann wahlweise manuell oder automatisiert ausgeführt werden
  • Verkürzt die Zeit, um automatisierte Testscripte zu erzeugen

Datengetriebene automatisiert Tests

Nachdem die logischen Testfälle erstellt sind, sollen diese natürlich mit verschiedenen Testdaten ausgeführt werden. Dazu bietet Visual Studio 2012 die Möglichkeit, eine Datenquelle zum coded UI Test hinzuzufügen und diesen dadurch zu einem Datengetriebenen Test umzuwandeln. Jede Zeile in der Datenquelle ist dann eine Iteration oder Ausprägung des logischen Testfalls. Das Testergebnis setzt sich dann aus den Einzelergebnissen jeder Testiteration zusammen.

Last- und Stresstests

Das Ziel von Load Test ist es, zahlreiche simultane Benutzerzugriffe auf eine Server-Applikation zum gleichen Zeitpunkt zu simulieren. Damit soll sichergestellt werden, dass die Korrektheit der Anwendung auch bei starker Last gegeben ist.

Visual Studio 2012 Ultimate unterstützt dabei drei Modelle, Last zu generieren:

Loadtest für Webanwendungen

  • Ermöglicht den Vergleich von zwei Testläufen
  • Simuliert viele gleichzeitige Benutzer, die HTTP Requests ausführen gegen einen beliebigen WebServer
  • Zahlreiche Parameter wie z.B. Browser, Bandbreite, Think-Time usw. lassen sich simulieren
  • Testscripte lassen sich in C# oder VB konvertieren und damit die Mächtigkeit des .NET Frameworks für Lasttests nutzen.

Wiederverwendung von Unittests für Loadtestszenarien

  • Ist ebenfalls eine etablierte Funktion der Visual Studio Team System 2008 Test Edition
  • Ermöglicht Loadtestszenarien für Komponenten, die nicht Webbasierend sind, z.B. Datenzugriffskomponenten, Workflowkomponenten oder sonstige Kommunikationskomponenten
  • Wiederverwendungseffekte führen zu Kosteneinsparungen

Wiederverwendung von bereits automatisierten Tests in Lasttests

  • Automatisierte GUI-Tests lassen sich in Loadtestszenarien wiederverwenden
  • Dadurch sind eigene Anwendungen als Testtreiber für Loadtestszenarien nutzbar
  • Testvirtualisierung mit Visual Studio Lab Management

Virtualisierung von Testumgebungen

Microsoft Visual Studio Lab Management ist eine Erweiterung des Microsoft Test Managers zum Verwalten und Benutzen von virtuellen Maschinen zum Build, Deployment und Testen von Anwendungssystemen. Visual Studio Lab Management ist integriert mit dem System Center Virtual Machine Manager (SCVMM) zur Verwaltung mehrerer pysikalischer Computer, welche als Gast für die virtuellen Maschinen agieren.

Visual Studio Lab Management ermöglicht ein schnelles Deployment virtueller Testumgebungen zur Ausführung von Tests und Automatisierung von Builds. Damit kann man sehr schnell komplexe Konfigurationen erstellen, die weitestgehend der Produktivumgebung entsprechen. Die Testvirtualisierung ermöglicht durch die Nutzung der Snapshot-Technologien eine schnellere Reproduzierbarkeit von Fehlersituationen. Außerdem sind Testumgebungen schneller in definierte Zustände zurücksetzbar. Zusammen mit dem Testmanagement verringert sich massiv der Aufwand für professionelles Testen innerhalb des Application Lifecycle Managements.

Testvirtualisierungspraktiken mit Visual Studio Lab Management

  • Rücksetzen von Umgebungen - stellt sicher, dass die Testumgebungen immer in einem definierten Zustand sind
  • Snapshots von Testumgebungen - ermöglicht jederzeit, in verschiedene Testumgebungszustände zu wechseln
  • In Fehlersituationen können Snapshots automatisch erzeugt werden und an Testergebnisse angehängt werden
  • Klonen von Testumgebungen - ermöglicht durch die Netzwerkisolierung die Erstellung von Kopien komplexer Testumgebungen, die aus mehreren Virtuellen Maschinen bestehen können
  • Integration mit Team Foundation Server und Buildmanagement - ermöglicht einen durchgehenden Workflow vom zentralen Build über automatisches Deployment bis hin zur Testautomatisierung
  • Verwalten von Umgebungsbibliotheken - bietet die Möglichkeit, das Deployment und die Tests auf korrekten, definierten Umgebungen aus einer VM-Bibliothek durchzuführen

Unterstützung von Standard-Testumgebungen

Neben den Hyper-V basierenden Testumgebungen auf Basis des System Center Virtual Machine Managers (SCVMM) werden mit Visual Studio 2012 auch sogenannte Standardumgebungen unterstützt.

Standardumgebungen können sowohl virtuelle Maschinen auf Basis beliebiger Virtualisierungstechniken (wie z.B. VMWare) sein als auch physische Computer sein.

Fehlerverfolgung, Auswertung und Reporting

Visual Studio im Zusammenspiel mit dem Team Foundation Server kann dabei unterstützen, die Qualität im Softwareentwicklungsprojekt besser einzuschätzen. Insbesondere gibt es zahlreiche Auswertungsmöglichkeiten.

  • Welche SW-Builds haben Code-Änderungen im Zusammenhang mit Bug Fixes, Change Requests, Anforderungen usw.
  • Welche Testfälle müssen im Regressionstest basierend auf Codeänderungen erneut in einem Testplan zusammengestellt werden?
  • Sind die Testfälle fertig definiert, und wenn ja, wie ist der Testfortschritt?

Es ist möglich, beliebige eigene Reports zu definieren, die verschiedenste Aspekte des Application Lifecycle Managements umfassen können

  • Anforderungsmanagement
  • Changemanagement
  • Versionierung
  • Build- und Releasemanagement
  • Testmanagement- und Testausführung
  • Fehlerverfolung

Entwicklung und Test stärker verbinden

Entwickler können die im Test gefundenen Fehler viel besser als bisher nachvollziehen, indem die Testumgebung als Snapshot zum Zeitpunkt des Auftretens des Fehlers vorliegt.

Die neuen Features im Testmanagement, der Datenaufzeichnung während der Testausführung und die Testvirtualisierung sorgen dafür, dass Fehler schneller analysiert und behoben werden können. Fehlermeldungen mit dem Status " Nicht Reproduzierbar" sollten damit deutlich weniger werden.

Dadurch sind Entwickler und Tester besser als jemals zuvor in der Lage, miteinander statt gegeneinander zu arbeiten und damit die Qualität der Software zu verbessern.

Zusammenfassung: Qualität ist mehr als nur Testen

Typischerweise manifestiert sich die Qualität eines komplexen Softwaresystems in den während der Erstellung gelieferten und produzierten Artefakte. Dazu zählen insbesondere:

  • Die Anforderungen als Basis für alle anderen Artefakte
  • Abstrakte Prozessmodelle oder konkrete Implementierungsmodelle (UML, DSL, Datenbankmodelle) und deren Diagramme
  • Quellcode, Scripte, Konfigurationselemente, Handbücher
  • Buildscripte
  • Testpläne, Testfälle, Testumgebungen und Testdaten

Alle diese Artefakte bzw. Arbeitsprodukte müssen qualitätsgesichert werden. In welchem Umfang dies geschieht, ist abhängig von den Rahmenbedingen des Projektes, beispielsweise ComplianceAnforderungen (SOX, Basel II) oder Regularien (z.B. Medizintechnik ISO 13485, IEC 62304 und diverse FDA-Regeln).

Visual Studio 2012 bietet dabei eine Unterstützung der Qualtitätssicherung neben dem reinen Testen über den gesamten Application Lifecycle an (u.a. Anforderungsmanagement, UML-Modellierung, DSLToolkit, Architekturvalidierung- und Visualisierung, statische und dynamische Code-Analyse, Code Coverage Analyse, Check-In Regeln, Gated Check-Ins um nur einige zu nennen).

Damit ist klar, dass Qualität nicht in ein System hineingetestet werden kann. Vielmehr ist es Aufgabe des Testens, letztendlich Qualität zu bestätigen oder zu widerlegen - und zwar möglichst früh im Anwendungsentwicklungszyklus. Eine Abwesenheit von Fehlern im Bugtracking-Werkzeug lässt meist auf eine unzureichende Testplanung oder falsche Testfälle bzw. Testdaten schließen, Ausnahmen bestätigen die Regel.

VS 2012 mit den dazugehörigen Komponenten "Microsoft Test Manager", "Test "Lab Management" sowie "Team Foundation Server" unterstützen dabei, hochwertige Testpläne mit Testfällen auf Basis von validen Anforderungen zu erstellen und diese Testfälle sehr effizient zu automatisieren.

Durch die hohe Integration in das Visual Studio und den Team Foundation Server und die Möglichkeiten zur Fehleranalyse bzw. Reproduktion ist Visual Studio 2012 nicht nur das Tool der Wahl für Softwareentwickler, sondern auch für Tester, Testmanager und Testanalysten.

Microsoft Virtual Academy.