Wie kann ich die Lebensdauer einer Codezeile abschätzen?

11

Ich versuche einen Weg zu finden, um die Langlebigkeit von Code in Open Source-Projekten zu analysieren: Das heißt, wie lange eine bestimmte Codezeile aktiv ist und verwendet wird.

Mein derzeitiger Gedanke ist, dass die Lebensdauer einer Codezeile beginnt, wenn sie zum ersten Mal festgeschrieben wird, und endet, wenn eine der folgenden Situationen eintritt:

  • Es ist bearbeitet oder gelöscht,
  • Ausgenommen von Builds,
  • Kein Code in seinem Build wird für einen bestimmten Zeitraum (z. B. ein Jahr) beibehalten.

HINWEIS: Zur Verdeutlichung, warum eine "Bearbeitung" als "Tod" gezählt wird, werden bearbeitete Zeilen als "neue" Generation oder Codezeile gezählt. Wenn es keinen einfachen Weg gibt, dies zu tun, kann die Langlebigkeit einer Linie oder die Abstammung eines Vorfahren nicht berücksichtigt werden.

Was würde sonst die Lebensdauer einer Codezeile bestimmen?

Fehler
quelle
2
"Wie lange ist eine bestimmte Codezeile aktiv und wird verwendet?" Warum ist dies Ihrer Meinung nach eine gute Metrik?
Pieter B

Antworten:

10

Andy Ozment betrachtete OpenBSD im Jahr 2006 mit der gleichen Frage: Milch oder Wein: Verbessert sich die Software-Sicherheit mit zunehmendem Alter?

Möglicherweise können Sie aus seiner Definition lernen. Es ist auch ein sehr interessantes Papier mit einer interessanten Schlussfolgerung, die nicht in die Software-Management-Überlieferung aufgenommen wurde:

Über einen Zeitraum von 7,5 Jahren und fünfzehn Mitteilungen, 62% der 140 in OpenBSD gemeldeten Sicherheitsanfälligkeiten waren grund : in dem Code zu Beginn der Studie.

Es dauerte mehr als zweieinhalb Jahre, bis die erste Hälfte dieser grundlegenden Sicherheitslücken gemeldet wurde. Wir haben festgestellt, dass 61% des Quellcodes in der untersuchten endgültigen Version grundlegend sind: Er bleibt gegenüber der ursprünglichen Version, die 7,5 Jahre zuvor veröffentlicht wurde, unverändert. Die Rate der Meldung grundlegender Schwachstellen in OpenBSD wird daher wahrscheinlich weiterhin einen großen Einfluss auf die Gesamtrate der Meldung von Schwachstellen haben.

Wir fanden auch statistisch signifikante Hinweise darauf, dass die Rate der Berichte über grundlegende Schwachstellen während des Untersuchungszeitraums abnahm. Wir haben ein Zuverlässigkeitswachstumsmodell verwendet, um zu schätzen, dass 67,6% der Schwachstellen in der Foundation-Version gefunden wurden. Die Schätzung des Modells für die erwartete Anzahl der pro Tag gemeldeten grundlegenden Schwachstellen verringerte sich von 0,051 zu Beginn der Studie auf 0,024.

Bruce Ediger
quelle
1
+1 @Bruce Ediger: Super, danke - schau es dir jetzt an!
Fehler
Nochmals vielen Dank. Die einzige Information, die ich verwenden kann, ist: "Wir erfahren, dass 61% der Codezeilen in der heutigen OpenBSD grundlegend sind: Sie wurden vor der Veröffentlichung der von uns untersuchten Erstversion eingeführt und haben dies nicht getan." wurde seitdem geändert. " - was zwar interessant, aber nicht wirklich verwandt ist. Alles andere scheint sich darauf zu konzentrieren, wie lange es dauert, Schwachstellen zu beheben, was wiederum interessant ist, aber nichts über Faktoren aussagt, die bei der Lebensdauer des Codes berücksichtigt werden müssen. Fehlt mir etwas?
Fehler
1

Ich glaube nicht, dass es dafür eine Antwort gibt. Es ist stark projektabhängig. Einige sind im Laufe der Jahre stabiler, andere sind im Laufe der Jahre volatiler / umgestaltet / entwickeln sich weiter.

Darüber hinaus ist es schwer zu messen. Ist eine bearbeitete Linie wirklich das Ende ihrer Lebensdauer? Was ist mit nur einer kosmetischen Änderung wie der Neuformatierung der Codebasis mit Tabulatoren oder Leerzeichen? IMHO das zählt nicht als erneuerte Codebasis, aber es würde nach Ihren Kriterien.

Trotzdem denke ich, dass ein guter Teil der LOCs für immer lebt.

Der Grund ist einfach: Es ist viel einfacher, neuen Code hinzuzufügen, als etwas zu entfernen. Besonders wenn das System komplex ist und im Laufe der Jahre gewachsen ist. Es kommt dann schnell zu einem Punkt, an dem es "riskant" ist, nicht trivialen Code zu entfernen oder zu ändern. Es könnte Fehler verursachen, die Kompatibilität beeinträchtigen, einen Schmetterlingseffekt von Änderungen hervorrufen ... Ich denke, je größer die Codebasis wird, desto älter wird sie, desto mehr bleiben die LOCs.

Darüber hinaus neigen nur gute Programmierer dazu, Codebasen zu bereinigen und die Zeilen zu reduzieren. Alle anderen neigen dazu, die LOCs zu stapeln. Und bis jetzt gewinnen letztere bei weitem. ;)

dagnelies
quelle
0

Das Löschen oder Ausschließen einer Codezeile ist definitiv ein Hinweis auf das Ende ihrer Lebensdauer.

Bei einer Neufassung der Bearbeitung würde ich folgende Frage stellen: Führt diese Aussage nach der Bearbeitung zu einem anderen Ergebnis?

Wenn die Antwort ja lautet, würde ich sagen, dass die vorherige Aussage nicht mehr verfügbar ist, andernfalls würde ich sie immer noch als Fortsetzung der vorherigen Aussage betrachten.

Beispiel für die Änderung des Ergebnisses:

if ( a && b )

zu:

if ( a || b )

Beispiel für die Fortsetzung der Lebensdauer:

foo.bar( baz );

zu:

foo.prototype.bar.call( this, baz );
Mahdi
quelle