Cu ceva timp în urmă, a avut loc o conversație între mine și un bun prieten de-al meu în care s-au auzit următoarele fraze:
— Numărul de programatori va crește constant - deoarece cantitatea de cod este în creștere și din ce în ce mai mulți dezvoltatori sunt nevoiți în mod constant să îl susțină.
— Dar codul devine vechi, o parte din el nu mai este acceptată. Este chiar posibil să existe un fel de echilibru.
Amintindu-le câteva zile mai târziu, m-am întrebat dacă menținerea codului, necesitând tot mai multe resurse în timp, ar putea paraliza în cele din urmă dezvoltarea de noi funcționalități sau ar necesita o creștere nelimitată a numărului de programatori? Analiza matematică și ecuațiile diferențiale au ajutat la evaluarea calitativă a dependenței cantității de sprijin de dezvoltare și la găsirea răspunsurilor la întrebări.
Întrebarea unu. Poate sprijinul să „mâncă” toate resursele de dezvoltare?
Luați în considerare o echipă de programatori în care numărul de participanți este constant. Cota din timpul lor de lucru () este cheltuită pentru dezvoltarea unui cod nou și partea rămasă de timp merge la sprijin. În cadrul ipotezelor modelului, presupunem că primul tip de activitate vizează creșterea volumului de cod, iar al doilea vizează modificarea acestuia (corectarea erorilor) și nu are un impact semnificativ asupra volumului de cod.
Să notăm întreaga cantitate de cod scrisă până în acel moment . Presupunând că viteza de scriere a codului este proporțională , primim:
Este firesc să presupunem că costurile cu forța de muncă pentru menținerea codului sunt proporționale cu volumul acestuia:
sau
De unde
Obținem o ecuație diferențială care poate fi ușor integrată. Dacă în momentul inițial de timp cantitatea de cod este zero, atunci
la funcție Și . Și asta înseamnă o reducere treptată în timp a dezvoltării de noi funcționalități la zero și transferul tuturor resurselor pentru suport.
Cu toate acestea, dacă în timpul timpului codul devine învechit și încetează să mai fie acceptat, apoi cantitatea de cod care necesită suport la un moment dat este deja egal Apoi
а este o soluție la o ecuație diferențială cu un argument retardat [1]:
Soluția unei astfel de ecuații este determinată în mod unic prin specificarea valorilor „Înainte de începutul timpurilor” . Deoarece codul nu fusese încă scris înainte de momentul inițial în timp, în cazul nostru la .
Să ne uităm la câteva exemple. Vom măsura timpul în ani și cantitatea de cod în mii de linii. Atunci pentru valori de ordinul zecilor sunt acceptabile, vom lua 50 și 100. Adică, într-un an, echipa de dezvoltare va scrie cincizeci și, respectiv, o sută de mii de linii de cod. Pentru valorile acceptabile pot fi: , , . Aceasta înseamnă că o echipă de dezvoltare poate suporta cantitatea de cod pe care o scrie într-un an, fie că este un sfert, jumătate sau normă întreagă. Ca durata medie de viață a codului, vom seta următoarele valori: 1, 2 și 4 ani. Rezolvând ecuația numeric, obținem exemple de comportament al funcției pentru unele combinații de parametri .
Comportamentul funcției pe măsură ce codul îmbătrânește, s-a schimbat. Funcția nu mai este monotonă, dar fluctuațiile „se calmează” în timp și există tendința de a la o valoare constantă. Graficele arată: cu atât mai mult , и , adică cu cât codul îmbătrânește mai lent, cu atât mai rapidă dezvoltarea codului nou și cu cât este mai scăzută calitatea codului, cu atât mai puține resurse vor rămâne pentru dezvoltarea de noi funcționalități. A existat dorinţa de a da măcar un exemplu în care „înghesuit” aproape de zero. Dar acest lucru a necesitat selectarea unor indicatori de calitate foarte slabă a dezvoltării și a unui cod care nu îmbătrânește mult timp. Chiar și în graficul din stânga jos, rămâne o cantitate semnificativă de resurse pentru noua funcționalitate. Prin urmare, răspunsul corect la prima întrebare este mai degrabă acesta: teoretic - da, este posibil; practic – cu greu.
Întrebări la care nu s-a putut răspunde:
- Este adevarat ca tinde la o anumită limită la pentru toți ? Dacă nu pentru toată lumea, atunci pentru care?
- Dacă există o limită, de ce depinde valoarea acesteia ?
Întrebarea doi. Ar putea întreținerea codului să determine o creștere nelimitată a numărului de programatori?
Să notăm numărul de programatori implicați în dezvoltarea codului nou. Ca mai sus, — cantitatea de cod scrisă până la un moment dat . atunci
Țineți ocupat suportul pentru coduri programatori. Ținând cont de codul de vechime,
De unde
Dacă , Apoi,
Astfel, răspunsul la a doua întrebare este negativ: dacă numărul de dezvoltatori de cod nou este limitat, atunci, în condițiile vechimii codului, suportul nu poate provoca o creștere nelimitată a numărului de programatori.
Concluzie
Modelele luate în considerare sunt modele matematice „soft” [2]. Sunt foarte simple. Cu toate acestea, dependența rezultatelor simulării de valorile parametrilor corespunde cu ceea ce se așteaptă pentru sistemele reale, aceasta vorbește în favoarea adecvării modelelor și a unei precizii suficiente pentru a obține estimări de înaltă calitate.
Referinte
1. Elsgolts L.E., Norkin S.B. Introducere în teoria ecuațiilor diferențiale cu argument deviant. Moscova. Editura „Știință”. 1971.
2. Arnold V.I. Modele matematice „dure” și „moale”. Moscova. Editura MCNMO. 2004.
Sursa: www.habr.com