Prieš kurį laiką tarp manęs ir gero draugo įvyko pokalbis, kuriame pasigirdo tokios frazės:
— Programuotojų skaičius nuolat augs – nes kodo kiekis auga, o jį palaikyti nuolat reikalaujama vis daugiau kūrėjų.
— Bet kodas sensta, dalis jo nebepalaikoma. Netgi gali būti, kad yra kažkokia pusiausvyra.
Prisiminęs jas po kelių dienų, susimąsčiau, ar kodo priežiūra, laikui bėgant reikalaujanti vis daugiau išteklių, galiausiai gali paralyžiuoti naujų funkcijų kūrimą, ar tam reikės neribotai didinti programuotojų skaičių? Matematinė analizė ir diferencialinės lygtys padėjo kokybiškai įvertinti paramos dydžio priklausomybę nuo plėtros ir rasti atsakymus į klausimus.
Klausimas vienas. Ar parama gali „suvalgyti“ visus plėtros išteklius?
Apsvarstykite programuotojų komandą, kurioje dalyvių skaičius yra pastovus. Dalintis savo darbo laiku () išleidžiama kuriant naują kodą, o likusią laiko dalį eina palaikyti. Modelio prielaidų ribose darome prielaidą, kad pirmojo tipo veikla yra nukreipta į kodo apimties didinimą, o antroji – į jo keitimą (klaidų taisymą) ir didelės įtakos kodo kiekiui neturi.
Pažymėkime visą kodo kiekį, parašytą iki to momento . Darant prielaidą, kad kodo rašymo greitis yra proporcingas , mes gauname:
Natūralu manyti, kad darbo sąnaudos kodui išlaikyti yra proporcingos jo apimčiai:
arba
Vieta
Gauname diferencialinę lygtį, kurią galima lengvai integruoti. Jei pradiniu laiko momentu kodo kiekis yra lygus nuliui, tada
prie funkcija Ir . O tai reiškia laipsnišką naujų funkcijų kūrimo sumažinimą iki nulio ir visų išteklių perkėlimą į palaikymą.
Tačiau jei per tą laiką kodas pasensta ir nustoja būti palaikomas, tada kodo kiekis, kuriam vienu metu reikalingas palaikymas jau yra lygus Tada
а yra diferencialinės lygties sprendimas su sulėtėjusiu argumentu [1]:
Tokios lygties sprendimas vienareikšmiškai nustatomas nurodant reikšmes "prieš laiko pradžią" . Kadangi kodas dar nebuvo parašytas iki pradinio laiko momento, mūsų atveju prie .
Pažvelkime į kelis pavyzdžius. Mes matuosime laiką metais, o kodo kiekį – tūkstančiais eilučių. Tada už Dešimčių eilės reikšmės yra priimtinos, mes imsime 50 ir 100. Tai yra, per metus kūrėjų komanda parašys atitinkamai penkiasdešimt ir šimtą tūkstančių kodo eilučių. Dėl priimtinos vertės gali būti: , , . Tai reiškia, kad kūrimo komanda gali palaikyti tiek kodo, kiek ji parašo per metus, tiek ketvirtį, tiek pusę, tiek visą darbo dieną. Kaip vidutinį kodo naudojimo laiką nustatysime šias reikšmes: 1, 2 ir 4 metai. Išspręsdami lygtį skaitiniu būdu, gauname funkcijos veikimo pavyzdžius kai kuriems parametrų deriniams .
Funkcijos elgsena kodui senstant jis pasikeitė. Funkcija nebėra monotoniška, tačiau laikui bėgant svyravimai „nurmėja“ ir yra tendencija iki tam tikros pastovios vertės. Grafikai rodo: tuo daugiau , и , tai yra, kuo lėčiau sensta kodas, tuo greičiau kuriamas naujas kodas ir kuo prastesnė kodo kokybė, tuo mažiau resursų liks naujo funkcionalumo kūrimui. Kilo noras pateikti bent vieną pavyzdį, kuriame "prisiglaudė" arti nulio. Bet tam reikėjo parinkti labai prastus plėtros kokybės rodiklius ir ilgai nesenstantį kodą. Netgi apatiniame kairiajame schemoje naujai funkcijai lieka daug išteklių. Todėl teisingas atsakymas į pirmąjį klausimą veikiau yra toks: teoriškai – taip, įmanoma; praktiškai – vargu ar.
Klausimai, į kuriuos nepavyko atsakyti:
- Ar tiesa, kad linkęs į tam tikrą ribą visiems ? Jei ne visiems, tai kam?
- Jei riba yra, nuo ko priklauso jos vertė ?
Antras klausimas. Ar kodo priežiūra gali sukelti neribotą programuotojų skaičiaus augimą?
Pažymėkime programuotojų, dalyvaujančių kuriant naują kodą, skaičius. Kaip aukščiau, — iki tam tikro momento įrašyto kodo kiekis , tada
Užimkite kodo palaikymą programuotojai. Atsižvelgiant į senėjimo kodą,
Vieta
jei , Tada
Taigi, atsakymas į antrąjį klausimą yra neigiamas: jei naujo kodo kūrėjų skaičius yra ribotas, tai senėjimo sąlygomis palaikymas negali sukelti neriboto programuotojų skaičiaus padidėjimo.
išvada
Nagrinėjami „minkštieji“ matematiniai modeliai [2]. Jie labai paprasti. Nepaisant to, modeliavimo rezultatų priklausomybė nuo parametrų verčių atitinka tai, ko tikimasi tikroms sistemoms, o tai byloja apie modelių tinkamumą ir pakankamą tikslumą norint gauti aukštos kokybės įverčius.
Nuorodos
1. Elsgolts L.E., Norkin S.B. Įvadas į diferencialinių lygčių su nukrypstančiu argumentu teoriją. Maskva. Leidykla „Mokslas“. 1971 m.
2. Arnoldas V.I. „Kietieji“ ir „minkštieji“ matematiniai modeliai. Maskva. Leidykla MCNMO. 2004 m.
Šaltinis: www.habr.com