Pattern Testing

Werbung
Pleiten, Pech und
PatternTesting
[email protected]
Quelle: http://commons.wikimedia.org/wiki/File:Stöwer_Titanic.jpg
Donnerstag, 28. Januar 2010
„Pleiten, Pech und PatternTesting“
(„Mishaps, Missteps and PatternTesting“)
The famous last words:
• Our program does not crash!
• This ship can‘t sink!
(Image: from http://commons.wikimedia.org/wiki/File:Stöwer_Titanic.jpg)
1
neugierig?
ängstlich?
http://www.flickr.com/photos/stalkerr/527729423/
Donnerstag, 28. Januar 2010
Ziel dieser Präsentation ist, Sie
• neugierig auf PatternTesting zu machen,
• Interesse zu wecken
• die Angst vor AOP nehmen
image from http://www.flickr.com/photos/stalkerr/527729423/
2
Donnerstag, 28. Januar 2010
some words about agentes (http:www.agentes.de):
• seit 2004
• IT-Dienstleister f. Finanzwelt und Versicherungen
• Focus: Java/JEE und „Quality Driven Development“
some words about me (Oliver Böhm, http://oli.blogger.de):
• Java seit 1999 („Dot-Com-Hype“)
• AOP/AspectJ seit 2004
• Board-Member der Java User Group Stuttgart
3
Pleiten
Pech
Pattern
Testing
Donnerstag, 28. Januar 2010
Die größten Pannen:
• Mariner 1
• Ariane 5
• Toll Collect
• Gesundheitskarte (health card)
• EC-Karte(error in security chip)
Dummerweise tauchen Fehler erst dann auf, wenn sie den größten Schaden anrichten
(Murphy‘s Law)
PatternTesting hilft dabei, diese Fehler auftauchen zu lassen, bevor die Anwendung
ausgeliefert wird.
4
Begrüßung
Pattern
Testing
Ausblick
Text
Pleiten,
Pech,
...
NPE
Exception
Einbindung
Pattern
Testing-xx
Quelle: http://de.wikipedia.org/w/index.php?title=Datei:Karte_Cook_Seereise_nr1.png
Donnerstag, 28. Januar 2010
Diese Karte von http://upload.wikimedia.org/wikipedia/commons/1/13/
Karte_Cook_Seereise_nr1.png zeigt die erste Reise von Captain James Cook. Eine
Entdeckungsreise ist in vielen Fällen vergleichbar mit einem SW-Projekt:
• es lauern viele Gefahren und Unwägbarkeiten
• man weiß nie, ob man das Ziel erreicht
• Leute gehen über Bord
• manchmal geht es überhaupt nicht voran (Flaute)
• machmal geht es ziemlich stürmisch zu
• Kapitän und Manschaft sind aufeinander angewiesen
5
Software matters...
2009
2005
Elektrik
Zündanlage
Motor
0 %
10 %
20 %
30 %
40 %
Donnerstag, 28. Januar 2010
inzwischen: SW immer stärker vertreten
Beispiel Auto: SW-Fehler (hier unter Elektrik „versteckt“) sind im Vormarsch!
Quelle:
http://www1.adac.de/Auto_Motorrad/
aaaaapannenstatistik_maengelforum/pannenstatistik_2008/teile_verursacher/default.asp?TL=2
http://www1.adac.de/Auto_Motorrad/pannenstatistik_maengelforum/pannenstatistik_2006/Verteilung_Ursachen/default.asp?ComponentID=179508&SourcePageID=179528
6
...
declare
vertical_veloc_sensor: float;
horizontal_veloc_sensor: float;
vertical_veloc_bias: integer;
horizontal_veloc_bias: integer;
...
begin
declare
pragma suppress(numeric_error, horizontal_veloc_bias);
begin
sensor_get(vertical_veloc_sensor);
sensor_get(horizontal_veloc_sensor);
vertical_veloc_bias := integer(vertical_veloc_sensor);
horizontal_veloc_bias := integer(horizontal_veloc_sensor);
...
exception
when numeric_error => calculate_vertical_veloc();
when others => use_irs1();
end;
end irs2;
Ariane 5
37 Sekunden nach Zünden der Rakete (30 Sekunden nach Liftoff)
erreichte Ariane 5 in 3700 m Flughöhe eine HorizontalGeschwindigkeit von 32768.0 (interne Einheiten).
Dieser Wert lag etwa fünfmal höher als bei Ariane 4.
Die Umwandlung in eine ganze Zahl führte daher zu einem
Überlauf, der jedoch nicht abgefangen wurde.
Der Ersatzrechner (Redundanz !) hatte das gleiche Problem schon
72 msec vorher und schaltete sich sofort ab.
Daraus resultierte, daß Diagnose-Daten zum Hauptrechner
geschickt wurden, die dieser als Flugbahndaten interpretierte.
Daraufhin wurden unsinnige Steuerbefehle an die seitlichen,
schwenkbaren Feststoff-Triebwerke, später auch an das
Haupttriebwerk gegeben, um die großen Flugabweichungen (über
20 Grad) korrigieren zu können. Die Rakete drohte jedoch
auseinanderzubrechen und sprengte sich selbst (39 sec).
http://www.flickr.com/photos/lolodoc/3845299578/
Donnerstag, 28. Januar 2010
Beispiel Ariane:
• altes Programm wurde wiederverwendet
• aber: neue Randbedingungen! (führten zu einem Überlauf)
• Tests wurden „eingespart“
7
http://www.flickr.com/photos/bitzcelt/3058009462/
Donnerstag, 28. Januar 2010
Beispiel EC-Karten / Security-Chip - sollte angeblich sicherer sein. Hat nur leider nicht ganz
funkitionert. Werden so künftig EC-Karten gegen unbefugten Zugriff abgesichert?
Bildquelle: http://www.flickr.com/photos/bitzcelt/3058009462/
8
Donnerstag, 28. Januar 2010
Geben Sie doch mal „"java.lang.NullPointerException" filetype:jsp“ in Google ein. Das Ganze
können sie noch mit „site:ihrefirma.de“ koppeln und hoffen, dass Google nichts findet.
9
Marvin: http://www.flickr.com/photos/paperpariah/2417220138/
Donnerstag, 28. Januar 2010
Wie verhält sich unsere Anwendung im Ernstfall? Lassen wir hier Marwin (den depressiven
Roboter aus „Per Anhalter durch die Galaxies“, Bild: http://www.flickr.com/photos/
paperpariah/2417220138/) mal auf unsere Anwendung los.
10
SQLException
Donnerstag, 28. Januar 2010
Ups!
11
NullPointerException
Marvin: http://www.flickr.com/photos/paperpariah/2417220138/
Donnerstag, 28. Januar 2010
Nächster Versuch...
12
Overflow
Marvin: http://www.flickr.com/photos/paperpariah/2417220138/
Donnerstag, 28. Januar 2010
nächster Versuch...
13
List<Bug> findBugs() {
...
// nothing found
return null;
}
Donnerstag, 28. Januar 2010
Beispiel: eine einfache Anwendung, um eine Käfer-Sammlung zu verwalten
(Briefmarkensammlungen sind out:-)
14
a()
b()
null
findbugs()
c()
Donnerstag, 28. Januar 2010
Anatomie einer NullPointerException
15
c() ist schuld!?
a()
b()
c()
Donnerstag, 28. Januar 2010
null
findbugs()
NPE
16
Wer ist schuld? Laut Stacktrace „c()“ - aber liegt die Ursache nicht ganz woanders? Nämlich in
„findbugs()“?
Demo
http://www.flickr.com/photos/libertinus/2847368801/
Donnerstag, 28. Januar 2010
Vorführung des demo-Projekts
17
a()
b()
Donnerstag, 28. Januar 2010
AssertionError:
findBugs()
returns null!
findbugs()
18
Fügt man PatternTesting Check.RT als AspectJ-Bibliothek hinzu (und ruft die JavaVM mit „-ea“
auf), dann knallt es jetzt in „findbugs()“. Dazu muss man
• das Projekt in ein AspectJ-Projekt wandeln (AJDT-Plugin muss installiert sein)
• unter „AspectJ Build / Aspect Path“ muss patterntesting-rt.jar und patterntesting-checkrt.jar aufgenommen werden
• Assertion müssen enabled sein (java -ea ...)
List<Bug> findBugs() {
...
// nothing found
return Collections.EMPTY_LIST;
}
Donnerstag, 28. Januar 2010
So sollte man eine leere Ergebnismenge zurückliefern!
19
Begrüßung
Pattern
Testing
Ausblick
Text
Pleiten,
Pech,
...
NPE
Einbindung
Testing
Pattern
Testing-xx
Quelle: http://de.wikipedia.org/w/index.php?title=Datei:Karte_Cook_Seereise_nr1.png
Donnerstag, 28. Januar 2010
20
Pattern
Donnerstag, 28. Januar 2010
PatternTesting besteht aus 2 Wörtern:
Pattern + Testing
21
Front End
Middle Tier
Back End
http://www.flickr.com/photos/ann/1329361/
Donnerstag, 28. Januar 2010
bekanntes Pattern: Schichtenmodell
22
AntiPattern
Donnerstag, 28. Januar 2010
Neben Pattern („Best Practices“) gibt es auch Anti-Pattern („Bad Practices“)
23
http://www.flickr.com/photos/telstar/61497944/
Donnerstag, 28. Januar 2010
bekanntes Anti-Pattern (oft anzutreffen): Spaghetti-Code
• verworener Ablauf
• keine Strukturen erkennbar
24
Lava-Flow
http://www.flickr.com/photos/wildphotons/2443327380/in/set-72157603044987010
Donnerstag, 28. Januar 2010
25
weniger bekannt, aber auch oft anzutreffen: Lava-Flow (auch bekannt als „Dead Code“)
Beschreibt den Umstand, dass in einer Anwendung immer mehr „toter Quelltext“ herumliegt. Dieser wird nicht mehr genutzt. Statt ihn zu
löschen, werden im Programm immer mehr Verzweigungen eingebaut, die um den besagten Quelltext herumlaufen oder auf ihn aufbauen.
(Quelle: http://de.wikipedia.org/wiki/Anti-Pattern)
try {
...
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Donnerstag, 28. Januar 2010
e.printStackTrace(): schlechter Stil
26
AntiPattern
Testing
Donnerstag, 28. Januar 2010
PatternTesting müsste eigentlich „Anti“-PatternTesting heißen, da es beim Aufspüren von
„Bad Practices“ hilft
27
!
try {
...
} catch (MalformedURLException e) {
logging should
be done
// TODO Auto-generated Nocatch
block
using
e.printStackTrace(); Throwable.printStackTrace()
}
Donnerstag, 28. Januar 2010
Diese Fehlermeldung („No logging should be done using Throwable.printStackTrace()“) wird
von PatternTesting zur Compile-Zeit ausgeworfen.
28
http://www.flickr.com/photos/wildphotons/2443327380/in/set-72157603044987010
Donnerstag, 28. Januar 2010
Der ClasspathMonitor dient u.a. dazu, um „erkaltete“ (tote) Klassen im Programm zu finden.
Optional kann man auch die Annotation @ProfileMe einsetzen, um Methoden zu finden, die
0-mal aufgerufen wurden.
29
ProfileStatistic
Label
Unit LastValue Hits Avg Total
patterntesting.sample.World.main(String[])
ms.
20
1
20
20
patterntesting.sample.World.printHelloAgain()ms.
0
1
0
0
new patterntesting.sample.World()
ms.
0
0
0
0
patterntesting.sample.World.printBye()
ms.
0
0
0
kalt0
http://www.flickr.com/photos/wildphotons/2443327380/in/set-72157603044987010
Donnerstag, 28. Januar 2010
Hier ein Beispiel für die ProfileStatistic - Hits = 0 bedeutet, diese Methode wurde nie
aufgerufen!
30
It is not allowed to use the JDBC API from here!
http://www.flickr.com/photos/ann/1329361/
Donnerstag, 28. Januar 2010
PatternTesting bietet auch Vorkehrungen, um Verletzungen gegen ein Schichtenmodell zu
finden.
31
http://www.flickr.com/photos/ava_babili/458428968
Donnerstag, 28. Januar 2010
Samples
Concurrent
Check.RT
Check.CT
Tools
u
o
Y
Exception
C
r
e
d
o
R u n t i m e
32
Grundlage: PatternTesting Runtime (patterntesting-rt.jar)
Diese Bibliothek kann auch als reine Java-Bibliothek eingesetzt werden. Sie enthält u.a. den
ClasspathMonitor und sämtliche Annotationen, die von den restlichen „Säulen“ verwendet
werden.
Die restlichen Bibliotheken sind so aufgebaut, dass sie jederzeit wieder ausgeblendet werden
können - entweder zur Comile-Zeit oder zur Lauf-Zeit.
how it works...
Hello.java
public class Hello {
Aspects
(PatternTesting)
...
}
WEAVING
(AspectJ)
Hello.class
http://www.flickr.com/photos/joathina/113343993/
Donnerstag, 28. Januar 2010
Wir haben:
• unsere Java-Sourcen (Hello.java)
• Aspekte (in Form der PatternTesting-Lib
Wir erhalten:
• beides zusammen in Hello.class
• durch den AspectJ-Compiler
Dieser Übersetzungsvorgang durch AspectJ wird auch als „Weaving“ bezeichnet. Intern
verwendet AspectJ dabei den Java-Compiler, d.h. wir erhalten 100% Pure-Java-Classfiles.
33
@NullArgsAllowed
Donnerstag, 28. Januar 2010
Überprüfungen werden über Annotationen gesteuert, wie z.B. @NullArgsAllowed. Mit dieser
Annotation kann z.B. die Überprüfung der Argumente auf „nicht Null“ (PatternTesting
Check.RT) deaktiviert werden.
34
@NullArgsAllowed
@MayReturnNull
Donnerstag, 28. Januar 2010
@MayReturnNull: Abschaltung der Überprüfung des Rückgabewerts
35
@NullArgsAllowed
@MayReturnNull
@TestException
Donnerstag, 28. Januar 2010
@TestException: Damit können Methoden markiert werden, die im Testfall eine Exception
werfen sollen.
36
@NullArgsAllowed
@MayReturnNull
@TestException
@Deprecated
@NotYetImplemented
@PublicForTesting
@TestThread
@ProfileMe
Donnerstag, 28. Januar 2010
...und jede Menge weiterer Annotationen
37
Co
Co nne
nn ctE
ec
x
tio ce p
n r tio
ef u n:
se
d
Donnerstag, 28. Januar 2010
Dies ist die Standard-Ausgabe der ConnectException.
Problem: enthält keine Angabe über Host und Port
http://www.flickr.com/photos/pagedooley/958854135/
socket = new Socket(host, port);
38
Co
n n C on
ec
n
tio ect
n t Ex
o b ce p
nd tio
:81 n:
5r
efu
se
d
Donnerstag, 28. Januar 2010
Die gleiche Exception, wenn PatternTesting Exception eingesetzt wird.
PatternTesting Exception „wrappt“ einige aussage-arme Exception und reichert sie um
hilfreiche Informationen an.
http://www.flickr.com/photos/pagedooley/958854135/
socket = new Socket(host, port);
39
Begrüßung
Pattern
Testing
Ausblick
Text
Pleiten,
Pech,
...
NPE
Einbindung
Testing
Pattern
Testing-xx
Quelle: http://de.wikipedia.org/w/index.php?title=Datei:Karte_Cook_Seereise_nr1.png
Donnerstag, 28. Januar 2010
Nach „Pattern“ liegt jetzt der Schwerpunkt auf „Testing“...
40
@RunTestsParallel
http://www.flickr.com/photos/lembagg/2541715558/
Donnerstag, 28. Januar 2010
@RunTestsParallel: JUnit-Tests werden parallelisiert (PatternTesting Concurrent).
Wird eine Klasse damit gekennzeichnet, werden bei der Instanziierung dieser Test-Klasse
sämtliche Test-Methoden parallel gestartet.
Voraussetzung: Test-Methoden sind unabhängig voneinander (aber das sollten sie sowieso
sein)
41
Donnerstag, 28. Januar 2010
Wie testet man die Fehlerbehandlung der Fehlerbehandlung? Wie testet man, wie eine
Anwendung auf eine „unerwartete“ Exception reagiert?
42
@ Te s t E x c e p t i o n
Exception
Factory
http://www.flickr.com/photos/extranoise/278465198/
Donnerstag, 28. Januar 2010
Exceptions können zur Laufzeit provoziert werden. Aber nur, wenn die JavaVM mit „ea“ (enable asserts) aufgerufen wurde. Damit kann z.B. getestet werden, wie meine WebAnwendung reagiert, wenn plötzlich eine SocketException geworfen wird.
Um die ExceptionFactory zu aktivieren, muss sie lediglich instanziiert werden:
ExceptionFactory.getInstance(); // alternativ: ExceptionFactory.registerAsMBean()
Dann kann sie über JMX und z.B. die jconsole angesprochen werden.
43
@PublicForTesting
Donnerstag, 28. Januar 2010
Haben Sie Methoden, die nur deswegen öffentlich sind, weil sie für‘s Testen gebraucht
werden? Damit können Sie verhindern, dass sie von anderen Test-Methoden „missbraucht“
werden.
44
@Deprecated
Donnerstag, 28. Januar 2010
Wurde eine Methode aufgerufen, die „@Deprecated“ ist? Falls ja, wird eine
DeprecatedCodeException geworfen (wenn Assertions enabled sind).
45
1.0
@RunTestOn("Mac OS X")
1.0
@SkipTestOn("Linux")
Donnerstag, 28. Januar 2010
46
Man sollte stets versuchen, seine Tests so zu schreiben, dass sie plattform-unabhängig sind.
Allerdings gibt es manchmal auch Situation, wo man sich dabei einen abbricht. Daher kann
man den Test nur für bestimmte Betriebssysteme aktivieren (@RunTestOn) oder deaktivieren
(@SkipTestOn).
Das Ganze kann man auch noch mit arch=“x86_64“ und version=“2.6.12“ kombinieren, um
Tests von ganz bestimmten Plattformen auszuschließen.
Beide Annotatations sind erst ab PatternTesting 1.0.0 verfügbar.
http://www.flickr.com/photos/maerten/370141331/
@Broken
Donnerstag, 28. Januar 2010
Haben Sie einen JUnit-Test, der plötzlich fehlschlägt und auf die Schnelle nicht repariert
werden kann? Markieren Sie ihn als @Broken:
• @Broken(since=“15-Jan-2010“)
• @Broken(till=“1-Apr-2010“) -> bis dahin sollte er dann behoben sein!
• @Broken(os=“Linux“) -> falls der Test nur unter Linux „broken“ ist
• @Broken(user=“oliver“) -> oder falls nur der User „oliver“ Probleme mit dem Test hat
(„os“ und „user“ sind erst ab PatternTesting 1.0.0 verfügbar)
47
java -ea
http://www.flickr.com/photos/tannhaeuser/2052450313/
Donnerstag, 28. Januar 2010
Alle Runtime-Checks sind so aufgebaut, dass sie nur aktiv sind, wenn Assertions enabled
sind, d.h. die JavaVM muss mit der Option „-ea“ („enable asserts“) gestartet werden.
48
Demo
http://www.flickr.com/photos/libertinus/2847368801/
Donnerstag, 28. Januar 2010
@Broken vorführen
patterntesting.samples.Bomb vorführen
49
Begrüßung
Pattern
Testing
Ausblick
Text
Pleiten,
Pech,
...
NPE
Einbindung
Testing
Pattern
Testing-xx
Quelle: http://de.wikipedia.org/w/index.php?title=Datei:Karte_Cook_Seereise_nr1.png
Donnerstag, 28. Januar 2010
50
Donnerstag, 28. Januar 2010
aktuelle Version ist 0.9.9, aber das neue Layout von SourceForge sieht etwas
unübersichtlicher aus, daher dieser (veraltete) Screenshot.
Die PatternTesting-Bibliotheken koennen entweder über SourceForge heruntergeladen
werden...
51
<dependency>
<groupId>org.patterntesting</groupId>
<artifactId>patterntesting-rt</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>net.sf.patterntesting</groupId>
<artifactId>patterntesting-rt</artifactId>
<version>0.9.9</version>
</dependency>
Donnerstag, 28. Januar 2010
52
...oder über Maven eingebunden werden. Aber Achtung: mit 1.0.0 ändert sich die GroupId zu
„org.patterntesting“.
http://www.flickr.com/photos/m-j-s/2724756177/
Donnerstag, 28. Januar 2010
Empfehlung für PatternTesting: wenn man mit Eclipse arbeitet, sollte auch das AJDT (http://
download.eclipse.org/tools/ajdt/35/update) installiert sein.
Wenn man nur den ClasspathMonitor will, kann man zwar darauf verzichten, aber man
braucht dann die Runtime-Library von AspectJ (aspectj-rt.jar).
53
Einbindung Light
patterntesting-rt.jar
ASPECTJRT_LIB (aspectjrt.jar)
Donnerstag, 28. Januar 2010
Einbindung UltraLight:
•keine AspectJ (aber aspectjrt.jar)
•nur patterntesting-rt (im Java Build Path)
Für den ClasspathMonitor werden 4 Bibliotheken benötigt:
•patterntesting-rt.jar
•aspectjrt.jar
•commons-lang-2.3.jar
•commons-io-1.3.1.jar
Unter http://oli.blogger.de gibt es eine Anleitung, wie man eine kleine Demo aufsetzen kann:
http://oli.blogger.de/stories/1394945/ bzw.
http://oli.blogger.de/static/antville/oli/files/patterntestingeinstieg.pdf
54
PatternTesting
Runtime
ClasspathMonitor.registerAsMBean();
http://www.flickr.com/photos/mormon_railfan/2615245227/
Donnerstag, 28. Januar 2010
Um ClasspathMonitor zu aktivieren, kann man:
ClasspathMonitor.registerAsMBean();
// Registrierung f. JMX
ClasspathMonitor.addAsShutdownHook(); // Dump bei Programm-Ende
Jetzt kann man den Zug (Programm) starten und am Ende auswerten, welche Strecken (Klassen)
nie benutzt wurden. Wenn man es etwas genauer will, kann man zusätzlich noch mit @ProfileMe
und der ProfileStatisticMBean tote Bahnhöfe (Methoden) aufspüren
=> hilft im Kapmpf gegen das Anti-Pattern „Java Flow“ (oder auch „Dead Code“)
55
Normal
patterntesting-rt.jar
Aspect Path
Donnerstag, 28. Januar 2010
Für den normalen Einsatz muss in Eclipse ein AspectJ-Projekt aufgesetzt werden oder ein
bestehendes Java-Projekt in ein AspectJ-Projekt gewandelt werden:
Convert to AspectJ Project
Aspect Path: patterntesting-rt.jar
Folgend Annotations werden bereits von PatternTesting Runtime unterstützt:
@Broken
@NotYetImplemented
@UnsupportedOperation
@LogThrowable
@LogRuntimeException
@ProfileMe
•
•
•
•
•
•
•
•
56
• Test-Version
•
•
Donnerstag, 28. Januar 2010
AspectJ
•
•
patterntesting-rt.jar
•
u.a.
patterntestingcheck-rt.jar
★Release-Version
•
•
•
Pure Java
patterntesting-rt.jar
andere Libs
andere Libs
57
Vorsichtige Entwickler können ohne Weiteres auch zwei Versionen bauen:
• eine Test-Version, die mit AspectJ (z.B. aus Eclipse) gebaut wird und die entsprechenden
PatternTesting-Bibliotheken einbindet
• eine reine Java-Version, die nur die patterntesting-rt.jar im normalen Java-Lib-Path
enthält (und die z.B. mit Maven gebaut wird)
@Broken
@NullArgsAllowed
@MayReturnNull
@RunTestsParallel
@LogRuntimeException
@NotYetImplemented
@PublicForTesting
@TestException
@TestThread
@ProfileMe
Donnerstag, 28. Januar 2010
In patterntesting-rt.jar befinden sich sämtliche Annotationen, die auch von den anderen
PatternTesting-Teile verwendet werden. Wird patterntesting-rt.jar als reine Java-Bibliothek
eingesetzt, haben diese Annotation allerdings nur dokumentarischen Character.
58
PatternTesting
Samples
„Example isn't another way to teach,
it is the only way to teach.“
Albert Einstein
http://www.flickr.com/photos/rcsj/2915797223/
Donnerstag, 28. Januar 2010
59
Neben der (im Aufbau befindlichen) Dokumentation gibt es noch PatternTesting Samples, das
zwei Aufgaben erfüllt:
• Ergänzung zur Dokumentation
• zum Testen von PatternTesting selbst
Daneben dient es auch als „Spiel“-Projekt, um Neues auszuprobieren (z.B. ausführbare WarDatei mit integriertem Jetty).
Begrüßung
Pattern
Testing
Ausblick
Text
Pleiten,
Pech,
...
NPE
Einbindung
Testing
Pattern
Testing-xx
Quelle: http://de.wikipedia.org/w/index.php?title=Datei:Karte_Cook_Seereise_nr1.png
Donnerstag, 28. Januar 2010
60
Rückblick
????
??????
???
gdv.xport
Donnerstag, 28. Januar 2010
PatternTesting wird bereits in mehreren Projekten (direkt oder indirekt) eingesetzt:
• Projekt „Blackbox“ für giropay (see http://www.agentes.de/index.php?id=blackbox )
• gdv.xport (see http://labs.agentes.de/gdv.xport/)
• und Andere (???...), die ungenannt bleiben wollen
(Indirekt bedeutet, dass Ideen und Code von PatternTesting verwendet und weiterentwickelt
wurden und anschließend wieder zurückgeflossen sind)
61
1.0
0.9.9
http://www.flickr.com/photos/jsome1/2226394415/
Donnerstag, 28. Januar 2010
62
Wohin geht die Reise? Für dieses Jahr ist 1.0 geplant, das auf Java 6 und AspectJ 1.6 aufsetzt.
Und eine neue Heimat unter http://patterntesting.org bekommt.
‣ Dokumentation
‣ PatternTesting All
‣ Bekanntheitsgrad steigern
‣ @Deprecated
http://www.flickr.com/photos/untitlism/2609684221/
Donnerstag, 28. Januar 2010
Hauptbaustellen sind zurzeit noch
• Dokumentation (wie in jedem OpenSource-Projekt)
• vereinfachter Download, damit man nicht jede Bibliothek einzeln runterladen muss
(PatternTesting All)
Wer Lust hat, mitzumachen oder einfach nur Anregungen zu geben, ist jederzeit herzlich
willkommen und kann mich gerne kontaktieren. Oder Sie posten es in die Mailing-Liste.
Auch wenn Sie Fragen oder Probleme haben - melden Sie sich einfach.
63
V
e
h
T
i
s
i
n
o
Donnerstag, 28. Januar 2010
In Minesweeper geht es darum, anhand der Hinweise durch den Computer die Minen auf
einem Spielfeld zu finden. „Tritt“ man aus Versehen auf eine - Game Over!
64
To be the Minesweeper
for Your Java Code!
http://www.flickr.com/photos/neodelphi/1707209395/
Donnerstag, 28. Januar 2010
PatternTesting hilft, Minen im Code zu finden...
Bildquelle: http://www.flickr.com/photos/neodelphi/1707209395/
65
a()
b()
Donnerstag, 28. Januar 2010
Game over!
ENDE
findbugs()
66
Fragen?
Fragen!
[email protected]
http://oli.blogger.de
http://PatternTesting.org
Donnerstag, 28. Januar 2010
Werfen Sie einen Blick auf http://patterntesting.org und kontaktieren Sie mich oder (besser)
die Mailing-Liste, wenn Sie Fragen oder Anregungen haben.
Happy PatternTesting!
67
Zugehörige Unterlagen
Herunterladen