Тестирование черного ящика. Б. Бейзер (2004) (1186170), страница 66
Текст из файла (страница 66)
Если же тест выполняется в автоматическом режиме, то специальные инструменты запишут всю необходимую информацию. 4. Трассирование переходов. Это означает запись отметки о каждом совершенном переходе. В понятие отметки входят входной код, инициировавший переход, текущее состояние, состояние после перехода, выходной код, 5. Явная таблица входного кодирования. Мы предполагаем, что существует явный механизм кодирования входа. Лучше всего, если ои содержится в виде таблицы. Входное кодирование полностью отделено от последующей обработки данных.
6. Явная таблица выходного кодирования. То есть осуществлено явное кодирование выхода. Оио может представлять собой таблицу, в которой указано, какие подпрограммы надо вызывать, или определен какой-нибудь другой отдельный механизм, ие являющийся частью остальной обработки. 7. Явная таблица состояний-переходов.
Это означает, что реализация систем с конечным числом состояний всегда имеет явную таблицу переходов. Самое удобное в этих таблицах то, что если обнаружена ошибка перехода, то ее нахождение можно легко определить. Эти характеристики лучше всего встраивать в модель в самом начале, так как их сложно потом модифицировать. Очевидно, для таких средств нужны специальные модели и команды управления, доступ к которым должен быть запрещен для пользователей без специального разрешения. 9.5. Рассмотрение приложений 9.5.1. Индикаторы приложений Ниже описаны некоторые типичные ситуации, требующие использования тестирования конечных автоматов и/или приложения, в которых этот метод часто используется.
Более подробно зта ситуация рассматривалась в [АЪ'И93, ВА11Е79, %11.К771. 1. Программное обеспечение, управляемое при помощи меню. Разработчики коммерческих программ, управляемых при помощи меню, как правило, используют явные конечные автоматы при проектировании своих меню.
В том числе они используют метод тестирования систем с конечным числом состояний для проверки корректности своих меню. 2. Объектно-ориентированное программное обеспечение. Модель с конечным числом состояний встречается в большинстве объектно-ориентированных парадигм проектирования. Корректное тестирование методов подразумевает корректное тестирование поведения состояний. В этом случае необходимость использования методов тестирования систем с конечным числом состояний очевидна. 9.5. Рассмотрение приложений 261 9.52. Предположения об ошибках Предположения, которые мы можем сделать, будут относиться скорее ие к приро- де ошибок, а к программному обеспечению, обладаюшему поведением системы с конечным числом состояний. 5. 6.
7. Протоколы. Обсуждение методов тестирования протоколов лежит за рамками данной книги. Этому вопросу посвящено много книг, и во всех них предполагается, что вы владеете методами тестирования систем с конечным числом состояний [СН0%88, НОЕХ87, 5АК187, 5П)Н89[. Драйверы устройств. Большинство устройств ведут себя как системы с конечным числом состояний, и большинство драйверов включают в себя такие системы. Замена аппаратных средств. Задачи, некогда возложенные иа аппаратные средства, в настояшее время все чаще решаются программным способом.
Это касается ие только электроники, но и механических и электромеханических устройств. В статье, приведенной в журнале 5с[епййс Ашенса [С1ВВ94], предрекается использование микропроцессоров (и соответствуюШего программного обеспечения) в выключателях света, электробритвах (2 килобайта), автомобильных трансмиссиях (30 килобайт кода), ТВ (500 килобайт), Существенная часть поведения подобного программного обеспечения реализуется как гюведение систем с конечным числом состояний. Инсталляционное программное обеспечение. Программное обеспечение, предназначенное для инсталляции и конфигурации программ, часто ведет себя как система с конечным числом состояний и может эффективно тестироваться при помоши соответствуюших методов.
Программное обеспечение для резервирования и восстановления. Программноее обеспечение, задачей которого является резервирование и (особеипо) восстановление, по многим признакам ведет себя подобно системе с конечным числом состояний. Мы наблюдаем рост числа двухпроцессорных файловых или сетевых серверов. Такие системы традиционно тестируются при помощи методов проверки систем с конечным числом состояний. Специализированный конечный автомат. Программист может не догадываться, что его программа во многих случаях ведет себя как система с конечным числом состояний. Вследствие этого отсутствует должный анализ, невозможно выполнить адекватное тестирование и может быть сделано много, действительно много ошибок.
Ошибки кодирования. Это могут быть ошибки входного, выходного кодирования или кодирования состояний, вне зависимости от того, явное это кодирование или скрытое. Если входное кодирование реализовано в скрытом виде, то велика вероятность непоследовательного кодирования от состояния к состоянию. 262 Глава 9 ° Тестирование систем с конечным числом состояний 3, Неверный выход. Это может быть ошибкой кодирования или, если выходного кодирования в явном виде не существует, то, к примеру, неверным вызовом подпрограммы. 4. Непредвиденное поведение состояния. Большое увеличение числа дополнительных состояний может быть вызвано скрытой особенностью поведения состояния.
5. Пересечение границ вложений. В реализации используются вложенные конечные автоматы, однако из-за плохого, сделанного на скорую руку проекта или ошибок в нем, границы вложений игнорируются. На следующем рисунке показана модель, состоящая из нескольких вложеннгях конечных автоматов. Каждая замкнутая область изображает набор состояний (например, меню). Если разрешим переход из состояния Х, например, в состояние У, то все система вложений будет нарушена, и на деле поведение в целом будет таким, как если бы вложений не было совсем.
Существуют другие способы завершить подобное пересечение границ вложений, но зто должно быть реализовано аккуратно. Пересечение границ вложений в примере является обшей ошибкой, однако в большинстве случаев оно может быть обнаружено при помощи метода тестирования систем с конечным числом состояний, Не было ли у вас когда-нибудь такого, что вы использовали программу, управляемую при помощи меню, оказывались в пункте меню, которое не выбирали и спрашивали себя: «Как это я здесь оказался?» 9.5.3.
Ограничения и предостережения 1. Большие графы состояний. Методы, описанные в данной книге, применимы к не слишком большим графам состояний (произведение состояние-символ порядка сотен). Для больших, не вложенных графов состояний, подобных тем, что используются в управлении телефонными узлами, в которых произведение состояние-символ достигает порядка тысяч или десятков тысяч, способы проверки переходов, рассматриваемые в данной книге, слишком трудоемки, даже если разработка теста и его выполнение полностью автома- 9.5.
Рассмотрение приложений 263 тизированы. Это не может радовать. Положительная сторона этого вопроса заключается в том, что люди, работаюшие с такими большими системами, обладают необходимыми инструментами и опытом, чтобы использовать более совершенные методы, чем рассматриваемые в данной книге. Если у вас нет достаточного опыта и необходимых инструментов, вам не стоит браться за тестирование таких больших конечных автоматов. 2. Вложенные модели, или вложенные системы? Чтобы модели были рациональны, необходимо использовать вложенные модели, поскольку, скажем, не- вложенная реализация может содержать миллиард состояний.
Предположим, вы построили прекрасную вложенную модель, однако реальная программа может не являться вложенной структурой. Ваша модель охватывает лишь часть реального поведения, и покрытие связей в вашей модели никоим образом не означает покрытия связей всей системы с конечным числом состояний. Ваша модель — это всего лишь подсистема реальной системы, причем подсистема с хорошим поведением. Поэтому все ваши тесты могут успешно пройти, а программа, тем не менее, будет содержать огромное количество ошибок. Нам важно иметь в распоряжении инструменты, показывающие, какие именно реальные состояния и переходы были проверены.
Такие инструменты полностью бесполезны, если только у вас конечный автомат не реализован в явном виде. В таком случае вы можете винить только себя, поскольку именно вы не выяснили, является ли реализация вложенной, как и ваша модель, или нет. 3. Отсутствие поддержки. Средства поддержки и аспекты тестируемости, описанные в разделе 9.4.7, предназначены для облегчения тестирования и повышения его эффективности. Степень этой поддержки также является мерой того, насколько сложно или просто будет проводить тестирование системы с конечным числом состояний и насколько эффективны будут тесты при поиске ошибок. 9.5.4. Автоматизация и инструментальные средства Как всегда в разделе, описываюшем автоматизацию, я могу вас порадовать и расстроить.
Порадовать тем, что проблема автоматизации разработки тестов для проверки конечных автоматов исследуется уже более 30 лет, и в результате этих исследований появилось множество эффективных алгоритмов. Однако почти все подобные исследования были посвяшены вопросам тестирования логики аппаратных средств, обладаюших своими ограничениями и ошибками, которые отличаются от ограничений и ошибок, возникаюших при тестировании программных конечных автоматов.