Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?

Jakiś czas temu odbyła się rozmowa pomiędzy mną a moim dobrym znajomym, w której padły następujące zdania:

— Liczba programistów będzie stale rosła – ponieważ rośnie ilość kodu i stale potrzeba coraz większej liczby programistów do jego obsługi.
— Ale kod się starzeje, część z niego nie jest już obsługiwana. Możliwe jest nawet, że istnieje jakiś rodzaj równowagi.

Wspominając je kilka dni później, zastanawiałem się, czy utrzymanie kodu, wymagającego z biegiem czasu coraz większych zasobów, może ostatecznie paraliżować rozwój nowych funkcjonalności, czy też będzie wymagało nieograniczonego zwiększania liczby programistów? Analiza matematyczna i równania różniczkowe pomogły jakościowo ocenić zależność wysokości wsparcia od rozwoju i znaleźć odpowiedzi na pytania.

Pytanie pierwsze. Czy wsparcie może „pochłonąć” wszystkie zasoby rozwojowe?

Rozważmy zespół programistów, w którym liczba uczestników jest stała. Udział w ich czasie pracy Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? (Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?) spędza się na opracowywaniu nowego kodu, a pozostałą część czasu Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? idzie na wsparcie. W założeniach modelu zakładamy, że pierwszy rodzaj działań ma na celu zwiększenie objętości kodu, natomiast drugi ma na celu jego zmianę (poprawę błędów) i nie ma istotnego wpływu na objętość kodu.

Oznaczmy Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? całą ilość kodu napisanego do tego momentu Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?. Zakładając, że szybkość pisania kodu jest proporcjonalna Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?otrzymujemy:

Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?

Naturalne jest założenie, że koszty pracy związane z utrzymaniem kodu są proporcjonalne do jego objętości:

Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?

lub

Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?

Gdzie

Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?

Otrzymujemy równanie różniczkowe, które można łatwo całkować. Jeśli w początkowym momencie ilość kodu wynosi zero, to

Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?

w Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? funkcja Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?I Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?. A to oznacza stopniowe ograniczanie w czasie rozwoju nowej funkcjonalności do zera i przekazywanie wszystkich zasobów do wsparcia.

Jeśli jednak w tym czasie Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? kod staje się przestarzały i przestaje być wspierany, wówczas ilość kodu wymagającego jednoczesnego wsparcia Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? jest już równa Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? Następnie

Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?

Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?

а Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? jest rozwiązaniem równania różniczkowego z opóźnionym argumentem [1]:

Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?

Rozwiązanie takiego równania jest jednoznacznie określane poprzez określenie wartości Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? „przed początkiem czasu” Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?. Ponieważ w naszym przypadku kod nie został jeszcze napisany przed początkowym momentem Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? w Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?.

Spójrzmy na kilka przykładów. Czas będziemy mierzyć w latach, a ilość kodu w tysiącach linii. Potem dla Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? dopuszczalne są wartości rzędu dziesiątek, przyjmiemy 50 i 100. Oznacza to, że za rok zespół programistów napisze odpowiednio pięćdziesiąt i sto tysięcy linii kodu. Dla Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? dopuszczalne wartości mogą wynosić: Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?, Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?, Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?. Oznacza to, że zespół programistów może obsłużyć tyle kodu, ile napisze w ciągu roku, niezależnie od tego, czy będzie to kwartał, pół czy cały etat. Jako średni czas życia kodu przyjmiemy wartości: 1, 2 i 4 lata. Rozwiązując równanie numerycznie, otrzymujemy przykłady zachowania się funkcji Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? dla niektórych kombinacji parametrów Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?.
Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?
Zachowanie funkcji Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? wraz ze starzeniem się kodu uległ on zmianie. Funkcja nie jest już monotonna, ale z czasem wahania „uspokajają się” i jest tendencja do tego Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? do jakiejś stałej wartości. Wykresy pokazują: tym więcej Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?, Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? и Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?, czyli im wolniej starzeje się kod, im szybszy jest rozwój nowego kodu i im niższa jakość kodu, tym mniej zasobów pozostanie na rozwój nowej funkcjonalności. Chcieliśmy podać przynajmniej jeden przykład, w którym Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? „przytulił się” blisko zera. Wymagało to jednak doboru bardzo słabych wskaźników jakości rozwoju i kodu, który nie starzeje się długo. Nawet na lewym dolnym wykresie widoczna jest znaczna ilość zasobów przeznaczona na nową funkcjonalność. Zatem prawidłowa odpowiedź na pierwsze pytanie jest raczej taka: teoretycznie – tak, jest to możliwe; praktycznie - ledwo.

Pytania, na które nie udało się znaleźć odpowiedzi:

  1. Czy to prawda, że Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? zmierza do pewnego limitu przy Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? dla wszystkich Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?? Jeśli nie dla wszystkich, to dla jakich?
  2. Jeśli istnieje granica, od czego zależy jej wartość Ilu programistów potrzeba do obsługi wcześniej napisanego kodu??

Pytanie drugie. Czy utrzymanie kodu może spowodować nieograniczony wzrost liczby programistów?

Oznaczmy Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? liczba programistów zaangażowanych w tworzenie nowego kodu. Jak powyżej, Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? — ilość kodu zapisanego do określonego momentu Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?. Następnie

Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?

Zajmij się obsługą kodu Ilu programistów potrzeba do obsługi wcześniej napisanego kodu? programiści. Biorąc pod uwagę kod starzenia,

Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?

Gdzie

Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?

jeśli Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?następnie

Ilu programistów potrzeba do obsługi wcześniej napisanego kodu?

Zatem odpowiedź na drugie pytanie jest negatywna: jeśli liczba twórców nowego kodu jest ograniczona, to w warunkach starzenia się kodu wsparcie nie może powodować nieograniczonego wzrostu liczby programistów.

wniosek

Rozpatrywane modele są „miękkimi” modelami matematycznymi [2]. Są bardzo proste. Niemniej jednak zależność wyników symulacji od wartości parametrów odpowiada oczekiwaniom dla rzeczywistych układów, przemawia to za adekwatnością modeli i wystarczającą dokładnością do uzyskania wysokiej jakości szacunków.

Referencje

1. Elsgolts L.E., Norkin S.B. Wprowadzenie do teorii równań różniczkowych z argumentem odchylającym. Moskwa. Wydawnictwo „Nauka”. 1971.
2. Arnold V.I. „Twarde” i „miękkie” modele matematyczne. Moskwa. Wydawnictwo MCNMO. 2004.

Źródło: www.habr.com

Dodaj komentarz