Тестирование черного ящика, иногда называемое тестированием на основе спецификаций , [1] — это метод тестирования программного обеспечения , который проверяет функциональность приложения, не заглядывая в его внутренние структуры или работу. Этот метод тестирования может быть применен практически к любому уровню тестирования программного обеспечения: модульному , интеграционному , системному и приемочному . Тестирование черного ящика также используется как метод в тестировании на проникновение , где этичный хакер имитирует внешнюю хакерскую или кибератаку, не имея никаких знаний об атакуемой системе.
Тестирование на основе спецификаций направлено на проверку функциональности программного обеспечения в соответствии с применимыми требованиями. [2] Этот уровень тестирования обычно требует предоставления тестировщику подробных тестовых случаев , который затем может просто проверить, что для заданного ввода выходное значение (или поведение) либо «является», либо «не является» ожидаемым значением, указанным в тестовом случае.
Специфические знания кода приложения, внутренней структуры и знания программирования в целом не требуются. [3] Тестировщик знает, что программное обеспечение должно делать, но не знает, как оно это делает. Например, тестировщик знает, что определенный ввод возвращает определенный, неизменный вывод, но не знает, как программное обеспечение производит вывод в первую очередь. [4]
Тестовые случаи строятся вокруг спецификаций и требований , т. е. того, что приложение должно делать. Тестовые случаи обычно выводятся из внешних описаний программного обеспечения, включая спецификации, требования и параметры проектирования. Хотя используемые тесты в основном носят функциональный характер, могут использоваться и нефункциональные тесты. Разработчик тестов выбирает как допустимые, так и недопустимые входные данные и определяет правильный выходной сигнал, часто с помощью тестового оракула или предыдущего результата, который заведомо хорош, без каких-либо знаний о внутренней структуре тестового объекта.
Типичные методы проектирования тестов «черного ящика» включают в себя тестирование таблиц решений , тестирование всех пар , разбиение эквивалентности , анализ граничных значений , причинно-следственный график , предположение об ошибках , тестирование переходов состояний , тестирование вариантов использования , тестирование пользовательских историй , анализ домена и тестирование синтаксиса. [5] [6]
Тестовое покрытие относится к проценту требований к программному обеспечению , которые проверяются методом черного ящика для системы или приложения. [7] Это контрастирует с покрытием кода , которое изучает внутреннюю работу программы и измеряет степень выполнения исходного кода программы при запуске набора тестов. [8] Измерение тестового покрытия позволяет быстро обнаруживать и устранять дефекты, создавать более полный набор тестов и удалять тесты, которые не соответствуют заданным требованиям. [8] [9]
Тестирование методом черного ящика может быть необходимо для обеспечения корректной функциональности, но его недостаточно для защиты от сложных или высокорисковых ситуаций. [10] Преимущество метода черного ящика в том, что не требуется никаких знаний в области программирования. Какие бы предубеждения ни были у программистов, у тестировщика, вероятно, другой набор, и он может подчеркивать разные области функциональности. С другой стороны, тестирование методом черного ящика называют «прогулкой в темном лабиринте без фонарика». [11] Поскольку они не проверяют исходный код, возникают ситуации, когда тестировщик пишет много тестовых случаев, чтобы проверить что-то, что можно было бы протестировать только одним тестовым случаем, или оставляет некоторые части программы непротестированными.