Prije nekog vremena dogodio se razgovor između mene i mog dobrog prijatelja u kojem su se čule sljedeće fraze:
— Broj programera će stalno rasti – jer količina koda raste, a sve više programera je stalno potrebno da ga podržavaju.
— Ali kod je zastario, neki od njega više nisu podržani. Moguće je čak i da postoji neka vrsta ravnoteže.
Sjetivši ih se nekoliko dana kasnije, zapitao sam se da li bi održavanje koda, koje zahtijeva sve više resursa tokom vremena, moglo na kraju paralizirati razvoj nove funkcionalnosti ili bi zahtijevalo neograničeno povećanje broja programera? Matematička analiza i diferencijalne jednadžbe pomogle su da se kvalitativno procijeni ovisnost količine podrške od razvoja i pronađu odgovori na pitanja.
Prvo pitanje. Može li podrška „pojesti“ sve razvojne resurse?
Zamislite tim programera u kojem je broj učesnika konstantan. Udio njihovog radnog vremena () se troši na razvoj novog koda, a preostali dio vremena ide na podršku. U okviru pretpostavki modela pretpostavljamo da je prva vrsta aktivnosti usmjerena na povećanje obima koda, a druga na njegovu promjenu (ispravljanje grešaka) i da nema značajniji utjecaj na obim koda.
Označimo cjelokupna količina koda napisana do tog trenutka . Pod pretpostavkom da je brzina pisanja koda proporcionalna , dobijamo:
Prirodno je pretpostaviti da su troškovi rada za održavanje koda proporcionalni njegovom obimu:
ili
Odakle
Dobijamo diferencijalnu jednačinu koja se lako može integrirati. Ako je u početnom trenutku količina koda nula, tada
u funkcija i . A to znači postepeno smanjenje razvoja nove funkcionalnosti s vremenom na nulu i prijenos svih resursa na podršku.
Međutim, ako tokom vremena kod postaje zastario i prestaje biti podržan, tada količina koda zahtijeva podršku u isto vrijeme je već jednaka Zatim
а je rješenje diferencijalne jednadžbe sa retardiranim argumentom [1]:
Rješenje takve jednačine je jednoznačno određeno specificiranjem vrijednosti "prije početka vremena" . Pošto kod u našem slučaju još nije bio napisan prije početnog trenutka at .
Pogledajmo nekoliko primjera. Vrijeme ćemo mjeriti u godinama, a količinu koda u hiljadama redova. Onda za Vrijednosti reda desetica su prihvatljive, mi ćemo uzeti 50 i 100. To jest, za godinu dana razvojni tim će napisati pedeset, odnosno sto hiljada linija koda. Za prihvatljive vrijednosti mogu biti: , , . To znači da razvojni tim može podržati količinu koda koju napiše u godini, bilo da se radi o četvrtini, pola ili puno radno vrijeme. Kao prosječni vijek trajanja koda, postavićemo sljedeće vrijednosti: 1, 2 i 4 godine. Numerički rješavajući jednadžbu, dobivamo primjere ponašanja funkcije za neke kombinacije parametara .
Ponašanje funkcije kako kod stari, to se promijenilo. Funkcija više nije monotona, ali se fluktuacije s vremenom „smiruju“ i postoji tendencija da se na neku konstantnu vrijednost. Grafikoni pokazuju: što više , и , odnosno, što kod sporije stari, što je brži razvoj novog koda i što je kvalitet koda niži, to će manje resursa ostati za razvoj nove funkcionalnosti. Postojala je želja da se navede barem jedan primjer u kojem "ušuškani" blizu nule. Ali to je zahtijevalo odabir vrlo loših indikatora kvaliteta razvoja i koda koji ne stari dugo vremena. Čak iu donjem lijevom grafikonu ostaje značajna količina resursa za novu funkcionalnost. Stoga je tačan odgovor na prvo pitanje prije sljedeći: teoretski - da, moguće je; praktično - jedva.
Pitanja na koja nije bilo moguće odgovoriti:
- Da li je to istina teži nekoj granici na za sve ? Ako ne za sve, onda za koje?
- Ako ograničenje postoji, o čemu ovisi njegova vrijednost ?
Drugo pitanje. Može li održavanje koda uzrokovati neograničen rast broja programera?
Označimo broj programera uključenih u razvoj novog koda. Kao što je gore, — količina koda napisana do određenog trenutka . Onda
Podrška koda zauzeta programeri. Uzimajući u obzir kod starenja,
Odakle
ako , onda
Dakle, odgovor na drugo pitanje je negativan: ako je broj programera novog koda ograničen, onda u uvjetima starenja koda podrška ne može uzrokovati neograničeno povećanje broja programera.
zaključak
Modeli koji se razmatraju su “meki” matematički modeli [2]. Vrlo su jednostavne. Ipak, ovisnost rezultata simulacije o vrijednostima parametara odgovara onome što se očekuje za stvarne sisteme, što govori u prilog adekvatnosti modela i dovoljnoj tačnosti za dobijanje visokokvalitetnih procjena.
Reference
1. Elsgolts L.E., Norkin S.B. Uvod u teoriju diferencijalnih jednadžbi sa devijantnim argumentom. Moskva. Izdavačka kuća "Nauka". 1971.
2. Arnold V.I. “Tvrdi” i “meki” matematički modeli. Moskva. Izdavačka kuća MCNMO. 2004.
izvor: www.habr.com