Пре извесног времена догодио се разговор између мене и мог доброг пријатеља у коме су се чуле следеће фразе:
— Број програмера ће стално расти – јер количина кода расте, а све више програмера је стално потребно да га подржавају.
— Али код стари, неки од њих више нису подржани. Могуће је чак и да постоји нека врста равнотеже.
Сећајући их се неколико дана касније, запитао сам се да ли би одржавање кода, које захтева све више ресурса током времена, могло на крају да паралише развој нове функционалности или би захтевало неограничено повећање броја програмера? Математичка анализа и диференцијалне једначине помогле су да се квалитативно процени зависност количине подршке од развоја и пронађу одговори на питања.
Прво питање. Може ли подршка „појести“ све развојне ресурсе?
Замислите тим програмера у коме је број учесника константан. Удео њиховог радног времена () се троши на развој новог кода, а преостали део времена иде на подршку. У оквиру претпоставки модела претпостављамо да је први тип активности усмерен на повећање обима кода, а други на његову промену (исправљање грешака) и да нема значајнији утицај на обим кода.
Означимо целокупна количина кода написана до тог тренутка . Под претпоставком да је брзина писања кода пропорционална , добијамо:
Природно је претпоставити да су трошкови рада за одржавање кода пропорционални његовом обиму:
или
Одакле
Добијамо диференцијалну једначину која се лако може интегрисати. Ако је у почетном тренутку количина кода нула, онда
У функција И . А то значи постепено смањење током времена у развоју нове функционалности на нулу и пренос свих ресурса на подршку.
Међутим, ако током времена код постаје застарео и престаје да буде подржан, тада количина кода захтева подршку у исто време већ је једнака Онда
а је решење диференцијалне једначине са ретардираним аргументом [1]:
Решење такве једначине је једнозначно одређено навођењем вредности "пре почетка времена" . Пошто код још увек није био написан пре почетног тренутка, у нашем случају у .
Погледајмо неколико примера. Мерићемо време у годинама, а количину кода у хиљадама редова. Онда за вредности реда десетица су прихватљиве, узећемо 50 и 100. То јест, за годину дана развојни тим ће написати педесет, односно сто хиљада линија кода. За прихватљиве вредности могу бити: , , . То значи да развојни тим може да подржи количину кода коју напише за годину дана, било да је то четвртина, половина или пуно радно време. Као просечни век трајања кода, поставићемо следеће вредности: 1, 2 и 4 године. Решавајући једначину нумерички, добијамо примере понашања функције за неке комбинације параметара .
Понашање функције како стари кодекс, мењао се. Функција више није монотона, али се флуктуације временом „смирују“ и постоји тенденција да се на неку константну вредност. Графикони показују: што више , и , односно, што код спорије стари, што је бржи развој новог кода и што је квалитет кода нижи, то ће мање ресурса остати за развој нове функционалности. Постојала је жеља да се наведе бар један пример у коме „ушушкани“ близу нуле. Али то је захтевало одабир веома лоших индикатора квалитета развоја и кода који не стари дуго времена. Чак иу доњем левом графикону остаје значајна количина ресурса за нову функционалност. Дакле, тачан одговор на прво питање је пре следећи: теоретски – да, могуће је; практично – једва.
Питања на која се није могло одговорити:
- Да ли је истина да тежи некој граници при за све ? Ако не за све, онда за које?
- Ако граница постоји, од чега зависи њена вредност ?
Друго питање. Да ли би одржавање кода могло да изазове неограничен раст броја програмера?
Означимо број програмера укључених у развој новог кода. Као горе, — количина кода написана до одређеног тренутка . Онда
Нека подршка за код буде заузета програмери. Узимајући у обзир код старења,
Одакле
Ако , Онда
Дакле, одговор на друго питање је негативан: ако је број програмера новог кода ограничен, онда у условима старења кода подршка не може да изазове неограничено повећање броја програмера.
Закључак
Разматрани модели су „меки” математички модели [2]. Они су веома једноставни. Ипак, зависност резултата симулације од вредности параметара одговара ономе што се очекује за реалне системе, што говори у прилог адекватности модела и довољној тачности за добијање висококвалитетних процена.
Литература
1. Елсголтс Л.Е., Норкин С.Б. Увод у теорију диференцијалних једначина са девијантним аргументом. Москва. Издавачка кућа „Наука”. 1971. године.
2. Арнолд В.И. „Тврди” и „меки” математички модели. Москва. Издавачка кућа МЦНМО. 2004.
Извор: ввв.хабр.цом