Модульные тесты имеют смысл в процессе TDD. Они не имеют особой ценности, если вы не занимаетесь разработкой в тестовом режиме. Однако приемочный тест - это большая вещь для качества программного обеспечения. Я бы сказал, что приемочный тест - это святой Грааль развития. Приемочные испытания показывают, удовлетворяет ли заявка требованиям. Как узнать, когда следует прекратить разработку этой функции - только когда все мои приемочные испытания пройдены. Автоматизация приемочных испытаний - большая вещь, потому что мне не нужно делать все вручную каждый раз, когда я вносю изменения в приложение. После нескольких месяцев разработки могут быть сотни тестов, и становится невозможным (иногда невозможно) запустить весь тест вручную. Тогда как я узнаю, что мое приложение все еще работает?
Автоматизация приемочных испытаний может быть реализована с использованием тестовых сред xUnit, что приводит к путанице. Если я создаю приемочный тест с использованием phpUnit или httpUnit, это модульный тест? Мой ответ - нет. Не имеет значения, какой инструмент я использую для создания и запуска теста. Приемочный тест - это тот, который показывает, работает ли функция в соответствии с требованиями IAW. Модульный тест показывает, удовлетворяет ли класс (или функция) идее реализации разработчика. Модульный тест не имеет значения для клиента (пользователя). Приемочный тест имеет большое значение для клиента (и, следовательно, для разработчика, помните Customer Affinity )
Поэтому я настоятельно рекомендую создать автоматические приемочные тесты для веб-приложения.
Хорошие рамки для приемочного испытания:
- Сахи (sahi.co.in)
- Silenium
- Simpletest (Я не являюсь модульным фреймворком для php, но включаю объект браузера, который можно использовать для приемочного тестирования).
Однако
Вы упомянули, что веб-сайт посвящен взаимодействию с пользователем, и поэтому автоматизация тестирования не решит всей проблемы юзабилити. Например: среда тестирования показывает, что все тесты пройдены, однако пользователь не может видеть форму, ссылку или другой элемент страницы из-за случайного style="display:none"
в div
. Автоматические тесты пройдены, потому что div
присутствует в документе, и тестовая среда может его «увидеть». Но пользователь не может. И ручной тест не пройдёт.
Таким образом, все веб-приложения нуждаются в ручном тестировании. Автоматическое тестирование может значительно снизить нагрузку на тестирование (80%), но ручное тестирование также важно для качества получаемого программного обеспечения.
Что касается модульного тестирования и TDD - это делает код качественным. Это выгодно для разработчиков и для будущего проекта (то есть для проектов, которые дольше пары месяцев). Однако TDD требует навыка. Если у вас есть навык - используйте его. Если вы не думаете о приобретении навыка, но помните время, которое потребуется, чтобы получить. Обычно на создание хороших модульных тестов и кода уходит около 3 - 6 месяцев. Если ваш проект продлится больше года, я рекомендую изучать TDD и инвестировать время в надлежащую среду разработки.