Тестирование белого ящика - White-box testing

Разработка программного обеспечения
Активность ядер
Парадигмы и модели
Методологии и рамки
Вспомогательные дисциплины
Практики
Инструменты
Стандарты и свод знаний
Глоссарии
Контуры

Тестирование белого ящика (также известен как чистое тестирование, стеклянная коробка испытания, тестирование прозрачной коробки, и структурное тестирование) - метод тестирование программного обеспечения который проверяет внутренние структуры или работу приложения, а не его функциональность (т. е. черный ящик ). При тестировании методом белого ящика для разработки тестовых примеров используется внутренняя перспектива системы, а также навыки программирования. Тестировщик выбирает входные данные для отработки путей прохождения кода и определяет ожидаемые результаты. Это аналогично проверке узлов в цепи, например. внутрисхемное тестирование (ICT). Тестирование белого ящика может быть применено в единица измерения, интеграция и система уровни процесса тестирования программного обеспечения. Хотя традиционные тестировщики склонны думать о тестировании методом белого ящика как о выполняемом на уровне модулей, сегодня он чаще используется для интеграции и тестирования системы. Он может тестировать пути внутри модуля, пути между модулями во время интеграции и между подсистемами во время тестирования на уровне системы. Хотя этот метод разработки тестов может выявить множество ошибок или проблем, он может пропустить невыполненные части спецификации или отсутствующие требования. Если тестирование методом белого ящика ориентировано на дизайн,[1] то есть управляемый исключительно согласованными спецификациями того, как должен вести себя каждый компонент программного обеспечения (как в DO-178C и ISO 26262 процессы), то с помощью методов тестирования методом белого ящика можно выполнить оценку невыполненных или отсутствующих требований.

Методы разработки тестов белого ящика включают следующие покрытие кода критерии:

Обзор

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

Уровни

  1. Модульное тестирование. Тестирование методом белого ящика выполняется во время модульного тестирования, чтобы убедиться, что код работает должным образом, до того, как произойдет интеграция с ранее протестированным кодом. Тестирование методом белого ящика во время модульного тестирования потенциально выявляет многие дефекты на раннем этапе и помогает устранить дефекты, которые возникают позже, после интеграции кода с остальной частью приложения, и, следовательно, снижает влияние ошибок на более поздних этапах разработки.[2]
  2. Интеграционное тестирование. Тестирование белого ящика на этом уровне написано для проверки взаимодействия интерфейсов друг с другом. Тестирование на уровне модулей позволило убедиться, что каждый код протестирован и работает соответствующим образом в изолированной среде, а интеграция проверяет правильность поведения в открытой среде с помощью тестирования белого ящика для любых взаимодействий интерфейсов, известных программисту.[2]
  3. Регрессионное тестирование. Тестирование белого ящика во время регрессионного тестирования - это использование переработанных тестовых случаев белого ящика на уровне модульного и интеграционного тестирования.[2]

Основная процедура

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

  1. Входные данные включают различные типы требований, функциональные спецификации, детальное проектирование документов, надлежащий исходный код и спецификации безопасности.[нужна цитата ] Это подготовительный этап тестирования методом белого ящика, на котором представлена ​​вся основная информация.
  2. Обработка включает в себя выполнение анализа рисков для руководства всем процессом тестирования, составления правильного плана тестирования, выполнения тестовых примеров и передачи результатов.[нужна цитата ] Это этап создания тестовых примеров, чтобы убедиться, что они тщательно тестируют приложение, и соответствующие результаты записываются.
  3. Результат включает подготовку окончательного отчета, который включает в себя все вышеупомянутые приготовления и результаты.[нужна цитата ]

Преимущества

