- •Введение Цели и задачи курса «Технология программирования»
- •Классификация программного обеспечения
- •Тема 1.Понятие программного изделия
- •1.1.Основные требования к программному изделию как к продукции производственно-технического назначения
- •1.2.Жизненный цикл программных изделий
- •1.3.Методическая, технологическая, инструментальная и организационная поддержка процесса проектирования программных изделий
- •1.4.Этапы проектирования сложных программных изделий
- •Тема 2.Внешнее проектирование программных изделий
- •2.1.Разработка требований и внешнее проектирование программных изделий
- •2.2.Обеспечение целей создания программных изделий Цели проекта с точки зрения пользователя
- •Цели проекта с точки зрения разработчика
- •2.3.Разработка внешних спецификаций проекта
- •Тема 3.Внутреннее проектирование программных изделий
- •3.1.Понятие модуля. Характеристики качества модулей
- •3.2.Методы проектирования программ
- •Иерархическая декомпозиция и абстрактные машины (метод нисходящей декомпозиции)
- •Программирование на основе принципа пошагового совершенствования
- •Структурное программирование по нисходящему принципу
- •Программирование с использованием пошаговой реорганизации
- •Способы описания программ. Язык проектирования программ
- •Тема 4.Структурированные программы
- •4.1.Блок-схемы и управляющие структуры
- •4.2.Теорема о структурировании
- •4.3.Рекурсивные структурированные программы
- •Тема 5.Методы Доказательства правильности программ
- •5.1.Математический аппарат доказательства Принцип простой индукции
- •Принцип модифицированной простой индукции
- •Принцип обобщенной индукции
- •5.2.Методы доказательства правильности программ Метод индуктивных утверждений
- •Пример доказательства правильности программы методом индуктивных утверждений
- •Тема 6.Рекурсивные программы. Методы доказательства их правильности
- •6.1.Понятие рекурсивных программ. Способы их описания Язык описания рекурсивных программ
- •Примеры рекурсивных программ
- •6.2.Рекурсивные программы работы со списками Списки и операции над ними
- •Примеры программ работы со списками
- •6.3.Примеры доказательства правильности рекурсивных программ
- •Тема 7.Отладка программ
- •7.1.Типичные ошибки в программных комплексах
- •7.2.Задачи отладки программ
- •7.3.Методы разработки тестов Метод эквивалентных разбиений
- •Методы тестирования программ путем покрытия логики
- •Метод функциональных диаграмм
- •Предположения об ошибках
- •7.4.Задачи комплексной отладки программ
- •Библиографический список
7.3.Методы разработки тестов Метод эквивалентных разбиений
В этом методе по спецификациям программы выясняются области определения входных данных. Классы эквивалентности выделяются путем выбора каждого входного условия обычно из спецификаций программы и разбиения их на два и более класса.
Различают два типа классов эквивалентности: правильные и неправильные. Особое внимание необходимо сосредоточить на неправильных классах.
При выделении классов эквивалентности рекомендуется придерживаться следующих правил.
Если входное условие описывают область значений, то определяется один правильный класс и два неправильных. Например, пусть в спецификациях программы сказано, что параметр x должен быть целым из диапазона [1,999]. Тогда выделяется один правильный класс: 1 ≤ x ≤ 999, и два неправильных класса: х<1 и х>999.
Если входное условие описывает число значений, например, в автомашине могут ехать от 1 до 6 человек, то определяется один правильный класс и два неправильных класса, т.е. отсутствие и более 6 человек.
Если входное условие описывает множество входных значений и есть основание полагать, что каждое значение программа трактует особо, то определяются правильные классы эквивалентности для каждого допустимого значения и один неправильный класс. Например, входной параметр – способ передвижения со значениями: «автобус», «мотоцикл», «грузовик», тогда правильными будут три класса именно с этими значениями и один неправильный класс со значением, например, «самолет».
Если входное условие описывает ситуацию: «должно быть», например, первый символ идентификатора должен быть буквой, то определяется один правильный класс (первый символ – буква) и один неправильный класс (первый символ – не буква).
Если есть основание полагать, что различные элементы класса эквивалентности трактуются программой не одинаково, то данный класс эквивалентности требуется разбить на меньшие классы.
Построение тестов включает в себя:
а) назначение каждому классу уникального номера;
б) проектирование тестов, каждый из которых покрывает максимальное число правильных классов до тех пор, пока все правильные классы не будут покрыты;
в) проектирование тестов, каждый из которых покрывает один и только один неправильный класс, при этом, если тестируется один параметр на неправильное значение, остальные параметры должны иметь правильные значения.
Например, пусть имеется программа, которая проводит синтаксический контроль идентификаторов какого-либо языка программирования. По спецификациям этого языка идентификатор может иметь длину не более двух символов: первый символ - обязательно латинская буква, второй – латинская буква или цифра, или отсутствует.
Выделим классы эквивалентности.
|
№ |
Классы |
Правильные классы |
1 |
Первый символ – латинская буква |
2 |
Второй символ - латинская буква |
|
3 |
Второй символ – цифра |
|
4 |
Второй символ – отсутствует |
|
Неправильные классы |
5 |
Первый символ – не латинская буква |
6 |
Второй символ – не латинская буква и не цифра |
Тесты составим в виде следующей таблицы.
№ |
Тесты |
Покрывает классы |
Результат |
|
Первый символ |
Второй символ |
|||
1 |
Z |
X |
1,2 |
Правильная работа |
2 |
W |
3 |
1,3 |
|
3 |
Y |
|
1,4 |
|
4 |
Я |
9 |
5 |
Сообщение об ошибке |
5 |
R |
# |
6 |
При тестировании программы особое внимание нужно уделять приграничным значениям параметров, т.е. значениям, лежащим на границе между правильной и неправильной областью. Допустим, для решения какой-то задачи определено, что параметр . Правильными значениями будут , неправильными - . Кроме тестов со значениями в правильной и двух неправильных областях рекомендуется провести тестирование на значения, лежащие в приграничных правильных и неправильной областях, например, , – правильные, и – неправильные.