Diese Folie ist absichtlich leer

Data Science on
Software Data

Markus Harrer, Software Development Analyst

@feststelltaste

Java Forum Stuttgart 2019, 04.07.2019

Data Science

Was ist Data Science?

"Statistik auf nem Mac."

Nach https://twitter.com/cdixon/status/428914681911070720

Meine Definition

Was bedeutet "data"?

"Without data you‘re just another person with an opinion."

W. Edwards Deming

=> Belastbare Erkenntnisse mittels Fakten liefern

Was bedeutet "science"?

"The aim of science is to seek the simplest explanations of complex facts."

Albert Einstein

=> Neue Erkenntnisse verständlich herausarbeiten

Vorgehen

Nach Roger Pengs "Stages of Data Analysis"
I. Fragestellung
II. Datenbeschaffung
III. Modellierung
IV. Interpretation
V. Kommunikation

=> von der Frage über die Daten zur Erkenntnis!

Was hat das mit Softwareentwicklung zu tun?

Was ist ein Data Scientist?

"Jemand, der mehr Ahnung von Statistik
  hat als ein Softwareentwickler
  und mehr Ahnung von Softwareentwicklung
  als ein Statistiker."





Nach zu https://twitter.com/cdixon/status/428914681911070720

Data Science & Software Data: Perfect match!

Software Data

Was ist Software Data?

  • Statisch
  • Laufzeit
  • Chronologisch
  • Community

=> Krass viel!

Beispiele für Analysen

  • Performance-Bottlenecks
  • Verborgene Teamkommunikation
  • Modularisierungsschnitte
  • Architektur-/Design-/Code-Smells
  • ...

=> Individuelle Analysen für individuelle Probleme!

Lösungsstrategie

Grundprinzip

(Intent + Code + Data + Results)

  • Logical Step
  • Automation = Literate Statistical Programming</code>

Implementierung: Computational notebooks

Computational Notebooks


Technik

Technologie (1/2)

Klassischer Data-Science-Werkzeugkasten

  • Jupyter (mit RISE)
  • Python 3
  • pandas
  • matplotlib

Technologie (2/2)

Jupyter funktioniert und integriert sich auch mit

  • jQAssistant / Cypher / Neo4j
  • JVM-Sprachen über beakerx / Tablesaw
  • bash
  • ...

Praktischer Teil

Erstes Hands-On

Fallbeispiel

IntelliJ IDEA

  • IDE für die Java-Entwicklung
  • Vieles in Java geschrieben
  • Großes und lang entwickeltes Projekt

I. Fragestellung (1/3)

  • Offene Frage explizit niederschreiben
  • Analyseidee verständlich darstellen

I. Fragestellung (2/3)

Frage

  • Welche Code ist besonders komplex und oft wird in letzter Zeit häufig geändert?

I. Fragestellung (3/3)

Umsetzungsidee

  • Werkzeuge: Jupyter, Python, pandas, matplotlib
  • Heuristiken:
    • "komplex": Lines of Code
    • "letzter Zeit": Letzte 3 Monate
    • "oft geändert": Anzahl Git commits

Meta-Ziel: Grundmechaniken kennenlernen.

II. Datenbeschaffung

  • Daten in Data-Science-Welt laden
  • Rohdaten bereinigen und filtern

Wir laden Git Log Daten eines Git Repos.


In [ ]:

Was haben wir hier eigentlich?


In [ ]:

1 DataFrame (~ programmierbares Excel-Arbeitsblatt), 6 Series (= Spalten), 1128819 Rows (= Einträge)

Wir wandeln die Zeitstempel von Texte in Objekte um.


In [ ]:

Wir sehen uns nur die jüngsten Änderungen an.


In [ ]:

Wir wollen nur Java-Code verwenden.


In [ ]:

III. Modellierung

  • Neue Sichten schaffen
  • Weitere Daten verschneiden

Wir aggregieren die Zeilen sowie die Anzahl der Änderungen pro Datei.


In [ ]:

Wir holen Infos über die Code-Zeilen hinzu...


In [ ]:

...und verschneiden diese mit den vorhandenen Daten.


In [ ]:

VI. Interpretation

  • Problem: Ergebnisse oft umfangreich
  • Daher: Kernaussagen klar darstellen

Wir zeigen die TOP 10 Hotspots an.


In [ ]:

V. Kommunikation

  • Ergebnisse managementtauglich darstellen
  • Nächste Schritte lostreten

Wir plotten die TOP 10 Liste als XY-Diagramm.


In [ ]:

Ende des ersten Hands-Ons

Weitere Analysen

  • Abhängigkeitsanalyse mit Daten von jdeps und Visualisierung mit D3.
  • Analyse von Performance-Hotspots mit jQAssistant / Neo4j
  • Priorisieren von Aufräumarbeiten mit Groovy / Tablesaw

Zusammenfassung

1. Analysen mit Standard-Werkzeugen einfach möglich
2. Wer mehr will bekommt auch mehr!
3. Es gibt unglaublich viele Quellen für Daten in der Softwareentwicklung

=> von der Frage über die Daten zur Erkenntnis!

Literatur

  • Adam Tornhill: Software Design X-Ray
  • Wes McKinney: Python For Data Analysis
  • Leek, Jeff: The Elements of Data Analytic Style
  • Tim Menzies, Laurie Williams, Thomas Zimmermann: Perspectives on Data Science for Software Engineering

Vielen Dank! Fragen?

Markus Harrer
innoQ Deutschland GmbH

markus.harrer@innoq.com

@feststelltaste

Demos & "Slides": https://github.com/feststelltaste/software-analytics => demos/20190704_JFS_2019/