Digicomp Microsoft Evolution Day 2015 1
Testing mit Visual Studio
Rolf Wenger, CTO weroSoft AG
Partner:
2 Digicomp Microsoft Evolution Day 2015
Vorstellung Referent
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 Softwareentwickler mittels Firmenkursen und .NET CAS an der Berner Fachhochschule
Durchführung von kundenorientierten E-Learning-Projekten in den Bereichen Dienstleistung und Industrie
3 Digicomp Microsoft Evolution Day 2015
Agenda
Warum testen
Wann testen
Was testen
Gehört Testen zur Architektur
Unterstützung in Visual Studio 2015
Zusammenfassung
4 Digicomp Microsoft Evolution Day 2015
Warum testen
5 Digicomp Microsoft Evolution Day 2015
Qualitätssicherung ohne Ende
Maschinenteile werden gemessen
Lebensmittel werden gewogen
Brücken werden belastet
Wissen wird geprüft
Beratung wird beurteilt
6 Digicomp Microsoft Evolution Day 2015
Beispiel Fertigung
Herstellen Messen Einbauen Messen Integrieren
Erproben Bericht Zufriedener Kunde Lieferung Qualitätsgarantie
7 Digicomp Microsoft Evolution Day 2015
Szenenwechsel
int variable = 1;
int result = variable++ + variable++ + variable++;
Welchen Wert hat die Variable «result»?
8 Digicomp Microsoft Evolution Day 2015
Warum testen wir?
Weil wir zufriedene Kunden wollen!
9 Digicomp Microsoft Evolution Day 2015
Wann testen
10 Digicomp Microsoft Evolution Day 2015
Der Regelkreis
11 Digicomp Microsoft Evolution Day 2015
Der Regelkreis
12 Digicomp Microsoft Evolution Day 2015
Wann testen wir?
Auf mehreren Ebenen während der gesamten Entwicklung – und das unaufgefordert und zielorientiert!
13 Digicomp Microsoft Evolution Day 2015
Was testen
14 Digicomp Microsoft Evolution Day 2015
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
15 Digicomp Microsoft Evolution Day 2015
Alternative 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
16 Digicomp Microsoft Evolution Day 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
17 Digicomp Microsoft Evolution Day 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
18 Digicomp Microsoft Evolution Day 2015
Was testen wir?
Die gesamte mögliche Codeausführung in allen Varianten und Lebenslagen!
19 Digicomp Microsoft Evolution Day 2015
Wie testen
20 Digicomp Microsoft Evolution Day 2015
Testpyramide
Unit Test
Integration Test
Acceptance Test
21 Digicomp Microsoft Evolution Day 2015
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
22 Digicomp Microsoft Evolution Day 2015
Integration Test
Testen der Zusammenarbeit der Komponenten
In der Verantwortung der Tester
Mittleres Automatisierungspotenzial
Erfordert oft Produktinstallation
Mittlere Menge
Automatisierbar, aber auch oft manuell ausgeführt
23 Digicomp Microsoft Evolution Day 2015
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
24 Digicomp Microsoft Evolution Day 2015
Wie testen wir?
Indem wir für unser Projekt die Testpyramide umsetzen und idealtypisch vollautomatisiert alle Tests jede Nacht ausführen!
25 Digicomp Microsoft Evolution Day 2015
Gehört Testen zur Architektur
26 Digicomp Microsoft Evolution Day 2015
Frage 1
Wie viele Tests brauche ich, um das Zahlenschloss zu öffnen?
27 Digicomp Microsoft Evolution Day 2015
Frage 2
Wie viele Tests brauche ich, um das Zahlenschloss zu öffnen?
28 Digicomp Microsoft Evolution Day 2015
Frage 3
Wie wollen Sie das Netzteil von diesem Gerät testen?
29 Digicomp Microsoft Evolution Day 2015
Frage 4
Wie will weroSoft testen, dass die Webseite in allen Browsern korrekt angezeigt wird?
30 Digicomp Microsoft Evolution Day 2015
Antworten auf alle Fragen
Zerlegung des Systems in Baugruppen
Zerlegen der Baugruppen in Komponenten
Erstellen der Komponenten
Testen der Komponenten
Zusammenbau der Komponenten zu Baugruppen
Testen der Baugruppe
Zusammenbau zum Produkt
Testen des Produkts
31 Digicomp Microsoft Evolution Day 2015
Wir erinnern uns
Herstellen Messen Einbauen Messen Integrieren
Erproben Bericht Zufriedener Kunde Lieferung Qualitätsgarantie
32 Digicomp Microsoft Evolution Day 2015
Übersetzung für Software-Engineers
Baugruppe
33 Digicomp Microsoft Evolution Day 2015
… 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
34 Digicomp Microsoft Evolution Day 2015
Die Testautomation
Visual Studio 2015
oder
mstest.exe
Unit Test Framework
Unit Test Prüfling
35 Digicomp Microsoft Evolution Day 2015
Gehört Testen zur Architektur?
Definitiv ja!
Testen soll bereits im Lösungsansatz Platz finden!
Schichtenmodell
Komponentenmodell
Ersetzbarkeit (Mocking/Simulation)
36 Digicomp Microsoft Evolution Day 2015
Unterstützung in Visual Studio 2015
37 Digicomp Microsoft Evolution Day 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)
Unterstützt auch 3rd Party Unit Test Frameworks
38 Digicomp Microsoft Evolution Day 2015
Demo
Classic Unit Tests
Happy Path Unit Tests
Alternative Path Unit Tests
Exception Path Unit Tests
Data-Driven Unit Tests
39 Digicomp Microsoft Evolution Day 2015
Scenario
public 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);
}
}
40 Digicomp Microsoft Evolution Day 2015
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);
}
…
41 Digicomp Microsoft Evolution Day 2015
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);
}
42 Digicomp Microsoft Evolution Day 2015
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.
}
43 Digicomp Microsoft Evolution Day 2015
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();
…
44 Digicomp Microsoft Evolution Day 2015
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.");
}
}
45 Digicomp Microsoft Evolution Day 2015
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
46 Digicomp Microsoft Evolution Day 2015
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
47 Digicomp Microsoft Evolution Day 2015
IntelliTest – Create Unit Test
Generieren anstelle von ausführen
Erzeugt eine PEX1-Assembly
Generierten Test ausführen
Erzeugt die Test-Methoden
Prüfen der Codeabdeckung
Bereit für die Testautomation
1) PEX = Possible Execution
48 Digicomp Microsoft Evolution Day 2015
IntelliTest – direkte Ausführung
49 Digicomp Microsoft Evolution Day 2015
IntelliTest – Resultat der Ausführung
50 Digicomp Microsoft Evolution Day 2015
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)
51 Digicomp Microsoft Evolution Day 2015
Test Explorer
52 Digicomp Microsoft Evolution Day 2015
Testüberwachung TFS 2015
53 Digicomp Microsoft Evolution Day 2015
Testdetails im TFS
54 Digicomp Microsoft Evolution Day 2015
Zusammenfassung
55 Digicomp Microsoft Evolution Day 2015
Recap
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
4. Wer testet eigentlich den Testcode?
56 Digicomp Microsoft Evolution Day 2015
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