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