Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Oskin.docx
Скачиваний:
20
Добавлен:
16.09.2019
Размер:
913.61 Кб
Скачать

2. Проектные спецификации и тестирование по

2.1 Требования к программному обеспечению

Требования к программному обеспечению — совокупность утверждений относительно свойств программной системы, подлежащая реализации при создании ПО. Создаются в процессе анализа требований к программному обеспечению.

Требования могут выражаться в виде текстовых утверждений и графических моделей.

2.1.1 Виды требований по уровню

  • Бизнес-требования—определяют назначение ПО

  • Бизнес-правила — определяют ограничения, проистекающие из предметной области и свойств автоматизируемого объекта (предприятия)

  • Пользовательские требования—определяют набор пользовательских задач, которые будет решать программа, а также способы (сценарии)их решения в системе

  • Системные требования и ограничения—определения набора элементарных операций, которые должна выполнять система, а также различных условий, которым она может удовлетворять

Пользовательские требования могут выражаться в виде фраз утверждений, в виде способов применения(use case), пользовательских историй (user story), сценариев взаимодействия (scenario).

К системным ограничениям относятся ограничения на программные интерфейсы, требования к атрибутам качества, требования к применяемому оборудованию и ПО.

2.1.2 Виды требований по характеру

  • Функциональные требования—требования к поведению системы(«ЧТО» она делает)

  • Нефункциональные требования—требования к характеру поведения системы(«КАК» она это делает)

2.1.3 Типы документов требований

В зарубежной и российской практике встречаются следующие типы документов требований:

  • Концепция программы

  • Требования к ПО

Требования к ПО часто (ошибочно) называют техническим заданием, частью которого они являются в автоматизированных информационных системах.

За создание требований к ПО чаще всего в российской практике отвечает Системный аналитик, иногда — Бизнес-аналитик.

Для графических моделей требований исторически использовались диаграммы: ER (IDEF1FX), IDEF0, IDEF3, DFD, UML, OCL, SysML, ARIS (eEPC, VAD).

2.2 Анализ и сбор требований

В современных информационных технологиях этап жизненного цикла, на котором фиксируются требования на разработку ПО системы, является определяющим для задания функций, сроков и стоимости работ, а также показателей качества и др.

Анализ и сбор требований является довольно нетривиальной задачей, поскольку в реальных проектах приходится сталкиваться с такими общими трудностями:

  • требования не всегда очевидны и могут исходить из разных источников, их не всегда удается ясно выразить словами;

  • имеется много различных типов требований на различных уровнях детализации и их

  • число может стать большим, требующим ими управлять;

  • требования связаны друг с другом, а также с процессами разработки ПО и постоянно меняются.

Требования имеют уникальные свойства или значения свойств. Например, они не являются одинаково важными и простыми для согласования.

2.2.1 Сбор требований

Источниками сведений о требованиях могут быть:

  • цели и задачи системы, которые формулирует заказчик. Для однозначного их понимания разработчику системы необходимо их тщательно осмыслить и согласовать с заказчиком;

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

При этом имеется определенная опасность перенесения недостатков старой системы в новую, поэтому нужно уметь отделить новые требования к реализуемой проблеме от заложенных неудачных решений в старой системе.

Таким образом, требования к системе формулируются исходя из:

  • знаний заказчика относительно проблемной области, формулирующего свои проблемы в терминах понятий этой области;

  • ведомственных стандартов заказчика и требований к среде функционирования будущей системы, ее исполнительских и ресурсных возможностей.

Методами сбора требований являются:

  • интервью с носителями интересов заказчика и операторами;

  • наблюдение за работой действующей системы с целью отделения ее проблемных свойств от тех, которые обусловлены структурою кадров;

  • сценарии(примеры) возможных случаев выполнении функций системы, ролей лиц, запускающих эти сценарии или взаимодействующих с системой во время ее функционирования.

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

2.2.2 Анализ требований

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

Функциональные требования относятся к заданию функций системы или ее ПО, к способам поведения ПО в процессе выполнения функций и методам преобразования входных данных в результаты.

Нефункциональные требования определяют условия и среду выполнения функций(например, защита и доступ к БД, секретность, взаимодействие компонентов функций и др.).

Разработанные требования специфицируются и отражается в специальном документе, по которому проводится согласование требований для достижения взаимопонимания между заказчиком и разработчиком.

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

  • конфиденциальность;

  • отказоустойчивость;

  • несанкционированный доступ к системе;

  • безопасность и защита данных;

  • время ожидания ответа на обращение к системе;

  • свойства системы (ограничение на память, скорость реакции при обращении к системе и т. п.).

