Модульное тестирование - разработка или тестирование?

24

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

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

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

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

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

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

Рубио
источник
9
Это имеет значение?
Яннис
5
@YannisRizos Из названия нет. Из всего этого вопроса, определенно кажется, что человек спрашивает
Людвиг Магнуссон
2
@Rubio От вашего вопроса я согласен, что отчеты о модульных тестах бесполезны для системного тестера. Модульные тесты являются полезным инструментом для разработчика. Как ваш менеджер по тестированию мотивирует необходимость этих отчетов?
Людвиг Магнуссон
2
@LudwigMagnusson Правда, однако, если это имеет значение только для спрашивающего, это слишком локализовано.
Яннис
5
Разработчики, которые отчитываются перед менеджером по тестированию, ошибаются, несмотря ни на что. Если она передаст этот запрос через вашего ( менеджера разработчиков ), вам нужно будет просто сделать то, что сказал вам ваш начальник. «Поговори с моим менеджером» - это оружие, которое нужно знать, как использовать его в «строго формальной среде», как твое
комнат

Ответы:

30

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

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

Это означает, что обязанности должны быть такими:

  • Разработчики пишут автоматизированные тесты
  • Разработчики запускают индивидуальные автоматизированные тесты по мере необходимости, как часть их рабочего процесса разработки
  • QA запускает все автоматизированные тесты как один из первых этапов тестирования

Если у вас есть сервер сборки, тогда задача QA (в отношении автоматических тестов) сводится к тому, чтобы «открыть отчет сервера сборки и убедиться, что все в порядке».

tdammers
источник
Отличный пост, точно так же, как я собирался опубликовать. Только компания qualm слишком сильно полагается на юнит-тесты, так как интеграционные тесты могут привести к проблемам в будущем. Я не согласен с тем, что задача QA сводится к проверке сервера сборки (я предполагаю, что вы имеете в виду что-то вроде Хадсона). Это накладывает все бремя тестирования на разработчиков, которые постоянно пишут тесты, которые охватывают ВСЕ бизнес-логику, что, похоже, придает разработчикам слишком большой вес.
Дардо
4
@dardo: Конечно, автоматические тесты - не единственные тесты, которые вы должны выполнять, иначе вы можете просто полностью избавиться от QA. Это было бы смешно - многие очень важные аспекты любого программного продукта просто не могут быть проверены автоматически. Я имею в виду, что при наличии автоматических тестов QA не нужно беспокоиться о них, кроме проверки выходных данных сервера сборки; после этого они делают свое обычное дело - ручное и полуавтоматическое тестирование завершенной сборки.
tdammers
Ах да, согласен 100% Вроде как контрольно-пропускной пункт, они там, они проходят, и т. Д.
dardo
@tdammers - Тестирование - это только малая часть обеспечения качества.
Мэтью Флинн
2
Отличный ответ, однако я не согласен с тем, что тесты следует рассматривать как an authoritative source of technical specifications. Испытания должны быть подтверждением спецификаций, но не заменой. Это не значит, что я выступаю за большую предварительную спецификацию, но скорее я делаю различие в том, что мы применяем тесты для проверки того, что мы знаем о том, как должна вести себя система, вместо того, чтобы иметь тесты определяют поведение. Педантичное различие возможно, но все же важно.
С.Робинс
10

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

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

  • если она - разумный человек, просто желающий получить информацию, чтобы помочь работе ее команды тестирования, имеет смысл прийти к общему пониманию и выработать какое-то решение, которое подойдет вам обоим. Вы можете обсудить с ней природу модульных тестов и принципиальную разницу между модулем и функциональными / системными / приемочными тестами. Надеюсь, вы сможете понять, что они работают на самых разных уровнях, и ни один не может заменить другой.
  • если она ненормальная или бюрократка, требующая отчета только ради него, вы можете сгенерировать что-то, чтобы удовлетворить ее прихоти с наименьшими усилиями (например, то, что предложил @Doc :-).
  • если она участвует в какой-то сильной игре, вы можете спросить, имеет ли она право требовать отчеты от разработчиков. По моему опыту, разработчики обычно не должны отчитываться перед отделом контроля качества.
Петер Тёрёк
источник
Хорошие моменты. Она кажется разумным человеком. Мой страх, который я не очень ясно объяснил, заключается в том, что модульные тесты ведут тестировщиков в неверном направлении и ложную безопасность в том, что им нужно, а что нет необходимости тестировать.
Рубио
2
@Rubio, действительно, вы должны разъяснить ей, что модульные тесты не могут заменить системные тесты. На самом деле, высокий уровень модульного тестирования конкретного модуля может даже служить предупреждением о том, что этот модуль требует дополнительного внимания во время тестирования системы! Если разработчики приложили дополнительные усилия для написания такого количества тестов, код, возможно, был радикально изменен / расширен в последнее время и / или полон ошибок.
Петер Тёрёк
7

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

По этой причине, наша команда QA не особо заботится о том, что является тестированием, а что нет, прежде чем начать тестирование.

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

Пол Санвальд
источник
5

Она настаивала на том, чтобы разработчики сообщали, что у них есть, и как они тестировали модуль и интеграцию.

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

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

