Задание TDD для начинающих? - PullRequest
7 голосов
/ 16 марта 2011

Я хочу представить дисциплину Test Driven Development моим младшим программистам на Java, которые никогда раньше не слышали этот термин. Я планирую провести сеанс, который объясняет основы и преимущества TDD в первой половине, а затем проходит практическое задание во второй половине.

Так что может быть хорошим заданием на основе Java для передачи его новичкам TDD? Это не должно быть настолько тривиально, что люди теряют интерес, и не так сложно, что они падают духом. Я видел несколько в сети, но также хочу рассмотреть ваши предложения. Любые указатели / ссылки на них с благодарностью.

Ответы [ 7 ]

4 голосов
/ 16 марта 2011

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

https://github.com/orfjackal/tdd-tetris-tutorial

3 голосов
/ 10 апреля 2011

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

  • все понимают проблему, и это не зависит от языка
  • Вы можете начать с одного или двух правил, которые легко проверить (это не "ПАРОЛЬ", имеет более 8 символов ...) чтобы освоить ритм TDD
  • , вы быстро получите интересные вопросы, когда у вас есть 2 или более правил.Тестирование становится сложным и приводит к изменению дизайна / повторного факторинга, отделению правил от валидатора и получению кода, который является одновременно чистым и простым для тестирования.
2 голосов
/ 16 марта 2011

Мне нравится Range для этого - просто диапазон целых чисел.Запись включает (int), перекрытия (Range) и любые подобные методы;Вы выясняете, полностью ли он открыт, полностью закрыт или полуоткрыт (в основном лучший ответ), и позволяете тестам вас туда направить.1004 *.Практичное, полезное и тестовое вождение может привести к неожиданным решениям.

1 голос
/ 15 октября 2015

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

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

  • последнее использовавшееся поведение (наиболее часто используемые имена появляются первыми): для сохранения состояния требуется объект инкрементального поиска
  • в алфавитном порядке
  • рассматривая буквы в любой позиции (например, при поиске "JSm" находит "Джона Смита")

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

1 голос
/ 10 апреля 2011

Я люблю писать движки для Игры Жизни Джона Конвея .

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

Выможно также разработать лучший дизайн с несколькими дополнительными правилами:

  • Сетка может переключаться во время выполнения назад и вперед из ограниченной сетки (вне которой ничто не может выжить) в бесконечную сетку илисвернутая сетка (планеры возвращаются на другую сторону).
  • Ячейки меняют цвет (или строковое представление) в зависимости от того, сколько им лет (перемещает дизайн из объекта-значения в сущность).
  • Правила можно изменить с Конвея на High Life.

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

  • Размер ячеек изменяется в зависимости от количества соседей
  • Есть "назад"Кнопка
  • Есть джойстик, который позволяет вам перемещаться по обернутым или бесконечным сеткам
  • Плата может быть (пере) установлена ​​в предопределенные сценарии
  • Плата может изменять размер.

Это то, что Кори Хейнс всегда использует в своих ретритах по коду.Я использовал его для обучения TDD / BDD на уровне единиц в течение многих лет.Вы можете увидеть некоторый прогресс очень быстро, а затем он становится сложнее по мере роста.

0 голосов
/ 16 марта 2011

(не ответ, просто комментирование. Пожалуйста, игнорируйте.)

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

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

В TDD, кажется, поощряет студентов делать достаточно хорошую работу, чтобы пройти тесты.Вам действительно не нужно тщательно продумывать свой алгоритм;просто настраивайте его, пока он не пройдет тесты, что довольно легко.

Все плохое из этого выйдет.

Я не говорю, что тестирование не важно.Но это не должна быть линия защиты 1st для правильности.

В другой связанной теме некоторые люди утверждают, что TDD хорош для дизайна: если код легко тестировать, он оченьскорее всего, хороший дизайн.Это также очень озадачивает - когда нельзя сразу сосредоточиться на хорошем дизайне?

0 голосов
/ 16 марта 2011

Крестики-нолики.Пусть игрок идет первым, а компьютер - вторым.

Вы можете начать с того, что компьютер всегда идет посередине, но затем вам нужно проверить, чтобы компьютер не выбрал место, которое уже занято.Затем вы можете постепенно приступить к тестированию, чтобы убедиться, что компьютер всегда закрывает свои уязвимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...