Методы или категории тестирования программного обеспечения [закрыто]

16

Какие виды тестирования программного обеспечения вы знаете? Я слышал о разработке через тестирование, модульных тестах и ​​т. Д., Но не могу понять их важность и разницу. Например, почему мы используем регрессионные тесты или приемочные тесты. Какое преимущество они предоставляют?

Dehumanizer
источник
8
Какая часть этого была запутанной или неполной? ru.wikipedia.org/wiki/Software_testing
S.Lott
2
Вы можете пропустить регрессионные тесты, если вам все равно, если вы нарушите существующую функциональность, и вы можете пропустить приемочный тест, если вам все равно, считают ли люди, которые на самом деле используют программное обеспечение или платят за него, то, что они ожидают от него. , Профессиональные программисты заботятся об этих вещах.
HLGEM
Я голосую, чтобы вновь открыть этот вопрос, так как он единственный, который я смог найти, давая хороший обзор о различных видах тестовых категорий. Может быть, у кого-то есть хорошая идея, как перефразировать вопрос, чтобы он лучше подходил для этого сайта?
Док Браун

Ответы:

38

Широкие категории, на мой взгляд, будут:

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

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

Тестирование серая коробка - гибрид двух предыдущих.

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

Общие классификации тестирования будут:

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

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

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

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

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

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

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

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

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

JB King
источник
5
+1 ... и, к сожалению, даже после всего этого есть ручные тесты.
Стивен Эверс
2
и Stres Test - все возможные сеансы, тестирующие одну и ту же маску в одно и то же время и сценарий непрерывного тестирования, где-то включенный как часть UAT, кстати +1
mKorbel
1
Вы не пропустили покрытие / тестирование покрытия филиала? Кроме того, работает под какой-то системой наблюдения за памятью, такой как malloc "Electric Fence" или Valgrind?
Брюс Эдигер
1
@ Брюс Эдигер: охват - это статистика тестирования белого ящика, а не сам метод тестирования, а инструменты, которые вы описываете, предназначены для тестирования производительности.
Стивен Эверс
Я должен различаться по «инструментам ... для перфорирования». В некоторых языках (C или C ++) при выполнении большого количества модульных тестов в valgrind обнаруживаются ошибки, которых не обнаружит ни один из перечисленных выше видов тестирования. Valgrind, безусловно, является средством отладки, но запуск тестов в программе valgrinded очень необходим.
Брюс Эдигер
4

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

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

FrustratedWithFormsDesigner
источник
1
И самое главное, чтобы они согласились, что получили то, что хотели, и могут заплатить вам сейчас.
Мчл