- •1. Место проектирования и программирования модулей в обеспечении надежности информационных систем
- •Проектирование программных модулей.
- •Защитное программирование
- •Контроль входных данных
- •Контроль промежуточных данных
- •4.4 Комментарии
- •4. Практические рекомендации по надежному программированию
- •4.1 О структурном программировании
- •4.2 Работа с данными
- •4.3 Правила хорошего тона составления
- •4.5 Микроэффективность
- •Тестирование модулей
- •5.1 Идеология тестирования
- •5.2 Аксиомы тестирования
- •5.3 Методы тестирования
- •Литература
5.3 Методы тестирования
В качестве одного из важнейших способов тестирования следует рассматривать тестирование компиляцией. При этом обнаруживается большинство синтаксических и часть семантических ошибок.
Методы тестирования откомпилированной программы можно разбить на две группы: структурное и функциональное тестирование.
Структурное тестирование заключается в разработке групп тестов, которые в той или иной степени позволяют проверить прохождение различных маршрутов обработки данных.
Функциональное тестирование – это разработка тестов, обеспечивающих проверку правильности выполнения функций программы.
Рассмотрим эти методы подробнее.
Структурное тестирование. Структурные тесты разрабатываются на основе анализа структуры программы, то есть используется принцип «белого ящика». Существуют следующие наборы требований, выполнение которых позволяет обеспечить определенный уровень полноты тестирования.
Покрытие всех условных блоков. Согласно этому требованию набор тестов должен быть таким, чтобы каждый блок проверки некоторого условия прорабатывал дважды: когда проверяемое условие истинно и когда ложно.
Покрытие всех элементарных условий. Набор тестов должен обеспечивать выполнение каждого элементарного условия в условном блоке не менее двух раз – истина и ложь.
Пример 5.1. Имеем условный оператор
if (x > 1) and (y = 0) then…
Требованию 1) удовлетворяет два теста: (х=2, у=0) и (х=2, у=5). Требованию 2) удовлетворяют четыре теста: (х=2, у=0), (х=2, у=5), (х=0, у=0), (х=0, у=5).
Покрытие блоков и условий. Эти тесты должны одновременно удовлетворять требованиям 1) и 2).
Функциональное тестирование. Функциональные тесты составляются на основе анализа внешних функций модуля, используя принцип «черного ящика», так как структура программы не исследуется. Применяются два метода функционального тестирования.
Метод эквивалентных разбиений. В области возможных значений входных данных выделяют подобласти, включающие допустимые и недопустимые значения. После этого разрабатываются тесты , покрывающие все возможные подобласти. Например, целочисленная переменная М должна принадлежать отрезку [1,12]. Следовательно, существуют три класса эквивалентности: М<1; 1≤M≤12; M>12.
Метод анализа граничных значений. Составляются тесты, включающие данные, значения которых соответствуют граничным значениям классов эквивалентности и ближайшие к ним.
В соответствие с указанными методами для переменной М могут быть использованы следующие тестовые значения: -5, 0, 1, 2, 6, 11, 12, 13, 20.
Контрольные вопросы и задания
Для задачи решения квадратного уравнения ax2+bx+c=0 приведите пример теста, проверяющего «нулевой вариант».
Имеется следующая задача. Даны три натуральных числа a, b, c, которые представляют собой длины сторон треугольника. Проверить, является ли этот треугольник равносторонним. Для данной задачи приведите пример некорректных данных (предполагается, что три вводимых числа действительно натуральные).
Для следующих вариантов заданий написать программу, максимально устойчивую к некорректным данным и снабженную надежной защитой от ошибок. Придумать для заданий систему структурных и функциональных тестов с указанием цели каждого тестирования и описанием ожидаемой реакции.
Варианты заданий
Даны три целых неотрицательных числа a, b, c, являющихся длинами сторон треугольника. Проверить, является ли он равносторонним, равнобедренным (в этом случае надо указть длину неравной стороны) или разносторонним.
Найти с максимальной точностью все вещественные и комплексные корни квадратного уравнения ax2+bx+c=0.
Составить программу вычисления числа сочетаний
используя
для числовых данных только тип integer.
Вычислить с помощью программы
Даны три натуральных числа, являющихся длинами сторон треугольника. Определить при каком упорядочении они составляют арифметическую прогрессию.
Составить программу привидения общего уравнения кривой второго порядка параболического типа к каноническому виду с определением того, какой геометрический образ определяет это уравнение. При развороте осей выбирать один из возможных углов.
Составить программу деления двух многочленов, то есть определения коэффициентов частного и остатка.
Составить программу сложения двух простых дробей, представленных парами (m,n)=m/n. Для числовых данных использовать только тип integer.