Для большинства этих ограничений может быть зафиксирован спектр характерных понятий – дескрипторов, которые используются для наименования и раскрытия смыслового названия. Состав дескрипторов для ряда нефункциональных требований зафиксирован в соответствующих международных и ведомственных стандартах, которые позволяют избежать неоднозначности в их толковании.

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

Продукт процесса анализа – построенная модель проблемы, которая ориентирована на понимание этой модели исполнителем до начала проектирования системы.

2.2.3 Верификация и формализация требований

Спецификация требований к ПО – процесс формализованного описания функциональных и нефункциональных требований, требований к характеристикам качества в соответствии со стандартом качества ISO/IEC 12119-94, которые будут учитываться при создании программного продукта на этапах ЖЦ ПО. В спецификации требований отражается структура ПО, требования к функциям, показателям качеству, которых необходимо достигнуть, и к документации. В спецификации задается в общих чертах архитектура системы и ПО, алгоритмы, логика управления и структура данных. Специфицируются также системные требования, нефункциональные требования и требования к взаимодействию с другими компонентами (БД, СУБД, протоколы сети и др.).

Формализация включает в себя определение компонентов системы и их состояний; правил взаимодействия компонентов и определения условий, которые должны выполняться при изменении состояний компонентов, в формальном виде.

Для формального описания поведения системы используются языки инженерных спецификаций, например, UML.

В качестве формальной модели для описания требований используются базовые протоколы, которые позволяют использовать дедуктивные средства верификации в сочетании с моделированием поведения систем путем трассирования.

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

Заказчик и разработчик ПО проводят экспертизу сформированного варианта требований с тем, чтобы разработчик мог далее проводить разработку ПО.

Одним из методов аттестации является прототипирование, т.е. быстрая отработка отдельных требований на конкретном инструменте и исследование масштабов изменения требований, измерение объема функциональности и стоимости, а также создание моделей оценки зрелости требований.

Верификация требований – это процесс проверки правильности спецификаций требований на их соответствие, непротиворечивость, полноту и выполнимость, а также на соответствие стандартам.

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

2.3 Разработка требований по А. Джекобсону

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

Рассматриваемый метод Джекобсона дает рекомендации относительно того, с чего начинать путь к пониманию проблемы и поиску существенных для нее объектов.

Автор назвал свой метод как базирующийся на вариантах(примерах или сценариях – use case driven) системы, которую требуется построить. В дальнейшем термин сценарий используется для обозначения варианта представления системы.

Сложность проблемы обычно преодолевается путем декомпозиции ее на отдельные компоненты с меньшей сложностью. Большая система может быть сложной, чтобы представить ее компоненты программными модулями. Поэтому разработка системы с помощью данного метода начинается с осмысления того, для кого и для чего создается система.

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

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

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

Таким образом, производится последовательная декомпозиция сложности проблемы в виде совокупности целей, каждая из которых трансформируется в совокупность возможных вариантов использования системы, которые трансформируются в процессе их анализа в совокупность взаимодействующих объектов.

Определенная цепочка трансформации (проблема – цели – сценарии – объекты) отражает степень концептуализации в понимании проблемы, последовательного снижения сложности ее частей и повышения уровня формализации моделей ее представления.

Трансформация обычно выражается в терминах базовых понятий проблемной области, активно используется для представления актеров и сценариев, или создается в процессе построения такого представления. Каждый сценарий инициируется определенным пользователем, являющимся носителем интересов. Абстракция определенной роли личности пользователя–инициатора запуска определенной работы в системе, представленной сценарием, и обмена информацией с системой – называется актером. Это абстрактное понятие обобщает понятие действующего лица системы. Фиксация актеров можно рассматривать, как определенный шаг выявления целей системы через роли, которые являются носителями целей и постановщиками задач, для решения которых создается система.

Актер считается внешним фактором системы, действия которого носят недетерминированный характер. Этим подчеркивается разница между пользователем как конкретным лицом и актером–ролью, которую может играть любое лицо в системе.

В роли актера может выступать и программная система, если она инициирует выполнение определенных работ данной системы. Таким образом, актер – это абстракция внешнего объекта, экземпляр которого может быть человеком или внешней системой. В модели актер представляется классом, а пользователь – экземпляром класса. Одно лицо может быть экземпляром нескольких актеров.

