Какова первая опубликованная ссылка на тестирование в первую очередь программирования?

11

Я перечитываю Рефакторинг Мартина Фаулера. В главе 4 «Строительные тесты» я натолкнулся на следующий отрывок.

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

Хотя сейчас я сторонник разработки, основанной на тестировании, я не помню, чтобы меня познакомили с этой концепцией, когда я впервые прочитал эту книгу почти 5 лет назад.

Согласно Amazon.com, эта книга была впервые опубликована 8 июля 1999 года. Это первая опубликованная ссылка на программирование в тестовом режиме или есть что-то еще раньше?

Эрик Вейльну
источник
Это не субъективно. Это актуально? Я так не думаю. Если у вас есть хороший повод, чтобы вновь открыть этот вопрос, отправьте
Maniero
@bigown: я не уверен, что понимаю. Вы говорите, что закрыли этот вопрос, потому что он не субъективен или не относителен?
Эрик Вейльну
Это явно объективно.
Маньеро
2
Это также связано с программированием и интересно, и хотя может быть один верный ответ, доказать это нелегко. Куда еще это идет? ProgrammingHistory.stackexchange?
AShelly
4
мы можем разрешить объективные вопросы здесь - мы предпочитаем субъективные вопросы, но точно так же, как у переполнения стека есть некоторые СУБЪЕКТИВНЫЕ вопросы, которые выживают, у этого сайта могут быть некоторые ОБЪЕКТИВНЫЕ вопросы, которые выживают. (Однако я не ожидаю увидеть здесь какие-либо вопросы «как заставить этот код Perl работать»)
Джефф Этвуд

Ответы:

9

Разработка через тестирование аналогична разработке по контракту, в которой есть предварительные условия, инварианты и постусловия.

Термин был придуман Бертраном Мейером в связи с его дизайном языка программирования Eiffel и впервые описан в различных статьях, начиная с 1986 года [Wikipedia]

Официальные методы датируются как минимум 1983 годом и используются для критически важных систем безопасности, таких как парижское метро без водителя, с использованием B-метода:

В первой и самой абстрактной версии, которая называется Abstract Machine, дизайнер должен указать цель дизайна. [Википедия]

Это могло быть некоторыми из вещей, из которых Кент Бек "помог пионеру ... повторному открытию программирования для тестирования".

Более конкретно: очевидно, что проект Mercury, созданный Nasa в начале 1960-х годов, был первым программным проектом, использующим разработку через тестирование и другие гибкие методы. Я не смог найти какую-либо раннюю документацию, но вот отчет 2003 года, в котором цитируются сообщения участников проекта:

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

Остальная часть отчета тоже интересна, далее говорится:

Самым ранним упоминанием, которое, как мы выяснили, было сосредоточено на описании и рекомендации итеративной разработки, был отчет 1968 года Брайана Рэнделла и Ф.В. Цурчера из IBM TJ Watson Research.

В дополнение к автоматизированному тестированию, отчет 1968 года рекомендует параллельное кодирование и тестирование, если не тестирование в первую очередь:

грамм. Рабочий проект, кодирование и документация каждого программного блока.
час Разработка и документирование методов испытаний для каждого программного блока параллельно с этапом (g).

Хьюго
источник
4

Джон Бентли в « Программирование жемчужин» (первоначально опубликовано в 1986 году) специально не упоминает программирование «Сначала тест». Но в главе «Написание правильных программ» он описывает написание алгоритма, сначала определяя предусловия, инварианты и постусловия, а в следующей главе описывает среду автоматизированного тестирования.

Это не совсем первый тест, но он определенно закладывал некоторые основы.

Также,

CIO Magazine, март 1993, Bug Busters , автор Люси Джуно, стр. 84 :

Тестовые случаи ... могут быть разработаны еще до того, как был написан любой код. В идеале эти случаи основаны на требованиях приложения ... Если разработчики получают тесты на основе требований, прежде чем они начнут писать код, они разработают продукт, который сможет пройти эти тесты ... "

AShelly
источник
Второе издание было опубликовано 7 октября 1999 года в соответствии с Amazon.com. 1-е издание было опубликовано где-то в 1986 году. Была ли эта ссылка в 1-м издании?
Эрик Вейльну
Я только прочитал 2-е издание. Похоже, что предисловие указывает на то, что единственная глава «Написание правильных программ» была в 1-м издании, а глава по автоматизированному тестированию новее.
AShelly
3

Это был Кент Бек в своей книге « Экстремальное программирование» , также опубликованной в 1999 году .

альтернативный текст


источник
Согласно Amazon.com, эта книга была первоначально опубликована 5 октября 1999 года. Это почти через 3 месяца после публикации Refactoring. Я отредактировал свой вопрос, чтобы включить точную дату публикации в соответствии с Amazon.com. Я не читал книгу Кента, но предполагаю, что она дает гораздо больше информации о программировании в тестовом режиме.
Эрик Вейльну
3
Интересно, что на задней обложке этой книги написано, что Кент Бек "помог пионеру ... открытию нового программирования". Откуда он снова его обнаружил?
AShelly
Интересная находка AShelly!
1
@AShelly: пару лет назад Кент Бек выступил с речью на RailsConf. В нем он описал, как он придумал TDD, и упоминает, что читал об этом в старой статье 60-х годов.
Йорг Миттаг