Подтвердить что ты не робот

Мертвое простое введение в TDD (разработка, основанная на тестах)

Несмотря на то, что в TDD есть много представлений (даже в PHP, мой основной язык программирования), я чувствую себя немного застрявшим.

Мой друг представил мне TDD некоторое время назад, но на самом деле я не мог его понять - что в первую очередь проверяет все на первый взгляд - даже самые простые задачи - когда в конце концов, он выглядит более эффективным для тестирования только если что-то не работает, хотя может быть намного сложнее найти ошибку (это можно решить с помощью VCS, нет?).

Итак, есть ли какое-либо введение, с простыми примерами и аргументами за "плюсами"?

Что-то вроде "да, это лучше, потому что у вас лучший дизайн - посмотрите на этот пример..."

Также было бы неплохо, если бы эти простые примеры были в php (должно быть возможно) или в as3 (idk...).

Спасибо.

EDIT: Я понимаю, что вы создаете "тест", а затем функцию, которая должна пройти тест. Но как вы говорите на языке, какие результаты он должен иметь? Для меня это выглядит так, что вы выполняете какую-то функцию... отлаживаете ее (так же, как вы отлаживаете нигде не тестируемое dev.) И называете это test и делаете это снова... Или?

ИЗМЕНИТЬ 2: О... Кроме того, применимо ли это для подхода MVC? Скорее, CodeIgniter Newbie MVC?: D

РЕДАКТИРОВАТЬ 3: Прочитайте кучу опубликованных и googled советов, планов, способов и учебников. Я все еще не полностью в TDD - у меня в основном довольно хорошая визуализация, и я думаю (надеюсь?) Я пишу довольно основной код, поэтому я все еще рассматриваю его как дополнительную работу...

4b9b3361

Ответ 1

Одна из причин, по которой это эффективный способ разработки, - это не просто писать тесты для нового кода, но те тесты остаются и выполняются против существующего кода и, таким образом, формируют регрессионный тест.

Это означает, что по мере развития вашего проекта люди воспринимают это или вносят свой вклад, и он изменяется, тесты продолжают определять, будет ли ваш код работать по-прежнему.

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

Ответ 2

Я нашел учебник по Simpletest (PHP) действительно полезным. Для меня это была "стартовая панель TDD".

Смотрите: http://www.simpletest.org/en/start-testing.html

я бы:

  • Отложите пару часов
  • Получить грубую простота script working
  • Откройте свой ум - забудьте о текущих привычках разработчиков и способах работы в течение короткого времени.
  • ... и просто переходите с потоком - следуя инструкциям и всем учебникам, вплоть до конца, на сайте simpletest.org

Затем - в ближайшем будущем

  • Начните принимать практику, но постепенно. Не пытайтесь делать все сразу.
  • Настройте тестовую папку для работы с одним из ваших проектов и начните добавлять несколько тестовых примеров.

Если вы сейчас сделаете шаги выше. К этому времени завтра вы обязательно поймете, почему TDD настолько удобен.

ОБНОВЛЕНИЕ: примечание о "1. Отложите пару часов" - это, наверное, самое трудное. Потому что:

  • Если вы используете чувствительные элементы для рассмотрения преимуществ тестирования TDD - вероятно, это симптом, который:

    • Ваша работа с разработчиками занимает много времени.
    • Это означает, что у вас нет свободного времени, чтобы отвлечься от изучения TDD.
    • Это означает, что ваша работа с разработчиками занимает много времени.
    • Это означает, что у вас нет свободного времени, чтобы отвлечься от изучения TDD.
    • .... и т.д.

Ответ 3

Как и большинство методологий, вы должны жить, чтобы понять, что это значит, его ограничения и преимущества. Недавно мне пришлось написать клиентское серверное приложение, и после прочтения оригинальной книги Кент Бек (TDD на примере) по этому вопросу было принято решение попытаться использовать эту методологию. У меня есть вопрос относительно этого, о котором очень хорошо прокомментировали многие люди более здесь, но вот мое резюме.

Против

  • Это займет гораздо больше времени. По крайней мере для меня.
  • Это требует много реструктуризации. Это может быть преимуществом, но есть фрагменты кода, которые, как я чувствую, свернуты только потому, что мне нужно тестировать отдельные предметы.
  • Вы можете увлечься написанием слишком большого количества тестов.
  • Вы фокусируетесь на деревьях вместо леса и должны активно защищать себя от потери внимания.

Pros

  • Не бойтесь переписывать пьесы. Это, наверное, лучшая часть, так как у меня есть программно проверяемая спецификация моих требований, и ее легко проверить после сеанса кодирования.
  • модульность. Мои функции малы, классы хорошо содержатся и модули управляемы. Однако вам нужно некоторое умение избегать кода равиоли.
  • Документация. Тесты и их имена дают мне хорошую возможность правильно структурировать документы.
  • Переосмысление структуры. Необходимость проверять каждый слой должным образом заставляет меня принимать твердые решения о том, что представляют собой фигуры и как они общаются. Это привело к значительному дизайну и более понятной терминологии.

Я бы рекомендовал книгу. Это хорошее чтение и то, что даст вам реальную сделку по методологии. Это не панацея (вопреки тому, что могли сказать гибкие фанатики). Вы не можете автоматически не беспокоиться о жестких решениях только потому, что вы делаете TDD. Это может показаться немного неестественным, поскольку вам нужно заранее подумать о тестах, но это просто прорезывание зубов. Я бы держался подальше от "мертвых простых" входов, которые вы нашли в Интернете, потому что они, вероятно, упускают важные детали.


