För en tid sedan ägde ett samtal rum mellan mig och en god vän till mig där följande fraser hördes:
— Antalet programmerare kommer ständigt att växa – eftersom mängden kod växer, och det krävs hela tiden fler och fler utvecklare för att stödja det.
— Men koden börjar bli gammal, en del av den stöds inte längre. Det är till och med möjligt att det finns någon form av jämvikt.
När jag kom ihåg dem några dagar senare undrade jag om att underhålla kod, som kräver mer och mer resurser med tiden, i slutändan kunde förlama utvecklingen av ny funktionalitet, eller skulle det kräva en obegränsad ökning av antalet programmerare? Matematisk analys och differentialekvationer hjälpte till att kvalitativt bedöma mängden stöds beroende av utveckling och hitta svar på frågor.
Fråga ett. Kan stödja "äta upp" alla utvecklingsresurser?
Tänk på ett team av programmerare där antalet deltagare är konstant. Andel av sin arbetstid () spenderas på att utveckla ny kod, och den återstående delen av tiden går till stöd. Inom modellens antaganden antar vi att den första typen av aktivitet syftar till att öka kodvolymen, och den andra syftar till att ändra den (korrigera fel) och inte har någon signifikant inverkan på kodvolymen.
Låt oss beteckna hela mängden kod som skrivits fram till den tidpunkten . Förutsatt att hastigheten för att skriva kod är proportionell , vi får:
Det är naturligt att anta att arbetskostnaderna för att upprätthålla koden är proportionella mot dess volym:
eller
Var
Vi får en differentialekvation som enkelt kan integreras. Om mängden kod vid det första ögonblicket är noll, då
vid funktion Och . Och detta innebär en gradvis minskning över tid i utvecklingen av ny funktionalitet till noll och överföring av alla resurser till support.
Däremot om under tiden koden blir föråldrad och upphör att stödjas, då mängden kod som kräver stöd åt gången är redan lika Sedan
а är en lösning på en differentialekvation med ett retarderat argument [1]:
Lösningen till en sådan ekvation bestäms unikt genom att specificera värdena "före tidernas begynnelse" . Eftersom koden ännu inte hade skrivits före det första ögonblicket, i vårt fall при .
Låt oss titta på några exempel. Vi kommer att mäta tid i år, och mängden kod i tusentals rader. Sedan för värden i storleksordningen tiotal är acceptabla, vi tar 50 och 100. Det vill säga om ett år kommer utvecklingsteamet att skriva femtio respektive hundra tusen rader kod. För acceptabla värden kan vara: , , . Det betyder att ett utvecklingsteam kan stödja mängden kod som det skriver på ett år, oavsett om det är en kvart, halv eller heltid. Som medellivslängd för koden kommer vi att ställa in följande värden: 1, 2 och 4 år. Genom att lösa ekvationen numeriskt får vi exempel på funktionens beteende för vissa parameterkombinationer .
Funktionens beteende när koden åldras har den förändrats. Funktionen är inte längre monoton, utan svängningarna "lugnar ner" över tid och det finns en tendens att till något konstant värde. Graferna visar: ju fler , и , det vill säga ju långsammare koden åldras, desto snabbare utveckling av ny kod och ju lägre kvalitet på koden, desto mindre resurser kommer att finnas kvar för utveckling av ny funktionalitet. Det fanns en önskan att ge åtminstone ett exempel där "mys" nära noll. Men detta krävde valet av mycket dåliga utvecklingskvalitetsindikatorer och kod som inte åldras under lång tid. Även i det nedre vänstra diagrammet finns en betydande mängd resurser kvar för den nya funktionen. Därför är det korrekta svaret på den första frågan snarare detta: teoretiskt - ja, det är möjligt; praktiskt taget - knappast.
Frågor som inte gick att besvara:
- Är det sant att tenderar till någon gräns vid för alla ? Om inte för alla, för vilka då?
- Om det finns en gräns, hur beror dess värde på ?
Fråga två. Kan kodunderhåll orsaka obegränsad ökning av antalet programmerare?
Låt oss beteckna antalet programmerare som är involverade i att utveckla ny kod. Som ovan, — mängden kod som skrivits fram till en tidpunkt . Sedan
Håll kodsupport upptagen programmerare. Med hänsyn till åldringskoden,
Var
Om , Sedan
Sålunda är svaret på den andra frågan negativt: om antalet utvecklare av ny kod är begränsat, kan stöd under förhållanden med åldrande kod inte orsaka en obegränsad ökning av antalet programmerare.
Slutsats
De modeller som övervägs är "mjuka" matematiska modeller [2]. De är väldigt enkla. Ändå motsvarar simuleringsresultatens beroende av parametervärdena vad som förväntas för verkliga system, detta talar till förmån för modellernas adekvathet och tillräcklig noggrannhet för att erhålla högkvalitativa uppskattningar.
referenser
1. Elsgolts L.E., Norkin S.B. Introduktion till teorin om differentialekvationer med avvikande argument. Moskva. Förlaget "Science". 1971.
2. Arnold V.I. "Hårda" och "mjuka" matematiska modeller. Moskva. Förlaget MCNMO. 2004.
Källa: will.com