Лицо в роли(экземпляр актера)запускает операции в системе, соотнесенные с поведением последовательности транзакций системы и называется сценарием. Когда пользователь, как экземпляр актера, вводит определенный символ для старта экземпляра соответствующего сценария, то это приводит к выполнению ряда действий с помощью транзакций, которые заканчиваются тогда, когда экземпляр сценария находится в состоянии ожидания входного символа. Экземпляр сценария существует, пока он выполняется и его можно считать экземпляром класса, в роли которого выступает описание транзакции.

Сценарий определяет протекание событий в системе и обладает состоянием и поведением. Каждое взаимодействие между актером и системой это новый сценарий или объект. Если несколько сценариев системы имеют одинаковое поведение, то их можно рассматривать как класс сценариев. Вызов сценария – это порождение экземпляра класса. Таким образом, сценарии –это транзакции с внутренним состоянием.

Модель системы по данному методу основывается на сценариях и внесение в нее изменений должно осуществляться повторным моделированием актеров и запускаемых ими сценариев. Такая модель отражает требования пользователей и легко изменяется по их предложению. Сценарий – это полная цепочка событий, инициированных актером, и спецификация реакции на них. Совокупность сценариев определяет все возможные варианты использования системы. Каждого актера обслуживает своя совокупность сценариев. Можно выделить базовую цель событий, существенную для сценария, а также альтернативные, при ошибках пользователя и др.

Для задания модели сценариев используется специальная графическая нотация, со следующими основными правилами:

  • актер обозначается иконой человека, под которой указывается название;

  • сценарий изображается овалом, в середине которого указывается название иконы;

  • актер связывается стрелкой с каждым запускаемым им сценарием.

На рисунке представлен пример диаграммы сценариев для клиента банка, как актера, который запускает заданный сценарий. Для достижения цели актер обращается не к кассиру или клерку банка, а непосредственно к компьютеру системы.

Пример диаграммы сценариев для клиента банка

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

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

Для сценариев определены два типа отношений: Отношение "расширяет" означает, что функции одного сценария является дополнением к функциям другого, и используется когда имеется несколько вариантов одного и того же сценария. Инвариантная его часть изображается как основной сценарий, а отдельные варианты как расширения. При этом основной сценарий является устойчивым, не меняется при расширении вариантов функций и не зависит от них. Типовой пример отношения расширения: моделирование необязательных фрагментов сценариев приведен на рисунке. При выполнении сценария расширение прерывает выполнение основного расширяемого сценария, причем последний не знает, будет ли расширение и какое. После завершения выполнения сценария расширение будет продолжено путем выполнения основного сценария.

Отношение "использует" означает, что некоторый сценарий может быть использован как расширение несколькими другими сценариями. Оба отношения–инструменты определения наследования, если сценарии считать объектами. Отличие между ними состоит в том, что при расширении функция рассматривается как дополнение к основной функции и может быть понятной только в паре с ней, тогда как в отношении "использует" дополнительная функция имеет самостоятельное определение и может быть использована всюду.

Примеры расширения сценариев

На следующем рисунке показано, что сценарий "сортировать" связан отношением "использует" с несколькими сценариями.

Пример отношения "использует"

Таким образом, продуктом первой стадии инженерии требований(сбора требований) является модель требований, которая состоит с трех частей:

  • онтология домена;

  • модель сценариев, называемая диаграммой сценариев;

  • описание интерфейсов сценариев.

Модель сценариев сопровождается неформальным описанием каждого из сценариев.

Нотация такого описания не регламентируется. Как один из вариантов, описание сценария может быть представлено последовательностью элементов:

  • название, которое помечает сценарий на диаграммах модели требований и служит средством ссылки на сценарий;

  • аннотация (краткое содержание в неформальном представлении);

  • актеры, которые могут запускать сценарий;

  • определение всех аспектов взаимодействия системы с актерами (возможные действия актера и их возможные последствия),а также запрещенных действий актера;

  • предусловия, которые определяют начальное состояние на момент запуска сценария, необходимое для успешного выполнения;

  • функции, которые реализуются при выполнении сценария и определяют порядок, содержание и альтернативу действий, выполняемых в сценарии;

  • исключительные или нестандартные ситуации, которые могут появиться при выполнении сценария и потребовать специальных действий для их устранения (например, ошибка в действиях актера, которую способна распознать система);

  • реакции на предвиденные нестандартные ситуации;

  • условия завершения сценария;

  • постусловия, которые определяют конечное состояние сценария при его завершении.

