Pred časom sa medzi mnou a mojím dobrým priateľom uskutočnil rozhovor, v ktorom zazneli tieto vety:
— Počet programátorov bude neustále rásť – pretože množstvo kódu rastie a stále viac a viac vývojárov ho musí neustále podporovať.
— Ale kód starne, niektoré už nie sú podporované. Je dokonca možné, že existuje nejaký druh rovnováhy.
Keď som si na ne spomenul o pár dní neskôr, uvažoval som, či udržiavanie kódu, vyžadujúceho si postupom času stále viac zdrojov, môže v konečnom dôsledku ochromiť vývoj novej funkcionality, alebo by si to vyžadovalo neobmedzené zvyšovanie počtu programátorov? Matematická analýza a diferenciálne rovnice pomohli kvalitatívne posúdiť závislosť výšky podpory od rozvoja a nájsť odpovede na otázky.
Otázka jedna. Môže podpora „zožrať“ všetky rozvojové zdroje?
Zoberme si tím programátorov, v ktorom je počet účastníkov konštantný. Podiel ich pracovného času () sa vynakladá na vývoj nového kódu a zostávajúci čas ide na podporu. V rámci predpokladov modelu predpokladáme, že prvý typ činnosti je zameraný na zvýšenie objemu kódu a druhý na jeho zmenu (opravu chýb) a nemá významný vplyv na objem kódu.
Označme celé množstvo kódu napísaného do tohto okamihu . Za predpokladu, že rýchlosť zápisu kódu je úmerná , dostaneme:
Je prirodzené predpokladať, že mzdové náklady na udržiavanie kódexu sú úmerné jeho objemu:
alebo
odkiaľ
Získame diferenciálnu rovnicu, ktorú možno ľahko integrovať. Ak je v počiatočnom okamihu množstvo kódu nula, potom
Na funkcie A . A to znamená postupné znižovanie v čase vývoja novej funkcionality na nulu a presun všetkých zdrojov na podporu.
Ak však počas doby kód sa stane zastaraným a prestane byť podporovaný, potom množstvo kódu vyžadujúce podporu naraz je už rovný potom
а je riešením diferenciálnej rovnice s retardovaným argumentom [1]:
Riešenie takejto rovnice je jednoznačne určené špecifikovaním hodnôt "pred začiatkom času" . Keďže kód ešte nebol napísaný pred počiatočným časovým okamihom, v našom prípade na .
Pozrime sa na pár príkladov. Budeme merať čas v rokoch a množstvo kódu v tisíckach riadkov. Potom pre hodnoty rádovo desiatky sú prijateľné, vezmeme 50 a 100. To znamená, že za rok napíše vývojový tím päťdesiat, respektíve stotisíc riadkov kódu. Pre prijateľné hodnoty môžu byť: , , . To znamená, že vývojový tím môže podporovať množstvo kódu, ktoré napíše za rok, či už ide o štvrť, polovicu alebo plný úväzok. Ako priemernú životnosť kódu nastavíme tieto hodnoty: 1, 2 a 4 roky. Numerickým riešením rovnice získame príklady správania sa funkcie pre niektoré kombinácie parametrov .
Správanie funkcie ako kód starne, zmenil sa. Funkcia už nie je monotónna, no výkyvy sa časom „upokojujú“ a dochádza k tendencii na nejakú konštantnú hodnotu. Grafy ukazujú: čím viac , и , teda čím pomalšie kód starne, čím rýchlejší je vývoj nového kódu a čím nižšia je kvalita kódu, tým menej zdrojov zostane na vývoj novej funkcionality. Bola tu túžba uviesť aspoň jeden príklad, v ktorom „pritisnutý“ blízko nule. To si však vyžadovalo výber veľmi slabých indikátorov kvality vývoja a kódu, ktorý dlho nestarne. Aj v ľavom dolnom grafe zostáva značné množstvo zdrojov pre novú funkcionalitu. Preto je správna odpoveď na prvú otázku skôr takáto: teoreticky - áno, je to možné; prakticky - sotva.
Otázky, na ktoré sa nedalo odpovedať:
- Je to pravda? má tendenciu k určitej hranici pre všetkých ? Ak nie pre všetkých, tak pre ktorých?
- Ak limit existuje, ako od toho závisí jeho hodnota ?
Otázka druhá. Mohla by údržba kódu spôsobiť neobmedzený rast počtu programátorov?
Označme počet programátorov zapojených do vývoja nového kódu. Ako je uvedené vyššie, — množstvo kódu zapísaného do určitého časového bodu , potom
Udržujte podporu kódu zaneprázdnenú programátorov. Berúc do úvahy kód starnutia,
odkiaľ
Ak , Potom
Odpoveď na druhú otázku je teda negatívna: ak je počet vývojárov nového kódu obmedzený, potom v podmienkach starnutia kódu podpora nemôže spôsobiť neobmedzené zvýšenie počtu programátorov.
Záver
Uvažované modely sú „mäkké“ matematické modely [2]. Sú veľmi jednoduché. Závislosť výsledkov simulácie na hodnotách parametrov však zodpovedá tomu, čo sa očakáva pre reálne systémy, čo hovorí v prospech primeranosti modelov a dostatočnej presnosti na získanie vysoko kvalitných odhadov.
Referencie
1. Elsgolts L.E., Norkin S.B. Úvod do teórie diferenciálnych rovníc s deviačným argumentom. Moskva. Vydavateľstvo "Veda". 1971.
2. Arnold V.I. „Tvrdé“ a „mäkké“ matematické modely. Moskva. Vydavateľstvo MCNMO. 2004.
Zdroj: hab.com