Zwischen 0 und 4 Uhr passieren Programmierern die meisten Fehler, zwischen 7 und 12 Uhr die wenigsten. Das zeigt eine statistische Analyse der Kerne von Linux und PostgreSQL.

Die Arbeit Do Time of Day and Developer Experience Affect Commit Bugginess? von Eyolfson-Tan-Lam ist dieses Wochenende auf der 8th Working Conference on Mining Software Repositories vorgestellt worden.

Modern software is often developed over many years with hundreds of thousands of commits. Commit metadata is a rich source of social characteristics, including the commit’s time of day and the experience and commit frequency of its author. The “bugginess” of a commit is also a critical property of that commit. In this paper, we investigate the correlation between a commit’s social characteristics and its “bugginess”;

Das interessanteste Ergebnis ist der Zusammenhang zwischen Fehleranzahl und Tageszeit:

i-d6c00e074482bb4fb33cd7330a9ba62e-uhrzeit.png

Hingegen zeigen die Daten keinen Zusammenhang zwischen Fehleranzahl und Erfahrung (erfahrenen Programmierern passieren genausoviele Fehler, wobei “Erfahrung” sich im Kontext dieser Untersuchung allerdings nur auf die Erfahrung mit dem jeweiligen Projekt bezieht, also wielange der Programmierer schon bei Linux bzw. PostgreSQL beteiligt ist) oder zwischen Fehleranzahl und Wochentag (entgegen anderslautenden Vermutungen passieren an Freitagen nicht mehr Fehler):

i-edb53755a04fb11d225cd0fc9adb7b0b-wochentag.png
i-8c139a854323edb6130ff809e5ea39e8-korrektur.png

Zur Methodik:

We define a bug-introducing commit to be any commit for which there exists a later bug-fixing commit that purports to fix the bug.
[…]
Following [19], our methodology has three steps: 1) enumerating bug-fixing commits; 2) identifying the lines changed in each bug-fixing commit; and 3) finding the commits which were responsible for the previous (buggy) version of each of the changed lines.

Heißt: erfaßt werden (natürlich) nur Fehler, die später korrigiert wurden.

Executing the above algorithm gives us data about the bug-fixing and bug-introducing commits in each repository, as well as about the authors of these commits. We record the following data for each commit: author (as a name/email pair); adjusted local time (as described below); number of lines changed; and number of times the commit introduced a bug later corrected (which is derived data; we record it to simplify later database queries). We also record a relation connecting bug-introducing commits and bug-fixing commits. For each author, we record the name, email(s) and commit frequency classification (defined below). We define a bug’s lifetime to be the time from the earliest commit which introduced the bug to the bug-fixing commit.
We compute each author’s commit frequency classification, based on the frequency of an author’s commits to a particular project, and author experience at commit time for each patch, based on the elapsed time between that author’s first commit to the project and the commit time.

via Francis the Mule via Marc Abrahams

Kommentare (11)

  1. #1 AndreasM
    23. Mai 2011

    Der Commit-Zeitpunkt ist nicht unbedingt der Zeitpunkt, an dem der Fehler passiert ist.
    Meine Vermutung ist, dass hier auch unzureichend überprüfte Commits reinspielen, die man halt schnell noch vor dem Schlafengehen rauskriegen will.

  2. #2 Roland
    23. Mai 2011

    Meine Erklärung als nichtprogrammierender Langschläfer: Daß Programmierern zwischen sieben und zwölf die wenigsten Fehler passieren, liegt sicher daran, daß die ganzen Nerds um diese Zeit noch schlafen.

  3. #3 Gondlir
    23. Mai 2011

    @Roland: Genau so sehe ich das auch als Programmierer. 🙂

    Im Grunde ist das nichts anderes als die alte Weisheit: Wer arbeitet, macht Fehler. Wer viel arbeitet, macht viele Fehler. Wer nicht arbeitet, macht keine Fehler.
    Programmierer haben nur halt etwas ungewöhnliche Arbeitszeiten. Aber vielleicht leben wir Programmierer in Europa auch nur nach den amerikanischen Zeitzonen… 😉

  4. #4 Thilo
    23. Mai 2011

    Es geht aber schon um die “Percentage of buggy commits”, nicht um die “total number of commits”. Erstere entspricht den Säulen, letztere den weißen Kreisen in der Grafik (und ist von 14-16 Uhr am höchsten).

  5. #5 Bjoern
    23. Mai 2011

    Könnte irgend jemand mir Informatik-Laien bitte mal erklären, was ein “commit” überhaupt ist?

  6. #6 Thilo
    23. Mai 2011

    Ich bin auch nicht vom Fach, aber es handelt sich wohl um die Speicherung einer Eingabe.

  7. #7 Roland
    23. Mai 2011

    Ja, daß es um prozentuale Fehler geht, war schon klar – sonst wäre die Statistik ja recht nutzlos.
    Interessant wäre jetzt noch, zu wissen, ob die Unterschiede lediglich auf einen biologischen Rhythmus zurückgehen (was sicher den Hauptanteil ausmacht, zur steigenden Fehlerhäufigkeit in der zweiten Nachthälfte gab es ja schon öfter mal Untersuchungen) oder ob da auch andere Gründe eine Rolle spielen. Kommen die Nachtschichtfehler von Programmierern, die einfach nachts arbeiten (Schichtarbeit oder weil es ihnen Spaß macht) oder ging es da oft darum, daß eine Arbeit ganz dringend noch fertigwerden mußte und man halt bis tief in die Nacht hinein arbeitete?
    War zusätzlicher Stress vorhanden? Gibt es eine Beziehung zwischen der Fehlerhäufigkeit und der Anzahl der Stunden, die bereits gearbeitet wurde (vielleicht zweite Hälfte der üblichen Arbeitszeit oder vielleicht Überstunden)?
    Trotzdem natürlich interessant.

  8. #8 Lars
    23. Mai 2011

    Der Versuch einer Kurzfassung: Quellcode wird in der Regel in einer “Versionsverwaltung” gespeichert. Man verändert die Quelldateien des Programms, testet und behebt Fehler und kommt dann nach Stunden oder Tagen zum Schluss, dass nun alles fertig ist. Dann übergibt man die Änderungen an die Versionsverwaltung (commit) Die Änderungen stehen dann allen anderen Projektteilnehmern zur Verfügung.

    Die Langfassung gibt’s hier https://de.wikipedia.org/wiki/Versionsverwaltung

  9. #9 Nicolai Czempin
    24. Mai 2011

    Wie AndreasM schon gesagt hat, ist die Behauptung “… passieren Programmierern die meisten Fehler” eine unzulässige Erweiterung der Aussagen der Studie. Es ging um Commits; diese finden notwendigerweise _nach_ dem Einbau des Fehlers statt. Man könnte jetzt genauso behaupten: Um 7 Uhr, nachdem die Programmierer die Nacht durchgearbeitet haben, committen sie die wenigsten Bugs.

  10. #10 doppelfish
    24. Mai 2011

    Klar. Die meisten Fehler passieren während der normalen Arbeitszeiten. Da hätte ich jetzt auch nix anderes erwartet. 🙂

  11. #11 sac
    15. Oktober 2014

    SPAM link removed