Практическое занятие № 10
Тема: «Метод комбинаторного покрытия условий»
Цель работы: применение методов тестирования логики программы, формализованного описания результатов тестирования и стандартов по составлению схем программ.
Краткие теоретические сведения
Метод комбинаторного покрытия условий
Недостатком метода решений/условий является то, что некоторые условия во всех тестированиях могут вообще не вычисляться. Например, для (xy)||(x0) компилятор языка C создаст такую программу, которая не станет вычислять (x0), если обнаружит, что (xy). Если программист хочет проверить все условия в решениях, он должен озаботиться подобными затруднениями. Для того, чтобы приготовить нудное множество тестов, нет нужды анализировать логическую структуру
решений. Если она не простая, да к тому же написана другим программистом, это может занять слишком много времени. Надо просто выписать все условия всех решений и создать тесты,
реализующие все возможные комбинации истинности условий в каждом решении.
Посмотрим теперь, какие условия и как будут вычисляться с помощью тестов п.4. При x=1, y=0
будут вычислены только:
“(x y) ” = true , “(x2*y)” = false. При x = -3, y = -2 будут вычислены:
“(x y) ” = false , “(x0)” = false, “(x2*y)” = true.
Таким образом вычисления “(x0)” с результатом true не будет ни разу. Эту неприятность можно устранить, если добавить еще один тест. Например, x = 1, y=2.
В данном случае больше тестов не нужно, но мы это видим, “заглянув” в логическую структуру высказывания (xy)||(x0). Если же этого не делать, то надо просто позаботиться о всех
комбинациях истинности для (xy) и для (x0). Иначе – заполнить таблицу
| Тест | (xy) | (x0) |
| x=1, y=0 | true | True |
| x = -3, y = -2 | False | False |
| x=1, y=2 | False | True |
| | True | False |
до конца, добавив, например, в пустую клетку тест x=0, y= -1.
Все выше сказанное создает впечатление, что если в модуле имеется n условий, то данный метод требует придумывания 2n тестов, что уже при n=10 совершенно не подъемно. Однако это не так. Реально 10 условий распределяются по решениям. Например так:
if(F1(A0,A1,A2)) …
if(F2(A2,A3,A4)) …
if(F3(A5,A6,A7,A8)) …
if(F4(A8,A9)) …
Видим, что условия разбиваются на два независимых класса:
{A0,A1,A2,A3,A4} и {A5,A6,A7,A8,A9}.
Теперь надо постараться так заполнить таблицы
значениями истинности, чтобы для каждого набора {A0,A1,A2},{A2,A3,A4},{A5,A6,A7,A8},{A8,A9} реализовались все возможности. Вот эти таблицы, где для краткости true=1, false=0.
| A0 | A1 | A2 | A3 | A4 |
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 1 |
| A5 | A6 | A7 | A8 | A9 |
| 0 | 0 | 0 | 0 | 1 |
| 0 | 0 | 0 | 1 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 | 0 |
Таким образом понадобится только 16 тестов.
Безусловно, метод комбинаторного покрытия условий гарантирует покрытие и операторов, и решений, и условий.
Оборудование, материалы
Персональный компьютер с установленной ОС. Текстовый редактор.
Порядок выполнения задания
Написать алгоритм решения задачи в виде схемы программы.
Выписать условия, составить и заполнить для них таблицу истинности.
Составить таблицу результатов тестирования (столбцы "Тест" и "Ожидаемый результат").
Оформить отчет по лабораторной работе.
Задание
Составить программу нахождения вещественных корней квадратного уравнения ах2 + bх + с = 0.