ALM & DevOps Day - download.microsoft.comdownload.microsoft.com/documents/de-ch/almdays/Testing...

Preview:

Citation preview

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

rolf.wenger@weroSoft.net

Recommended