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