Для багатьох ІТ-людей, включаючи мене кілька років тому, ідеальний процес розробки програмного забезпечення передбачав би створення детальних проектних документів з великою кількістю діаграм UML до того, як з'явиться рядок коду. (Це схоже на опис моделі водоспаду, але це те ж саме з гнучким, за винятком того, що ітерації менші.)
За останні два-три роки я повністю передумав. Я все ще думаю, що детальна специфікація вимог із пов'язаними тестовими кейсами є абсолютно необхідною. Для великих проектів я також зажадаю окреслити загальну архітектуру, перш ніж починати кодувати. Але все інше слід робити в коді якомога більше. В ідеальному випадку не повинно бути опису розробки програмного забезпечення, крім самого коду.
Як я прийшов до цього висновку? Ось кілька аргументів:
Відгуки
Інструменти для написання документів або створення діаграм дають невеликі відгуки. Так, є інструменти моделювання, які виконують певну перевірку узгодженості діаграм UML, але вони обмежені та мають великі накладні витрати.
Без зворотного зв'язку важко розпізнати та виправити помилки.
Як тільки ви пишете код, ви отримуєте безліч відгуків, наприклад:
- Помилки та застереження від компілятора
- Результати аналізу статичного коду
- Одиничні тести
Помилки можна швидко розпізнати та виправити.
Послідовність
Щоб переконатися, що код відповідає вашим документам, вам потрібно перевіряти знову і знову. Якщо відбуваються часті зміни, важко тримати код і документи синхронізованими.
Рефакторинг
Існують потужні інструменти та методи рефакторингу коду, тоді як рефакторинг текстуальних описів або діаграм, як правило, важкий і схильний до помилок.
Є одна передумова, щоб зробити цю роботу: Код повинен бути досить легким для читання та розуміння. Цього, мабуть, неможливо досягти за допомогою Assembler, Basic або Fortran, але сучасні мови (і бібліотеки) набагато виразніші.
Тож якщо мої аргументи справедливі, має бути тенденція до меншої чи більш легкої специфікації дизайну програмного забезпечення та документації. Чи є емпіричні докази цієї тенденції?