For noget tid siden fandt en samtale sted mellem mig og en god ven af mig, hvor følgende sætninger blev hørt:
— Antallet af programmører vil konstant vokse - fordi mængden af kode vokser, og flere og flere udviklere skal hele tiden understøtte det.
— Men koden er ved at blive gammel, noget af det understøttes ikke længere. Det er endda muligt, at der er en form for ligevægt.
Da jeg huskede dem et par dage senere, spekulerede jeg på, om vedligeholdelse af kode, der kræver flere og flere ressourcer over tid, i sidste ende kunne lamme udviklingen af ny funktionalitet, eller ville det kræve en ubegrænset stigning i antallet af programmører? Matematisk analyse og differentialligninger hjalp til kvalitativt at vurdere støttebeløbets afhængighed af udvikling og finde svar på spørgsmål.
Spørgsmål et. Kan støtte "spise" alle udviklingsressourcer?
Overvej et team af programmører, hvor antallet af deltagere er konstant. Andel af deres arbejdstid () bruges på at udvikle ny kode og den resterende del af tiden går til støtte. Inden for modellens antagelser antager vi, at den første type aktivitet er rettet mod at øge mængden af kode, og den anden er rettet mod at ændre den (rette fejl) og ikke har en væsentlig indflydelse på mængden af kode.
Lad os betegne hele mængden af kode skrevet op til det tidspunkt . Det antages, at hastigheden for at skrive kode er proportional , vi får:
Det er naturligt at antage, at arbejdsomkostningerne for at vedligeholde koden er proportionale med dens volumen:
eller
Hvor
Vi får en differentialligning, der let kan integreres. Hvis mængden af kode i det indledende tidspunkt er nul, så
på funktion Og . Og det betyder en gradvis reduktion over tid i udviklingen af ny funktionalitet til nul og overførsel af alle ressourcer til support.
Dog hvis i løbet af tiden koden bliver forældet og ophører med at blive understøttet, så mængden af kode, der kræver support ad gangen er allerede lige Derefter
а er en løsning på en differentialligning med et retarderet argument [1]:
Løsningen til en sådan ligning er entydigt bestemt ved at specificere værdierne "før tidernes begyndelse" . Da koden endnu ikke var blevet skrevet før det første tidspunkt, i vores tilfælde при .
Lad os se på et par eksempler. Vi vil måle tid i år, og mængden af kode i tusindvis af linjer. Så for værdier i størrelsesordenen tiere er acceptable, vi tager 50 og 100. Det vil sige, om et år vil udviklingsteamet skrive henholdsvis halvtreds og hundrede tusinde linjer kode. Til acceptable værdier kan være: , , . Det betyder, at et udviklingsteam kan understøtte mængden af kode, det skriver på et år, uanset om det er et kvart, halvt eller fuldtid. Som kodens gennemsnitlige levetid vil vi indstille følgende værdier: 1, 2 og 4 år. Løser vi ligningen numerisk, får vi eksempler på funktionens opførsel for nogle parameterkombinationer .
Funktionens adfærd efterhånden som koden ældes, har den ændret sig. Funktionen er ikke længere ensformig, men udsvingene "falder til ro" over tid, og der er en tendens til til en eller anden konstant værdi. Graferne viser: jo mere , и , det vil sige, at jo langsommere koden ældes, jo hurtigere udvikling af ny kode og jo lavere kvalitet af koden, jo færre ressourcer vil der være tilbage til udvikling af ny funktionalitet. Der var et ønske om at give mindst ét eksempel, hvor "snuglede" tæt på nul. Men dette krævede valget af meget dårlige udviklingskvalitetsindikatorer og kode, der ikke ældes i lang tid. Selv i den nederste venstre graf er der en betydelig mængde ressourcer tilbage til den nye funktionalitet. Derfor er det rigtige svar på det første spørgsmål snarere dette: teoretisk - ja, det er muligt; praktisk - næppe.
Spørgsmål der ikke kunne besvares:
- Er det rigtigt det har tendens til en vis grænse ved for alle ? Hvis ikke for alle, så for hvilke?
- Hvis der findes en grænse, hvordan afhænger dens værdi af ?
Spørgsmål to. Kan kodevedligeholdelse forårsage ubegrænset vækst i antallet af programmører?
Lad os betegne antallet af programmører involveret i at udvikle ny kode. Som ovenfor, — mængden af kode skrevet op til et tidspunkt . Derefter
Hold kodesupport beskæftiget programmører. Under hensyntagen til aldringskoden,
Hvor
Hvis derefter
Således er svaret på det andet spørgsmål negativt: Hvis antallet af udviklere af ny kode er begrænset, kan support under forhold med aldrende kode ikke forårsage en ubegrænset stigning i antallet af programmører.
Konklusion
De overvejede modeller er "bløde" matematiske modeller [2]. De er meget simple. Ikke desto mindre svarer afhængigheden af simuleringsresultaterne til parameterværdierne til, hvad der forventes for rigtige systemer, dette taler til fordel for modellernes tilstrækkelighed og tilstrækkelig nøjagtighed til at opnå estimater af høj kvalitet.
Referencer
1. Elsgolts L.E., Norkin S.B. Introduktion til teorien om differentialligninger med afvigende argumentation. Moskva. Forlaget "Science". 1971.
2. Arnold V.I. "Hårde" og "bløde" matematiske modeller. Moskva. Forlaget MCNMO. 2004.
Kilde: www.habr.com