Come posso stimare la durata di una riga di codice?

11

Sto cercando di trovare un modo per analizzare la longevità del codice nei progetti open source: ovvero per quanto tempo una determinata riga di codice è attiva e in uso.

Il mio pensiero attuale è che la durata della vita di un codice inizia quando viene prima commesso e termina quando si verifica una delle seguenti situazioni:

  • È stato modificato o eliminato,
  • Escluso da build,
  • Nessun codice all'interno della sua build viene mantenuto per un certo periodo di tempo (ad esempio, un anno).

NOTA: A titolo di chiarimento sul motivo per cui una "modifica" viene considerata come "morte", le righe modificate vengono conteggiate come una "nuova" generazione o linea di codice. Inoltre, a meno che non ci sia un modo semplice per farlo, non ci sarebbe alcuna contabilità per la longevità di un lignaggio, o la discesa da un antenato.

Cos'altro potrebbe determinare la durata della vita di un codice?

    
posta blunders 08.06.2011 - 18:34
fonte

3 risposte

10

Andy Ozment ha esaminato OpenBSD nel 2006 con lo stesso tipo di domanda: Latte o vino: la sicurezza del software Migliora con Age?

Potresti essere in grado di imparare dalla sua definizione. È anche un documento molto interessante, con una conclusione interessante, che non è stata incorporata nella conoscenza della gestione del software:

Over a period of 7.5 years and fifteen releases, 62% of the 140 vulnerabilities reported in OpenBSD were foundational: present in the code at the beginning of the study.

It took more than two and a half years for the first half of these foundational vulnerabilities to be reported. We found that 61% of the source code in the final version studied is foundational: it remains unaltered from the initial version released 7.5 years earlier. The rate of reporting of foundational vulnerabilities in OpenBSD is thus likely to continue to greatly influence the overall rate of vulnerability reporting.

We also found statistically significant evidence that the rate of foundational vulnerability reports decreased during the study period. We utilized a reliability growth model to estimate that 67.6% of the vulnerabilities in the foundation version had been found. The model’s estimate of the expected number of foundational vulnerabilities reported per day decreased from 0.051 at the start of the study to 0.024.

    
risposta data 08.06.2011 - 18:45
fonte
1

Non penso che ci sia una risposta per questo. È altamente dipendente dal progetto. Alcuni sono più stabili nel corso degli anni, altri sono più volatili / refactoring / evolutivi nel corso degli anni.

Inoltre, è difficile da misurare. Una linea edita è davvero la fine della sua durata di vita? Che dire solo di un cambiamento estetico come riformattare la base di codice con tabulazioni o spazi? IMHO che non conta come base di codice rinnovata, ma secondo i tuoi criteri.

Detto questo, penso che una buona parte dei LOC possa vivere per sempre.

La ragione è semplice: è molto più semplice aggiungere un nuovo codice piuttosto che rimuoverne alcuni. Soprattutto quando il sistema è complesso e cresciuto nel corso degli anni. Si arriva quindi rapidamente a un punto in cui è "rischioso" rimuovere o modificare codice non banale. Potrebbe introdurre bug, interrompere la compatibilità, introdurre un effetto farfalla dei cambiamenti ... Quindi penso che più grande diventa il codice, più è vecchio, più i LOC resteranno.

Inoltre, solo i bravi programmatori tendono a ripulire le codebase e ridurre le linee. Tutti gli altri tendono ad accumulare le LOC. E finora, questi ultimi stanno vincendo di gran lunga. ;)

    
risposta data 26.11.2015 - 17:06
fonte
0

L'eliminazione o l'esclusione di una riga di codice è sicuramente un'indicazione della fine della sua durata.

Riguardo alla modifica, vorrei fare questa domanda: Questa affermazione produce un risultato diverso dopo la modifica?

Se la risposta è sì, allora direi che la dichiarazione precedente non è più disponibile, altrimenti la considererei comunque come la continuazione della precedente dichiarazione.

Esempio di modifica del risultato:

if ( a && b )

a:

if ( a || b )

Esempio di continuazione della durata della vita:

foo.bar( baz );

a:

foo.prototype.bar.call( this, baz );
    
risposta data 27.11.2015 - 12:35
fonte

Leggi altre domande sui tag