На дальнейших стадиях сценарий трансформируется в сценарий поведения системы, т.е. к приведенным элементам модели добавляются элементы, связанные с конструированием решения проблемы и нефункциональными требованиями:

  • механизмы запуска сценария(позиции меню);

  • механизмы ввода данных;

  • поведение при возникновении чрезвычайных ситуаций.

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

3. Планы тестирования

3.1 Определение

План тестирования (тест план -Test Plan) - это документ описывающий весь объем работ по тестированию, начиная с описания объекта, стратегии, расписания, критериев начала и окончания тестирования, до необходимого в процессе работы оборудования, специальных знаний, а также оценки рисков с вариантами их разрешения.

3.2 Рекомендации по написанию плана тестирования

Каждая методология или процесс пытаются навязать свои форматы оформления планов тестирования. Приведем, как пример, шаблоны тест планов от RUP (Rational Unified Process) и стандарт IEEE 829:

  • Test Plan Template RUP

  • Test Plan Template IEEE 829

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

  • Что надо тестировать? (Описание объекта тестирования: системы, приложения, оборудования).

  • Что будете тестировать? (Список функций и описание тестируемой системы и её компонент в отдельности).

  • Как будете тестировать?(Стратегия тестирования ,а именно: виды тестирования и их применение по отношению к тестируемому объекту).

  • Когда будете тестировать? (Последовательность проведения работ: подготовка(Test Preparation),тестирование(Testing), анализ результатов(Test Result Analisys) в разрезе запланированных фаз разработки).

  • Критерии начала тестирования. (Готовность тестовой платформы (тестового стенда),законченность разработки требуемого функционала, наличие всей необходимой документации...).

  • Критерии окончания тестирования. (Результаты тестирования удовлетворяют критериям качества продукта, требовния к количеству открытых багов выполнены, выдержка определенного периода без изменения исходного кода приложения Code Freeze (CF),выдержка определенного периода без открытия новых багов Zero Bug Bounce (ZBB)...).

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

  • Окружение тестируемой системы.

  • Необходимое для тестирования оборудование и программные средства.

  • Риски и их разрешение.

3.3 Виды планов тестирования

Чаще всего на практике приходится сталкиваться со следующими видами тест планов:

  • Мастер Тест План(Master Plan or Master Test Plan)

  • Тест План (Test Plan, назовем его детальный тест план)

  • План Приемочных Испытаний (Product Acceptance Plan) - документ, описывающий набор действий, связанных с приемочным тестирование, дата проведения, ответственные работники и т.д.

Явное отличие Мастер Тест Плана от просто Тест Плана в том, что мастер тест план является более статичным в силу того, что содержит в себе высокоуровневую (High Level) информацию, которая не подвержена частому изменению в процессе тестирования и пересмотра требований. Сам же детальный тест план, который содержит более конкретную информацию по стратегии, видам тестировании, расписанию выполнения работ, является "живым" документом, который постоянно претерпевает изменения, отражающие реальное положение вещей на проекте.

В повседневной жизни на проекте может быть один Мастер Тест План и несколько детальных тест планов, описывающих отдельные модули одного приложения.

3.4 Рецензирование и утверждение

Когда документ пишет один человек, то он получается "однобоким", поэтому обычно проводится периодическое рецензирование документа со стороны участников проектной группы.

Кроме того необходимо провести процедуру утверждения документа. Приведем примерный список участников проектной группы, утверждение которыми тест-плана необходимо:

  • Ведущий тестировщик

  • Тест менеджер(менеджер по качеству)

  • Руководитель разработки

  • Менеджер Проекта

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

4. Наборы тестов и тестовые случаи

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

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

Мы рассмотрим несколько подходов,которые позволяют более разумно выбирать тестовые данные.Ранее отмечалось,что исчерпывающее тестирование по принципу"черного"или "белого"ящика в общем случае невозможно.Однако при этом подчеркивалось,что приемлемая стратегия тестирования может обладать элементами обоих подходов.Таковой является стратегия,описываемая ниже. Можно разработать довольно полный тест,используя определенную методологию проектирования,основанную на принципе"черного"ящика, а затем дополнить его проверкой логики программы(т. е. с привлечением методов стратегии"белого"ящика). Все методологии,обсуждаемые ниже, можно разделить на следующие:

стратегии"белого"ящика:

  • покрытие операторов;

  • покрытие решений;

  • покрытие условий;

  • покрытие решений/условий;

  • комбинаторное покрытие условий

стратегии"черного"ящиика:

  • эквивалентное разбиение;

  • анализ граничных значений;

  • анализ причин и следствий;

  • предугадывание ошибки.

  • исчерпывающее тестирование.

