Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 7
Текст из файла (страница 7)
О тестировании 31 Окружение. Совокупность аппаратных, программных средств и данных, в которых и посредством которых компоненты создаются, тестируются и используются. Сюда входят (но этим перечень не ограничивается) вызывающие и вызываемые компоненты, операционная система, аппаратные средства, компилятор, ваши средства тестирования (разумеется) и прочее, что может влиять на работу компонентов или зависеть от нее. 1.3. О тестировании 1.3.1.
Тестиров(цик и программист Повсюду в этой книге мы будем упоминать и противопоставлять друг другу «тестировщиков» и «программистов» так, как будто они являются разными людьми. Такое разделение может привести вас к мысли, что тестирование методом черного япшка предназначено только для независимых тестировщиков, но не для программистов. Другим ошибочным мнением является то, что я сторонник идеи, что тестирование и программирование должны выполняться различными людьми, (то есть должно проводиться независимое тестирование). Я хочу предотвратить и/или скорректировать такие ошибочные взгляды.
Говоря образно, программист должен носить две шляпы — шляпу программиста и шляпу тестировщика. Когда он выполняет тестирование, он должен надеть шляпу тестировщика и думать как тестировщик. Вот что представляет собой «тестировщик», для которого я пишу эту книгу. Итак, тестировщик может быть, а может и не быть тем же самым человеком, который пишет программы. Так как способ мышления при программировании и способ мышления при тестировании сильно отличаются, хорошая идея — просто рассказать о двух ролях, как будто бы пх играют различные люди. Способ мышления в программировании известен давно и существует много книг по этой теме, поэтому не стоит специально на этом останавливаться.
Способ мышления, применяемый при тестировании, возник относительно недавно, и именно поэтому зти способы сильно различаются. Методы тестирования, затрагиваемые здесь, предназначены как для независимых тестировщиков, так и для тех программистов, которые в данный момент тестируют свое или чье-либо программное обеспечение. 1.32. Почему мы тестируем программное обеспечение? Для проведения тестирования программного обеспечения есть несколько весомых причин. 1. Обеспечение программистов информацией, которую они смогут использовать для предотвращения ошибок.
2. Обеспечение менеджеров информацией, которая необходима им для разумной оценки риска при использовании объекта. 3. Создание объекта, максимально свободного от ошибок. 32 Глава 1 ° Введение 4. Создание проекта, поддаюгцегося тестированию, то есть проекта, который можно легко проверить на соответствие, на искаженность и который будет легко сопровождать. 5.
Проверка искаженности объекта с помощью как сформулированных, так и не сформулированных требований (МУЕК79). Это еще называют «взломом программного обеспечениям 6. Проверить соответствие объекта (убедиться в его действенности), то есть показать, что он работает правильно. Информация, необходимая для выполнения пункта 2, определяется степенью, до которой объект действует правильно (то есть количеством подтестов, пройденных н не пройденных), и некоторыми рамками, в пределах которых объект не может быть искажен. То есть пределом, до которого объект не взломан, и пределом, до которого он работает. Тот предел, до которого объект считается свободным от ошибок, является также границей, до которой он соответствует требованиям и не искажен.
Таким образом, у нас есть три основных задачи: хорошее проектирование, искаженность, проверка соответствия. Все, что пишут люди, содержит ошибки. Проведенное тестирование чего-либо не является зквивалентом утверждения, что зто что-то свободно от ошибок. Программист не может думать обо всем — в особенности обо всех возможных взаимодействиях между различными характеристиками и между различными частями программы.
Мы пытаемся взломать программу, так как только такой путь обеспечит нас уверенностью в том, что продукт готов к использованию. Другая задача тестирования — зто накопление информации для менеджмента. При наличии необходимой информации и достаточного количества тестов мы можем с достаточной уверенностью утверждать, что программа готова к использованию.
В конечном счете это как раз то, за что платят тестировщикам, — помощь в создании полезной программы. Наивысшая цель тестирования — это обеспечение качества: накопление информации, которая, вернувшись к программисту, поможет избежать ему прошлых ошибок и улучшить качество программного обеспечения в будущем. Грязный тест (или негативный тест): тест, первичной целью которого является проверка искаженности; то есть тест, предназначенный для того, чтобы взломать программу. Чистый тест (или позитивный тест): тест, первичной целью которого является проверка соответствия; то есть тест, предназначенный для того, чтобы продемонстрировать корректную работу программы, Тест является действенным, если в результате его выполнения выявляются симптомы существующих ошибок.
В спецификациях обычно указываются только те требования, которые должны быть проверены на соответствие (то есть на то, что объект должен делать), и не содержатся требования, которые должны быть проверены на искаженность (то есть на то, что объект не должен делать). Так как количество действий, которые объект должен выполнять, конечно, а количество действий, которые объект не должен выполнять, не ограничено, из общих соображений можно предположить, что 1.3. О тестировании 33 грязных тестов должно быть существенно больше, чем чистых. Так оно и есть на самом деле.
В продуманных тестовых комплектах число грязных тестов относится к числу чистых какй; 1 или 5: 1. 1.3.3. Стратегия тестирования Сн>ратегия тестирования, или методы тестирования — это систематические методы, используемые для отбора и/или создания тестов, которые должны быть включены в тестовый комплект. Это могут быть случайные вводы, тест, направленный на проверку моих подозрений, тест, направленный на проверку ваших подозрений, тест, направленный на проверку соответствия требованиям, тест, направленный на проверку искаженности; тесты, который мы выполняли последний раз, тесты, которые отличаются от тестов, которые мы выполняли последний раз.
Мы выбираем стратегию, такую, что существуют правила, по которым мы можем определить, удовлетворяет данный тест стратегии или не уловлетворяет. В принципе, стратегия должна быть программируемой. Стратегия является эффективной, если тесты, включен ныс в нес, с большой вероятностью обнаружат ошибки тестируемого объекта. Эффективность стратегии зависит от комбинации природы тестов и природы ошибок, на поиск которых эти тесты направлены.
Как на войне и в бизнесе, здесь сугцествуют эффективные и неэффективные стратегии. Более того, так как объект изменяется с целью исправления ошибок и увеличения его возможностей, типы ошибок, находимые у объекта, меняются со врееиенеьп и, следовательно, меняется эффективность стратегии. В то время как теоретически возможно, что стратегия по отношению к специфическим объектам совершенствуется во времени, на самом деле эффективность большинства стратегий со временем убывает.
Стратегия поведенческого теста основана на технических требованиях. Например: тест всех характеристик, упомянутых в спецификации, выполнение всех грязных тестов, вытекающих из требований. Тестирование, выполняемое с помощью стратегии поведенческого теста, называется поведенческим гнестированием. Поведенческое тестирование называется также >лесгиирооанием черного ящика.
Для поведенческого тестирования также используется термин функциональное тестирова>гие1. При поведенческом тестировании (в принципе, но не на практике) не обязательно знать, как объект сконструирован. Тема этой книги— поведенческое тестирование (тестирован>те черного шпика). Стратегия структурного теста определяется структурой тестируемого объекта 1ВА8187, ВЕ1290, 1чТАГ88, ОБТВ96). Например; выполнение каждого оператора по меньшей мере один раз, выполнение каждой ветви но меньшей мере один раз, тестирование использования всех объектов данных, выполнение каждой команды ' термин «функниоиальиое тестирование» обычно нсиользусжя в >имерзгурс.
ю> иа ирактике предпочитается термин «тестирование черного янин«а». Лучииш и более старый теркою, суикс>нуя>щий в компьютерных науках, — «неволею»сскос тестирование». Проблемы с «функшюнальиыь~ тестированием» связаны с тем, что зтот термин исиолюустся для ооомгачсиия некоторой стратегии ~вотирования, используемой, например, для |вотирования матсматичсасих функиий. В з>т>й книге > ри тормина «функииональное тесы«рование», «тестирование черного вин«ка», «поведенческое тестирование» нодиеияют друг друга с доминированием термина «иовсдснчсское тес>ированис». 2 з*«тто 34 Глава 1 ° Введение объектной программы, полученной при компиляции. Тестирование, выполненное с помощью стратегии структурного теста, называется также тестированием прозрачного ящика или тестированием белого ящика. Стратегия структурного теста требует полного доступа к структуре объекта — то есть к исходному коду.