Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


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




Принципы тестирования. Цель тестирования - выявление как можно большего числа ошибок.

Принципы тестирования:

  1. Процесс тестирования более эффективен, если проводится не авто­ром программы, так как тестирование – процесс деструктивный (разруши­тельный) и разработчику трудно на него переключиться после конструктив­ного процесса проектирования и написания программы. Это не означает, что программист не может тестировать свою программу, речь идет о повы­шении эффективности тестирования.
  2. Описание предполагаемых значений результатов тестовых прого­нов должно быть необходимой частью тестового набора данных. Чтобы определить правильность полученных в результате очередного тестового прогона данных, необходимо знать ожидаемый результат, иначе правдопо­добные результаты тестового прогона могут быть признаны правильными.
  3. Необходимо досконально изучать результаты применения каждого теста. Из практики видно, что значительная часть всех обнаруженных в конечном итоге ошибок могла быть выявлена в результате самых первых тестовых прогонов, но они бывают пропущены вследствие недостаточно тщательного анализа результатов первых тестовых прогонов.
  4. Тесты для неправильных и непредусмотренных входных данных должны разрабатываться так же тщательно, как и для правильных, преду­смотренных. Согласно этому принципу при обработке данных, выходящих за область допустимых значений, в программе должна быть предусмотрена диагностика в виде сообщений. Если что отсутствует и программа заверша­ется аварийно или ведет себя непредсказуемо, то такая программа не может считаться работоспособной и требует существенной доработки. Тестовые наборы данных из области недопустимых входных значений обладают большей обнаруживающей способностью, чем тесты, соответствующие корректным входным данным.
  5. Необходимо проверить не только, делает ли программа то, для чего она предназначена, но и не делает ли она то, что не должна делать. То есть любую программу необходимо проверять на нежелательные побочные эф­фекты.
  6. Вероятность наличия необнаруженных ошибок в части программы пропорциональна числу ошибок, уже обнаруженных в этой части. Это свой­ство группироваться объясняется тем, что части программы, где при тести­ровании обнаружено большее число ошибок, либо были слабо проработаны идеологически, либо разрабатывались программистами более низкой ква­лификации.

Классификация методов тестирования. Правильное понимание цели и принципов тестирования привело к по­явлению ряда методов, позволяющих эффективно обнаруживать ошибки и несоответствия спецификациям ПО.

Все существующие методы тестирования можно разделить на два ос­новных класса - статическое и динамическое тестирование.

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

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

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

 

 

Классификация методов тестирования

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

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

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

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

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

Методы структурного тестирования. Для получения эффективных тестовых наборов данных при структур­ном тестировании используются следующие критерии:

  1. Покрытие операторов. Этот критерий предполагает выбор такого тестового набора данных, который вызывает выполнение каждого операто­ра в программе хотя бы один раз.
  2. Покрытие узлов ветвления (покрытия решений). Этот критерий предполагает разработку такого количества тестов, чтобы в каждом узле ветвления был обеспечен переход по веткам "истина" и "ложь" хотя бы один раз.
  3. Покрытие условий. Если узел ветвления содержит более одного ус­ловия (сложное условие), тогда нужно разрабатывать число тестов, доста­точное для того, чтобы возможные результаты каждого условия в решении выполнялись по крайней мере 1 раз.
  4. Комбинаторное покрытие условий. Этот критерий требует создания такого числа тестов, чтобы все возможные комбинации результатов условия в каждом решении выполнялись хотя бы 1 раз.

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

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

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

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

входные условия правильные классы эквивалентности неправильные классы эквивалентности
     

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

  1. Если входное условие описывает интервал значений, то определя­ется один правильный класс эквивалентности и два неправильных.
  2. Если входное условие описывает конечное число конкретных зна­чений и есть основание полагать, что каждое значение программа трактует особо, то определяется правильный класс эквивалентности для каждого значения и один неправильный класс эквивалентности.
  3. Если входное условие описывает ситуацию "должно быть", то оп­ределяется один правильный и один неправильный класс эквивалентности.
  4. Если есть любое основание считать, что различные элементы клас­са эквивалентности трактуются программой неодинаково, то данный класс эквивалентности разбивается на меньшие классы так, чтобы данные, объе­диненные в один класс, всегда интерпретировались программой одинаково.

На основе классов эквивалентности строят тестовые наборы. Этот про­цесс включает в себя следующее:

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

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

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

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

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

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

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

Для записи булевского графа применяются базовые отношения, изо­бражения которых представлены на рисунке.

Базовые логические отношения функциональных диаграмм.

Диаграмма снабжается примечаниями, задающими ограничения и опи­сывающими комбинации причин и (или) следствий, которые являются не­возможными из-за синтаксических или внешних ограничений.

 

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

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

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

 

Символы ограничений.

 


Поделиться:

Дата добавления: 2015-04-18; просмотров: 726; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.01 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты