Кто должен писать тесты? - PullRequest
27 голосов
/ 01 марта 2011

Лучше, если один человек отвечает за написание тестов, а другой - за их выполнение, или в идеале программист и автор тестов должны быть одним и тем же человеком?

Ответы [ 4 ]

25 голосов
/ 01 марта 2011

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

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

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

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

Обновление

Вот несколько вещейЯ видел в организациях, которые влияют на практику модульного тестирования:

  • некоторые люди могут не захотеть писать модульные тесты;
  • некоторые люди могут не знать, как писать хорошие модульные тесты, которыеможет подорвать преимущества этого, и это может быть использовано как «доказательство» того, что модульное тестирование является плохим;
  • организация может не объединять людей для совместной работы, а выполнять разные обязанности, такие как код программистов, тестирование тестерови т. д., что может привести к принудительному юнит-тестированию;
  • некоторые люди могут быть наняты для написания юнит-тестов, поэтому, если эта роль не изменилась, это противоречит написанию юнит-тестов при кодировании;
  • тамэто может быть очень маленькая организация, которая может означать, что каждый делает всего понемногу;
  • организация в целомне признает ли выгода от модульного тестирования, а скорее просто-напросто код, как можно быстрее и справиться с проблемами позже,
  • кто возглавляет усилия по проведению модульного тестирования?Это один человек?Разработчики?Руководство?
  • Может ли организация самостоятельно решать, кто выполняет юнит-тестирование?

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

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

14 голосов
/ 01 марта 2011

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

Существуют различные виды тестирования:

  • Модульное тестирование
  • Интеграционное тестирование
  • Функциональное тестирование
  • Нефункциональное тестирование - стресс, пенетрация и многие другие типы
  • Пользовательское приемочное тестирование

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

Функциональное тестирование (система функционирует как спецификация состояний) должна выполняться отдельной командой QA .

Нефункциональное тестирование может быть выполнено командой QA или архитектором / техническим руководителем .

UAT (система соответствует назначению) должен выполняться клиентом .

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

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

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

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

7 голосов
/ 01 марта 2011

При работе с TDD тестирующий модуль (читающий программист или пару) должен писать тесты.

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

С BDD / ATDD должно быть задействовано QA / PO.

Тесты BDD (разработка на основе поведения) и ATDD (разработка на основе приемочных испытаний)как правило, написаны на менее детальном уровне.Лучшие тесты написаны с учетом заинтересованных сторон.Таким образом, лучшие люди, которые пишут это QA (обеспечение качества), PO (владельцы продукта) или BA (бизнес-аналитики).Это не значит, что разработчик не может написать их, вам просто нужно войти в эту роль.

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

1 голос
/ 01 марта 2011

Неофициальная политика в моей команде разработчиков:

Все делают все.

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

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

Это не значит, что все работают над каждой задачей одновременно. Это означает, что каждый человек работает над каждым видом задач в определенный момент времени

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