07. November, Zürich-Oerlikon
ALM & DevOps Day24. September 2015, Zürich Oerlikon
Testing mit Visual Studio
Rolf Wenger
CTO
weroSoft AG
Agenda
weroSoft ist in den Bereichen Beratung, Entwicklung und Ausbildung auf der Basis der .NET-Technologien tätig
Basierend auf unserem eigenen Application Framework entwickeln wir kundenspezifische Client-Server-Anwendungen
Langjährige Ausbildungstätigkeiten für Softwareentwicklermittels Firmenkursen und .NET CAS an der Berner Fachhochschule
Durchführung von kundenorientierten E-Learning Projekten in den Bereichen Dienstleistung und Industrie
http://www.weroSoft.net
Agenda
1. Warum testen
2. Wann testen
3. Was testen
4. Wie testen
5. Gehört Testen zur Architektur
6. Unterstützung in Visual Studio 2015
Agenda
Kapitel 1
Warum testen
Qualitätssicherung ohne Ende
Maschinenteile werden gemessen
Lebensmittel werden gewogen
Brücken werden belastet
Wissen wird geprüft
Beratung wird beurteilt
Beispiel Fertigung
Szenenwechsel
int variable = 1;
int result = variable++ + variable++ + variable++;
Welcher Wert hat die Variable «result»?
Warum testen wir?
Weil wir zufriedene Kunden wollen!
Kapitel 2
Wann testen
Der Regelkreis
Der Entwickler
Wann testen wir?
Auf mehreren Ebenen während der gesamten Entwicklung – und das unaufgefordert und zielorientiert!
Kapitel 3
Was testen
Happy Path Test
Testen der Anforderung unter Idealbedingungen
Alles soll so funktionieren wie angedacht
Keine Ausnahmen
Keine Varianten
Einmalige Ausführung
Optimale Unterstützung durch Visual Studio 2015
Alternativ Path Tests
Testen der Anforderung durch Nutzung von alternativen Code Pfaden
Permutationen von Varianten
Keine Ausnahmen
Einmalige Ausführung pro Variante
Optimale Unterstützung durch Visual Studio 2015
Exceptional Path Tests
Testen der Anforderung durch gezielte Provokation von Fehlern
Permutationen von Fehlervarianten
Ausnahmen / Ausnahmetypen und Meldungen
Einmalige Ausführung pro Variante
Unterstützung durch Visual Studio 2015
Regression Tests
Testen der wiederholten, korrekten Ausführung des Codes
Sicherstellen, dass nach Änderungen und Ergänzungen keine Seiteneffekte auftreten
Unterstützung durch Visual Studio 2015
Was testen wir?
Die gesamte mögliche Codeausführung in allen Varianten und Lebenslagen!
Kapitel 4
Wie testen
Testpyramide
Unit Test
Integration Test
Acceptance Test
Unit Test
Fundament der Qualitätssicherung
In der Verantwortung der Entwickler
Messung der Codeabdeckung
Kostengünstig
Kann sehr grosse Menge erreichen
Eine 100% Automation ist anzustreben
Integration Test
Testen der Zusammenarbeit der Komponenten
In der Verantwortung der Tester
Mittleres Automatisierungspotential
Erfordert oft Produktinstallation
Mittlere Menge
Automatisierbar aber auch oft manuell ausgeführt
Acceptance Test
Testen des gesamten Systems
In der Verantwortung der Tester
Teurere Automatisierung
Erfordert zwingend Produktinstallation
Kleinste Menge, Testen der Anforderungen / UC
Automatisierbar aber auch oft manuell ausgeführt
Wie testen wir?
Indem wir für unser Projekt die Testpyramide umsetzen und idealtypisch vollautomatisiert alle Tests jede Nacht ausführen!
Kapitel 5
Gehört Testen zur Architektur
Frage 1
Wie viele Tests brauche ich um das Zahlenschloss zu öffnen?
Frage 2
Wie viele Tests brauche ich um das Zahlenschloss zu öffnen?
Frage 3
Wie wollen Sie den Netzteil von dem Gerät testen?
Frage 4
Wie will weroSoft testen,
dass die Webseite in allen
Browsern korrekt ange-
zeigt wird?
Antworten auf alle Fragen
1. Zerlegung des Systems in Baugruppen
2. Zerlegen der Baugruppen in Komponenten
3. Erstellen der Komponenten
4. Testen der Komponenten
5. Zusammenbau der Komponenten zu Baugruppen
6. Testen der Baugruppe
7. Zusammenbau zum Produkt
8. Testen des Produkts
Wir erinnern uns
Übersetzung für Software-Engineers
Baugruppe
… bis zur kleinsten Einheit …
Prüfling
MyClass.Method()
Project Assembly
Unit Test
Unit Test Assembly
Mock
Simulation eines
vom Prüfling
angesprochenen
Objekts.
Project oder
sonstige Assembly
Die Testautomation
Visual
Studio
2015
oder
mstest.exeUnit Test
Framework
Unit Test Prüfling
Gehört Testen zur Architektur?
Definitiv ja!
Testen soll bereits im Lösungsansatz Platz finden!
Schichtenmodell
Komponentenmodell
Ersetzbarkeit (Mocking / Simulation)
Kapitel 6
Unterstützung in Visual Studio 2015
Generelle Unterstützung
Classic Unit Tests Happy Path Unit Tests
Alternative Path Unit Tests
Exception Path Unit Tests
Data-Driven Unit Tests
Coded UI Tests (nur Visual Studio Enterprise)
IntelliTesting (nur Visual Studio Enterprise)
Scenariopublic string SimpleMethod(string argument)
{
if (string.IsNullOrEmpty(argument))
throw new ArgumentNullException("argument");
int indexSpace = argument.IndexOf(" ");
switch(indexSpace)
{
case -1:
return argument;
case 0:
return string.Empty;
default:
return argument.Substring(0, indexSpace);
}
}
Happy Path Unit Test[TestClass()]
public class SimpleDemoTypeTests
{
[TestMethod()]
public void HappyPathSimpleMethodTest()
{
string expectedString = "Testing";
string resultingString = null;
SimpleDemoType sample = new SimpleDemoType();
resultingString = sample.SimpleMethod(expectedString);
Assert.AreEqual<string>(expectedString, resultingString);
}
…
Alternative Path Test[TestMethod()]
public void AlternativePathSimpleMethodTest()
{
string parameter = "Testing an alternative path";
string expectedString = "Testing";
string resultingString = null;
SimpleDemoType sample = new SimpleDemoType();
resultingString = sample.SimpleMethod(parameter);
Assert.AreEqual<string>(expectedString, resultingString);
}
Exception Test[ExpectedException(typeof(ArgumentNullException))]
[TestMethod()]
public void ExceptionPathSimpleMethodTest()
{
string parameter = null;
string resultingString = null;
SimpleDemoType sample = new SimpleDemoType();
resultingString = sample.SimpleMethod(parameter);
// On using the attribute ExpectedExceptionAttribute you must
// not assert the test. It is automatically asserted to the
// expected exception type.
}
Data driven Test[DeploymentItem("DataDrivenTestDemo.xml")]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", // Type of data source
"DataDrivenTestDemo.xml", // Name of XML file
"SimpleTestData", // Name of table element
DataAccessMethod.Sequential)] // Kind of data access
[TestMethod()]
public void DataDrivenSimpleMethodTest()
{
string parameter = TestContext.DataRow["parameter"] as string;
string expectedString = TestContext.DataRow["expected"] as string;
string exceptionType = TestContext.DataRow["exceptionType"] as string;
string resultingString = null;
if (parameter == "null") parameter = null;
SimpleDemoType sample = new SimpleDemoType();
…
Data driven Test…
try
{
resultingString = sample.SimpleMethod(parameter);
Assert.AreEqual<string>(expectedString, resultingString);
}
catch (ArgumentNullException exception)
{
if (string.IsNullOrWhiteSpace(exceptionType))
Assert.Fail("An unexpected exception has been caught.");
else
if (string.Compare(exception.GetType().Name, exceptionType, true) != 0)
Assert.Fail("Type is not as expected.");
}
}
Coded UI Test (nur Visual Studio Enterprise)
Testen von Benutzeroberflächen
Unterstützt Forms, WPF und Web
Tests können generiert werden
In der Praxis ist eine händische Codierung erfolgreicher
Integration für die Testausführung
IntelliTest (nur Visual Studio Enterprise)
Neustes Kind der Testumgebung
Integriert in Visual Studio 2015
Generiert den Unit Test aufgrund des Nutzcodes Instant Ausführung möglich
Generierung des Unit Tests und Integration in Automation ist möglich
Ziel 100% Codeabdeckung
IntelliTest – direkte Ausführung
IntelliTest – Resultat der Ausführung
IntelliTest – Create Unit Test
1. Generieren anstelle von ausführen
2. Erzeugt eine PEX1-Assembly
3. Generierten Test ausführen
4. Erzeugt die Test Methoden
5. Prüfen der Codeabdeckung
6. Bereit für die Testautomation
Testüberwachung Visual Studio 2015
Test Explorer zeigt alle Unit Tests
Ausführung einzeln / mehrere / alle
Ausführung mit oder ohne Debugging
Verschiedene Sortierungen
Messen der Codeabdeckung (Enterprise)
Test Explorer
Testüberwachung TFS 2015
Testdetails im TFS
Kapitel 7
Zusammenfassung
Zusammenfassung
Das sind meine 3 wichtigsten Punkte, die ich Ihnen weitergeben will:
1. Testen gehört zur Entwicklung wie das Lesen der News zum Tag
2. Testen ist anspruchsvoll und muss bereits in der Architektur berücksichtigt werden
3. Visual Studio und der TFS unterstützt dieses Vorhaben in allen Belangen
Besten Dank für Ihre Aufmerksamkeit
Für allfällige Fragen stehen wir Ihnen jederzeit gerne zur Verfügung:
weroSoft AG
Obere Zollgasse 75
3072 Ostermundigen