Для многих ИТ-специалистов, в том числе и для меня несколько лет назад, идеальный процесс разработки программного обеспечения включал бы создание подробных проектных документов с множеством диаграмм UML до того, как была написана строка кода. (Это похоже на описание модели водопада, но то же самое с гибкой моделью, за исключением того, что итерации меньше).
За последние два или три года я полностью изменил свое мнение. Я все еще думаю, что детальная спецификация требований со связанными тестовыми примерами абсолютно необходима. Для больших проектов мне также понадобится набросок общей архитектуры, прежде чем начинать писать код. Но все остальное должно быть сделано в коде как можно больше. В идеальном случае не должно быть описания дизайна программного обеспечения, кроме самого кода.
Как я пришел к такому выводу? Вот несколько аргументов:
Обратная связь
Инструменты для написания документов или создания диаграмм дают мало отзывов. Да, есть инструменты моделирования, которые делают некоторые проверки согласованности на UML-диаграммах, но они ограничены и сопряжены с большими накладными расходами.
Без обратной связи трудно распознать и исправить ошибки.
Как только вы пишете код, вы получаете много отзывов, например:
- Ошибки и предупреждения от компилятора
- Результаты статического анализа кода
- Модульные тесты
Ошибки могут быть быстро распознаны и исправлены.
консистенция
Чтобы убедиться, что код соответствует вашим документам, вы должны проверять снова и снова. Если происходят частые изменения, трудно синхронизировать код и документы.
Рефакторинг
Существуют мощные инструменты и методы для рефакторинга кода, в то время как рефакторинг текстовых описаний или диаграмм обычно сложен и подвержен ошибкам.
Есть одно предварительное условие, чтобы эта работа работала: код должен быть достаточно легким для чтения и понимания. Это, вероятно, не может быть достигнуто с помощью Ассемблера, Базового или Фортрана, но современные языки (и библиотеки) гораздо более выразительны.
Так что, если мои аргументы верны, должна быть тенденция к уменьшению или уменьшению объема спецификации и документации программного обеспечения. Есть ли эмпирические доказательства этой тенденции?