Обновление на основе комментария: Кстати, придумывая умные конструкции спереди и меняя их, как вы идете, как я работал, пока не попробовал это. Основные отличия заключались в том, что структура, с которой я столкнулась, была более разумной, чем обычно, поскольку у меня была непрерывная масштабируемая обратная связь (например, вы не можете ее проверить, она слишком монолитная - сломайте ее, эти две вещи концептуально раздельны - см., Как тесты пюре и т.д.), и что шаги "dev", которые я сделал, были достаточно малы, чтобы выбросить без вины "тратить время" на меня. В принципе, этап "dev" был более систематическим, и у меня были проверенные способы сказать, что я сделал (тесты проходят или терпят неудачу).

Ответ 4

Я лично нашел статью о wikipedia, чтобы быть довольно хорошим введением.

Ответ 5

Первым делом написания unit test является то, что при этом вы пишете спецификацию своего программного обеспечения, которое кажется очень естественным, прежде чем писать само программное обеспечение. Как данная функция будет реагировать на заданный вход? Если позже вы решите изменить реализацию, вам не придется вручную проверять все приложение.

Ответ 6

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

Это не тестовая разработка, но вам будет удобно писать тесты и запускать автоматические тестовые пакеты.

Автоматизированные комплекты тестов великолепны! Это отдельные сценарии/программы, которые вы запускаете, которые проходят все тесты, которые вы написали (набор тестов), и сообщают, какие из них терпят неудачу. Гораздо быстрее запустить тестовый пакет, чем вручную выполнять сами тесты. Иногда даже быстрее запускать тестовый пакет, чем запускать вашу программу. Вы также можете настроить свою систему управления версиями так, чтобы всякий раз, когда вы совершаете транзакцию, она сначала запускает батарею тестов кода и сообщает, не сработает ли она.

Я начал делать тесты с Django, который поставляется с тестовым бегуном script. Тесты для моделей полезны, потому что вам не нужно настраивать все виды и шаблоны и т.д., Чтобы проверить, правильно ли настроена ваша модель. Тесты для функций обработки форм также велики, потому что вам не нужно вручную вводить данные в форму.

Рабочий процесс разработки формы без тестов:

  • Сделайте HTML/шаблон для интерфейса формы и класса для обработки формы
  • Напишите функции, которые проверяют данные формы
  • Откройте страницу в моем браузере, заполните форму неверными данными, отправьте ее.
  • Изучите результаты, напечатанные на экране, чтобы узнать, ожидаются ли они.
  • Найдите некоторые ошибки и измените функции. Вернитесь к шагу 3.
  • Сделайте это еще пару раз, чтобы убедиться, что все комбинации правильно проверены (например, нужно ввести идентификационный номер, если отмечен "Студент" ).
  • Откройте для себя что-то, что не работает, или вам нужно изменить форму из-за клиента.
  • Изменять функции по мере необходимости
  • Вернитесь назад и заполните формы еще немного. Пожелайте, чтобы автозаполнение Firefox работало одновременно над несколькими полями.

С тестами:

  • Сделать класс для обработки формы. (Для этой цели Django имеет базовый класс формы.) Настройте все поля.
  • Напишите функции проверки
  • Напишите несколько тестов, каждый из которых содержит комбинацию действительного или недопустимого ввода. например, тот, который отправляет форму с "Студентом", но не имеет идентификатора №, один с "Студентом", а также № ID, но не "Имя" и т.д.
  • Запустите тесты. Получите список всех моих ошибок.
  • Исправьте ошибки.
  • Повторите 4-5, пока результаты теста не скажут "Хорошо".
  • Сделайте представление HTML для формы

Ответ 7

Я бы порекомендовал книгу Кента Бекка, основанную на тестах, по примеру. Образцы кода находятся в Java, который синтаксически похож на PHP. В стороне, книга действительно является хорошим вступлением в TDD.

Ответ 8

Почему TDD?

TDD - это ответ почти всего в разработке программного обеспечения. Это один из основных аспектов экстремального программирования.

Разработка программного обеспечения - это пресловутые непредсказуемые задачи. В небольшом и крупном проекте, где грантополучатель, что код, который вы пишете сегодня, не нарушает ничего, что вы написали в прошлом месяце. Ответ TDD.

Тогда очевидным вопросом будет то, как TDD делает это?

Ответ прост. Независимо от того, какую функцию вы пишете, для этого вы разработаете TDD. С течением времени у вас будет коллекция TDD. Если вы пишете что-то новое, вы пишете TDD для этого и привязываете его к коллекции TDD. TDD-коллекция включает в себя все TDD, которые вы/ваша команда написала с самого первого дня вашего проекта.

Если вы не делаете TDD, есть хорошие шансы, что проект может оказаться вне руки, независимо от того, насколько вы будете осторожны или будете вашей командой. Эта тенденция может увеличиваться от небольших до крупных проектов.

Нет двух разработчиков, это точно! У нас есть собственный способ реализовать одно и то же по-разному. Все они перейдут на базу кода. Нам нужно что-то согласовать. TDD - это очень стандартный способ достижения этого.