Тестирование методом белого ящика - один из двух самых распространенных методов тестирования, используемых сегодня. У него есть несколько основных преимуществ:

  1. Побочные эффекты знания исходного кода полезны при тщательном тестировании.[нужна цитата ]
  2. Оптимизация кода становится простой, поскольку обнаруживаются незаметные узкие места.[нужна цитата ]
  3. Дает программисту возможность самоанализа, потому что разработчики тщательно описывают любую новую реализацию.[нужна цитата ]
  4. Обеспечивает отслеживаемость тестов из источника, тем самым позволяя легко фиксировать будущие изменения источника во вновь добавленных или измененных тестах.[3]
  5. Легко автоматизировать.[4]
  6. Предоставляет четкие инженерные правила, определяющие, когда следует прекратить тестирование.[5][4]

Недостатки

Хотя тестирование методом белого ящика имеет большие преимущества, оно не идеально и содержит некоторые недостатки:

  1. Тестирование методом белого ящика усложняет тестирование, потому что тестировщик должен знать программу или в команде тестирования должен быть хотя бы один очень хороший программист, который может понять программу на уровне кода. Тестирование методом белого ящика требует наличия программиста с высоким уровнем знаний из-за сложности уровня тестирования, которое необходимо выполнить.[нужна цитата ]
  2. В некоторых случаях нереально иметь возможность протестировать каждое существующее условие приложения, и некоторые условия будут непроверены.[нужна цитата ]
  3. Тесты ориентированы на программное обеспечение в том виде, в котором оно существует, и отсутствующие функции могут быть не обнаружены.
  4. Результирующий тест может быть хрупким, потому что он тесно связан с конкретной реализацией тестируемого объекта. Тестируемый код можно переписать, чтобы реализовать ту же функциональность другим способом, что делает недействительными предположения, заложенные в тесте. Это может привести к ненужным ошибкам тестов или, в худшем случае, к тестам, которые теперь дают ложные срабатывания и маскируют ошибки в коде.

Современный вид

Более современная точка зрения состоит в том, что дихотомия между тестированием белого ящика и тестированием черного ящика размыта и становится менее актуальной. В то время как «белый ящик» изначально означал использование исходного кода, а черный ящик означал использование требований, теперь тесты производятся из многих документов на различных уровнях абстракции. Дело в том, что тесты обычно разрабатываются на основе абстрактной структуры, такой как пространство ввода, граф или логические предикаты, и вопрос в том, из какого уровня абстракции мы выводим эту абстрактную структуру.[4] Это может быть исходный код, требования, описания входных пространств или один из десятков типов моделей дизайна. Следовательно, различие «белый ящик / черный ящик» менее важно, а термины менее актуальны.[нужна цитата ]

Взлом

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

Смотрите также

Рекомендации

  1. ^ Стейси Нельсон (июнь 2003 г.), NASA / CR – 2003-212806 Процессы сертификации критически важного для безопасности и критически важного для работы аэрокосмического программного обеспечения (PDF), Исследовательский центр Эймса, п. 25, [Глоссарий] Тестирование белого ящика: На основе дизайна тестирование, при котором инженеры исследуют внутреннюю работу кода
  2. ^ а б c d е Уильямс, Лори. «Тестирование белого ящика» (PDF): 60–61, 69. Получено 13 февраля 2013. Цитировать журнал требует | журнал = (помощь)[требуется проверка ]
  3. ^ Биндер, Боб (2000). Тестирование объектно-ориентированных систем. Addison-Wesley Publishing Company Inc.
  4. ^ а б c Амманн, Пауль; Оффатт, Джефф (2008). Введение в тестирование программного обеспечения. Издательство Кембриджского университета. ISBN  9780521880381.
  5. ^ Майерс, Гленфорд (1979). Искусство тестирования программного обеспечения. Джон Уайли и сыновья.

внешняя ссылка

  • BCS SIGIST (Группа специалистов Британского компьютерного общества по вопросам тестирования программного обеспечения): http://www.testingstandards.co.uk/Component%20Testing.pdf Стандарт тестирования программных компонентов], Рабочий проект 3.4, 27 апреля 2001 г.
  • http://agile.csc.ncsu.edu/SEMaterials/WhiteBox.pdf содержит дополнительную информацию о тестировании потока управления и тестировании потока данных.
  • http://research.microsoft.com/en-us/projects/pex/ Pex - автоматическое тестирование методом белого ящика для .NET