Vor einiger Zeit fand zwischen mir und einem guten Freund ein Gespräch statt, in dem folgende Sätze zu hören waren:
— Die Zahl der Programmierer wird ständig wachsen – denn die Menge an Code wächst und immer mehr Entwickler müssen ihn unterstützen.
— Aber der Code ist in die Jahre gekommen, einiges davon wird nicht mehr unterstützt. Es ist sogar möglich, dass es ein gewisses Gleichgewicht gibt.
Als ich mich ein paar Tage später daran erinnerte, fragte ich mich, ob die Pflege des Codes, die mit der Zeit immer mehr Ressourcen erfordert, letztendlich die Entwicklung neuer Funktionen lahmlegen könnte, oder ob dafür eine unbegrenzte Erhöhung der Zahl der Programmierer erforderlich wäre? Mathematische Analysen und Differentialgleichungen halfen dabei, die Abhängigkeit der Förderhöhe von der Entwicklung qualitativ einzuschätzen und Antworten auf Fragen zu finden.
Frage eins. Kann der Support alle Entwicklungsressourcen „auffressen“?
Stellen Sie sich ein Team von Programmierern vor, in dem die Anzahl der Teilnehmer konstant ist. Anteil ihrer Arbeitszeit () wird für die Entwicklung neuen Codes aufgewendet, der verbleibende Teil der Zeit geht zur Unterstützung. Im Rahmen der Annahmen des Modells gehen wir davon aus, dass die erste Art von Aktivität darauf abzielt, das Codevolumen zu erhöhen, und die zweite auf dessen Änderung (Fehlerkorrektur) abzielt und keinen wesentlichen Einfluss auf das Codevolumen hat.
Bezeichnen wir die gesamte bis zu diesem Zeitpunkt geschriebene Codemenge . Angenommen, die Geschwindigkeit beim Schreiben von Code ist proportional wir bekommen:
Es liegt nahe, anzunehmen, dass die Arbeitskosten für die Pflege des Codes proportional zu seinem Volumen sind:
oder
Woher
Wir erhalten eine Differentialgleichung, die leicht integriert werden kann. Wenn zum ersten Zeitpunkt die Codemenge Null ist, dann
bei Funktion Und . Und das bedeutet, dass die Entwicklung neuer Funktionen im Laufe der Zeit schrittweise auf Null reduziert und alle Ressourcen an den Support übertragen werden.
Wenn jedoch während der Zeit Wenn der Code veraltet ist und nicht mehr unterstützt wird, dann die Menge an Code, die gleichzeitig unterstützt werden muss ist schon gleich Dann
а ist eine Lösung einer Differentialgleichung mit retardiertem Argument [1]:
Die Lösung einer solchen Gleichung wird durch die Angabe der Werte eindeutig bestimmt „vor Anbeginn der Zeit“ . Da der Code in unserem Fall vor dem ersten Zeitpunkt noch nicht geschrieben war при .
Schauen wir uns ein paar Beispiele an. Wir messen die Zeit in Jahren und die Codemenge in Tausenden von Zeilen. Dann für Werte in der Größenordnung von Zehnern sind akzeptabel, wir nehmen 50 und 100. Das heißt, in einem Jahr wird das Entwicklungsteam fünfzig bzw. einhunderttausend Codezeilen schreiben. Für akzeptable Werte können sein: , , . Dies bedeutet, dass ein Entwicklungsteam die Menge an Code, die es in einem Jahr schreibt, unterstützen kann, unabhängig davon, ob es sich um eine Viertel-, Halb- oder Vollzeitbeschäftigung handelt. Als durchschnittliche Lebensdauer des Codes legen wir folgende Werte fest: 1, 2 und 4 Jahre. Wenn wir die Gleichung numerisch lösen, erhalten wir Beispiele für das Verhalten der Funktion für einige Parameterkombinationen .
Verhalten der Funktion Mit zunehmendem Alter des Codes hat er sich geändert. Die Funktion ist nicht mehr monoton, aber die Schwankungen „beruhigen“ sich mit der Zeit, und es besteht die Tendenz dazu auf einen konstanten Wert. Die Grafiken zeigen: Je mehr , и Das heißt, je langsamer der Code altert, je schneller neuer Code entwickelt wird und je geringer die Qualität des Codes ist, desto weniger Ressourcen bleiben für die Entwicklung neuer Funktionen übrig. Es bestand der Wunsch, zumindest ein Beispiel dafür zu geben „gekuschelt“ nahe Null. Dies erforderte jedoch die Auswahl sehr schlechter Entwicklungsqualitätsindikatoren und eines Codes, der nicht lange altert. Selbst in der unteren linken Grafik verbleibt eine beträchtliche Menge an Ressourcen für die neue Funktionalität. Daher lautet die richtige Antwort auf die erste Frage eher: theoretisch – ja, es ist möglich; praktisch - kaum.
Fragen, die nicht beantwortet werden konnten:
- Ist es wahr dass neigt dazu, eine gewisse Grenze zu erreichen für alle ? Wenn nicht für alle, für welche dann?
- Wenn ein Grenzwert existiert, wie hängt sein Wert davon ab? ?
Frage zwei. Könnte die Codepflege zu einem unbegrenzten Wachstum der Zahl der Programmierer führen?
Bezeichnen wir die Anzahl der Programmierer, die an der Entwicklung neuen Codes beteiligt sind. Wie oben, – die Menge an Code, die bis zu einem bestimmten Zeitpunkt geschrieben wurde . dann
Halten Sie den Code-Support auf Trab Programmierer. Unter Berücksichtigung des Alterungscodes,
Woher
wenn dann
Daher ist die Antwort auf die zweite Frage negativ: Wenn die Anzahl der Entwickler neuen Codes begrenzt ist, kann die Unterstützung unter Bedingungen alternden Codes nicht zu einer unbegrenzten Erhöhung der Anzahl der Programmierer führen.
Abschluss
Bei den betrachteten Modellen handelt es sich um „weiche“ mathematische Modelle [2]. Sie sind sehr einfach. Dennoch entspricht die Abhängigkeit der Simulationsergebnisse von den Parameterwerten den Erwartungen für reale Systeme, was für die Angemessenheit der Modelle und eine ausreichende Genauigkeit spricht, um qualitativ hochwertige Schätzungen zu erhalten.
Referenzen
1. Elsgolts L.E., Norkin S.B. Einführung in die Theorie der Differentialgleichungen mit abweichender Argumentation. Moskau. Verlag „Wissenschaft“. 1971.
2. Arnold V.I. „Harte“ und „weiche“ mathematische Modelle. Moskau. Verlag MCNMO. 2004.
Source: habr.com