Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 3
Текст из файла (страница 3)
Принцип, конечно, правильный и абсолютно корректный, но на практике тестировшнки испытывают трудности при определении этих смутных (хоть и плодотворных) классов эквивалентности. Я расскажу вам об уже готовых методах разбиения на классы эквивалентности (или методах тестирования), что облегчает их практическое использование. 3. Анализ граничных значений. Рассуждения Маерса об анализе граничных значений являются частью более общей и более мошной методологии тестирования доменов (глава 7).
Некоторыс аспекты анализа граничных значений в применении к циклам будут обсуждаться в главе 4. 4. Причинно-следственные диаграммы [ЕЕМЕ73, МУЕк79]. Более подробное обсуждение вопроса, почему причинно-следственные диаграммы и связанные с ними методы не включены в данную книгу, приводится в разделе 3 «Логические модели». Такие методы трудны в практическом использовании потенциальными тестировшиками, не обладающими необходимыми знаниями, такими как булева алгебра пли теория переключательных схем. Остранд 108ТВ88) замечательно отозвался об этой технике: «Переводя данные спецификации в причинно-следственнгве диаграммы, тестнровщики замещают одно сложное представление другим».
5. Предположение об ошибках. При выборе метода тестирования мы делаем ставку на определенный тип ошибок, который ожилаем обнаружить, так 16 Пропущенные модели как предположение о типе ошибок присутствует в любом методе. Поэтому предположение об ошибках — это не какой то метод тестирования, но атрибут любого из методов. Предположение об ошибках, основанное на статистике ошибок программистов, — вполне здравая идея (посмотрите, однако, «Парадокс пестицида» в главе 1). Сегодня мы имеем подобные статистики и, опираясь на них, выбираем определенный метод тестирования. Существует также и формальная теория тестирования, основанного на ошибках, но она не вошла в эту книгу [НО%'О89, МОВЕ90]. 3.
Логические модели Логические модели включаютвсебя причинно-следственныедиаграммы [ЕЕМЕ73, МУЕВ79], модели таблиц решений [ВЕ1290, СОО1)75] и множество других вариантов, использующихся в качестве частей различных методологий дизайна [ВЕХ1)85, »ЧЕУ()94В]. Это замечательные методы, однако для их разбора потребуется слишком много места.
К примеру, логические модели занимают в книге «Методы тестирования программного обеспечения» 42 страницы. В данной книге из-за более современных предпосылок и примеров черновик состоял из 75 страниц. Это еще две дополнительные большие (даже слишком большие) главы, что сделает курс слишком большим для одного семестра. Мне трудно объяснить логические модели без привлечения булевой алгебры, а ее нет смысла учить, если вы не владеете диаграммами Карно — Вейча [ВЕ1290], поскольку булеза алгебра почти не используется без этого важного инструмента.
Я обратил внимание, что слушатели разделяются падве категории. Те, кто знаком с булевой алгеброй и картами Карно, способны овладеть этими методами самостоятельно, например, с помошью 5ТТ2. Те же, у кого нет таких знаний, не могут изучить их за четыре часа, которые я посвящаю этой теме.
В итоге тестирование на основе логики всегда находится на последних местах в списке предпочтений моих студентов и спонсоров. И я частенько вообще выбрасываю эту тему из моих семинаров. Было бы неплохо, чтобы курс по тестированию был не единственным. Вспомогательный курс, для начальных или старших курсов, когда студенты уже владеют необходимыми знаниями, мог бы включать в себя логические модели и другие модели, здесь не представленные.
4. Языковые модели Существует большое число моделей на основе специальных языков для разработки тестов и связанных с ними инструментальных средств. Хорошим примером может служить метод разбиения по категориям Остранда [1АУС92, О5ТВ88] и «Т» Постона [Р05Т94]. Другие методы того же типа изложены в [ВА1.С89, ВЕ1.Р76, 1)АЧ188, КЕММ85, В1СН89]. Все эти методы основаны на языке определения теста. Языки отличаются степенью формальности и выразительной силой, простираясь от самых элементарных до строгих полнофункциональных язы- 4.
Языковые модели 17 ков. При помогци таких языков тестировщнки определяют требуемое поведение программ. Языковый процессор проверяет это определение на неоднозначности и противоречия. Другой процессор автоматически генерирует тестовые варианты (положительные и отрицательные), соответствующие данному определению при помощи большого числа формальных и эвристических методов тестирования. Что же плохого в таком способе? Ничего. Я люблю его. Я верю, что рано или поздно тесты будут преимущественно создаваться такими вот инструментами. Однако подобные средства сложны, и их нельзя понять по-настоящему без понимания методов тестирования, на которых строятся генераторы тестов.
Прочтя эту книгу, вы узнаете об этих методах. Другая проблема является фундаментальной для любого языка программирования. Один из наиболее важных выводов, которые я сделал, наблюдая почти четыре десятилетия за развитием программного обеспечения, заключается в том, что нельзя ставить все на какой-то язык программирования, пока он популярен. Да и после потери популярности не стоит зацикливаться на нем. Люди предрекали кончину языка СОВО! десятилетиями, но он, подобно бессмертному вампиру, все еще с нами.
Кто мог предположить, что С вытеснит языки ассемблера, почти полностью гОВТВАХ и даже СОВ01.? Что случилось с языками Р1./1 и А!яо!? Достоинства язьпов программирования слабо связаны с их популярностью. Будущее языков тестирования еще в большей степени непредсказуемо из-за относительно небольшого круга пользователей. Я надеюсь, что со временем один или два таких языка и связанные с ними генераторы тестов станут общепризнанными средствами тестирования.
Тогда и наступит время написать о ннх, может быть, в рамках дополнительного курса. Кеабте.бос Зачем нужен Кеабте.бос? Смогу ли я добиться большего успеха, чем производители фирменного программного обеспечения, попытавшись убедить вас прочесть этот раздел, прежде чем вы перейдете к следующим главам? Данный раздел — зто инструкция по пользованию данной книгой. Я ничем не отличаюсь от вас.
Когда мне в руки попадает новый пакет программ, я запускаю то, что мне интересно, начинаю с ним манипулировать и неизбежно захожу в тупик. Тогда я возвращаюсь назад и читаю Веаоше.оос, для того чтобы узнать, что же я сделал не так. Поэтому, если вы читаете этот раздел, зто значит, что вы попытались прочесть главу о методах, которые, на ваш взгляд, подходят для вашей задачи, но безуспешно. Итак, давайте прочтем это прямо сейчас. План книги Эта книга имеет свою генеральную линию. В главе 1 подготавливается почва для дальнейшего изложения и говорится о моем видении вашей ситуации, или, иными словами, обстоятельств, в которых происходит ваше тестирование. Для некоторых из вас эти обстоятельства могут показаться идеалистическими, но на самом деле они реальны и в той или иной форме присутствуют во множестве организаций-разработчиков программного обеспечения, и это то, к чему вам надо стремиться.
Сравнивая нашу ситуацию с главой 1, вы поймете, где вы находитесь и в каком направлении вам надо двигаться. Для тех, кто ориентируется в терминах, мои стандарты — пятый уровень зрелости 8Е1 (по шкале Института программного обеспечения) и, кроме того, немного из 18САС941. Глава 2 необходима для понимания глав 3, 4, 5, 6, 8 и 9, глава 4 — для глав 5, 6 и 8. Вы — в большинстве своем тестнровшикн-практики, и я не буду осуждать вас, План книги 19 если вы пропустите главу, которая покажется вам чересчур абстрактной или не имеющей отношения к вашей конкретной задаче. Прошу за это прошения.
Глава 2 очень важна. Если вы не разберетесь в ней, то последующие главы могут быть непонятны. В лучшем случае вы не сможете извлечь из них столько пользы, как если бы вы прочитали эту главу. Глава 2 подобна подпрограмме с нужной информапией. Вместо того чтобы снова и снова повторять основные пршшипы в различных контекстах для каждой главы, я опишу идеи тестирования один раз в абстрактной форме и буду ссылаться на них в дальнейшем.
Если вы разберетесь в абстрактных понятиях главы 2, то в последующих главах объяснение методов будет занимать всего несколько страниц. Это сделает книгу короче и дешевле, а КПД усвоения выше. В главах с 3 по 9 описываются конкретные методы. В каждой главе — один метод и его производные. Я постарался сделать эти главы как можно более независимыми друг от друга.
Переварив главу 2, вы сможете читать остальные главы практически в любом порядке. 1-ВВЕДЕНИЕ Р'УТ т-д 10-ИНСТРУМЕНТЫ у Данная диаграмма показывает, какой материал должен быть предварительно освоен перед прочтением той или иной главы. Сплошные линии означают, что вы должны разобраться в главе, находящейся в начале стрелки, для того чтобы понять главу, па которую стрелка указывает. Прерывистые линии означают, что предварительная глава содержит определения, которые будут использоваться в последующей главе, но любом случае вы сможете понять материал без внимательного изучения предварительной главы. Прочтение главы 1 — желательно, но необязательно для понимания следующих глав. Последняя глава включает в себя 20 кеа0ве.бос определения из остальных глав, и поэтому требование к прелваряющим главам нежесткое. В последней главе рассказывается об инструментальных средствах и автоматизации. И хотя методы, описываемые в этой книге, могут использоваться и безо всякой автоматизации, такое их использование будет крайне неэффективно.
Я надеюсь, что вы простите мне, что я не вдаюсь в подробности при обсуждении инструментальных средств. Я не собирался делать здесь полный обзор последних коммерческих инструментов. Такую информацию можно найти в [ОА!С93], ]СВАН93], ~3ЯЕТ94] и других подобных периодических изданиях. Ситуация меняется слишком быстро, для того чтобы имело смысл печатать подобную информацию в книге. Структура главы Главы с 3 по 9, составляющие ядро данной книги, имеют сходную структуру, хотя порядок может меняться от главы к главе. Обзор.