Скільки потрібно програмістів, щоб підтримувати раніше написаний код?

Якийсь час тому між мною та моїм добрим другом відбулася розмова, в якій пролунали такі фрази:

— Кількість програмістів постійно зростатиме — адже кількість коду зростає, і для його підтримки постійно потрібно все більше розробників.
— Але код старіє, частина його йде з підтримки. Ймовірно навіть наявність якогось рівноваги.

Згадавши їх за кілька днів, я задумався, чи справді підтримка коду, вимагаючи з часом дедалі більше ресурсів, може зрештою паралізувати розробку нового функціоналу, чи вимагатиме необмеженого збільшення кількості програмістів? Якісно оцінити залежність обсягу підтримки від розробки та знайти відповіді на запитання допомогли математичний аналіз та диференціальні рівняння.

Питання перше. Чи може підтримка з'їсти всі ресурси розробки?

Розглянемо колектив програмістів, у якому кількість учасників постійно. Частка їхнього робочого часу Скільки потрібно програмістів, щоб підтримувати раніше написаний код? (Скільки потрібно програмістів, щоб підтримувати раніше написаний код?) припадає на розробку нового коду, а частка часу, що залишилася Скільки потрібно програмістів, щоб підтримувати раніше написаний код? йде на підтримку. У межах припущень моделі припустимо, перший вид діяльності спрямовано збільшення обсягу коду, а другий — з його зміна (виправлення помилок) і істотного впливу обсяг коду не надає.

Позначимо Скільки потрібно програмістів, щоб підтримувати раніше написаний код? весь обсяг коду, написаний на момент часу Скільки потрібно програмістів, щоб підтримувати раніше написаний код?. Вважаючи швидкість написання коду пропорційною Скільки потрібно програмістів, щоб підтримувати раніше написаний код?, Отримуємо:

Скільки потрібно програмістів, щоб підтримувати раніше написаний код?

Природно припустити, що витрати на підтримку коду пропорційні його обсягу:

Скільки потрібно програмістів, щоб підтримувати раніше написаний код?

або

Скільки потрібно програмістів, щоб підтримувати раніше написаний код?

Звідки

Скільки потрібно програмістів, щоб підтримувати раніше написаний код?

Отримуємо диференціальне рівняння, яке легко інтегрується. Якщо початковий момент часу обсяг коду дорівнює нулю, то

Скільки потрібно програмістів, щоб підтримувати раніше написаний код?

При Скільки потрібно програмістів, щоб підтримувати раніше написаний код? функція Скільки потрібно програмістів, щоб підтримувати раніше написаний код?, а Скільки потрібно програмістів, щоб підтримувати раніше написаний код?. І це означає поступове скорочення з часом розробки нового функціоналу до нуля та перехід всіх ресурсів на підтримку.

Однак, якщо за час Скільки потрібно програмістів, щоб підтримувати раніше написаний код? код застаріває і перестає підтримуватись, то обсяг коду, що вимагає підтримки, в момент часу Скільки потрібно програмістів, щоб підтримувати раніше написаний код? дорівнює вже Скільки потрібно програмістів, щоб підтримувати раніше написаний код? Тоді

Скільки потрібно програмістів, щоб підтримувати раніше написаний код?

Скільки потрібно програмістів, щоб підтримувати раніше написаний код?

а Скільки потрібно програмістів, щоб підтримувати раніше написаний код? є рішенням диференціального рівняння із запізнілим аргументом [1]:

Скільки потрібно програмістів, щоб підтримувати раніше написаний код?

Рішення такого рівняння однозначно визначається завданням значень Скільки потрібно програмістів, щоб підтримувати раніше написаний код? «до початку часів», при Скільки потрібно програмістів, щоб підтримувати раніше написаний код?. Так як до початкового моменту часу коду написано ще не було, то в нашому випадку Скільки потрібно програмістів, щоб підтримувати раніше написаний код? при Скільки потрібно програмістів, щоб підтримувати раніше написаний код?.

