Какие подводные камни теста после разработки? - PullRequest
7 голосов
/ 26 августа 2011

Недавно я был назначен на проект, который был уже на полпути.Это была среда TDD.Каждый следовал правильному принципу Code Unit Test First, а затем Code реализации.Но пара делала все наоборот, сначала код реализации, а потом модульное тестирование.

Хотя в ходе дискуссии говорят, что в любом случае это похоже.

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

Ответы [ 3 ]

16 голосов
/ 26 августа 2011
  • Слишком много работы - возможно, вы написали больше кода, чем вам действительно нужно.
  • Смещение - вы можете писать тесты, которые проверяют вашу реализацию, а не требования.
  • Тесты не влияют на ваш дизайн - тесты могут сигнализировать об улучшениях дизайна.Со временем ваш дизайн может стать жестким и не принимать изменений.
  • Замедляйте - у вашей реализации могут возникнуть проблемы с тестируемостью, которые возникнут только тогда, когда вы попытаетесь написать свои тесты.К тому времени вы можете быть склонны что-то запутать, потому что теперь тест стоит на пути к реализации следующей функции.Попытка выполнить юнит-тестирование непроверяемого большого двоичного объекта приводит к разочарованию. Чаще всего у вас возникают неполные тесты (тестируйте то, что легко, и двигайтесь дальше).
  • Тесты могут быть не написаны - как только ваша реализация будет готова ивы вручную проверили его на работоспособность, есть тенденция пропустить скучные юнит-тесты и перейти к интересной части ... писать больше кода.Со временем непроверенный хаос.

Если это не достаточно очевидно, сначала протестируйте FTW!

2 голосов
/ 02 сентября 2011

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

Что я всегда говорю себе: «Если бы я писал программное обеспечение для автопилота самолета, что бы я сделал, чтобы убедить себя в том, что этот программный продукт никогда не выйдет из строя?»Могут ли эти люди, делающие это наоборот, поставить свою семью на автопилот перед тестированием программного обеспечения?Такое мышление помогает выработать дисциплинированный подход к разработке программного обеспечения.

1 голос
/ 26 августа 2011

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

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

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