Некаторы час таму паміж мной і маім добрым сябрам адбылася размова, у якой прагучалі такія фразы:
- Колькасць праграмістаў будзе пастаянна расці - бо колькасць кода расце, і для яго падтрымкі пастаянна патрабуецца ўсё больш распрацоўшчыкаў.
- Але код старэе, частка яго сыходзіць з падтрымкі. Не выключана нават наяўнасць нейкай раўнавагі.
Успомніўшы іх праз некалькі дзён, я задумаўся, ці сапраўды падтрымка кода, патрабуючы з цягам часу ўсё больш і больш рэсурсаў, можа ў канчатковым рахунку паралізаваць распрацоўку новага функцыяналу, альбо запатрабуе неабмежаванага павелічэння колькасці праграмістаў? Якасна ацаніць залежнасць аб'ёму падтрымкі ад распрацоўкі і знайсці адказы на пытанні дапамаглі матэматычны аналіз і дыферэнцыяльныя ўраўненні.
Пытанне першае. Ці можа падтрымка "з'есці" ўсе рэсурсы распрацоўкі?
Разгледзім калектыў праграмістаў, у якім колькасць удзельнікаў пастаянна. Доля іх працоўнага часу () прыпадае на распрацоўку новага кода, а астатняя доля часу сыходзіць на падтрымку. У рамках дапушчэнняў мадэлі выкажам здагадку, што першы від дзейнасці накіраваны на павелічэнне аб'ёму кода, а другі - на яго змяненне (выпраўленне памылак) і істотнага ўплыву на аб'ём кода не аказвае.
Абазначым увесь аб'ём кода, напісаны да моманту часу . Лічачы хуткасць напісання кода прапарцыйнай , атрымліваем:
Натуральна выказаць здагадку, што працавыдаткі на падтрымку кода прапарцыйныя яго аб'ёму:
або
Адкуль
Атрымліваем дыферэнцыяльнае раўнанне, якое лёгка інтэгруецца. Калі ў пачатковы момант часу аб'ём кода роўны нулю, то
Пры функцыя , А . І гэта азначае паступовае скарачэнне з цягам часу распрацоўкі новага функцыяналу да нуля і пераход усіх рэсурсаў на падтрымку.
Аднак, калі за час код састарваецца і перастае падтрымлівацца, то аб'ём кода, які патрабуе падтрымкі, у момант часу роўны ўжо Тады
а з'яўляецца рашэннем дыферэнцыяльнага раўнання з запазняльным аргументам [1]:
Рашэнне такога ўраўнення адназначна вызначаецца заданнем значэнняў «да пачатку часоў», пры . Бо да пачатковага моманту часу кода напісана яшчэ не было, то ў нашым выпадку пры .
Разгледзім некалькі прыкладаў. Будзем вымяраць час у гадах, а аб'ём кода ў тысячах радкоў. Тады для прымальнымі з'яўляюцца значэння парадку дзясяткаў, мы возьмем 50 і 100. Гэта значыць, за год група распрацоўкі напіша пяцьдзесят і сто тысяч радкоў кода адпаведна. Для прымальнымі могуць быць велічыні: , , . Гэта азначае, што група распрацоўнікаў здольная падтрымліваць аб'ём кода, які напісаны ёй жа за год, пры занятасці на чвэрць, на палову ці для гэтага патрабуецца поўная занятасць. У якасці сярэдняга часу жыцця кода зададзімся велічынямі: 1, 2 і 4 гады. Вырашаючы раўнанне лікава, атрымаем прыклады паводзін функцыі для некаторых камбінацый параметраў .
Характар паводзін функцыі ва ўмовах старэння кода змяніўся. Функцыя перастала быць манатоннай, але ваганні з часам "супакойваюцца", назіраецца тэндэнцыя імкнення да некаторага сталага значэння. Графікі паказваюць: чым больш , и , гэта значыць чым павольней старэе код, чым хутчэй адбываецца распрацоўка новага кода і чым ніжэй якасць кода, тым менш рэсурсаў будзе заставацца для распрацоўкі новага функцыяналу. Было жаданне прывесці хаця б адзін прыклад, у якім прыціснулася блізка да нуля. Але гэта запатрабавала падбору вельмі дрэнных паказчыкаў якасці распрацоўкі і доўга не які старэе кода. Нават на левым ніжнім графіку на новы функцыянал застаецца адчувальная колькасць рэсурсаў. Таму правільны адказ на першае пытанне хутчэй такі: тэарэтычна - так, гэта магчыма; практычна - ці наўрад.
Пытанні, на якія не ўдалося атрымаць адказ:
- Ці дакладна, што імкнецца да некаторай мяжы пры для ўсіх ? Калі не для ўсіх, дык для якіх?
- Калі мяжа існуе, то як яго значэнне залежыць ад ?
Пытанне другое. Ці можа падтрымка кода стаць прычынай неабмежаванага росту колькасці праграмістаў?
Абазначым колькасць праграмістаў, занятых распрацоўкай новага кода. Як і вышэй, - аб'ём кода, напісанага да моманту часу . Тады
Няхай падтрымкай кода заняты праграмістаў. З улікам старэння кода,
Адкуль
Калі , То
Такім чынам, адказ на другое пытанне адмоўны: калі колькасць распрацоўшчыкаў новага кода абмежавана, то ва ўмовах старэння кода падтрымка не можа стаць прычынай неабмежаванага росту колькасці праграмістаў.
Заключэнне
Разгледжаныя мадэлі з'яўляюцца "мяккімі" матэматычнымі мадэлямі [2]. Яны вельмі простыя. Тым не менш, залежнасць вынікаў мадэлявання ад значэнняў параметраў адпавядае чаканай для рэальных сістэм, гэта сведчыць у карысць адэкватнасці мадэляў і дастатковай дакладнасці для атрымання якасных адзнак.
Спіс літаратуры
1. Эльсгольц Л.Э., Норкін С.Б. Увядзенне ў тэорыю дыферэнцыяльных ураўненняў з адхіляюцца аргументам. Масква. Выдавецтва "Навука". 1971.
2. Арнольд У.І. "Жорсткія" і "мяккія" матэматычныя мадэлі. Масква. Выдавецтва МЦНМА. 2004.
Крыніца: habr.com