http://www.opitz-consulting.com
Oft erweisen sich Unittests gerade dann als problematisch, wenn bestehender Code geändert werden soll. Kleine Änderungen am produktiven Code erfordern nicht selten wesentlich umfangreichere Änderungen in den Unittests.
In diesem Vortrag mit anschließendem LiveCoding bei der OOP 2017 in München erklärte unser Experte Thomas Papendieck, warum solche Probleme entstehen und wie man sie vermeidet.
UnitTests sind ein wichtiger Bestandteil bei der Qualitätssicherung. Sie können ihre Vorteile aber nur dann voll entfalten, wenn sie die Weiterentwicklung des produktiven Codes nicht behindern.
Die Präsentation zeigt den Zusammenhang zwischen Code-Architektur, Testbarkeit und Qualität der Unittests und wie "CleanCode" sowie der Einsatz von Mocking-Frameworks zu besseren Unittests (und besserem Code) führen.
Performance is a key component of usability and crucial for the user experience, especially in today's modern user interfaces where graphical elements are being animated and transitioned. Bringing Qt Everywhere means a significant need for speed across desktop and embedded platforms. This presentation will give you a brief overview of performance improvements done in Qt, and will be highly interactive with hands-on sessions on how to squeeze every last drop of performance out of your Qt application.
Presentation by Bjørn Erik Nilsen held during Qt Developer Days 2009.
http://qt.nokia.com/whatsnew
A preview of the MSR 2013 conference, May 18-19, 2013, in San Francisco, CA. REGISTER NOW! Early registration discounts until April 14. http://msrconf.org
http://www.opitz-consulting.com
Oft erweisen sich Unittests gerade dann als problematisch, wenn bestehender Code geändert werden soll. Kleine Änderungen am produktiven Code erfordern nicht selten wesentlich umfangreichere Änderungen in den Unittests.
In diesem Vortrag mit anschließendem LiveCoding bei der OOP 2017 in München erklärte unser Experte Thomas Papendieck, warum solche Probleme entstehen und wie man sie vermeidet.
UnitTests sind ein wichtiger Bestandteil bei der Qualitätssicherung. Sie können ihre Vorteile aber nur dann voll entfalten, wenn sie die Weiterentwicklung des produktiven Codes nicht behindern.
Die Präsentation zeigt den Zusammenhang zwischen Code-Architektur, Testbarkeit und Qualität der Unittests und wie "CleanCode" sowie der Einsatz von Mocking-Frameworks zu besseren Unittests (und besserem Code) führen.
Performance is a key component of usability and crucial for the user experience, especially in today's modern user interfaces where graphical elements are being animated and transitioned. Bringing Qt Everywhere means a significant need for speed across desktop and embedded platforms. This presentation will give you a brief overview of performance improvements done in Qt, and will be highly interactive with hands-on sessions on how to squeeze every last drop of performance out of your Qt application.
Presentation by Bjørn Erik Nilsen held during Qt Developer Days 2009.
http://qt.nokia.com/whatsnew
A preview of the MSR 2013 conference, May 18-19, 2013, in San Francisco, CA. REGISTER NOW! Early registration discounts until April 14. http://msrconf.org
Empirical Software Engineering at Microsoft ResearchThomas Zimmermann
An invited talk that I gave in Tokyo. Very special thanks to Shuji Morisaki who was my translator during the session. Many thanks to Chris Bird, Nachi Nagappan, Rahul Premraj, and Sascha Just who provided slides for this talk.
Empirical Software Engineering at Microsoft ResearchThomas Zimmermann
An invited talk that I gave in Tokyo. Very special thanks to Shuji Morisaki who was my translator during the session. Many thanks to Chris Bird, Nachi Nagappan, Rahul Premraj, and Sascha Just who provided slides for this talk.
1. Was Software-Archive
erzählen
Stephan Diehl • Universität Trier
Andreas Zeller • Universität des Saarlandes
Tom Zimmermann • Universität des Saarlandes
2. Was Software-Archive
erzählen
Stephan Diehl • Universität Trier
Andreas Zeller • Universität des Saarlandes
Tom Zimmermann • Universität des Saarlandes
3. Was Software-Archive
erzählen
Stephan Diehl • Universität Trier
Andreas Zeller • Universität des Saarlandes
Tom Zimmermann • Universität des Saarlandes
17. In 64% aller Änderungen enthalten die besten
drei Vorschläge eine korrekte Stelle
Zimmermann et al. (TSE 2005) funded by IBM Eclipse Innovation Grant
18. Gleichzeitige Änderungen
buildnotes_compare.html
public API
internal files
Coupling for
ComparePreferencePage.java
and plugin.properties
Burch et al.
(SoftVis 2005)
EPOSEE
icons
www.eposoft.org
19. Was muss ich Welche Module
noch ändern? muss ich testen?
Fehler • Änderungen • Versionen
20. Was muss ich Welche Module
noch ändern? muss ich testen?
Fehler • Änderungen • Versionen
26. Womit können wir
Fehlschläge vorhersagen?
Früheres Fehlschlagen
7 2
12 1
6
8
15 1
2
14
1
wenn wir Fehlschläge haben
(und sie uns leisten können)
27. Womit können wir
Fehlschläge vorhersagen?
Früheres Fehlschlagen
7 2
12 1
6
8
15 1
2
14
1
wenn wir Fehlschläge haben
(und sie uns leisten können)
28. Womit können wir
Fehlschläge vorhersagen?
Früheres Fehlschlagen Komplexitäts-Metriken
7 2
12 1
6
8
15 1
2
14
1
wenn wir wissen,
wenn wir Fehlschläge haben
welche die richtige ist
(und sie uns leisten können)
29. Womit können wir
Fehlschläge vorhersagen?
Früheres Fehlschlagen Komplexitäts-Metriken
public static void main(String[] args)
{
7 2 ! //{{{ Check for Java 1.4 or later
12 1 ! String javaVersion = System.getProperty(quot;java.versionquot;);
! if(javaVersion.compareTo(quot;1.4quot;) < 0)
!{
! ! System.err.println(quot;You are running Java version quot;
6
8
15 1 ! ! ! + javaVersion + quot;.quot;);
2 ! ! System.err.println(quot;jEdit requires Java 1.4 or later.quot;);
! ! System.exit(1);
! } //}}}
14 ! // later on we need to know if certain code is called from
1 ! // the main thread
! mainThread = Thread.currentThread();
! settingsDirectory = quot;.jeditquot;;
! ...
wenn wir wissen,
wenn wir Fehlschläge haben
welche die richtige ist
(und sie uns leisten können)
30. Womit können wir
Fehlschläge vorhersagen?
Früheres Fehlschlagen Komplexitäts-Metriken
public static void main(String[] args)
{
7 2 ! //{{{ Check for Java 1.4 or later
12 1 ! String javaVersion = System.getProperty(quot;java.versionquot;);
Method Lines of Code ! ! ! 301
! if(javaVersion.compareTo(quot;1.4quot;) < 0)
!{
! ! System.err.println(quot;You are running Java version quot;
6 ! ! ! + javaVersion Block Depth
Nested + quot;.quot;); !! ! ! 5
8
15 1
2 ! ! System.err.println(quot;jEdit requires Java 1.4 or later.quot;);
! ! System.exit(1);
McCabe Cylcomatic Complexity!! 62
! } //}}}
14 ! // later on we need to know if certain code is called from
1 ! // the main thread
Number of parameters ! ! ! ! 1
! mainThread = Thread.currentThread();
! settingsDirectory = quot;.jeditquot;;
! ...
wenn wir wissen,
wenn wir Fehlschläge haben
welche die richtige ist
(und sie uns leisten können)
40. Korrelieren Metriken
mit Fehlverhalten?
Projekt Korrelierte Metriken
A #Classes und 5 abgeleitete
41. Korrelieren Metriken
mit Fehlverhalten?
Projekt Korrelierte Metriken
A #Classes und 5 abgeleitete
B fast alle
42. Korrelieren Metriken
mit Fehlverhalten?
Projekt Korrelierte Metriken
A #Classes und 5 abgeleitete
B fast alle
C alle außer MaxInheritanceDepth
43. Korrelieren Metriken
mit Fehlverhalten?
Projekt Korrelierte Metriken
A #Classes und 5 abgeleitete
B fast alle
C alle außer MaxInheritanceDepth
D nur #Lines
44. Korrelieren Metriken
mit Fehlverhalten?
Projekt Korrelierte Metriken
A #Classes und 5 abgeleitete
B fast alle
C alle außer MaxInheritanceDepth
D nur #Lines
E #Functions, #Arcs, McCabe
45. Korrelieren Metriken
mit Fehlverhalten?
Projekt Korrelierte Metriken
JA
A #Classes und 5 abgeleitete
B fast alle
C alle außer MaxInheritanceDepth
D nur #Lines
E #Functions, #Arcs, McCabe
47. Gibt es universelle
Metriken?
Projekt Korrelierte Metriken
A #Classes und 5 abgeleitete
B fast alle
C alle außer MaxInheritanceDepth
D nur #Lines
E #Functions, #Arcs, McCabe
48. Gibt es universelle
Metriken?
Projekt Korrelierte Metriken
NEIN
A #Classes und 5 abgeleitete
B fast alle
C alle außer MaxInheritanceDepth
D nur #Lines
E #Functions, #Arcs, McCabe
50. Können wir Fehlerorte
vorhersagen?
• Grundidee: Metriken kombinieren und
Regressions-Modelle ableiten
51. Können wir Fehlerorte
vorhersagen?
• Grundidee: Metriken kombinieren und
Regressions-Modelle ableiten
• In diese können wir Metriken stecken, um die
Fehlerwahrscheinlichkeit vorherzusagen
52. Können wir Fehlerorte
vorhersagen?
• Grundidee: Metriken kombinieren und
Regressions-Modelle ableiten
• In diese können wir Metriken stecken, um die
Fehlerwahrscheinlichkeit vorherzusagen
• Module können anhand der
Fehlerwahrscheinlichkeit sortiert werden
53. Können wir Fehlerorte
vorhersagen?
Projekt #Komponenten R 2-Wert
A 9 0.741
B 6 0.779
C 7 0.579
D 7 0.684
E 5 0.919
54. Können wir Fehlerorte
vorhersagen?
Projekt #Komponenten R 2-Wert
JA
A 9 0.741
B 6 0.779
C 7 0.579
D 7 0.684
E 5 0.919
60. Imports in Eclipse
71% aller Komponenten, die compiler importieren,
müssen korrigiert werden
import org.eclipse.jdt.internal.compiler.lookup.*;
import org.eclipse.jdt.internal.compiler.*;
import org.eclipse.jdt.internal.compiler.ast.*;
import org.eclipse.jdt.internal.compiler.util.*;
...
import org.eclipse.pde.core.*;
import org.eclipse.jface.wizard.*;
import org.eclipse.ui.*;
Schröter/Zimmermannl/Zeller (Tech. Report)
61. Imports in Eclipse
71% aller Komponenten, die compiler importieren,
müssen korrigiert werden
import org.eclipse.jdt.internal.compiler.lookup.*;
import org.eclipse.jdt.internal.compiler.*;
import org.eclipse.jdt.internal.compiler.ast.*;
import org.eclipse.jdt.internal.compiler.util.*;
...
import org.eclipse.pde.core.*;
import org.eclipse.jface.wizard.*;
import org.eclipse.ui.*;
14% aller Komponenten, die ui importieren,
müssen korrigiert werden
Schröter/Zimmermannl/Zeller (Tech. Report)
62. Imports in Eclipse
Korrelation mit Fehlschlagen
import org.eclipse.jdt.internal.compiler.lookup.*;
import org.eclipse.jdt.internal.compiler.*;
import org.eclipse.jdt.internal.compiler.ast.*;
import org.eclipse.jdt.internal.compiler.util.*;
...
import org.eclipse.pde.core.*;
import org.eclipse.jface.wizard.*;
import org.eclipse.ui.*;
Korrelation mit Erfolg
63. Imports in Eclipse
Korrelation mit Fehlschlagen
Compiler-Code • Interna • Core-Funktionalität
GUI-Code • Standard-Java-Klassen • Hilfstexte
Korrelation mit Erfolg
64. Imports in Eclipse
Korrelation mit Fehlschlagen
Compiler-Code • Interna • Core-Funktionalität
Welche sollte man
am meisten testen?
GUI-Code • Standard-Java-Klassen • Hilfstexte
Korrelation mit Erfolg
68. Vorhersage
fehlerträchtiger Module
• Analog zu Microsoft-Ansatz,
aber Imports statt Metriken
• Basis: Eclipse mit Fehlerdatenbank (Bugzilla)
und Versionsdatenbank (CVS)
• 36% der Packages waren fehlerträchtig
(= mussten nachträglich korrigiert werden)
69. Vorhersage
fehlerträchtiger Module
• Analog zu Microsoft-Ansatz,
aber Imports statt Metriken
• Basis: Eclipse mit Fehlerdatenbank (Bugzilla)
und Versionsdatenbank (CVS)
• 36% der Packages waren fehlerträchtig
(= mussten nachträglich korrigiert werden)
• Vorhersage mit Support-Vektor-Maschine
79. Fazit
Software-Archive erzählen viel über ein Projekt
Wertvolle Daten für neue Anwendungen:
Vorhersage verwandter Änderungen
Vorhersage fehlerträchtiger Module
80. Fazit
Software-Archive erzählen viel über ein Projekt
Wertvolle Daten für neue Anwendungen:
Vorhersage verwandter Änderungen
Vorhersage fehlerträchtiger Module
Wenig zusätzlicher Aufwand nötig