Хотя перечисленные методы будут рассматриваться здесь по отдельности,при проектировании эффективного теста программы рекомендуется использовать если не все эти методы,то, по крайней мере,большинство из них, так как каждый метод имеет определенные достоинства и недостатки(например,возможность обнаруживать и пропускать различные типы ошибок).

Поэтому рекомендуемая процедура заключается в том, чтобы разрабатывать тесты,используя стратегию"черного"ящика, а затем как необходимое условие –дополнительные тесты,используя методы"белого"ящика.

4.1 Тестирование "белого" яшика

Тестирование по принципу белого ящика характеризуется степенью, в какой тесты выполняют или покрывают логику(исходный текст)программы.Исчерпывающее тестирование по принципу белого ящика предполагает выполнение каждого пути в программе,но поскольку в программе с циклами выполнение каждого пути обычно нереализуемо,то тестирование всех путей не рассматривается.

4.1.1 Покрытие операторов

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

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

Блок-схема небольшого участка программы,который должен быть протестирован

Можно выполнить каждый оператор,записав один-единственный тест,который реализовал бы путьасе.Иными словами,если бы в точке абыли установлены значения А =2, В = 0 и Х = 3,каждый оператор выполнялся быодин раз(в действительностиХ может принимать любое значение).

К сожалению,этот критерий хуже, чем он кажется на первый взгляд.

Например,пусть первое решение записано как «или»,а не как«и» (в первом условии вместо “&&”стоит “||”).Тогда при тестировании с помощью данного критерия эта ошибка не будет обнаружена.Пусть второе решение записано в программе как Х > 0 (во втором операторе условия);эта ошибка также не будет обнаружена.Кроме того,существует путь, в котором Х не изменяется(путь abd).Если здесь ошибка, то и она не будет обнаружена.Таким образом,критерий покрытия операторов является настолько слабым, что его обычно не используют.

4.1.2 Покрытие решений

Более сильный критерий покрытия логики программы(и метод тестирования)известен какпокрытие решений,илипокрытие переходов.Согласно данному критерию должно быть записано достаточное число тестов,такое, что каждое решение на этих тестах примет значениеистина иложь по крайней мере один раз. Иными словами,каждое направление перехода должно быть реализовано по крайней мере один раз.

Примерами операторов перехода или решений являются операторыwhile или if.

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

Однако существует,по крайней мере,три исключения.Первое –патологическая ситуация,когда программа не имеет решений.

Второе встречается в программах или подпрограммах с несколькими точками входа(например, в программах на языке Ассемблера);данный оператор может быть выполнен только в том случае,если выполнение программы начинается с соответствующей точки входа.

Третье исключение–операторы внутриswitch-конструкций;выполнениекаждого направления перехода не обязательно будет вызывать выполнение всехcase-единнц.

Так как покрытие операторов считается необходимым условием,покрытие решений,которое представляется более сильным критерием,должно включать покрытие операторов.

Следовательно,покрытие решений требует,чтобы каждое решение имело результатом значенияистинаи ложьи при этом каждый оператор выполнялся бы, по крайней мере, один раз.Альтернативный и более легкий способ выражения этого требования состоит в том, чтобы каждое решение имело результатом значенияистина иложь и что каждой точке входа(включая каждую case-единицу)должно быть передано управление при вызове программы,по крайней мере, один раз.

Изложенное выше предполагает только двузначные решения или переходы и должно быть модифицировано для программ,содержащих многозначные решения(как дляcase-единиц).Критерием для них является выполнение каждого возможного результата всех решений, по крайней мере, один раз и передача управления при вызове программы или подпрограммы каждой точке входа, по крайней мере, один раз.

В программе,представленной на рисунке,покрытие решений может бытьвыполнено двумя тестами,покрывающими либо путиасе и abd,либо путиacd и abe. Если мы выбираем последнее альтернативное покрытие,то входами двух тестов являются A = 3,В = 0, Х = 3 и A = 2, В = 1, Х =1.

4.1.3 Покрытие условий

Покрытие решений –более сильный критерий,чем покрытие операторов,но и он имеет свои недостатки.Например,путь, где Х не изменяется(если выбрано первое альтернативное покрытие),будет проверен с вероятностью50 %. Если во втором решении существует ошибка(например, Х< 1 вместо Х > 1),то ошибка не будет обнаружена двумя тес-тами предыдущего примера.

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

Программа на рисунке имеет четыре условия: A > 1, B = 0, A = 2 и Х > 1.

