+ All Categories
Home > Documents > © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des...

© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des...

Date post: 05-Apr-2015
Category:
Upload: mann-dueck
View: 105 times
Download: 0 times
Share this document with a friend
25
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen
Transcript
Page 1: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Tutorial im Rahmen des Software(technik)praktikums

Testen

Page 2: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Grundlagen (1)

Softwaretest ist ein fundamentales Element in der Softwarequalitätssicherung

Softwaretest wird am häufigsten eingesetzt Viele Organisationen benötigen 40-50 % der

Entwicklungszeit für das Testen

2Stand: 2010

Page 3: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Grundlagen (2)

Testen befasst sich mit dem Auffinden, dass Fehler existieren.

Debuggen befasst sich damit zu finden, wo genau der Fehler enthalten ist (Code, Design, Anforderungen) und den Fehler zu beheben.

Auch wenn die besten Review-Methoden eingesetzt werden, ist Testen wichtig.

3Stand: 2010

Page 4: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Grundlagen (3)

„A successful test in one that breaks the software.“ [McConnell 1993]

Ein guter Test findet also Fehler, die bisher unentdeckt waren.

Testen kann nicht die Abwesenheit von Fehlern zeigen! Für komplexe Software ist vollständiges Testen nicht

möglich.

4Stand: 2010

Page 5: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Testtechniken

Statisch, d.h. Code wird nicht ausgeführt: Code-Walkthrough Review

Dynamisch, d.h. Code wird ausgeführt mit Testdaten: Black-Box

• Kein Einblick in Code• Testfälle werden anhand von Spezifikationen und Schnittstellen

erstellt White-Box

• Analyse des Codes, um Testfälle zu erstellen

5Stand: 2010

Page 6: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Testschritte

6Stand: 2010

Unittest

Unittest

Unittest

Integrationtest

Systemtest

Performancetest

Acceptancetest

Installationtest

Un

it c

od

eU

nit

co

de

Un

it c

od

e

.

.

.

Integratedmodules

Functioningsystem

Verified,validatedsoftware

Acceptedsystem

SYSTEMIN USE!

Designspecifications

Systemfunctionalrequirements

Othersoftwarerequirements

Customerrequirementsspecification

Userenvironment

[Pfleeger 2001]

Page 7: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Unit-Tests

Unit-Test testet eine individuelle Programmeinheit auf korrektes Verhalten.

Was ist eine Unit? „Kleinste kompilierbare Einheit“ „Stand alone procedure of function“ „Kann von einer einzelnen Person implementiert werden“

Unit-Tests werden typischerweise vom Entwickler selbst ausgeführt.

7Stand: 2010

Page 8: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Unit-Testplan am Beispiel

Unit zur Errechnung des größten gemeinsamen Teilers (GGT) zweier Integer-Zahlen (nicht beide 0) GGT(a,b) = c

• c ist ein positiver Integer-Wert• c ist gemeinsamer Teiler von a und b• c ist größer als alle gemeinsamen Teiler von a und b

Beispiele: GGT(45,27) = 9 GGT(7, 13) = 1 GGT(-12, 15) = 3 GGT(13, 0) = 13 GGT(0,0) nicht definiert

8Stand: 2010

Page 9: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Unit-Testplan GGT

Finden der Testfälle:1. Algorithmus schreiben

2. Pfadgraph erstellen und mit Überdeckungskriterium analysieren (White-Box)

3. Äquivalenzklassen bestimmen

4. Grenzwerte bestimmen

5. Testfälle auswählen

9Stand: 2010

Page 10: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Testfälle für GGT (1. Algorithmus)

10Stand: 2010

