Я понимаю, что разработка через тестирование так далеко, что вы не только писать производительный код, когда у вас есть неисправный (красный) измерительный блок. На основании этого у меня вопрос, если тест-ориентированный подход также может быть применен для других видов испытаний.
Красный зеленый рефакторинг цикла построена на одном очень разумный принцип:
Доверять только тесты, которые вы уже видели, как успешно, так и неудачно.
Да, что работает с автоматизированных интеграционных тестов, а также. Также ручные тесты. Черт возьми, он работает на автомобиле тестеры аккумуляторных батарей. Это как тест тест.
Некоторые думают модульных тестов, охватывающих самые маленькие вещи, которые могут быть проверены. Некоторые думают, что'ы быстро проверить. TDD-это больше, чем просто красный, зеленый, рефакторинг цикла, но эта часть имеет очень специфический набор тестов: это's не те тесты, которые вам будет удобно выполнить один раз перед отправкой коллекция изменений. Это'ы тесты, которые будут выполняться каждый раз, когда вы делаете любые изменения. Для меня эти ваши модульные тесты.
Все TDD не требует от вас, что вы пишете не тест, а затем изменить код, чтобы сделать его пройти.
Обычно на "тесты" и маленькие, и быстро, и проверить некоторые части вашего кода в изоляции. Потому что они быстрые, это делает красный/зеленый/рефакторинг слишком быстро петли. Тем не менее, они страдают только от части тестирования в изоляции. Поэтому вам нужны другие тесты тоже (интеграции, приемки и т. д.). Это все еще хорошая практика, чтобы следовать тем же принципам: написать непройденного теста, затем изменить код, чтобы заставить его работать. Просто следует помнить, что они, как правило, медленнее, так может повлиять на красный/зеленый/рефакторинг цикла времени.
однако, я интересно, если тест-ориентированный подход также может быть применен для других видов испытаний.
Да, и хорошо известный подход, который делает это поведение-управляемый процесс развития. Тесты которые создаются из формальных спецификаций в БДД может быть назван "тесты", но они, как правило, быть не в том, что низкого уровня, как и в реальной ТДД они, вероятно, лучше подойдет термин "по-приемо-сдаточные испытания и".
Я понимаю, разработка через тестирование так далеко, что вы не только писать производительный код, когда у вас есть неисправный (красный) измерительный блок. Нет. Можно только написать простейший код можно изменить сообщение тест. Это не'т сказать ничего о том, какие испытания. На самом деле, вы, вероятно, начать с написания сбой (красный) приемочных испытаний, для приемки критерий, точнее, вы пишете простейший приемочных испытаний, которые могли бы потерпеть неудачу; потом вы запускаете тест, посмотреть его не удастся, и убедитесь, что он не по правильной причине. Потом вы пишете, не функциональный тест за кусок функциональности, что критерий приемки, опять же, вы пишете простой функциональный тест, который может завершиться с ошибкой, запустить его, посмотреть его не удастся, и убедитесь, что он не по правильной причине. Потом вы пишете, не unit-тест, самый простой модульный тест, который может завершиться с ошибкой, запустить его смотреть, что не получается, убедитесь, что он не по правильной причине. Сейчас, ты пишешь простейший код, который может изменить сообщение об ошибке. Выполните тест еще раз, убедитесь, что сообщение об ошибке изменилось, что изменилось в правильном направлении, и что код изменил сообщение по правильной причине. (В идеале, сообщение об ошибке должно было уже пройти, и испытание должно пройти, но чаще, чем не, лучше брать мелкими шагами меняя сообщение вместо того, чтобы сделать тест был пройден на одном дыхании – это's причина, почему разработчики тестирования тратить столько усилий на их сообщения об ошибках!) Как только вы получите модульный тест пройти оптимизируйте ваш производственный код под защиту тестов. (Обратите внимание, что в это время приемочных испытаний и функционального тестирования до сих пор не удается, но это'ы хорошо, поскольку вы не только рефакторинг отдельных блоков, которые покрываются юнит-тестами.) Сейчас вы создаете очередной тестовый блок и повторите выше, пока функциональный тест также проходит. Под защитой функционального тестирования, теперь вы можете сделать рефакторинг на несколько единиц. Это середина цикла сейчас повторяется до тех пор, пока испытания проходит, в какой момент теперь вы можете сделать рефакторинг всей системы. Итак, вы выбрали следующий критерий приемки и внешний цикл начинается снова. Кент Бек, в "первооткрыватель" из ТДД (он не'т нравится термин как "изобретатель", он говорит, что люди делали это все вместе, он просто дал ему имя и написал об этом книгу) использует аналогию с фотографией и называет это "на увеличение и уменьшение на". Примечание: Дон'т всегда нужны три уровня тестов. Возможно, иногда вам нужно больше. Чаще всего нужно меньше. Если функции небольшие, и ваши функциональные тесты быстро, то вы можете обойтись без (или с меньшей модульные тесты). Часто, вам нужно лишь приемочные испытания и тесты. Или, по вашим критериям признания настолько мелкозернистый, что ваши приемочные тесты несколько функциональные тесты. Кент Бек говорит, что если он быстрый, маленький, и сосредоточился функциональный тест, он будет сначала написать модульные тесты, пусть модульных тестов диска код, затем удалить (некоторые) блок тесты, которые покрывают код, который тоже покрывается быстрый функциональный тест. Помните: тестовый код также код, который должен быть сохранен и переработан, чем меньше есть, тем лучше! однако, я интересно, если тест-ориентированный подход также может быть применен для других видов испытаний. Вы Don'т действительно применять TDD на тесты. Вы наносите его на весь процесс разработки. Что'ы что в "управляемый" в рамках тест-действие-средства разработки: всех ваше развитие обеспечивается за счет тесты. Тесты не только водить код, который вы напишете, они также диск что код писать, какой код писать дальше. Они ведут свой дизайн. Они говорят вам, когда вы сделали. Они говорят вам, что необходимо работать дальше. Они расскажут вам о конструктивных недостатков в коде (когда тесты трудно писать). Кейт Брейтуэйт был создан упражнения, которые он называет TDD, так как если вы это имели ввиду. Она состоит из набора правил (на основе дядя Боб Мартин's Три правила ТДД, но гораздо жестче), что вы должны неукоснительно следовать и которые предназначены, чтобы направить вас к применению ТДД более строго. Она лучше всего работает при парном программировании (так, что ваша пара может убедиться, что вы не нарушаете правила) и инструктором. Правила:
- Написать ровно одно новое испытание, самый маленький тест вы можете, что, похоже, точку в направлении решения
- Увидеть его не удастся; отказы компиляции считаются сбои
- Сделать тест из (1) пропуск, написав минимум кода реализации вы можете в методе теста.
- Рефакторинг, чтобы удалить дублирование, а иначе как это требуется для улучшения дизайна. Быть строгим об использовании этих ходов:
- вы хотите новый способ—подождать, пока рефакторинга время, то ... создать новый (не тест) методы, выполнив одно из них, и никак иначе:
- предпочтителен: не извлекать способ на код реализации, созданные согласно (3), чтобы создать новый метод в тестовом классе или
- если необходимо: перемещать выполнения кода как в (3) в существующей реализации метода
- вы хотите новый класс—подождать до рефакторинга время, то ... создания тестовых классов, чтобы обеспечить место для способ двигаться и ни по какой другой причине
- заполнение реализации классы с методами, делая способ двигаться, и другого пути нет Эти правила предназначены для осуществления ТДД. Они не предназначены для собственно делаете TDD в производстве (хотя ничто не мешает вам попробовать его). Они могут чувствовать разочарование, потому что он иногда будет казаться, как будто вы делаете тысячи крошечных шажка без какого-либо реального прогресса.
TDD это совсем не сводится к тому, что традиционная программа тестирования сообщества звонки и"Проверка на" единицы;. Это очень распространенное заблуждение является результатом Кент Бек's несчастливое перегрузка термина "в блок" при описании своей практики ТДД. Что он имел в виду, что "Тест на" единицы; был тест, который выполняется в изоляции. Оно не зависит от других тестов. Каждый тест должен установить состояние он должен и делать каких-либо очистки, когда это делается. Именно в этом смысле, что unit-тесты в ТДД смысле-это единица. Он самодостаточен. Он может работать сам по себе или он может работать вместе с любой другой модульного теста в любом порядке.
Справка: "и управляемой тестами разработки пример" Ну, Кент Бек
Кент Бек описывает, что он подразумевает под “модульный тест” в главе 32 - овладение ТДД
Я не'т читать книги на нем, я не совсем в "Стандарт" и ТДД практики все время, но на мой взгляд суть ТДД философия, которую я полностью согласна, что вы должны определить успех первого. Это важно на всех уровнях проектирования, от "Какова цель этого проекта?" до "Что должен входов и выходов этого маленького метода?&и"
Есть много способов сделать это определение успеха. Полезным, особенно для тех, низкий уровень методов с потенциально много пограничных случаев, чтобы писать тесты на код. На некоторых уровнях абстракции, оно может пригодиться только чтобы написать записку о цели модуля или что-то, или даже просто мысленно проверить себя (или попросить коллегу), чтобы убедиться, что все имеет смысл и логично. Иногда это's полезн для того чтобы описать тестирование интеграции в код (и, конечно, помогает автоматизировать), и иногда это's полезн просто, чтобы определить разумный быстрый тест план, который вы можете использовать, чтобы убедиться, что все системы работают вместе так, как вы ожидаете.
Но независимо от конкретных методов или инструментов, вы'повторно используя, на мой взгляд, ключевая вещь, чтобы отнять у ТДД философии заключается в том, что определение успеха происходит в первую очередь. В противном случае, вы'повторно бросать дротик, а затем картина яблочка вокруг, где это произошло, на землю.
В беседе разработка через тестирование: это не то, что мы имели в виду Стив Фримен показывает следующий слайд ТДД картину (см. рисунок ниже ответа). Это включает в себя шаг на"написать не сквозной тест, то", которая затем до "и напишите неисправный блок-тест-то". (Нажмите, чтобы увеличить, в правом верхнем углу)
Так что не в ТДД тесты не всегда юнит-тесты.
И да, вы можете (и наверное, нужно) начать с более высокого уровня сквозной тест завершается неудачей, прежде чем писать ты первый блок-тест. Этот тест описывает поведение, которого вы хотите добиться. Это создает покрытие более уровней тест-пирамида. Объясняет Эдриан Саттон LАМАКС's опыт которых показывает, что из конца в конец тестов может сыграть большую и полезную роль]4.
Нет, он не может быть применен для других видов испытаний, для простой практической причине: прочая тестов занимает слишком много времени для выполнения.
Типичный ТДД цикл: писать не тестировать, внедрять, рефакторинг кода. Шаги между ними здания и выполнения тестов, и это нужно молниеносно. Если их не будет, то народ просто начнет пропускать шаги, и тогда вы больше не делаете TDD.