Qualche tempo fa è avvenuta una conversazione tra me e un mio buon amico in cui si sono sentite le seguenti frasi:
— Il numero di programmatori crescerà costantemente, perché la quantità di codice cresce e sempre più sviluppatori sono costantemente tenuti a supportarlo.
— Ma il codice sta invecchiando e parte di esso non è più supportato. È anche possibile che ci sia una sorta di equilibrio.
Ricordandoli qualche giorno dopo, mi sono chiesto se il mantenimento del codice, che richiede sempre più risorse nel tempo, potrebbe alla fine paralizzare lo sviluppo di nuove funzionalità o richiederebbe un aumento illimitato del numero di programmatori? L'analisi matematica e le equazioni differenziali hanno aiutato a valutare qualitativamente la dipendenza dell'importo del sostegno dallo sviluppo e a trovare risposte alle domande.
Domanda uno. Il supporto può “divorare” tutte le risorse di sviluppo?
Considera un team di programmatori in cui il numero di partecipanti è costante. Condivisione del loro tempo di lavoro () viene dedicato allo sviluppo del nuovo codice e alla restante quota di tempo va a sostenere. All'interno dei presupposti del modello, assumiamo che il primo tipo di attività sia finalizzato ad aumentare il volume del codice, e il secondo sia finalizzato a modificarlo (correggere gli errori) e non abbia un impatto significativo sul volume del codice.
Indichiamo l'intera quantità di codice scritto fino a quel momento . Supponendo che la velocità di scrittura del codice sia proporzionale , noi abbiamo:
È naturale supporre che i costi di manodopera per il mantenimento del codice siano proporzionali al suo volume:
o
donde
Otteniamo un'equazione differenziale facilmente integrabile. Se nel momento iniziale la quantità di codice è zero, allora
A funzione E . E questo significa una graduale riduzione nel tempo dello sviluppo di nuove funzionalità a zero e il trasferimento di tutte le risorse al supporto.
Tuttavia, se durante il tempo il codice diventa obsoleto e cessa di essere supportato, quindi la quantità di codice che richiede supporto alla volta è già uguale Poi
а è una soluzione di un'equazione differenziale con un argomento ritardato [1]:
La soluzione di tale equazione è determinata in modo univoco specificando i valori "prima dell'inizio dei tempi" . Poiché nel nostro caso il codice non era ancora stato scritto prima del momento iniziale a .
Diamo un'occhiata ad alcuni esempi. Misureremo il tempo in anni e la quantità di codice in migliaia di righe. Allora per sono accettabili valori dell'ordine delle decine, ne prenderemo 50 e 100. Cioè, in un anno il team di sviluppo scriverà rispettivamente cinquanta e centomila righe di codice. Per i valori accettabili possono essere: , , . Ciò significa che un team di sviluppo può supportare la quantità di codice che scrive in un anno, che si tratti di un trimestre, metà o tempo pieno. Come durata media del codice imposteremo i seguenti valori: 1, 2 e 4 anni. Risolvendo numericamente l'equazione, otteniamo esempi del comportamento della funzione per alcune combinazioni di parametri .
Comportamento della funzione man mano che il codice invecchia, è cambiato. La funzione non è più monotona, ma le fluttuazioni si “calmano” nel tempo e si tende a ad un valore costante. I grafici mostrano: più , и , ovvero più lentamente il codice invecchia, più veloce è lo sviluppo di nuovo codice e minore è la qualità del codice, meno risorse rimarranno per lo sviluppo di nuove funzionalità. C'era il desiderio di dare almeno un esempio in cui "rannicchiato" vicino allo zero. Ma ciò ha richiesto la selezione di indicatori di qualità di sviluppo molto scadenti e di un codice che non invecchia a lungo. Anche nel grafico in basso a sinistra rimane una quantità significativa di risorse per la nuova funzionalità. Pertanto, la risposta corretta alla prima domanda è piuttosto questa: in teoria sì, è possibile; praticamente - difficilmente.
Domande a cui non è stato possibile rispondere:
- È vero che tende ad un certo limite a per tutti ? Se non per tutti, per quali?
- Se esiste un limite, da cosa dipende il suo valore? ?
Domanda due. La manutenzione del codice potrebbe causare una crescita illimitata del numero di programmatori?
Indichiamo il numero di programmatori coinvolti nello sviluppo di un nuovo codice. Come sopra, — la quantità di codice scritto fino a un determinato momento . poi
Mantieni occupato il supporto del codice programmatori. Tenendo conto del codice di invecchiamento,
donde
se poi
Pertanto, la risposta alla seconda domanda è negativa: se il numero di sviluppatori di nuovo codice è limitato, in condizioni di invecchiamento del codice, il supporto non può causare un aumento illimitato del numero di programmatori.
conclusione
I modelli considerati sono modelli matematici “soft” [2]. Sono molto semplici. Tuttavia, la dipendenza dei risultati della simulazione dai valori dei parametri corrisponde a quanto previsto per i sistemi reali, ciò parla a favore dell’adeguatezza dei modelli e della sufficiente precisione per ottenere stime di alta qualità.
Riferimenti
1. Elsgolts L.E., Norkin S.B. Introduzione alla teoria delle equazioni differenziali con argomentazione deviante. Mosca. Casa editrice "Scienza". 1971.
2.Arnold V.I. Modelli matematici “hard” e “soft”. Mosca. Casa editrice MCNMO. 2004.
Fonte: habr.com