For en tid siden fant en samtale sted mellom meg og en god venn av meg der følgende fraser ble hørt:
— Antallet programmerere vil stadig vokse – fordi mengden kode vokser, og stadig flere utviklere er pålagt å støtte det.
— Men koden begynner å bli gammel, noe av den støttes ikke lenger. Det er til og med mulig at det er en slags likevekt.
Da jeg husket dem noen dager senere, lurte jeg på om vedlikehold av kode, som krever mer og mer ressurser over tid, til slutt kunne lamme utviklingen av ny funksjonalitet, eller ville det kreve en ubegrenset økning i antall programmerere? Matematisk analyse og differensialligninger bidro til å kvalitativt vurdere støttebeløpets avhengighet av utvikling og finne svar på spørsmål.
Spørsmål en. Kan støtte «spise opp» alle utviklingsressurser?
Tenk på et team av programmerere der antall deltakere er konstant. Andel av arbeidstiden deres () brukes på å utvikle ny kode, og resten av tiden går til støtte. Innenfor modellens forutsetninger antar vi at den første typen aktivitet er rettet mot å øke volumet av kode, og den andre er rettet mot å endre den (korrigere feil) og ikke har en vesentlig innvirkning på kodevolumet.
La oss betegne hele mengden kode skrevet frem til det tidspunktet . Forutsatt at hastigheten på å skrive kode er proporsjonal , vi får:
Det er naturlig å anta at lønnskostnadene for å opprettholde koden er proporsjonale med volumet:
eller
Hvorfra
Vi får en differensialligning som enkelt kan integreres. Hvis kodemengden i det første øyeblikket er null, da
ved funksjon Og . Og dette betyr en gradvis reduksjon over tid i utviklingen av ny funksjonalitet til null og overføring av alle ressurser til support.
Men hvis i løpet av tiden koden blir foreldet og slutter å bli støttet, deretter mengden kode som krever støtte om gangen er allerede lik Deretter
а er en løsning på en differensialligning med et retardert argument [1]:
Løsningen til en slik ligning bestemmes unikt ved å spesifisere verdiene "før tidenes begynnelse" . Siden koden ennå ikke var skrevet før det første øyeblikket, i vårt tilfelle på .
La oss se på noen få eksempler. Vi vil måle tid i år, og mengden kode i tusenvis av linjer. Så for verdier i størrelsesorden ti er akseptable, vi tar 50 og 100. Det vil si at om et år vil utviklingsteamet skrive henholdsvis femti og hundre tusen linjer med kode. Til akseptable verdier kan være: , , . Dette betyr at et utviklingsteam kan støtte mengden kode det skriver i løpet av et år, enten det er kvart, halv eller heltid. Som gjennomsnittlig levetid for koden vil vi sette følgende verdier: 1, 2 og 4 år. Løser vi ligningen numerisk, får vi eksempler på funksjonens oppførsel for noen parameterkombinasjoner .
Funksjonens oppførsel etter hvert som koden eldes, har den endret seg. Funksjonen er ikke lenger monoton, men svingningene «roer seg» over tid, og det er en tendens til til en eller annen konstant verdi. Grafene viser: jo mer , и , det vil si at jo langsommere koden eldes, jo raskere utvikling av ny kode og jo lavere kvalitet på koden, jo mindre ressurser vil det være igjen for utvikling av ny funksjonalitet. Det var et ønske om å gi minst ett eksempel der "koset seg" nær null. Men dette krevde valg av svært dårlige utviklingskvalitetsindikatorer og kode som ikke eldes på lenge. Selv i grafen nederst til venstre er det en betydelig mengde ressurser igjen for den nye funksjonaliteten. Derfor er det riktige svaret på det første spørsmålet snarere dette: teoretisk - ja, det er mulig; praktisk talt - neppe.
Spørsmål som ikke kunne besvares:
- Er det sant det har en tendens til en viss grense ved for alle ? Hvis ikke for alle, så for hvilke?
- Hvis en grense eksisterer, hvordan avhenger verdien av den ?
Spørsmål to. Kan kodevedlikehold forårsake ubegrenset vekst i antall programmerere?
La oss betegne antall programmerere som er involvert i å utvikle ny kode. Som ovenfor, — hvor mye kode som er skrevet frem til et tidspunkt . deretter
Hold kodestøtte opptatt programmerere. Med tanke på aldringskoden,
Hvorfra
Hvis deretter
Dermed er svaret på det andre spørsmålet negativt: hvis antallet utviklere av ny kode er begrenset, kan støtte ikke forårsake en ubegrenset økning i antall programmerere under forhold med aldrende kode.
Konklusjon
Modellene som vurderes er "myke" matematiske modeller [2]. De er veldig enkle. Likevel, avhengigheten av simuleringsresultatene på parameterverdiene tilsvarer det som forventes for virkelige systemer, dette taler til fordel for tilstrekkeligheten til modellene og tilstrekkelig nøyaktighet til å oppnå estimater av høy kvalitet.
Referanser
1. Elsgolts L.E., Norkin S.B. Introduksjon til teori om differensialligninger med avvikende argumentasjon. Moskva. Forlaget "Science". 1971.
2. Arnold V.I. "Harde" og "myke" matematiske modeller. Moskva. Forlag MCNMO. 2004.
Kilde: www.habr.com