Следовательно,требуется достаточное число тестов,такое,чтобы реализовать ситуации,где A > 1, A ≤ l, B = 0 и В≠ 0 в точкеа и A = 2, A ≠ 2, Х > 1 и Х ≤ 1 в точкеb. Тесты,удовлетворяющие критерию покрытия условий, и соответствующие им пути:

1. A = 2, B = 0, Х = 4асе.

2. A = 1, В = 1, Х = 1abd.

Заметим,что, хотя аналогичное число тестов для этого примера уже было создано,покрытие условий обычно лучше покрытия решений,поскольку оно может(но не всегда)вызвать выполнение решений в условиях,не реализуемых при покрытии решений.

Хотя применение критерия покрытия условий на первый взгляд удовлетворяет критерию покрытия решений,это не всегда так.Если тестируется решение if(A && B), то при критерии покрытия условий требовались бы два теста – А естьистина, В есть ложьи А естьложь, В есть

истина. Но в этом случае не выполнялось бы тело условия.Тесты критерия покрытия условий для ранее рассмотренного примера покрывают результаты всех решений, но это только случайное совпадение.Например,два альтернативных теста:

1. A = 1, В = 0, Х = 3.

2. A = 2, B = 1, Х = 1,

покрывают результаты всех условий, но только два из четырех результатов решений(они оба покрывают путь аbе и,следовательно,не выполняют результатистинапервого решения и результатложьвторого решения).

4.1.4 Покрытике решений/условий

Очевидным следствием из этой дилеммы является критерий,названныйпокрытием решений/условий.Он требует такого достаточного набора тестов,чтобы все возможные результаты каждого условия в решении,все результаты каждого решения выполнялись,по край- ней мере, один раз и каждой точке входа передавалось управление,по крайней мере, один раз.

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

Блок-схема машинного кода программы,изображенной на предыдущем рисунке

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

Два предыдущих теста критерия покрытия решений не выполняют этого; они недостаточны для выполнения результаталожьрешения H и результатаистинарешения K.Набор тестов для критерия покрытия условий такой программы также является неполным;два теста(которые случайно удовлетворяют также и критерию покрытия решений/условий)не вызывают выполнения результаталожьрешения I и результатаистинарешения K.

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

4.1.5 Комбинаторное покрытие условий

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

По этому критерию для рассматриваеиой программы должны быть покрыты тестами следующие восемь комбинаций:

1. А > 1, B = 0. 2. A > 1, В≠ 0.

3. A ≤ 1, В = 0. 4. A ≤ l,В ≠ 0.

5. A = 2, X > 1. 6. A = 2, X ≤ l.

7. А ≠ 2, Х > 1. 8. A ≠ 2, X ≤ l.

Заметим,что комбинации5–8представляют собой значения второго оператораif.ПосколькуХ может быть изменено до выполнения этого оператора,значения,необходимые для его проверки,следует восстановить,исходя из логики программы с тем, чтобы найти соответствующие входные значения.

Для того чтобы протестировать эти комбинации,необязательно использовать все восемь тестов.Фактически они могут быть покрыты четырьмя тестами.Приведем входные значения тестов и комбинации,которые они покрывают:

A = 2, B = 0, X = 4покрывает 1, 5;

A = 2, В = 1, Х = 1покрывает 2, 6;

A = 1, B = 0, Х = 2покрывает 3, 7;

A = 1, B = 1, Х = 1покрывает 4, 8.

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

if((x == y) && (z == 0) && end)

j = 1;

else

i = 1;

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

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

1)вызывает выполнение всех результатов каждого решения, по крайней мере, один раз;

2)передает управление каждой точке входа(например,точке входа,case-единице)по крайней мере один раз (чтобы обеспечить выполнение каждого оператора программы по крайней мере один раз).

Для программ,содержащих решения,каждое из которых имеет более одного условия,минимальный критерий состоит из набора тестов,вызывающих выполнение всех возможных комбинаций результатов условий в каждом решении и передающих управление каждой точке входа программы,по крайней мере, один раз. Слово«возможных»употреблено здесь потому, что некоторые комбинации условий могут быть нереализуемыми;например, в выражении(a>2) && (a<10) могут быть реализованы только трикомбинации условий.

4.2 Тестирование "черного" ящика

4.2.1 Эквивалентное разбиение

Эквивалентное Разбиение(Equivalence Partitioning - EP). Как пример, у вас есть диапазон допустимых значений от 1 до 10, вы должны выбрать одно верное значение внутри интервала,скажем, 5, и одно неверное значение вне интервала -0.

