Mit Datenanalysen Probleme in der Entwicklung aufzeigen

Java User Group Hessen, Kassel, 25.04.2019

Markus Harrer, Software Development Analyst

Twitter: @feststelltaste
Blog: feststelltaste.de

Das Problem mit den Problemen in der Softwareentwicklung

Der typische Software-Problemverlauf

Der typische Software-Problemverlauf

Der typische Software-Problemverlauf

Der typische Software-Problemverlauf

Das eigentliche Problem

Wie Daten analysieren?

The ultimate, super awesome
Quality Management Dashboard

Häufigkeit von Fragen vs. deren Risiken

Häufigkeit von Fragen vs. deren Risiken

Häufigkeit von Fragen vs. deren Risiken

Häufigkeit von Fragen vs. deren Risiken

Es braucht zusätzliche, situations-spezifische Datenanalysen!

Wie machen es andere Disziplinen?

Data Science!

Was ist Data Science?

"Datenanalysen auf nem Mac."

Frei nach https://twitter.com/cdixon/status/428914681911070720

Meine Definition von Data Science

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

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: Perfect match!

Was an Daten analysieren?

Softwaredaten!

Alles was aus der Entwicklung und dem Betrieb der Softwaresysteme so anfällt:

  • Statische Daten
  • Laufzeitdaten
  • Chronologische Daten
  • Daten aus der Software-Community

Zwischenfazit

Data Science Software Data = Software Analytics

Zwischenfazit

Data Science Software Data = Software Analytics

Definition Software Analytics

"Software Analytics is analytics on software data for managers and software engineers with the aim of empowering software development individuals and teams to gain and share insight from their data to make better decisions."

Tim Menzies and Thomas Zimmermann

Wie Software Analytics umsetzen?

Der Leitgedanke

[(Daten + Code + Ergebnis) * gedanklichen Schritt] + komplette Automatisierung

Schlüsselelement: Computational notebooks

Der Notebook-Ansatz


Technologie (1/2)

Klassischer Data-Science-Werkzeugkasten

  • Jupyter
  • Python 3
  • pandas
  • matplotlib

Technologie (2/2)

Jupyter funktioniert und integriert sich auch mit

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

Beispiele für gezielte Datenanalysen

  • Performance-Bottlenecks
  • Verborgene Teamkommunikation
  • Architektur-/Design-/Code-Smells
  • No-Go-Areas in Altanwendungen
  • ...

Praktischer Teil

Erstes Hands-On

No-Go-Areas in Altanwendungen

Der Patient

Linux

  • Betriebsystem-Kernel
  • Hat verschiedene Treiberkomponenten
  • Fast ausschließlich in C geschrieben
  • Entwickelt von über 800.000 Entwicklern

I. Idee (1/2)

Fragestellung

  • Gibt es besonders alte Komponenten, wo sich niemand mehr auskennt (No-Go-Areas)?

Heuristik

  • Wann waren die letzten Änderungen innerhalb einer Komponente?

I. Idee (2/2)

Umsetzung

  • Werkzeuge: Jupyter, Python, pandas, matplotlib
  • Datenquelle: Git Blame Log

Meta-Ziel: Grundfunktionen anhand eines einfachen Show-Cases sehen.

Ausgangsdaten: Git Blame Log

Ausgangsdaten: Git Blame Log

Ausgangsdaten: Git Blame Log

II. Datenbeschaffung

Wir laden Git Blame Daten aus einer CSV-Datei


In [1]:
import pandas as pd

log = pd.read_csv("../dataset/linux_blame_log.csv.gz")
log.head()


Out[1]:
path author timestamp line
0 drivers/scsi/bfa/bfad_drv.h Anil Gurumurthy 1448528085000000000 1
1 drivers/scsi/bfa/bfad_drv.h Anil Gurumurthy 1448528085000000000 2
2 drivers/scsi/bfa/bfad_drv.h Anil Gurumurthy 1448528085000000000 3
3 drivers/scsi/bfa/bfad_drv.h Jing Huang 1253753175000000000 4
4 drivers/scsi/bfa/bfad_drv.h Anil Gurumurthy 1448528085000000000 5

Was haben wir hier eigentlich?


In [2]:
log.info()


<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5665947 entries, 0 to 5665946
Data columns (total 4 columns):
path         object
author       object
timestamp    int64
line         int64
dtypes: int64(2), object(2)
memory usage: 172.9+ MB

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

III. Bereinigen

  • Daten sind oft nicht so, wie man sie braucht
  • Datentypen passen teilweise noch nicht

Wir wandeln die Zeitstempel um


In [3]:
log['timestamp'] = pd.to_datetime(log['timestamp'])
log.head()


