Какие нормативные темпы разработки программного продукта (есть ли какие-то научные исследования, по которым можно спрогнозировать сроки)?

Рейтинг: -2Ответов: 1Опубликовано: 06.03.2023

Предположим есть развернутая, глубокая спецификация. Программисты кодят по спецификации. Предположим, менеджер оценил весь объем проекта в 20 000 строк. Предположим, код будет на языке высокого уровня - к примеру java.

Вопрос: если средненький, типичный проект, сколько времени займёт разработка кода и отладка? (ответ в человеко-часах или челевоко-месяцах или в человеко-годах).

Ответы

▲ 1Принят

Крупный специалист в области программирования Стив Макконелл в книге "Совершенный код" в главе №27 как размер программы влияет на конструирование , в подглаве 27.4 Влияние размера проекта на производительность приводит следующие данные:

введите сюда описание изображения

По версии Стива Макконелла (он опирается на научные данные других учёных) - для маленьких проектов (до 1000 строк) - следует ожидать наибольшей скорости разработки от программистов. На огромных проектах - следует ждать самой низкой производительности труда разработчиков.

В вопросе взят тест-кейс 20 000 строк. Eсли команда будет средненькая (1-2 сеньора, 1-2 мидла, 1-2 джуниора), то наверное логичнее взять номинальное значение Cocomo - оно ниже среднего, и для 20 000 строк, скорость разработки программного продукта будет порядка 3000 строк на программиста в год. А значит 20 000/3000 = 6,66 человеко-лет будет длиться этап программирования + модульного тестирования. То есть, для команды из 6 человек, примерно нужно закладывать один год + два месяца на этап разработки кода.

При этом наивно думать, что за вышеуказанное время наша средненькая команда из 6 человек сдаст проект заказчику под ключ. В следующей главе 27.5 "Влияние размера проекта на процесс разработки", Стив Макконелл обращает внимание, что после того как разработаны требования, создана архитектура, проведена разработка и модульная отладка кода (этот этап он называет "конструирование") - дальше идут этапы интеграции и системного тестирования. Цитирую:

В малых проектах конструирование является наиболее заметной частью проекта: на него приходится до 65% всего времени разработки. В средних по величине проектах конструирование все еще доминирует, но его доля снижается до 50% от всех трудозатрат. В очень больших проектах архитектура, интеграция и системное тестирование занимают все больше времени, и доля конструирования становится все менее заметной.

введите сюда описание изображения

Итого, для нашего тест кейса, мы предполагаем, что бизнес-требования проработаны и спецификация есть. Закладываем, 55% - на конструирование, 45% - на создание архитектуру, интеграцию, системное тестирование, обсуждение проблем с заказчиком и так далее. Итого 13 месяцев - кодирование, 11,5 месяцев - остальное. Средненькая команда напишет 20 000 строк кода за 2 года под ключ.

При этом, как много комментаторов заметили, всё зависит от множества факторов. Теоретически можно допустить, что если мы возьмем одного очень сильного разработчика, который уже писал похожий проект, он за год (в год разработчик может дать до 25000 строчек) выполнит всю работу по проработке архитектуры, разработки кода и модульному тестированию. И за полгода - всю работу по системному тестированию, интеграции. Но это скорее из раздела научной фантастики.

От себя добавлю, что данные Стива Макконелла мне кажутся релевантными - в особо удачный день сильный разработчик разработает, протестирует и отладит, дай-то бог 200 строк. В другой день - ему надо зарефакторить ранее разработанное. В третий день ему нужно почитать книжки по технологиям, а в четвертый - просто ничего не делать, от того, что в первый день он выгорел, так как кодил пол ночи. Поэтому значение скорости разработки в 13000 строк в год для Senior (готового продукта, без индузятина и спагетти кода, с соблюдением код-стайла) - просто прекрасный показатель.