Wissensmonopole treten auch in Softwareprojekten auf. Ein Entwickler entwickelt fleißig an Teilen des Projekts. Dokumentiert er seine Arbeit nicht, bleibt das Wissen in seinem Kopf. Es bildet sich ein Wissens- oder auch Kopfmonopol. Wird der Entwickler nun krank oder kündigt, muss sich ein anderer mühsam einarbeiten. Das kostet Zeit und Geld. Wissensmonopole sollten also so früh wie möglich entdeckt und aufgelöst werden.
Wie findest du heraus, ob es in deinem Projekt Wissensmonopole gibt? Git kann dabei helfen diese aufzudecken.
Wer weiß was?
Von Waffeleisen und Wissenslücken
Wissensmonopole in Projekten mit Git aufdecken.
Hast du ein Waffeleisen zuhause?
Ich auch. Dachte ich zumindest. Letztens wollte ich Waffeln zubereiten. Mehl, Eier, Butter und Zucker verrührt – fehlt nur das Waffeleisen. Ein Blick in unseren Küchenschrank – kein Waffeleisen. Ich schicke eine Nachricht an meine Freundin. Die ernüchternde Antwort kam prompt: „Das Waffeleisen habe ich verschenkt.“
Okay, fragst du dich, aber was hat das jetzt mit git, Softwareprojekten und Wissensmonopolen zu tun?
In meiner kleinen Anekdote wusste nur meine Freundin, wo unser Waffeleisen geblieben ist. Sie besaß ein Wissensmonopol.
Was ist Git?
git ist ein Versionskontrollsystem. Es ermöglicht Entwicklern gemeinsam an einem Projekt (in git „Repository“ genannt) zu arbeiten. Entwickler pflegen parallel Änderungen („Commits“) in das Repository ein. In einem git-Repository stecken allerdings nicht nur die Projektdaten. Denn git schreibt mit.
Git schreibt mit – Metadaten eines Gitprojekts
Zu jeder Änderung hält git auch Metadaten fest. Etwa das Änderungsdatum, den Autor oder die Anzahl veränderter Dateien. Einblick in diese Metadaten geben git-befehle wie zB. git log oder git blame.
Mithilfe dieser Metadaten können etwa folgende Fragen beantwortet werden:
- Welche Änderungen wurden in einem Zeitraum vorgenommen?
- Wie aktiv wird am Projekt entwickelt?
- Wie viele Entwickler sind (aktiv) am Projekt beteiligt?
Oder auch:
- Wo befinden sich mögliche Wissensmonopole im Projekt?
Diese Frage lässt sich mithilfe des git-Befehls git blame beantworten.
Als Beispielprojekt dient uns das Repository zu Visual Studio Code von Microsoft. Das Projekt ist öffentlich auf Github verfügbar. (Hinweis: Die Auswertung erfolgte zum 01.04.2020).
Ein paar Eckdaten zum Projekt:
- Rund 1.100 Mitwirkende (Contributors)
- 64.000 Commits
- 4.300 Dateien
- rund 900.000 Zeilen Code
Was macht git blame?
git blame zeigt für eine Datei zeilenweise in welcher Version sie von welchem Autor geändert wurde. Ein Beispiel:
Zeile | Zeileninhalt | Autor | Commit | Datum |
1 |
#!/usr/bin/env bash |
Daniel Imms | e29c517386f | 2017-10-06 09:33:22 |
2 |
set -e |
Joao Moreno | 460783f343a | 2016-03-08 11:50:56 |
3 |
|
Joao Moreno | 460783f343a | 2016-03-08 11:50:56 |
4 |
if [[ „$OSTYPE“ == „darwin“* ]]; then |
Joao Moreno | 460783f343a | 2016-03-08 11:50:56 |
5 |
realpath() { [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"; } |
Joao Moreno | 460783f343a | 2016-03-08 11:50:56 |
Beispielausgabe von git blame
An der Datei wirkten 2 Autoren mit (Daniel Imms & Joao Moreno), die letzte Änderung erfolgte am 06.10.2017 (Zeile 1, rechts). Gibt es hier also ein Wissensmonopol? Vermutlich nicht. Denn: Je mehr Autoren an einer Datei mitwirken, desto unwahrscheinlicher ist ein Wissensmonopol. Dateien mit nur einem Autor hingegen deuten auf ein Wissensmonopol hin. So ließe sich jetzt jede einzelne Datei untersuchen. Doch übersichtlich ist das nicht. Die Lösung: ein Python-Script.
Das gesamte Projektverzeichnis git blamen
Mithilfe eines Python-Scripts (Link zum Projekt) führe ich automatisiert git blame auf allen Dateien unseres Projekts aus. Die Ergebnisse werden in einer .csv-Datei festgehalten. Doch die fertige .csv-Datei ist riesig. Sie besteht aus einer Zeile je Zeile Code des Projekts - also rund 900.000 Zeilen. So viele Daten lassen sich nur schwer überblicken. Wie wäre es stattdessen mit einer interaktiven Visualisierung, die Wissensmonopole farblich hervorhebt?
Visualisierung der Daten – Packed Circles
Hinweis: Die Idee zu dieser Visualisierung stammt aus dem Blogartikel „Knowledge Islands“ von feststelltaste.de
Mithilfe der Javascript-Bibliothek d3.js erstelle ich aus unseren Daten eine Packed Circles Visualisierung. Die fertige Visualisierung sieht etwa so aus:
Ausschnitt einer Packed Circles – Visualisierung (Kontrast erhöht)
Die Kreise stellen die Ordner und Dateien unseres Projekts dar. Die innersten Kreise (rot/grün/gelb eingefärbt) bilden Dateien ab. Die umschließenden Kreise stellen die Ordner dar, in denen sich die Dateien befinden.
Per Klick navigiert man in die einzelnen Ordner. Die Darstellung zoomt dann in den angeklickten Ordner hinein. Per Mouseover lassen sich weitere Informationen, wie Anzahl der Codezeilen oder die Anzahl der Autoren, anzeigen. Der Link zur fertigen Visualisierung findet sich hier.
Klick dich doch einmal durch die Visualisierung. Kannst du mögliche Wissensmonopole erkennen?
Wissensmonopole aufdecken
Die Dateien sind nach Anzahl der Autoren eingefärbt. Häufungen von Dateien mit nur einem Autor (rot eingefärbte Kreise) zeigen also mögliche Wissensmonopole.
Hier ein Beispiel:
Ein mögliches Wissensmonopol?
Im Bild lassen sich 2 Häufungen von Dateien mit nur einem Autor erkennen. Diese befinden sich zudem in unterschiedlichen Ordnern.
Werfen wir einen Blick auf eine der Dateien: en-belgian.win.ts Die zusammengefasste Änderungshistorie der Datei sieht so aus:
Autor | Commit | geänderte Zeilen | Datum |
Peng Lyu |
f90a0ab |
8-12 169 |
2019-06-21 12:03:26 |
Peng Lyu |
a24d186 |
6 | 2019-06-19 12:01:06 |
Peng Lyu |
308686a |
15-50 55-66 94-97 110 |
2019-06-14 17:41:53 |
Peng Lyu |
dc13c53 |
1-5 7 13-14 51-54 67-93 98-109 111-168 |
2019-06-13 16:04:16 |
Die Änderungshistorie zeigt:
- Die Datei hat nur einen Autor (Peng Lyu)
- Sie wurde zuletzt vor über einem Jahr geändert (2019-06-21 12:03:26)
Auch die anderen Dateien in demselben Ordner haben nur Peng Lyu als Autor. Ein mögliches Wissensmonopol. Warum ich nur von einem „möglichen Wissensmonopol“ spreche? Nun, die Visualisierung muss mit Vorsicht interpretiert werden.
Was passiert etwa, wenn ein Autor eine leere Zeile an eine Datei anfügt? git blame zeigt dann für diese letzte Zeile den neuen Autor an. Die Datei hat jetzt 2 Autoren und ist kein rot dargestellter Kreis mehr in unserer Darstellung. Doch ist das Wissensmonopol dadurch aufgebrochen?
Trotzdem erlaubt die Visualisierung sich schnell einen Überblick über das Projekt zu verschaffen. Mögliche Wissensmonopole lassen sich rasch identifizieren. Diese sollten dann genauer geprüft werden. Gegenmaßnahmen wie Code-Reviews können dann durchgeführt werden, um diese Wissensmonopole aufzubrechen.
Oftmals reicht es aber auch schon zu wissen, wer ein Wissensmonopol hält. So auch in unserer kleinen Waffeleisen-Anekdote.
Da ich wusste, wer unser Waffeleisen verschenkt hat, hakte ich nach: „An wen hast du das Waffeleisen verschenkt?“. „An unsere Nachbarn von oben.“. Ich stiefelte also das Treppenhaus hoch, klingelte und lud unsere Nachbarn auf ein paar Waffeln aus ihrem neuen Waffeleisen ein.
Projektlink zum verwendeten Code
Den verwendeten Code samt Benutzungsanleitung gibt es auf github. Schau doch einmal in ihr github-Repository. Vielleicht entdeckst auch du mögliche Wissensmonopole in deinem Projekt.