Wie viele Programmierer benötigen Sie, um zuvor geschriebenen Code zu unterstĂŒtzen?

Vor einiger Zeit fand ein GesprÀch zwischen mir und meinem guten Freund statt, in dem die folgenden SÀtze erklangen:

- Die Anzahl der Programmierer wird stĂ€ndig zunehmen - weil die Menge an Code wĂ€chst und immer mehr Entwickler stĂ€ndig benötigt werden, um ihn zu unterstĂŒtzen.
- Aber der Code altert, ein Teil davon verlĂ€sst die UnterstĂŒtzung. Das Vorhandensein eines Gleichgewichts ist nicht ausgeschlossen.

Als ich sie einige Tage spĂ€ter zurĂŒckrief, fragte ich mich, ob die CodeunterstĂŒtzung, die im Laufe der Zeit immer mehr Ressourcen erfordert, letztendlich die Entwicklung neuer Funktionen lĂ€hmen oder eine unbegrenzte Erhöhung der Anzahl der Programmierer erfordern wĂŒrde. Mathematische Analysen und Differentialgleichungen halfen dabei, die AbhĂ€ngigkeit des UnterstĂŒtzungsvolumens von der Entwicklung qualitativ zu bewerten und Antworten auf Fragen zu finden.

Die erste Frage. Kann die UnterstĂŒtzung alle Entwicklungsressourcen „essen“?


Stellen Sie sich ein Team von Programmierern vor, bei dem die Anzahl der Teilnehmer konstant ist. Anteil ihrer Arbeitszeit  mu(t)( 0< mu(t)<1) entfielen auf die Entwicklung neuen Codes und den verbleibenden Teil der Zeit 1− mu(t)geht zur UnterstĂŒtzung. Nehmen wir unter den Annahmen des Modells an, dass die erste Art von AktivitĂ€t darauf abzielt, die Codemenge zu erhöhen, und die zweite darauf, sie zu Ă€ndern (Fehler zu korrigieren) und die Codemenge nicht wesentlich beeinflusst.

Wir bezeichnen y(t)Der gesamte Code wurde nach Zeit geschrieben t. Die Geschwindigkeit beim Schreiben von Code ist proportional  mu(t)wir bekommen:

 fracdy(t)dt=a0 mu(t);a0 in mathbbR,a0>0.


Es ist natĂŒrlich anzunehmen, dass der Arbeitsaufwand fĂŒr die Pflege des Codes proportional zu seinem Volumen ist:

1− mu(t)=a1y(t);a1 in mathbbR,a1>0


oder

 mu(t)=1−a1y(t)


Woher?

 fracdy(t)dt=a0(1−a1y(t))).


Wir erhalten eine Differentialgleichung, die sich leicht integrieren lÀsst. Wenn zum anfÀnglichen Zeitpunkt die Codemenge Null ist, dann

y(t)= frac1a1(1−e−a0a1t).


Bei t to+ inftyFunktion y(t) to1/a1und  mu(t) bis0. Dies bedeutet eine schrittweise Reduzierung der Entwicklung neuer Funktionen auf Null im Laufe der Zeit und den Übergang aller Ressourcen zur UnterstĂŒtzung.

Wenn jedoch rechtzeitig h>0Da der Code veraltet ist und nicht mehr unterstĂŒtzt wird, muss jeweils nur noch Code unterstĂŒtzt werden tgleich y(t)−y(t−h).Dann

1− mu(t)=a1(y(t)−y(t−h)),


 mu(t)=1−a1(y(t)−y(t−h)),


aber y(t)ist eine Lösung einer Differentialgleichung mit einem verzögerten Argument [1]:

 fracdy(t)dt=a0(1−a1(y(t)−y(t−h))).


Die Lösung dieser Gleichung wird eindeutig durch Einstellen der Werte bestimmt y(t)"Vor dem Beginn der Zeit", mit t in[−h,0]. Da in unserem Fall vor dem ersten Mal kein Code geschrieben wurde y(t)=0bei t in[−h,0].