4.2.2 Анализ граничных значений

Анализ Граничных Значений (Boundary Value Analysis - BVA). Если взять пример выше, в качестве значений для позитивного тестирования выберем минимальную и максимальную границы (1 и 10),и значения больше и меньше границ (0 и 11).Анализ Граничный значений может быть применен к полям,записям,файлам, или к любого рода сущностям имеющим ограничения.

4.2.3 Причина/Следствие

Причина/ Следствие(Cause/Effect - CE). Это, как правило,ввод комбинаций условий(причин), для получения ответа от системы(Следствие).Например,вы проверяете возможность добавлять клиента,используя определенную экранную форму. Для этого вам необходимо будет ввести несколько полей,таких как"Имя", "Адрес", "Номер Телефона" а затем,нажать кнопку"Добавить" -эта"Причина".После нажатия кнопки"Добавить",система добавляет клиента в базу данных и показывает его номер на экране -это"Следствие".

4.2.4 Предугадывание ошибки

Предугадывание ошибки (Error Guessing - EG).Это когда тест аналитик использует свои знания системы и способность к интерпретации спецификации на предмет того, чтобы"предугадать"при каких входных условиях система может выдать ошибку.Например,спецификация говорит: "пользователь должен ввести код".Тест аналитик,будет думать: "Что,если я не введу код?", "Что, если я введу неправильный код? ", и так далее. Это и есть предугадывание ошибки.

4.2.5 Исчерпывающее тестирование

Исчерпывающее тестирование(Exhaustive Testing - ET) - это крайний случай. В пределах этой техники вы должны проверить все возможные комбинации входных значений, и в принципе,это должно найти все проблемы.На практике применение этого метода не представляется возможным,из-за огромного количества входных значений.

5. Документирование результатов тестирования

Баг или дефект репорт (Bug Report)-это документ,описывающий ситуацию или последовательность действий приведшую к некорректной работе объекта тестирования,с указанием причин и ожидаемого результата.

Рассмотрим последовательно структуру баг репорта,понятия"важность и приоритет дефекта", и кратко опишем процедуру написания баг репортов

5.1 Струтура баг репорта

Шапка

Короткое описание(Summary)

Короткое описание проблемы,явно указывающее на причину и тип ошибочной ситуации.

Проект (Project)

Название тестируемого проекта

Компонент приложения(Component)

Название части или функции тестируемого продукта

Номер версии (Version)

Версия на которой была найдена ошибка

Важность(Severity)

Наиболее распространена пятиуровневая система градации важности дефекта:

  • S1Блокирующий(Blocker)

  • S2Критический(Critical)

  • S3Значительный(Major)

  • S4Незначительный(Minor)

  • S5Тривиальный(Trivial)

Приоритет(Priority)

Приоритет дефекта:

  • P1Высокий (High)

  • P2Средний (Medium)

  • P3Низкий (Low)

Статус (Status)

Статус бага.Зависит от используемой процедуры и жизненного цикла бага(bug workflow and life cycle)

Автор (Author)

Создатель баг репорта

Назначен на (Assigned To)

Имя сотрудника,назначенного на решение проблемы

Окружение

ОС /Севрис Пак и т.д. /Браузера +версия /

Информация об окружении,на котором был найден баг:операционная система,сервис пак,для WEBтестирования- имя и версия браузера и т.д.

Описание

Шаги воспроизведения(Steps to Reproduce)

Шаги, по которым можно легко воспроизвести ситуацию,приведшую к ошибке.

Фактический Результат(Result)

Результат,полученный после прохождения шагов к воспроизведению

Ожидаемый результат(Expected Result)

Ожидаемый правильный результат

Дополнения

Прикрепленный файл (Attachment)

Файл с логами,скриншот или любой другой документ,который может помочь прояснить причину ошибки или указать на способ решения проблемы

5.2 Важность и приоритет дефекта

Разные системы баг трекинга предлагают разные пути описания важности и приоритета баг репорта,неизменным остается лишь смысл,вкладываемый эти поля.Все знают такой баг-трекер, какAtlassian JIRA. В нем,начиная с какой- то версии вместо одновременного использования полей Severity и Priority,оставили только Priority,которое собрало в себе свойства обоих полей: Originally, JIRA did have both a Priority and a Severity field. The Severity field was removed for a number of reasons... Таким образом, те кто привык работать сJIRA не всегда понимают разницу между этими понятиями,так как не имели опыта их совместного использования.Исходя из личного опыта, я настаиваю на разделении этих понятий, а точнее на использовании обоих полей Severity и Priority,так как смысл,вкладываемый в них,различный:

