Statische Analyse von Java-Code in der Praxis

download Statische Analyse von Java-Code in der Praxis

of 31

  • date post

    29-Nov-2014
  • Category

    Education

  • view

    1.044
  • download

    4

Embed Size (px)

description

Vortrag für Informatik-Studenten der Universität Rostock, im Rahmen der Projektwoche (31. 5. 2012).

Transcript of Statische Analyse von Java-Code in der Praxis

  • 1. Statische Analyse von Java-Code in der Praxis Vortragsreihe Tools in der Softwareentwicklung Roland Ewald31. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 1
  • 2. Hintergrund Modellierungs- und Simulationsframework J AMES II (http://jamesii.org) Konzipiert von Jan Himmelspach; entwickelt ber neun Jahre mit > 40 Leuten Zwar nicht gro fr Industrieverhltnisse, aber auch nicht mehr trivial klein: 396.326 LoC 782.583 Zeilen insgesamt, in 6.699 Quelldateien (Stand: 24. 5. 2012 / Revision 28784)31. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 2
  • 3. Warum statische Codeanalyse?Sonar Eingebundene Werkzeuge Integration mit anderen WerkzeugenBeispiele, Beispiele, Beispiele31. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 3
  • 4. Warum statische Codeanalyse?31. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 4
  • 5. The most important thing I have done as a programmer in recent years is to aggressively pursue static code analysis. Even more valuable than the hundreds of serious bugs I have prevented with it is the change in mindset about the way I view software reliability and code quality.John Carmackhttp://www.altdevblogaday.com/2011/12/24/static-code-analysis31. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 5
  • 6. http://en.wikipedia.org/wiki/John_D._Carmack31. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 6
  • 7. Was ist statische Codeanalyse? Code wird analysiert, ohne ihn auszufhren Meist automatisiert, d.h. durch Software (ansonsten: Code Review, z.B. http://codereview.stackexchange.com) Automatische Analyse ist schwer bzw. unmglich (Satz von Rice, Halteproblem) Heuristiken, Aufnden von Anti-Patterns, Metriken31. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 7
  • 8. 31. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 8
  • 9. Code-Metriken? Gre: z.B. Zeilen pro Datei/Klasse/Methode Komplexitt: z.B. Anzahl Parameter pro Methode Dokumentation: z.B. Anzahl an Kommentaren Homogenitt: z.B. Bennenung von Variablen31. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 9
  • 10. Technical DebtPhoto: Andres Rueda / ickr.comE. Allman: Managing technical debt. Commun. ACM, vol. 55, no. 5, pp. 50-55, May 2012.http://dx.doi.org/10.1145/2160718.216073331. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 10
  • 11. Problem: Geschwindigkeit der Analyse Viele Metriken sind wichtig Laufzeit: mehrere Stunden Lstig wird ignoriert Integration in den Arbeitsablauf Continuous Inspection http://xkcd.com/303 31. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 11
  • 12. (Open Source, kommerzielle Zusatzkomponenten) http://www.sonarsource.com31. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 12
  • 13. Sonar integriert existierende Werkzeuge PMD, CPD, Findbugs, Checkstyle, Clover, etc. ... Web-Anwendung (lokale Installation einfach mglich) Auerdem: Historie, zustzliche Metriken, Code Reviews31. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 13
  • 14. http://nemo.sonarsource.org31. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 14
  • 15. Integration ins Build-System Maven-Support: mvn sonar:sonar (Alternativ: Ant Task, Java Runner) Plug-in fr Jenkins vorhanden E-Mail Benachrichtigungen bei Events31. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 15
  • 16. IDE Integration Plugins fr Eclipse, IntelliJ IDEA, NetBeans (in der Entwicklung) Anzeige der Probleme im Editor, zustzliche Filter Lokale Analyse mglich Code Reviews als Mylyn-Tasks einbindbar31. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 16
  • 17. Beispiele1,2,3 1 Beispiele sind von mir. 2 Oder ausgedacht/adaptiert. 3 Wenn ausgedacht: in der Form schon mal gefunden.31. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 17
  • 18. Wo ist das Problem? 1 //... 2 public class PerfDBImplementation implements IPerformanceDatabase { 3 4 /** 5 * Performance database to be used 6 */ 7 PerformanceDatabase perf_db = null; 8 9 public void init(DBConnectionData dbConn) throws Exception {10 perf_db = new PerformanceDatabase(dbConn);11 Object[] params = null;12 perf_db.createBase(params);13 }1415 //...16 } 31. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 18
  • 19. Wo ist das Problem? 1 //... 2 public class FilePerformanceExtractor extends AbstractPerformanceExtractor { 3 /** The delimiter for creating the output file. */ 4 private final char DELIMITER = t; 5 //... 6 private void writeToFile(StringBuilder stringBuilder, String fileName) { 7 BufferedWriter writer = null; 8 try { 9 writer = new BufferedWriter(new FileWriter(fileName));10 writer.append(stringBuilder);11 } catch (Throwable t) {12 t.printStackTrace();13 }14 }15 //...16 } 31. 5. 2012 c 2012 UNIVERSITT ROSTOCK | LEHRSTUHL FR MODELLIERUNG & SIMULATION (PROF. UHRMACHER) 19
  • 20. Wo ist das Problem? 1 protected BenchmarkModel getEntityByResultSet(ResultSet rs) throws Exception { 2 return new BenchmarkModel(new URI(rs.getString(2)), rs.getString(3), 3 rs.getString(4), rs.getString(5)); 4 } 5 //... 6 public PortfolioPerformanceData(Double[][] perfMatrix, 7 SelectionTree[] configs) { 8 performances = perfMatrix; 9 configurations = con