Сколько нужно программистов, чтобы поддерживать ранее написанный код?

Некоторое время назад между мной и моим хорошим другом состоялся разговор, в котором прозвучали такие фразы:

— Количество программистов будет постоянно расти — ведь количество кода растет, и для его поддержки постоянно требуется все больше разработчиков.
— Но код стареет, часть его уходит из поддержки. Не исключено даже наличие какого-то равновесия.

Вспомнив их через несколько дней, я задумался, действительно ли поддержка кода, требуя с течением времени все больше и больше ресурсов, может в конечном счете парализовать разработку нового функционала, либо потребует неограниченного увеличения количества программистов? Качественно оценить зависимость объёма поддержки от разработки и найти ответы на вопросы помогли математический анализ и дифференциальные уравнения.

Вопрос первый. Может ли поддержка «съесть» все ресурсы разработки?

Рассмотрим коллектив программистов, в котором число участников постоянно. Доля их рабочего времени Сколько нужно программистов, чтобы поддерживать ранее написанный код? (Сколько нужно программистов, чтобы поддерживать ранее написанный код?) приходится на разработку нового кода, а оставшаяся доля времени Сколько нужно программистов, чтобы поддерживать ранее написанный код? уходит на поддержку. В рамках допущений модели предположим, что первый вид деятельности направлен на увеличение объёма кода, а второй — на его изменение (исправление ошибок) и существенного влияния на объём кода не оказывает.

Обозначим Сколько нужно программистов, чтобы поддерживать ранее написанный код? весь объём кода, написанный к моменту времени Сколько нужно программистов, чтобы поддерживать ранее написанный код?. Считая скорость написания кода пропорциональной Сколько нужно программистов, чтобы поддерживать ранее написанный код?, получаем:

Сколько нужно программистов, чтобы поддерживать ранее написанный код?

Естественно предположить, что трудозатраты на поддержку кода пропорциональны его объёму:

Сколько нужно программистов, чтобы поддерживать ранее написанный код?

или

Сколько нужно программистов, чтобы поддерживать ранее написанный код?

Откуда

Сколько нужно программистов, чтобы поддерживать ранее написанный код?

Получаем дифференциальное уравнение, которое легко интегрируется. Если в начальный момент времени объем кода равен нулю, то

Сколько нужно программистов, чтобы поддерживать ранее написанный код?

При Сколько нужно программистов, чтобы поддерживать ранее написанный код? функция Сколько нужно программистов, чтобы поддерживать ранее написанный код?, а Сколько нужно программистов, чтобы поддерживать ранее написанный код?. И это означает постепенное сокращение с течением времени разработки нового функционала до нуля и переход всех ресурсов на поддержку.

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

Сколько нужно программистов, чтобы поддерживать ранее написанный код?

Сколько нужно программистов, чтобы поддерживать ранее написанный код?

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

Сколько нужно программистов, чтобы поддерживать ранее написанный код?

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

Рассмотрим несколько примеров. Будем измерять время в годах, а объём кода в тысячах строк. Тогда для Сколько нужно программистов, чтобы поддерживать ранее написанный код? приемлемыми являются значения порядка десятков, мы возьмём 50 и 100. То есть за год группа разработки напишет пятьдесят и сто тысяч строк кода соответственно. Для Сколько нужно программистов, чтобы поддерживать ранее написанный код? приемлемыми могут быть величины: Сколько нужно программистов, чтобы поддерживать ранее написанный код?, Сколько нужно программистов, чтобы поддерживать ранее написанный код?, Сколько нужно программистов, чтобы поддерживать ранее написанный код?. Это означает, что группа разработчиков способна поддерживать объём кода, который написан ей же за год, при занятости на четверть, на половину или для этого требуется полная занятость. В качестве среднего времени жизни кода зададимся величинами: 1, 2 и 4 года. Решая уравнение численно, получим примеры поведения функции Сколько нужно программистов, чтобы поддерживать ранее написанный код? для некоторых комбинаций параметров Сколько нужно программистов, чтобы поддерживать ранее написанный код?.
Сколько нужно программистов, чтобы поддерживать ранее написанный код?
Характер поведения функции Сколько нужно программистов, чтобы поддерживать ранее написанный код? в условиях старения кода изменился. Функция перестала быть монотонной, но колебания со временем «успокаиваются», наблюдается тенденция стремления Сколько нужно программистов, чтобы поддерживать ранее написанный код? к некоторому постоянному значению. Графики показывают: чем больше Сколько нужно программистов, чтобы поддерживать ранее написанный код?, Сколько нужно программистов, чтобы поддерживать ранее написанный код? и Сколько нужно программистов, чтобы поддерживать ранее написанный код?, то есть чем медленнее стареет код, чем быстрее происходит разработка нового кода и чем ниже качество кода, тем меньше ресурсов будет оставаться для разработки нового функционала. Было желание привести хотя бы один пример, в котором Сколько нужно программистов, чтобы поддерживать ранее написанный код? «прижалась» близко к нулю. Но это потребовало подбора очень плохих показателей качества разработки и долго не стареющего кода. Даже на левом нижнем графике на новый функционал остается ощутимое количество ресурсов. Поэтому правильный ответ на первый вопрос скорее такой: теоретически — да, это возможно; практически — вряд ли.

Вопросы, на которые не удалось получить ответ:

  1. Верно ли, что Сколько нужно программистов, чтобы поддерживать ранее написанный код? стремится к некоторому пределу при Сколько нужно программистов, чтобы поддерживать ранее написанный код? для всех Сколько нужно программистов, чтобы поддерживать ранее написанный код?? Если не для всех, то для каких?
  2. Если предел существует, то как его значение зависит от Сколько нужно программистов, чтобы поддерживать ранее написанный код??

Вопрос второй. Может ли поддержка кода стать причиной неограниченного роста количества программистов?

Обозначим Сколько нужно программистов, чтобы поддерживать ранее написанный код? количество программистов, занятых разработкой нового кода. Как и выше, Сколько нужно программистов, чтобы поддерживать ранее написанный код? — объём кода, написанного к моменту времени Сколько нужно программистов, чтобы поддерживать ранее написанный код?. Тогда

Сколько нужно программистов, чтобы поддерживать ранее написанный код?

Пусть поддержкой кода заняты Сколько нужно программистов, чтобы поддерживать ранее написанный код? программистов. C учётом старения кода,

Сколько нужно программистов, чтобы поддерживать ранее написанный код?

Откуда

Сколько нужно программистов, чтобы поддерживать ранее написанный код?

Если Сколько нужно программистов, чтобы поддерживать ранее написанный код?, то

Сколько нужно программистов, чтобы поддерживать ранее написанный код?

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

Заключение

Рассмотренные модели являются «мягкими» математическими моделями [2]. Они очень просты. Тем не менее, зависимость результатов моделирования от значений параметров соответствует ожидаемой для реальных систем, это говорит в пользу адекватности моделей и достаточной точности для получения качественных оценок.

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

1. Эльсгольц Л.Э., Норкин С.Б. Введение в теорию дифференциальных уравнений с отклоняющимся аргументом. Москва. Издательство «Наука». 1971.
2. Арнольд В.И. «Жесткие» и «мягкие» математические модели. Москва. Издательство МЦНМО. 2004.

Источник: habr.com

Добавить комментарий