Розглянемо кілька прикладів. Вимірюватимемо час у роках, а обсяг коду в тисячах рядків. Тоді для Скільки потрібно програмістів, щоб підтримувати раніше написаний код? прийнятними є значення десятків, ми візьмемо 50 і 100. Тобто за рік група розробки напише п'ятдесят і сто тисяч рядків коду відповідно. Для Скільки потрібно програмістів, щоб підтримувати раніше написаний код? прийнятними можуть бути величини: Скільки потрібно програмістів, щоб підтримувати раніше написаний код?, Скільки потрібно програмістів, щоб підтримувати раніше написаний код?, Скільки потрібно програмістів, щоб підтримувати раніше написаний код?. Це означає, що група розробників здатна підтримувати обсяг коду, який написаний їй за рік, при зайнятості на чверть, на половину або для цього потрібна повна зайнятість. Як середній час життя коду задамося величинами: 1, 2 і 4 роки. Вирішуючи рівняння чисельно, отримаємо приклади поведінки функції Скільки потрібно програмістів, щоб підтримувати раніше написаний код? для деяких комбінацій параметрів Скільки потрібно програмістів, щоб підтримувати раніше написаний код?.
Скільки потрібно програмістів, щоб підтримувати раніше написаний код?
Характер поведінки функції Скільки потрібно програмістів, щоб підтримувати раніше написаний код? за умов старіння коду змінився. Функція перестала бути монотонною, але коливання згодом «заспокоюються», спостерігається тенденція прагнення Скільки потрібно програмістів, щоб підтримувати раніше написаний код? до деякого постійного значення. Графіки показують: що більше Скільки потрібно програмістів, щоб підтримувати раніше написаний код?, Скільки потрібно програмістів, щоб підтримувати раніше написаний код? и Скільки потрібно програмістів, щоб підтримувати раніше написаний код?тобто чим повільніше старіє код, чим швидше відбувається розробка нового коду і чим нижча якість коду, тим менше ресурсів залишатиметься для розробки нового функціоналу. Було бажання навести хоча б один приклад, у якому Скільки потрібно програмістів, щоб підтримувати раніше написаний код? "притиснулася" близько до нуля. Але це зажадало підбору дуже поганих показників якості розробки і коду, що довго не старіє. Навіть на лівому нижньому графіку на новий функціонал залишається відчутна кількість ресурсів. Тому правильна відповідь на перше запитання скоріше така: теоретично — так, це можливо; практично - навряд.

Запитання, на які не вдалося отримати відповідь:

  1. Чи правда, що Скільки потрібно програмістів, щоб підтримувати раніше написаний код? прагне до певної межі при Скільки потрібно програмістів, щоб підтримувати раніше написаний код? для всіх Скільки потрібно програмістів, щоб підтримувати раніше написаний код?? Якщо не для всіх, то для яких?
  2. Якщо межа існує, то як її значення залежить від Скільки потрібно програмістів, щоб підтримувати раніше написаний код??

Питання друге. Чи може підтримка коду спричинити необмежене зростання кількості програмістів?

Позначимо Скільки потрібно програмістів, щоб підтримувати раніше написаний код? кількість програмістів, зайнятих розробкою нового коду. Як і вище, Скільки потрібно програмістів, щоб підтримувати раніше написаний код? - Обсяг коду, написаного на момент часу Скільки потрібно програмістів, щоб підтримувати раніше написаний код?. тоді

Скільки потрібно програмістів, щоб підтримувати раніше написаний код?

Нехай підтримкою коду зайняті Скільки потрібно програмістів, щоб підтримувати раніше написаний код? програмістів. З урахуванням старіння коду,

Скільки потрібно програмістів, щоб підтримувати раніше написаний код?

Звідки

Скільки потрібно програмістів, щоб підтримувати раніше написаний код?

Якщо Скільки потрібно програмістів, щоб підтримувати раніше написаний код?, То

Скільки потрібно програмістів, щоб підтримувати раніше написаний код?

Таким чином, відповідь на друге питання негативна: якщо кількість розробників нового коду обмежена, то в умовах старіння коду підтримка не може спричинити необмежене зростання кількості програмістів.

Висновок

Розглянуті моделі є "м'якими" математичними моделями [2]. Вони дуже прості. Тим не менш, залежність результатів моделювання від значень параметрів відповідає очікуваній реальним системам, це говорить на користь адекватності моделей і достатньої точності для отримання якісних оцінок.

Список літератури

1. Ельсгольц Л.Е., Норкін С.Б. Введення в теорію диференціальних рівнянь з аргументом, що відхиляється. Москва. Видавництво "Наука". 1971.
2. Арнольд В.І. «Жорсткі» та «м'які» математичні моделі. Москва. Видавництво МЦНМВ. 2004.

Джерело: habr.com

Додати коментар або відгук