Schauen wir uns einige Beispiele an. Wir werden die Zeit in Jahren und die Codemenge in Tausenden von Zeilen messen. Dann fĂŒr a0Werte in der GrĂ¶ĂŸenordnung von zehn sind akzeptabel, wir nehmen 50 und 100. Das heißt, in einem Jahr wird das Entwicklungsteam fĂŒnfzig bzw. einhunderttausend Codezeilen schreiben. FĂŒr a1akzeptable Werte können sein: 0,25/a0, 0.5/a0, 1/a0. Dies bedeutet, dass das Entwicklungsteam die Menge an Code, die es fĂŒr das Jahr geschrieben hat, mit einer viertel, halben oder vollen Arbeitslast beibehalten kann. Als durchschnittliche Lebensdauer des Codes legen wir die Werte 1, 2 und 4 Jahre fest. Wenn wir die Gleichung numerisch lösen, erhalten wir Beispiele fĂŒr das Verhalten der Funktion  mu(t)fĂŒr einige Kombinationen von Parametern h,a0,a1.
Bild
Funktionsverhalten  mu(t)Angesichts des Alterns hat sich der Code geĂ€ndert. Die Funktion ist nicht mehr eintönig, aber Schwankungen „beruhigen“ sich im Laufe der Zeit, es besteht eine Tendenz dazu  mu(t)auf einen konstanten Wert. Diagramme zeigen: je mehr h, a0und a1Das heißt, je langsamer der Code Ă€lter wird, je schneller die Entwicklung von neuem Code erfolgt und je geringer die QualitĂ€t des Codes ist, desto weniger Ressourcen verbleiben fĂŒr die Entwicklung neuer Funktionen. Es bestand der Wunsch, mindestens ein Beispiel dafĂŒr zu nennen  mu(t)"Kuschelte" nahe Null. Dies erforderte jedoch die Auswahl sehr schlechter Indikatoren fĂŒr die EntwicklungsqualitĂ€t und eines Codes fĂŒr die Langzeitalterung. Selbst in der unteren linken Grafik verbleibt eine erhebliche Menge an Ressourcen fĂŒr die neue FunktionalitĂ€t. Daher ist die richtige Antwort auf die erste Frage wahrscheinlicher: theoretisch - ja, es ist möglich; praktisch - kaum.

Fragen, die nicht beantwortet werden konnten:

  1. Ist es wahr, dass  mu(t)neigt zu einer gewissen Grenze fĂŒr t to+ inftyfĂŒr alle a0,a1>0? Wenn nicht fĂŒr alle, fĂŒr welche?
  2. Wenn die Grenze existiert, hÀngt es davon ab, wie ihr Wert ist a0,a1?

Die zweite Frage. Kann die CodeunterstĂŒtzung die Anzahl der Programmierer unbegrenzt erhöhen?


Wir bezeichnen q(t)Anzahl der Programmierer, die an der Entwicklung neuen Codes beteiligt sind. Wie oben y(t)- die Menge an Code, die von der Zeit geschrieben wurde t. Dann

 fracdy(t)dt=a2q(t);a2 in mathbbR,a2>0.


Lassen Sie die Code-UnterstĂŒtzung beschĂ€ftigt p(t)Programmierer. Alterung des C-Codes

p(t)=a3(y(t)−y(t−h));a3 in mathbbR,a3>0.


Woher?

p(t)=a3 intt−ht fracdy(s)dsds=a2a3 intt−htq(s)ds.


Wenn q(t) leqC1dann

p(t) leqa1a2C1h.


Daher ist die Antwort auf die zweite Frage negativ: Wenn die Anzahl der Entwickler von neuem Code begrenzt ist, kann die UnterstĂŒtzung im Zusammenhang mit dem Altern von Code nicht zu einer unbegrenzten Erhöhung der Anzahl von Programmierern fĂŒhren.

Fazit


Die betrachteten Modelle sind „weiche“ mathematische Modelle [2]. Sie sind sehr einfach. Die AbhĂ€ngigkeit der Simulationsergebnisse von den Parameterwerten entspricht jedoch der fĂŒr reale Systeme erwarteten, was fĂŒr die Angemessenheit der Modelle und eine ausreichende Genauigkeit spricht, um qualitative SchĂ€tzungen zu erhalten.

Referenzliste


1. Elsgolts L.E., Norkin S.B. EinfĂŒhrung in die Theorie der Differentialgleichungen mit abweichendem Argument. Moskau Verlag "Wissenschaft". 1971.
2. Arnold V.I. "Harte" und "weiche" mathematische Modelle. Moskau Verlag des Zentrums. 2004.

Source: https://habr.com/ru/post/de430782/


All Articles