Важность (Severity)- это атрибут,характеризующий влияние дефекта на работоспособность приложения.

Приоритет(Priority) - это атрибут,указывающий на очередность выполнения задачи или устранения дефекта.Можно сказать,что это инструмент менеджера по планированию работ. Чем выше приоритет,тем быстрее нужно исправить дефект.

Градация Важности дефекта(Severity)

S1Блокирующая(Blocker)

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

S2Критическая(Critical)

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

S3Значительная(Major)

Значительная ошибка,часть основной бизнес логики работает некорректно.Ошибка не критична или есть возможность для работы с тестируемой функцией,используя другие входные точки.

S4Незначительная(Minor)

Незначительная ошибка, не нарушающая бизнес логику тестируемой части приложения,очевидная проблема пользовательского интерфейса.

S5Тривиальная(Trivial)

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

Градация Приоритета дефекта(Priority)

P1Высокий (High)

Ошибка должнабыть исправлена как можно быстрее, т.к.ее наличие является критической для проекта.

P2Средний (Medium)

Ошибка должна быть исправлена,ее наличие не является критичной,но требует обязательного решения.

P3 Низкий(Low)

Ошибка должна быть исправлена,ее наличие не является критичной,и не требует срочного решения.

Порядок исправления ошибок по их приоритетам:

High -> Medium -> Low

Требовния к количеству открытых багов

Наличие открытых дефектов P1, P2и S1, S2,считается неприемлемым для проекта.Все подобные ситуации требуют срочного решения и идут под контроль к менеджерам проекта.

Наличие строго ограниченного количества открытых ошибок P3 и S3, S4, S5не является критичным для проекта и допускается в выдаваемом приложении.Количество же открытых ошибок зависит от размера проекта и установленных критериев качества.

Все требования к открытым ошибкам оговариваются и документируются на этапе принятия решения о качестве разрабатываемого продукта.Как пример документирования подобных требований- это пункт Критерии окончания тестирования в плане тестирования.

5.3 Написание баг репорта

Баг репорт - это технический документ и в связи с этим язык описания проблемы должен быть техническим.Должна использоваться правильная терминология при использовании названий элементов пользовательского интерфейса(editbox, listbox, combobox, link, text area, button, menu, popup menu, title bar, system tray и т.д.),действий пользователя(click link, press the button, select menu item и т.д.) и полученных результатах(window is opened, error message is displayed, system crashedи т.д.).

Требования к обязательным полям баг репорта

Отметим,что обязательными полями баг репорта являются:короткое описание (Bug Summary), важность(Severity), шаги к воспроизведению(Steps to reproduce),результат(Actual Result),ожидаемый результат(Expected Result). Ниже приведены требования и примеры по заполнению этих полей.

Короткое описание

Название говорит само за себя. В одном предложение вам надо уместить смысл всего баг репорта, а именно:коротко и ясно,используя правильную терминологию сказать что и где не работает.

Например:

Приложение зависает,при попытке сохранения текстового файла размером больше50Мб.

Данные на форме"Профайл" не сохраняются после нажатия кнопки"Сохранить".

Важность

Если проблема найдена в ключевой функциональности приложения и после ее возникновения приложение становится полностью недоступно,и дальнейшая работа с ним невозможна,то она блокирующая.Обычно все блокирующие проблемы находятся во время первичной проверки новой версии продукта (Build Verification Test, Smoke Test), т.к. их наличие не позволяет полноценно проводить тестирование.Если же тестирование может быть продолжено,то важность данного дефекта будет критическая.На счет значительных,незначительных и тривиальных ошибок вопрос достаточно прозрачный и на мой взгляд не требует лишних объяснений.

Шаги к воспроизведению/ Результат /Ожидаемый результат

Очень важно четко описать все шаги, с упоминаем всех вводимых данных(имени пользователя,данных для заполнения формы) и промежуточных результатов.

Например:

Шаги к воспроизведению

1.Войдите в системы:Пользователь Тестер1,пароль xxxXXX

--> Вход в систему осуществлен

2.Кликните линк Профайл

-->Страница Профайл открылась

3.Введите Новое имя пользователя:Тестер2

4.Нажмите кнопку Сохранить

Результат

На экране появилась ошибка.Новое имя пользователя не было сохранено

Ожидаемый результат

Страница профайл перегрузилась.Новое значение имени пользователя сохранено.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]