6. 11.05.2017 Kenne deinen Feind – täglichen Anti-Patterns 6
Testabdeckung
public class Calculator {
public int mode(int a[]) {
int maxValue = 0, maxCount = 0;
for (int i = 0; i < a.length; ++i) {
int count = 0;
for (int j = 0; j < a.length; ++j) {
if (a[j] == a[i])
++count;
}
if (count > maxCount) {
maxCount = count;
maxValue = a[i];
}
}
return maxValue;
}
}
Zyklomatische
Komplexitat: 5
7. 11.05.2017 Kenne deinen Feind – täglichen Anti-Patterns 7
Testabdeckung
public class Calculator {
public int mode(int a[]) {
int maxValue = 0, maxCount = 0;
for (int i = 0; i < a.length; ++i) {
int count = 0;
if (count > maxCount) {
maxCount = count;
maxValue = a[i];
}
}
return maxValue;
}
}
Zyklomatische
Komplexitat: 3
8. 11.05.2017 Kenne deinen Feind – täglichen Anti-Patterns 8
Testabdeckung
public class Calculator {
public int mode(int a[]) {
int maxValue = 0, maxCount = 0;
int count = 0;
if (count > maxCount) {
maxCount = count;
maxValue = a[i];
}
return maxValue;
}
}
Zyklomatische
Komplexitat: 2
9. 11.05.2017 Kenne deinen Feind – täglichen Anti-Patterns 9
Testabdeckung
public class Calculator {
public int mode(int a[]) {
int maxValue = 0, maxCount = 0;
return maxValue;
}
}
Zyklomatische
Komplexitat: 1
10. 11.05.2017 Kenne deinen Feind – täglichen Anti-Patterns 10
Testabdeckung
public abstract class Calculator {
public abstract int mode(int a[]);
}
Zyklomatische
Komplexitat: ?
11. 100% Testabdeckung ist nicht realisierbar!!
Test GOs
• Definition ab wann ein Test Pflicht ist (DoD)
• Test Coverage lokal prüfen (EclEmma)
• Arrange – Act – Assert
Test No-GOs
• Lange Testlaufzeiten
• Tests ignorieren (@Ignore)
• // Tests auskommentieren
• Tests löschen
11.05.2017 Kenne deinen Feind – täglichen Anti-Patterns 11
Testabdeckung
22. Was sind die tatsächlichen Probleme?
Datenbank
• Fehlender oder falscher Index
• Schlechter SQL Query
• Konfiguration (Connection Pools, Partitionierung, …)
Datenübertragung
• Große Datenmengen
• Zu viele Requests
• Schlechte (keine) Request Timeouts
Logging
GC, Thread Pools, …
11.05.2017 Kenne deinen Feind – täglichen Anti-Patterns 22
Code Optimierung
23. Wann sollte der Code optimiert werden?
Informatik ist keine Wissenschaft der Konjunktive!
Optimiere Schrittweise
11.05.2017 Kenne deinen Feind – täglichen Anti-Patterns 23
Code Optimierung
“The First Rule of Program Optimisation: Don't do it.
The Second Rule of Program Optimisation (for experts only!): Don't do it yet.”
Michael A. Jackson
28. Coding Conventions fangen bereits bei der Formatierung an
Einheitliche Code Formatierung…
• führt zu leichter lesbaren Code
• reduziert Merge Aufwände erheblich
• verbessert die Wartbarkeit von Software
Lösungsansätze
• Wiki Dokumentation
• Konfigurationsdatei
• Vorkonfigurierte IDE Distribution
• IDE unabhängige Ansätze
→Maven Plugin
→SCM Hook
11.05.2017 Kenne deinen Feind – täglichen Anti-Patterns 28
Kollaboration
30. 1. Read the Error Message
2. Seriously, Read the Error Message!
3. Check your notes of previously solved
problems
4. Google the “error you are getting”
5. Read the results you find
6. Seriously, read the results!
7. Ask your rubber duck
8. Ask a peer
9. Ask an expert
10.Record your solution
11.05.2017 Kenne deinen Feind – täglichen Anti-Patterns 30
Stuck in the Muck
https://8thlight.com/blog/doug-bradbury/2013/10/08/stuck-in-the-muck.html
31. 11.05.2017 Kenne deinen Feind – täglichen Anti-Patterns 31
Big Ball of Mud
“Everyone has a plan until they get punched in the mouth”
Mike Tyson
32. EXXETA AG
Albert-Nestler-Straße 19
76131 Karlsruhe
tel +49 721 50994-5000
e-mail info@EXXETA.com
EXXETA.com
EXXETA Standorte
Karlsruhe | Berlin | Bratislava | Frankfurt | Leipzig | Mannheim | München | Stuttgart | Zürich
I think we could build a better one.
William Boeing