Джейсон
источник
1
Но не должен ли фокус исходить из спецификаций? Существуют ситуации, когда изменения кода имеют неожиданные последствия, и тогда для разработчика очень важно сообщить, что тестирование также должно охватывать это и это.
Рубио
1
@Rubio: Конечно, но с чисто практической точки зрения, попробуйте взглянуть на это с ее точки зрения. Предполагая, что во всех частях приложения не будет абсолютно одинакового количества кода, покрываемого модульными тестами, не хотите ли вы выделить больше своих ограниченных ресурсов на части приложения с меньшим охватом? Для меня это просто вопрос просмотра отчета и выражения моей команды: «Привет, ребята, похоже, что область X имеет меньше кода, покрытого тестами, чем область Y, давайте попробуем сосредоточиться на выполнении тестов в области X»
Джейсон
@Rubio: да, но если вы делаете TDD (то есть BDD) правильно, то ваши тесты должны в первую очередь соответствовать спецификациям. Если ваша компания была действительно просвещенной, то команда тестирования могла бы написать тесты для команды разработчиков.
gbjbaanb
2
Что тестируется: автоматически сгенерированный отчет о покрытии кода. Как это проверено: прочитайте код модульного теста. @gbjbaanb: «команда разработчиков может написать тесты для команды разработчиков». В этом утверждении так много неправильного, что я не знаю, с чего начать, кроме как сказать: « Очень плохая идея» .
BryanH
5

Я не вижу, что это имеет большое значение.

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

Если вы предоставляете их для QA / Testing, и они не проводят надлежащие тесты ... тот же результат, как если бы вы их не предоставили.

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

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

Разработчики делают ошибки, QA делает ошибки, в идеале, они не делают ошибку в одном и том же предмете ... и если они делают ... это потенциально аналитик, который бросил мяч, написав неясную спецификацию.

CaffGeek
источник
2
Недостатком для меня является дополнительная работа, которая не дает никакой ценности.
Рубио
@Rubio, какая дополнительная работа? Просто распечатайте результат. Если они названы правильно, это говорит им, что вы тестируете. Он не должен нуждаться в реальном коде или описании того, как работает метод. Если они это сделают, они могут посмотреть сами.
CaffGeek
1
Генерирование отчета о пройденных модульных / интеграционных тестах 3500, вероятно, окажет небольшую помощь тестеру, даже если тесты были бы хорошо названы (какими они должны быть, а какие нет). Чтобы предоставить тестировщикам значимую информацию о модульном тесте, разработчик должен был бы разобраться в модульном тесте, связанном с определенной функцией, и каким-то образом сообщить тестеру, что на самом деле тестируется и как оно утверждается. Это много работы.
Рубио
1
@Rubio - автоматизация - твой друг. Вы можете настроить сервер непрерывной интеграции, который отправляет отчеты по почте в любое время, когда происходит повторная регистрация (это также поможет вам). Если QA запрашивает объяснение тестов и кода, то кажется, что они вышли за пределы разумности и оказались в сфере «неспособности понять концепцию». Если они не могут или не будут читать код, тогда они бесполезны. В этот момент было бы полезно пообщаться с вашим менеджером, и вы можете изложить его так: «QA хочет, чтобы я тратил х% моего времени на помощь им в чтении кода, это нормально?»
BryanH
1
+1 за то, что он не снимает с QA ответственности за независимое тестирование программного обеспечения.
2

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

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

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

JB King
источник
1
Избыточное тестирование - это то, что часто используется в качестве аргумента и иногда может быть правдой. Однако системное тестирование всегда выполняется во всей системе, тогда как модульное / интеграционное тестирование фокусируется на конкретном модуле. Я вижу здесь опасность.
Рубио
2

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

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

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

Мэтью Флинн
источник
SOX нет, CMMI да. Наши модульные / интеграционные тесты являются частью процесса проверки кода, и это выдерживает аудит. Я могу получить сгенерированный отчет из модульного / интеграционного теста, но это довольно загадочно для тестировщика. Охват также в отчете, но это само по себе ничего не значит.
Рубио
Во-первых, не давайте вашим тестам загадочные имена. Проверьте dannorth.net/introduction-bdd . Во-вторых, покрытие кода может не сказать много о качестве тестов, но, по крайней мере, показывает, что тестируемые модули не взрываются при выполнении большей части всего кода.
Мэтью Флинн
Хорошая ссылка, спасибо. Я помню, как читал отличную статью в журнале, в которой исследуются различные способы обозначения модульных тестов, но не могу найти ее сейчас. Возможно, это был журнал Visual Studio или Code Magazine.
Рубио
2

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

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

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

Lauren
источник
1

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

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

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

Стоит упомянуть подход, обсуждаемый в книге «Как Google тестирует программное обеспечение»: тестирование и контроль качества - это ответственность каждого, а стандарты строгие.

Реальная роль , что традиционно называется отдел «Testing», на самом деле производительность труда разработчиков; т.е. автоматизация, позволяющая организации достичь требуемого уровня строгости с экономической точки зрения.

Уильям Пейн
источник