Testen-Tutorial - Heinz Nixdorf Institut

Download Report

Transcript Testen-Tutorial - Heinz Nixdorf Institut

© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
Testen
Tutorial im Rahmen des Software(technik)praktikums
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
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
Software(technik)praktikum - Tutorial Testen
Stand: 2010
2
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
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.
Software(technik)praktikum - Tutorial Testen
Stand: 2010
3
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
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.
Software(technik)praktikum - Tutorial Testen
Stand: 2010
4
Testtechniken
 Statisch, d.h. Code wird nicht ausgeführt:
 Code-Walkthrough
 Review
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
 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
Software(technik)praktikum - Tutorial Testen
Stand: 2010
5
Unit code
Unit
test
Design
System
Other
Customer
User
specifications functional
software
requirements environment
requirements requirements specification
Unit
test
.
.
.
Integration
test
System
test
Integrated
modules
Unit code
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
Unit code
Testschritte
Performance Acceptance
test
test
Functioning Verified,
system
validated
software
Unit
test
Installation
test
Accepted
system
SYSTEM
IN USE!
[Pfleeger 2001]
Software(technik)praktikum - Tutorial Testen
Stand: 2010
6
Unit-Tests
 Unit-Test testet eine individuelle Programmeinheit auf
korrektes Verhalten.
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
 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.
Software(technik)praktikum - Tutorial Testen
Stand: 2010
7
Unit-Testplan am Beispiel
 Unit zur Errechnung des größten gemeinsamen Teilers
(GGT) zweier Integer-Zahlen (nicht beide 0)
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
 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
Software(technik)praktikum - Tutorial Testen
Stand: 2010
8
Unit-Testplan GGT
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
 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
Software(technik)praktikum - Tutorial Testen
Stand: 2010
9
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
Testfälle für GGT (1. Algorithmus)
note: Based on Euclid’s algorithm
1. function gcd (int a, int b) {
2.
int temp, value;
3.
a := abs(a);
4.
b := abs(b);
5.
if (a = 0) then
6.
value := b; // b is the GCD
7.
else if (b = 0) then
8.
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
Software(technik)praktikum - Tutorial Testen
Stand: 2010
10
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
Testfälle für GGT (1. Graph)
note: Based on Euclid’s algorithm
1. function gcd (int a, int b) {
2.
int temp, value;
3.
a := abs(a);
4.
b := abs(b);
5.
if (a = 0) then
6.
value := b; // b is the GCD
7.
else if (b = 0) then
8.
raise exception;
9.
else
10.
loop
11.
temp := b;
12.
b := a mod b;
 Basic Path Set
13.
a := temp;
14.  4 Pfadeuntil (b = 0)
15.  (1,5,6,17,18),
value :=(1,5,7,18),
a;
16.
end if;
(1,5,7,9,10,17,18),
17.
return value;
(1,5,7,9,10,9,10,17,18)
18. end
gcd
Software(technik)praktikum - Tutorial Testen
1
5
7
9
6
10
17
18
Stand: 2010
11
Testfälle für GGT (3. + 4.)
 Äquivalenzklassen
 Negative Werte, positive Werte und 0
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
• 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
Software(technik)praktikum - Tutorial Testen
Stand: 2010
12
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
Testfälle für GGT (5. Testfälle wählen)
Test Description / Data
Expected 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
Software(technik)praktikum - Tutorial Testen
Test Experience / Actual Results
Stand: 2010
13
Testautomatisierung
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
 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
Software(technik)praktikum - Tutorial Testen
Stand: 2010
14
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
JUnit
Software(technik)praktikum - Tutorial Testen
Stand: 2010
15
JUnit TestCase
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
import junit.framework.TestCase;
 Namenskonventionen:
 Test Case Class:
[classname]Test.java
public class MultiPurposeCalculatorTest extends
TestCase {
private MultiPurposeCalculator cal;
public void setUp()
{
 Test Case Method:
cal = new MultiPurposeCalculator();
test[methodname]
}
@Test
public void testGCD()
 Inzwischen wird statt JUnit 3
{
die neue Version JUnit 4
int expected=1;
assertEquals(expected, cal.gcd(17,23));
verwendet, in der sich einiges
expected=4;
geändert hat
assertEquals(expected, cal.gcd(12, 4));
 Gutes Tutorial:
expected=3;
http://www.vogella.de/articles
assertEquals(expected, cal.gcd(51,57));
expected=17;
/JUnit/article.html
assertEquals(expected, cal.gcd(17,34));
}
http://www4.comp.polyu.edu.hk/~cskwyung/labs/lab4.html
}
Software(technik)praktikum - Tutorial Testen
Stand: 2010
16
Asserts (Auszug)
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn




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.
 …
Software(technik)praktikum - Tutorial Testen
Stand: 2010
17
JUnit TestSuite
import junit.framework.Test;
import junit.framework.TestSuite;
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
public class SampleTestSuite extends TestSuite
{
public static Test suite() {
TestSuite suite = new TestSuite("Sample Tests");
 Sammeln der TestCases
und automatisches
Ausführen aller TestCases
 Rechtsklick auf TestSuite
oder TestCase und Run As
> Junit Test
// 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;
}
}
Software(technik)praktikum - Tutorial Testen
Stand: 2010
18
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
JUnit Failure Trace
Software(technik)praktikum - Tutorial Testen
Stand: 2010
19
Units mit Schnittstellen
 GGT-Unit interagiert nicht mit anderen Units.
 Andere Units können nicht so isoliert betrachtet werden.
  Test Stub
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
 Ein temporäre, minimale Implementierung einer Unit
 Beim Integrieren (Bottom-up) können die Stubs dann
durch die getesteten Units ersetzt werden.
Software(technik)praktikum - Tutorial Testen
Stand: 2010
20
Unit code
Unit
test
Design
System
Other
Customer
User
specifications functional
software
requirements environment
requirements requirements specification
Unit
test
.
.
.
Integration
test
System
test
Integrated
modules
Unit code
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
Unit code
Testschritte
Performance
test
Acceptance
test
Functioning Verified,
system
validated
software
Unit
test
Installation
test
Accepted
system
SYSTEM
IN USE!
[Pfleeger 2001]
Software(technik)praktikum - Tutorial Testen
Stand: 2010
21
Systemtest
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
 Integriertes System
 Testen der funktionalen Anforderungen
 Use Cases als Basis für die Testfallerstellung nehmen
Software(technik)praktikum - Tutorial Testen
Stand: 2010
22
Bug gefunden – und nun?
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
 Bugtracker: https://trac.cs.upb.de/swtpra2012-XY
Software(technik)praktikum - Tutorial Testen
Stand: 2010
23
Testwerkzeuge
 Wir geben für das Praktikum folgende Werkzeuge vor:
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn
 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
Software(technik)praktikum - Tutorial Testen
Stand: 2010
24
Software(technik)praktikum - Tutorial Testen
Stand: 2010
25
© Fachgebiet Softwaretechnik, Heinz Nixdorf Institut, Universität Paderborn