Enige tijd geleden vond er een gesprek plaats tussen mij en een goede vriend van mij, waarin de volgende zinnen te horen waren:
— Het aantal programmeurs zal voortdurend groeien - omdat de hoeveelheid code groeit en er steeds meer ontwikkelaars nodig zijn om deze te ondersteunen.
— Maar de code wordt oud, een deel ervan wordt niet langer ondersteund. Het is zelfs mogelijk dat er sprake is van een soort evenwicht.
Toen ik ze een paar dagen later herinnerde, vroeg ik me af of het onderhouden van code, waarvoor in de loop van de tijd steeds meer middelen nodig zijn, uiteindelijk de ontwikkeling van nieuwe functionaliteit zou kunnen lamleggen, of zou dit een onbeperkte toename van het aantal programmeurs vereisen? Wiskundige analyse en differentiaalvergelijkingen hielpen om de afhankelijkheid van de hoeveelheid steun voor ontwikkeling kwalitatief te beoordelen en antwoorden op vragen te vinden.
Vraag één. Kan steun alle ontwikkelingshulpmiddelen ‘opeten’?
Beschouw een team van programmeurs waarin het aantal deelnemers constant is. Een deel van hun werktijd () wordt besteed aan het ontwikkelen van nieuwe code, en het resterende deel van de tijd gaat ondersteunen. Binnen de aannames van het model gaan we ervan uit dat het eerste type activiteit gericht is op het vergroten van het codevolume, en het tweede op het veranderen ervan (het corrigeren van fouten) en geen significante impact heeft op het codevolume.
Laten we aanduiden de volledige hoeveelheid code die tot dat moment is geschreven . Ervan uitgaande dat de snelheid van het schrijven van code proportioneel is , we krijgen:
Het is logisch om aan te nemen dat de arbeidskosten voor het onderhouden van de code evenredig zijn aan de omvang ervan:
of
Waar
We verkrijgen een differentiaalvergelijking die gemakkelijk kan worden geïntegreerd. Als op het eerste moment de hoeveelheid code nul is, dan
bij functie En . En dit betekent in de loop van de tijd een geleidelijke vermindering van de ontwikkeling van nieuwe functionaliteit tot nul en de overdracht van alle middelen ter ondersteuning.
Echter, als gedurende de tijd de code verouderd raakt en niet meer wordt ondersteund, vervolgens de hoeveelheid code die tegelijkertijd ondersteuning nodig heeft is al gelijk Dan
а is een oplossing voor een differentiaalvergelijking met een vertraagd argument [1]:
De oplossing voor een dergelijke vergelijking wordt op unieke wijze bepaald door de waarden te specificeren "vóór het begin der tijden" . Omdat de code in ons geval nog niet vóór het eerste moment was geschreven bij .
Laten we een paar voorbeelden bekijken. We zullen de tijd in jaren meten, en de hoeveelheid code in duizenden regels. Dan voor waarden in de orde van tientallen zijn acceptabel, we nemen 50 en 100. Dat wil zeggen dat het ontwikkelingsteam binnen een jaar respectievelijk vijftig en honderdduizend regels code zal schrijven. Voor aanvaardbare waarden kunnen zijn: , , . Dit betekent dat een ontwikkelteam de hoeveelheid code die het in een jaar schrijft, kan ondersteunen, of dit nu een kwartaal, de helft of een volledige tijd is. Als gemiddelde levensduur van de code stellen we de volgende waarden in: 1, 2 en 4 jaar. Door de vergelijking numeriek op te lossen, krijgen we voorbeelden van het gedrag van de functie voor sommige parametercombinaties .
Gedrag van de functie Naarmate de code ouder wordt, is deze veranderd. De functie is niet langer eentonig, maar de schommelingen ‘kalmeren’ in de loop van de tijd, en er is een tendens daartoe tot een constante waarde. De grafieken laten zien: hoe meer , и Dat wil zeggen: hoe langzamer de code veroudert, hoe sneller de ontwikkeling van nieuwe code en hoe lager de kwaliteit van de code, hoe minder middelen er overblijven voor de ontwikkeling van nieuwe functionaliteit. Er was een wens om minstens één voorbeeld te geven waarin “knuffelde” dicht bij nul. Maar dit vereiste de selectie van zeer slechte ontwikkelingskwaliteitsindicatoren en code die niet lang veroudert. Zelfs in de grafiek linksonder blijft er een aanzienlijke hoeveelheid bronnen over voor de nieuwe functionaliteit. Daarom is het juiste antwoord op de eerste vraag eerder dit: theoretisch – ja, het is mogelijk; praktisch - nauwelijks.
Vragen die niet beantwoord konden worden:
- Is het waar dat neigt naar een bepaalde grens voor iedereen ? Als het niet voor iedereen geldt, voor welke dan?
- Als er een limiet bestaat, hoe hangt de waarde ervan dan af? ?
Vraag twee. Kan codeonderhoud een onbeperkte groei van het aantal programmeurs veroorzaken?
Laten we aanduiden het aantal programmeurs dat betrokken is bij het ontwikkelen van nieuwe code. Zoals hierboven, — de hoeveelheid code die tot een bepaald tijdstip is geschreven . Dan
Houd code-ondersteuning bezig programmeurs. Rekening houdend met de verouderingscode,
Waar
als dan
Het antwoord op de tweede vraag is dus negatief: als het aantal ontwikkelaars van nieuwe code beperkt is, kan ondersteuning in omstandigheden van verouderende code geen onbeperkte toename van het aantal programmeurs veroorzaken.
Conclusie
De beschouwde modellen zijn “zachte” wiskundige modellen [2]. Ze zijn heel eenvoudig. Niettemin komt de afhankelijkheid van de simulatieresultaten van de parameterwaarden overeen met wat wordt verwacht voor echte systemen, dit spreekt in het voordeel van de adequaatheid van de modellen en voldoende nauwkeurigheid om schattingen van hoge kwaliteit te verkrijgen.
Referenties
1. Elsgolts L.E., Norkin S.B. Inleiding tot de theorie van differentiaalvergelijkingen met afwijkende argumenten. Moskou. Uitgeverij "Wetenschap". 1971.
2. Arnold V.I. “Harde” en “zachte” wiskundige modellen. Moskou. Uitgeverij MCNMO. 2004.
Bron: www.habr.com