note: Based on Euclid’s algorithm1. function gcd (int a, int b) {2. int temp, value;3. a := abs(a);4. b := abs(b);5. if (a = 0) then6. value := b; // b is the

GCD7. else if (b = 0) then8. raise exception;9. else 10. loop 11. temp := b;12. b := a mod b;13. a := temp;14. until (b = 0) 15. value := a;16. end if;17. return value;18. end gcd

Page 11: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Testfälle für GGT (1. Graph)

11Stand: 2010

note: Based on Euclid’s algorithm1. function gcd (int a, int b) {2. int temp, value;3. a := abs(a);4. b := abs(b);5. if (a = 0) then6. value := b; // b is the

GCD7. else if (b = 0) then8. raise exception;9. else 10. loop 11. temp := b;12. b := a mod b;13. a := temp;14. until (b = 0) 15. value := a;16. end if;17. return value;18. end gcd

1

5

9

17

7

6

18

10 Basic Path Set 4 Pfade (1,5,6,17,18), (1,5,7,18),

(1,5,7,9,10,17,18), (1,5,7,9,10,9,10,17,18)

Page 12: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Testfälle für GGT (3. + 4.)

12Stand: 2010

Äquivalenzklassen Negative Werte, positive Werte und 0

• a < 0 and b < 0, a < 0 and b > 0, a > 0 and b < 0• a > 0 and b > 0, a = 0 and b < 0, a = 0 and b > 0• a > 0 and b = 0, a > 0 and b = 0, a = 0 and b = 0

Grenzwerte a = -231, -1, 0, 1, 231-1 and b = -231, -1, 0, 1, 231-1

Page 13: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Testfälle für GGT (5. Testfälle wählen)

13Stand: 2010

Test Description / Data Expected Results Test Experience / Actual Results

Basic Path Set

path (1,5,6,17,18) (0, 15) 15

path (1,5,7,18) (15, 0) 15

path (1,5,7,9,10,17,18) (30, 15) 15

path (1,5,7,9,10,9,10,17,18) (15, 30) 15

Equivalence Classes

a < 0 and b < 0 (-27, -45) 9

a < 0 and b > 0 (-72, 100) 4

a > 0 and b < 0 (121, -45) 1

a > 0 and b > 0 (420, 252) 28

a = 0 and b < 0 (0, -45) 45

a = 0 and b > 0 (0 , 45) 45

a > 0 and b = 0 (-27, 0) 27

a > 0 and b = 0 (27, 0) 27

a = 0 and b = 0 (0 , 0) exception raised

Boundary Points

(1 , 0) 1

(-1 , 0) 1

(0 , 1) 1

(0 , -1) 1

(0 , 0) (redundant) exception raised

(1, 1) 1

(1, -1) 1

(-1, 1) 1

(-1, -1) 1

Page 14: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Testautomatisierung

Jetzt haben wir die Testfälle, aber wie testen wir sie? JUnit-Framework (Plugin für Eclipse)

Trennung von Programm-Code und Test-Code Bequemes Schreiben der Unit-Tests Automatische Ausführung

14Stand: 2010

Page 15: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

JUnit

15Stand: 2010

Page 16: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

JUnit TestCase

16Stand: 2010

import junit.framework.TestCase;

public class MultiPurposeCalculatorTest extends TestCase {private MultiPurposeCalculator cal;public void setUp(){ cal = new MultiPurposeCalculator();}@Testpublic void testGCD(){

int expected=1;assertEquals(expected, cal.gcd(17,23));expected=4;assertEquals(expected, cal.gcd(12, 4));expected=3;assertEquals(expected, cal.gcd(51,57));expected=17;assertEquals(expected, cal.gcd(17,34));}}

Namenskonventionen: Test Case Class:

[classname]Test.java

Test Case Method: test[methodname]

Inzwischen wird statt JUnit 3 die neue Version JUnit 4 verwendet, in der sich einiges geändert hat Gutes Tutorial:

http://www.vogella.de/articles/JUnit/article.html

http://www4.comp.polyu.edu.hk/~cskwyung/labs/lab4.html

Page 17: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Asserts (Auszug)

http://junit.org/apidocs/org/junit/Assert.html assertArrayEquals(byte[] expecteds, byte[] actuals) assertArrayEquals(char[] expecteds, char[] actuals) assertFalse(boolean condition): Asserts that a condition is

false. assertNull(java.lang.Object object): Asserts that an object

is null. assertTrue(java.lang.String message, boolean condition):

Asserts that a condition is true. …

17Stand: 2010

Page 18: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

JUnit TestSuite

Sammeln der TestCases und automatisches Ausführen aller TestCases

Rechtsklick auf TestSuite oder TestCase und Run As > Junit Test

18Stand: 2010

import junit.framework.Test;import junit.framework.TestSuite;

public class SampleTestSuite extends TestSuite{ public static Test suite() {

TestSuite suite = new TestSuite("Sample Tests");

// Add one entry for each test class // or test suite.suite.addTestSuite(MultiPurposeCalculatorTest.class);suite.addTestSuite(MultiPurposeCalculatorTest2.class);// For a master test suite, use this pattern. // (Note that here, it's recursive!) suite.addTest(SampleTestSuite2.suite());

return suite;}}

Page 19: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

JUnit Failure Trace

19Stand: 2010

Page 20: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Units mit Schnittstellen

GGT-Unit interagiert nicht mit anderen Units. Andere Units können nicht so isoliert betrachtet werden. Test Stub

Ein temporäre, minimale Implementierung einer Unit

Beim Integrieren (Bottom-up) können die Stubs dann durch die getesteten Units ersetzt werden.

20Stand: 2010

Page 21: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Testschritte

21Stand: 2010

Unittest

Unittest

Unittest

Integrationtest

Systemtest

Performancetest

Acceptancetest

Installationtest

Un

it c

od

eU

nit

co

de

Un

it c

od

e

.

.

.

Integratedmodules

Functioningsystem

Verified,validatedsoftware

Acceptedsystem

SYSTEMIN USE!

Designspecifications

Systemfunctionalrequirements

Othersoftwarerequirements

Customerrequirementsspecification

Userenvironment

[Pfleeger 2001]

Page 22: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Systemtest

Integriertes System Testen der funktionalen Anforderungen Use Cases als Basis für die Testfallerstellung nehmen

22Stand: 2010

Page 23: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Bug gefunden – und nun?

Bugtracker: https://trac.cs.upb.de/swtpra2012-XY

23Stand: 2010

Page 24: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen

Testwerkzeuge

Wir geben für das Praktikum folgende Werkzeuge vor:

JUnit (http://www.junit.org/index.htm)

EMMA (http://emma.sourceforge.net/index.html): ein Open-source Testwerkzeug zur Messung von Anweisungsüberdeckungen. Bzw. EclEmma (http://www.eclemma.org/userdoc/index.html): Emma für Eclipse

24Stand: 2010

Page 25: © Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn Tutorial im Rahmen des Software(technik)praktikums Testen.

© F

achg

ebie

t S

oftw

aret

echn

ik,

Hei

nz N

ixdo

rf I

nstit

ut,

Uni

vers

ität

Pad

erbo

rn

Software(technik)praktikum - Tutorial Testen 25Stand: 2010


Recommended