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

Agile Way: тестирование интеграции или функциональное тестирование или и то, и другое?

Я работаю в офисе, который уже давно занимается Agile. Мы используем Scrum для управления проектами и смешаемся в технических практиках XP. Он работает хорошо, и мы постоянно учимся на уроках и совершенствуем наш процесс.

Я хотел бы рассказать вам о наших обычных методах тестирования и получить отзывы о том, как это можно улучшить:

TDD: первая линия защиты Мы очень верим в модульное тестирование, и я бы сказал, что наши разработчики также достаточно опытны, чтобы писать всесторонние тесты и всегда изолировать SUT с помощью mocks.

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

Функциональное тестирование Обычно мы делаем это структурированным, но ручным способом. Мы играли с Selenium и Windmill, которые круты, но для нас, по крайней мере, не совсем там.

Я хотел бы услышать, как кто-то еще что-то делает. Считаете ли вы, что если тесты интеграции или функциональное тестирование выполняются достаточно хорошо, то можно игнорировать другое?

4b9b3361

Ответ 1

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

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

Вы не указали, работает ли сервер непрерывной интеграции. Я бы настоятельно рекомендовал установить один (Hudson легко настроить). Затем вы можете выполнить интеграцию и функциональные тесты с каждой проверкой кода.

Ответ 2

Мы столкнулись с тем, что твердый набор тестов на селен фактически подводит итог тому, что клиент ожидает хорошего качества. Итак, в сущности, мы обсуждали этот вопрос: если писать тесты на селен было так же просто, как писать блок-тесты, мы должны меньше сосредоточиться на модульных тестах.

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

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

Ответ 3

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

Ответ 4

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

Похоже, у вас приличная система. Держите все, если вам нечего терять.

Ответ 5

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

Сервер сборки настроен с непрерывной интеграцией (CI) в Team Build и не позволяет этому слишком сильно забиваться медленными тестами (полный тестовый набор занимает более часа для запуска на сервере), мы разделили тесты на "медленные" тесты, которые запускаются дважды в день и "быстрые" тесты, которые запускаются как часть непрерывной интеграции. Установив атрибут тестового метода, сервер сборки может определить разницу между ними.

В целом, "медленные" тесты - это те, которые должны выполнять доступ к данным, использовать веб-службы или аналогичные. Они будут рассматриваться как интеграционные тесты или функциональные тесты по общему соглашению. Примерами являются: CRUD-тесты, тесты правил проверки бизнеса, которым нужен набор объектов для работы и т.д.

"Быстрые" тесты больше похожи на модульные тесты, где вы можете разумно изолировать одно состояние объекта и поведение для теста.

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

Я согласен с тем, что вы не должны слишком зависеть от "вкуса" теста, который вы используете как часть разработки (выражая критерии приемлемости, поскольку тесты, конечно, являются исключением). Отдельный разработчик должен использовать свое мнение при определении того, какие тесты лучше всего соответствуют их коду. Настаивание на модульных тестах для бизнес-объекта может не выявить ошибки, которые проведет CRUD-тест и т.д....

Ответ 6

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

Ответ 7

Я склонен не разделить различные вкусы тестирования в TDD. Для меня TDD - это Test-Driven Development, а не Unit Test -Driven Development. Поэтому моя практика TDD объединяет модульные тесты, интеграционные тесты, функциональные и приемочные тесты. Это приводит к тому, что некоторые компоненты покрываются определенными типами тестов и другими компонентами, которые подпадают под другие типы тестов очень прагматичным образом.

Я спросил question об актуальности этой практики, а короткий ответ заключался в том, что на практике разделение между быстрыми/простыми тестами запускается автоматически при каждом сложные и медленные/сложные тесты выполняются реже.

Ответ 8

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

Ответ 9

Мне очень нравится концепция Gojko Adzic "теста на сохранение лица" как способ определить, что вы тестируете через пользовательский интерфейс: http://gojko.net/2007/09/25/effective-user-interface-testing/

Ответ 10

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