Навеяно
этой темой... Однако, по-моему, вопрос рассматривается недостаточно полно, однобоко как-то, как будто не в реальном мире живём с его реальными задачами... Поэтому хочу добавить ремарку
об окружении.
Любой проект является исследовательским в том смысле, что по ходу его приходится изучать особенности окружения (в том числе исполнителя). Вот где тесты необходимы!
Вот примерно как можно представить структуру программного проекта:
1. Модельно-Алгоритмический слой:
1.1. Формальная модель системы (включая мат.модель процессов, структуру данных и т.п.).
1.2. Алгоритмическое решение в рамках модели.
2. Относительно статические внешние связи (внешние по отношению к модельно-алгоритмическому слою):
2.1. Неопределённости спецификаций (идеального ТЗ мне не посчастливилось увидеть ни разу
); причём итерационное уточнение их приводит к п. 3.1.
2.2. Особенности исполнителя (хардваре, ОС, библиотеки, собственные паттерны и т.п.).
2.3. Неполнота документации по исполнителю (включая ОС, компиляторы и т.п.).
3. Динамические внешние воздействия:
3.1. Произвольные изменения спецификаций как во время проектирования, так и во время эксплуатации.
3.2. Форс-мажорные обстоятельства окружения в широком смысле (от таких действий юзера, которые предусмотреть заранее невозможно, до очередного распоряжения Центробанка, которое ставит всё с ног на голову и противоречит здравому смыслу, и вступает в силу уже вчера).
3.3. Технические форс-мажорные обстоятельства (полные или частичные изменения платформы, транспорта и т.п.).
3.4. Несоответствие исполнителя документации.
Ну и т.д.
Естественно, вес каждой из перечисленных составляющих проекта различен. Возможны крайние случаи, например:
- научно-исследовательская задача (где цель есть получение модели) - 1:80%, 2:5%, 3:15%;
- инженерно-исследовательская задача (освоение новой платформы, языка и т.п.) - 1:10%, 2:30%, 3:60%;
- типовая задача (бухгалтерия какая-нибудь, которй много лет занимались и всё наработано... ну, там новый отчёт родить... затраты пропорциональны количеству форм) - 1:5-20%, 2:10-45%, 3:50-85%.
Вот теперь покажите процент применимости доказательного программирования во всех этих случаях.
И процент обязательного тестирования во всех этих случаях.