Pirms kāda laika starp mani un manu labu draugu notika saruna, kurā izskanēja šādas frāzes:
— Programmētāju skaits pastāvīgi pieaugs, jo koda apjoms pieaug, un arvien vairāk izstrādātāju tiek pieprasīts to atbalstīt.
— Bet kods noveco, daļa vairs netiek atbalstīta. Ir pat iespējams, ka pastāv kaut kāds līdzsvars.
Atceroties tos dažas dienas vēlāk, es prātoju, vai koda uzturēšana, kas laika gaitā prasa arvien vairāk resursu, galu galā var paralizēt jaunas funkcionalitātes izstrādi, vai arī tas prasītu neierobežotu programmētāju skaita pieaugumu? Matemātiskā analīze un diferenciālvienādojumi palīdzēja kvalitatīvi novērtēt atbalsta apjoma atkarību no attīstības un rast atbildes uz jautājumiem.
Pirmais jautājums. Vai atbalsts var “apēst” visus attīstības resursus?
Apsveriet programmētāju komandu, kurā dalībnieku skaits ir nemainīgs. Daļa viņu darba laika () tiek tērēts jauna koda izstrādei un atlikušā laika daļa iet uz atbalstu. Modeļa pieņēmumu ietvaros mēs pieņemam, ka pirmais darbības veids ir vērsts uz koda apjoma palielināšanu, bet otrais ir vērsts uz tā mainīšanu (kļūdu labošanu) un tam nav būtiskas ietekmes uz koda apjomu.
Apzīmēsim viss koda daudzums, kas uzrakstīts līdz šim brīdim . Pieņemot, ka koda rakstīšanas ātrums ir proporcionāls , mēs iegūstam:
Ir dabiski pieņemt, ka darbaspēka izmaksas koda uzturēšanai ir proporcionālas tā apjomam:
vai
no kurienes
Mēs iegūstam diferenciālvienādojumu, ko var viegli integrēt. Ja sākuma brīdī koda daudzums ir nulle, tad
Pie funkcija Un . Un tas nozīmē pakāpenisku jaunas funkcionalitātes izstrādes samazināšanos laika gaitā līdz nullei un visu resursu nodošanu atbalstam.
Tomēr, ja laikā kods kļūst novecojis un vairs netiek atbalstīts, tad koda daudzums, kuram vienlaikus ir nepieciešams atbalsts jau ir vienāds Tad
а ir diferenciālvienādojuma risinājums ar aizkavētu argumentu [1]:
Šāda vienādojuma risinājums tiek unikāli noteikts, norādot vērtības "pirms laika sākuma" . Tā kā kods vēl nebija uzrakstīts pirms sākotnējā laika, mūsu gadījumā pie .
Apskatīsim dažus piemērus. Mēs mērīsim laiku gados un koda daudzumu tūkstošos rindiņu. Tad priekš ir pieņemamas vērtības desmitos, mēs ņemsim 50 un 100. Tas ir, gada laikā izstrādes komanda uzrakstīs attiecīgi piecdesmit un simts tūkstošus koda rindu. Priekš pieņemamās vērtības var būt: , , . Tas nozīmē, ka izstrādes komanda var atbalstīt gada laikā ierakstīto koda daudzumu neatkarīgi no tā, vai tas ir ceturksnis, puse vai pilna laika. Kā koda vidējo kalpošanas laiku mēs iestatīsim šādas vērtības: 1, 2 un 4 gadi. Atrisinot vienādojumu skaitliski, iegūstam funkcijas uzvedības piemērus dažām parametru kombinācijām .
Funkcijas uzvedība kodam novecojot, tas ir mainījies. Funkcija vairs nav monotona, bet laika gaitā svārstības “nomierinās”, un ir tendence uz kādu nemainīgu vērtību. Grafiki parāda: jo vairāk , и , proti, jo lēnāk kods noveco, jo ātrāk tiks izstrādāts jauns kods un zemāka koda kvalitāte, jo mazāk resursu atliek jaunas funkcionalitātes izstrādei. Bija vēlme minēt kaut vienu piemēru, kurā “pieglaudās” tuvu nullei. Bet tas prasīja ļoti sliktu izstrādes kvalitātes rādītāju atlasi un kodu, kas ilgstoši nenoveco. Pat apakšējā kreisajā grafikā jaunajai funkcionalitātei paliek ievērojams daudzums resursu. Tāpēc pareizā atbilde uz pirmo jautājumu drīzāk ir šāda: teorētiski - jā, tas ir iespējams; praktiski - diez vai.
Jautājumi, uz kuriem nevarēja atbildēt:
- Vai tā ir taisnība, ka mēdz uz kādu robežu plkst visiem ? Ja ne visiem, tad kuriem?
- Ja ierobežojums pastāv, no kā ir atkarīga tā vērtība ?
Otrais jautājums. Vai koda uzturēšana varētu izraisīt neierobežotu programmētāju skaita pieaugumu?
Apzīmēsim jauna koda izstrādē iesaistīto programmētāju skaits. Kā iepriekš, — koda daudzums, kas ierakstīts līdz noteiktam brīdim . Tad
Aizņemt koda atbalstu programmētājiem. Ņemot vērā novecošanas kodu,
no kurienes
Ja tad
Tādējādi atbilde uz otro jautājumu ir negatīva: ja jaunā koda izstrādātāju skaits ir ierobežots, tad koda novecošanas apstākļos atbalsts nevar izraisīt neierobežotu programmētāju skaita pieaugumu.
Secinājums
Aplūkotie modeļi ir “mīkstie” matemātiskie modeļi [2]. Tie ir ļoti vienkārši. Neskatoties uz to, simulācijas rezultātu atkarība no parametru vērtībām atbilst reālajām sistēmām sagaidāmajam, tas runā par labu modeļu piemērotībai un pietiekamai precizitātei, lai iegūtu augstas kvalitātes aplēses.
Atsauces
1. Elsgolts L.E., Norkins S.B. Ievads diferenciālvienādojumu teorijā ar novirzošu argumentu. Maskava. Izdevniecība "Zinātne". 1971. gads.
2. Arnolds V.I. “Cietie” un “mīkstie” matemātiskie modeļi. Maskava. Izdevniecība MCNMO. 2004. gads.
Avots: www.habr.com