Out[3]:
path author timestamp line
0 drivers/scsi/bfa/bfad_drv.h Anil Gurumurthy 2015-11-26 08:54:45 1
1 drivers/scsi/bfa/bfad_drv.h Anil Gurumurthy 2015-11-26 08:54:45 2
2 drivers/scsi/bfa/bfad_drv.h Anil Gurumurthy 2015-11-26 08:54:45 3
3 drivers/scsi/bfa/bfad_drv.h Jing Huang 2009-09-24 00:46:15 4
4 drivers/scsi/bfa/bfad_drv.h Anil Gurumurthy 2015-11-26 08:54:45 5

Wir berechnen uns das Alter jeder Codezeilenänderung


In [4]:
log['age'] = pd.Timestamp('today') - log['timestamp']
log.head()


Out[4]:
path author timestamp line age
0 drivers/scsi/bfa/bfad_drv.h Anil Gurumurthy 2015-11-26 08:54:45 1 1246 days 02:39:54.440138
1 drivers/scsi/bfa/bfad_drv.h Anil Gurumurthy 2015-11-26 08:54:45 2 1246 days 02:39:54.440138
2 drivers/scsi/bfa/bfad_drv.h Anil Gurumurthy 2015-11-26 08:54:45 3 1246 days 02:39:54.440138
3 drivers/scsi/bfa/bfad_drv.h Jing Huang 2009-09-24 00:46:15 4 3500 days 10:48:24.440138
4 drivers/scsi/bfa/bfad_drv.h Anil Gurumurthy 2015-11-26 08:54:45 5 1246 days 02:39:54.440138

IV. Anreichern

  • Vorhandenen Daten noch zusätzlich mit anderen Datenquellen verschneiden
  • Aber auch: Teile aus vorhanden Daten extrahieren

=> Dadurch werden mehrere Perspektiven auf ein Problem möglich

Wir ordnen jeder Zeilenänderung einer Komponente zu


In [5]:
log['component'] = log['path'].str.split("/").str[:2].str.join(":")
log.head()


Out[5]:
path author timestamp line age component
0 drivers/scsi/bfa/bfad_drv.h Anil Gurumurthy 2015-11-26 08:54:45 1 1246 days 02:39:54.440138 drivers:scsi
1 drivers/scsi/bfa/bfad_drv.h Anil Gurumurthy 2015-11-26 08:54:45 2 1246 days 02:39:54.440138 drivers:scsi
2 drivers/scsi/bfa/bfad_drv.h Anil Gurumurthy 2015-11-26 08:54:45 3 1246 days 02:39:54.440138 drivers:scsi
3 drivers/scsi/bfa/bfad_drv.h Jing Huang 2009-09-24 00:46:15 4 3500 days 10:48:24.440138 drivers:scsi
4 drivers/scsi/bfa/bfad_drv.h Anil Gurumurthy 2015-11-26 08:54:45 5 1246 days 02:39:54.440138 drivers:scsi


String-Operationen...die dauern. Gibt aber diverse Optimierungsmöglichkeiten!

V. Aggregieren

  • Vorhandene Daten sind oft zu viel für manuelle Sichtung
  • Neue Einsichten über Problem aber oft auf hoher Flugbahn möglich

Wir fassen nach Komponenten zusammen und arbeiten mit der jeweils jüngsten Zeilenänderung weiter


In [6]:
age_per_component = log.groupby("component")['age'].min().sort_values()
age_per_component.head()


Out[6]:
component
drivers:scsi   378 days 18:08:30.440138
drivers:i2c    378 days 19:29:05.440138
drivers:net    378 days 19:44:21.440138
drivers:of     379 days 12:03:23.440138
drivers:pci    379 days 15:50:18.440138
Name: age, dtype: timedelta64[ns]

IV. Visualisieren

  • Grafische Darstellung geben Analysen den letzten Schliff
  • Probleme können Außenstehenden visuell dargestellt besser kommuniziert werden

Wir bauen ein Diagramm mit Min-Alter pro Komponente


In [7]:
age_per_component.plot.bar(figsize=[15,5]);


Weitere Analysen

  • Code-Hotspots identifizieren
  • Refactorings nachweisen
  • Performance-Hotspots mit jQAssistant/Neo4j finden
  • Softwarerückbau mit Groovy/Tablesaw motivieren

Zusammenfassung

1. Es gibt unglaublich viele Quellen für Analysen

2. Problemanalysen mit Standard-Data-Science-Werkzeugen einfach möglich

3. Wer mehr Software Analytics will, bekommt auch mehr!

=> vom Problem über die Daten zur Erkenntnis!

Literatur

  • Adam Tornhill: Software Design X-Rays
  • 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

E-Mail: markus.harrer@innoq.com
Twitter: @feststelltaste
Blog: feststelltaste.de