Специфицирование и тестирование программ
Разработка программы совместной обработки данных о проданных билетах на одну дату отправления авиарейсов и общее количество для формирования выходного документа; исходные данные и особенности алгоритма; ограничения. Тестирование функций программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 07.04.2012 |
Размер файла | 4,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Специфицирование и тестирование программ
- Содержание
- 1. Задание к работе
- 2. Ограничения на входные и выходные данные
- 2.1 Ограничения, накладываемые на входные данные, считываемые из первого файла
- 2.2 Ограничения, накладываемые на входные данные, считываемые из второго файла
- 3. Структура целей разрабатываемой программы
- 4. Схемы программы
- 4.1 Схема работы системы
- 4.2 Схема программы для функции "Чтение и проверка файла F1"
- 4.3 Схема программы для функции "Чтение и проверка файла F2"
- 4.4 Схема программы для функции "Формирование и вывод F3"
- 5. Таблицы решений
- 5.1 ТР для функции "Чтение и проверка файла F1"
- 5.2 ТР для функции "Чтение и проверка файла F2"
- 5.3 ТР для функции "Формирование и вывод F3"
- 6. Тестирование программы
- 6.1 Тестирование функции "Чтение и проверка файла F1"
- 6.2 Тестирование функции "Чтение и проверка файла F2"
- 6.3 Тестирование функции "Формирование и вывод F3"
- Вывод
- Список литературы
- Приложение А
- Задание к работе
- Разработать программу совместной обработки файлов типа F1 и F2 для формирования выходного документа типа F3.
- Исходные данные и особенности алгоритма
- Текстовые файлы на МД, структура записей которых приведена ниже:
- Таблица 1
- Структура файла F1
- Таблица 2
- Структура файла F2
- Результат обработки в виде выходного документа, представленного в таблице F3:
- Таблица 3
- Структура файла F3
- Сгруппировать все записи о проданных билетах на одну дату отправления и подсчитать общее количество проданных билетов на конкретную дату. Рекомендуется имена файлов типа F1 и F2 запрашивать с клавиатуры дисплея.
Количество мест |
№ рейса |
Пункт отправления |
Пункт прибытия |
Время отправления |
Цена |
|
№ рейса |
Фамилия, имя, отчество |
Дата продажи |
Дата отправления |
|
Дата отправления |
№ рейса |
Количество мест |
Количество проданных билетов |
|
2. Ограничения на входные и выходные данные
2.1 Ограничения, накладываемые на входные данные, считываемые из первого файла
а) Поле «Количество мест» должно содержать только цифры и не превышать 200.
б) Поле «№ рейса» должно содержать только цифры, буквы латинского и русского алфавитов, символ « - » , а так же не превышать 10 символов.
в) Содержимое поля «№ рейса» должно быть уникальным.
г) Поле «Пункт отправления» должно содержать только буквы русского алфавита.
д) Поле «Пункт прибытия» должно содержать только буквы русского алфавита.
е) Поле «Время отправления» должно содержать только цифры, символ « . », а так же не превышать 5 символов.
ж) Значение поля «Время отправления» должно быть не менее «00.00» и не более «23.59».
з) Поле «Цена» должно содержать только цифры и не превышать 5 символов.
2.2 Ограничения, накладываемые на входные данные, считываемые из второго файла
а) Поле «№ рейса» должно содержать только цифры, буквы латинского и русского алфавитов, символ « - » , а так же не превышать 10 символов.
б) Поле «Фамилия, имя, отчество» должно содержать только буквы русского алфавита.
в) Поле «Дата продажи» должно содержать только цифры, символ « . » и не превышать 10 символов.
г) Поле «Дата отправления» должно содержать только цифры, символ « . » и не превышать 10 символов.
д) Значение поля «Дата продажи» не должно превышать значения поля «Дата отправления».
е) В полях «Дата отправления» и «Дата продажи» значение дня не должно быть менее 0 и не более 31, значение месяца должно быть не менее 0 и не более 12, значение года должно быть равно 2012.
ж) Производится проверка правильности открытия файлов F1 и F2, если файлы не существуют происходит аварийный выход из программы.
з) Производится проверка наличия каждого значения поля «№ рейса» из файла F2 в соответствующем поле файла F1.
3. Структура целей разрабатываемой программы
Составлению внешних спецификаций разрабатываемого ПО предшествует анализ целей будущего продукта, который в методиках разработки ПО называется структурным анализом и методической базой которого является нисходящая стратегия.
Структурным анализом принято называть такое исследование системы, которое начинается с ее общего обзора и затем детализируется, приобретая иерархическую структуру со все большим числом уровней. Для таких методов характерно разбиение на уровни абстракции с ограничением числа элементов на каждом из уровней (обычно от 3 до 6-7). В технологии программирования эта идея была сформулирована как один из принципов структурного программирования: разработку программ рекомендуется вести сверху вниз или, иначе, по нисходящей стратегии.
Суть нисходящей стратегии в том, что цели разрабатываемого ПП структурируются по схеме: цели - подцели 1-го уровня - ... - подцели i-го уровня - ... - подцели n-уровня - функции до такой степени детализации, когда реализация подцелей последнего уровня (функций) становится очевидной.
4. Схема работы системы
4.1 Схема работы основной функции
4.2 Схема программы для функции «Чтение и проверка файла 1»
4.3 Схема программы для функции «Чтение и проверка файла 2»
4.4 Схема программы для функции «Формирование и вывод F3»
программа билет авиарейс тестирование
5. Таблицы решений
Проектирование спецификаций процессов с помощью таблиц решений заключается в задании матрицы, отображающей множество входных условий и множество решений. Правила формирования ТР следующие.
Таблица имеет 4 зоны: верхнюю и нижнюю, правую и левую. Верхняя левая зона ТР используется для описания условий, которым должны отвечать входные данные. Нижняя левая часть ТР используется для определения действий по преобразованию информации в программе. В верхней правой зоне отмечаются комбинации условий для входных данных, в нижней правой зоне отмечаются действия, выполняемые когда определенная комбинация условий для входных данных имеет место.
Верхняя часть таблицы используется для определения условий. Обычно условие является ЕСЛИ-частью оператора ЕСЛИ-ТО и требует ответа "да-нет". Совокупность ответов "да-нет" представляет собой комбинацию условий для входных данных.
Нижняя часть ТР используется для определения действий, т.е. ТО-части оператора ЕСЛИ-ТО и в ней указывается, какие конкретно действия и в какой последовательности выполняются, когда определенная комбинация условий имеет место.
Таблица решений - это такая внешняя спецификация программного обеспечения, в которой отражаются комбинации условий, выполняемых для входных данных, и соответствующие этим комбинациям действия по преобразованию информации.
Методика построения ТР заключается в следующем:
а) определить все условия и действия в спецификации;
б) вписать действия и условия в таблицу;
в) в нумерованных столбцах отметить все возможные комбинации условий и выполняемых при выполнении условий действий;
г) при необходимости редуцировать таблицу (если есть 2 столбца, у которых перечень действий совпадает и которые отличаются только результатами условий `Д' и `Н' в одной строке, то такие столбцы могут быть слиты в один).
Таблица 5.1
ТР для функции “Чтение и проверка файла F1”
Условия |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
|
Поле «Количество мест» введено корректно и не больше 200? |
- |
- |
Н |
- |
- |
- |
- |
- |
- |
- |
- |
Д |
|
Поле «№ рейса» введено корректно и не больше 15 символов? |
- |
- |
- |
Н |
- |
- |
- |
- |
- |
- |
- |
Д |
|
Поле «Пункт отправления» введено корректно? |
- |
- |
- |
- |
Н |
- |
- |
- |
- |
- |
- |
Д |
|
Поле «Пункт прибытия» введено корректно? |
- |
- |
- |
- |
- |
Н |
- |
- |
- |
- |
- |
Д |
|
Поле «Время отправления» введено корректно и не больше 5 символов? |
- |
- |
- |
- |
- |
- |
Н |
- |
- |
- |
- |
Д |
|
Значение поля «Время отправления» лежит в диапазоне от «00.00» и до «23.59»? |
- |
- |
- |
- |
- |
- |
- |
Н |
- |
- |
- |
Д |
|
Поле «Цена» введено корректно и не больше 5 символов? |
- |
- |
- |
- |
- |
- |
- |
- |
Н |
- |
- |
Д |
|
Поле «№ рейса» уникально? |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Н |
- |
Д |
|
Все записи просмотрены? |
Д |
Д |
Н |
Н |
Н |
Н |
Н |
Н |
Н |
Н |
Н |
Н |
|
Обнаружена некорректность F1? |
Н |
Д |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
|
Действия |
|||||||||||||
Вывод сообщения `Поле «Количество мест» содержит недопустимые символы' |
1 |
||||||||||||
Вывод сообщения `Поле «№ рейса» содержит недопустимые символы' |
1 |
||||||||||||
Вывод сообщения `Поле «Пункт отправления» содержит недопустимые символы' |
1 |
||||||||||||
Вывод сообщения `Поле «Пункт прибытия» содержит недопустимые символы' |
1 |
||||||||||||
Вывод сообщения `Поле «Время отправления» содержит недопустимые символы' |
1 |
||||||||||||
Вывод сообщения `Поле «Время отправления» введено некорректно' |
1 |
||||||||||||
Вывод сообщения `Поле «Цена» содержит недопустимые символы' |
1 |
||||||||||||
Вывод сообщения `Номер рейса не уникален' |
1 |
||||||||||||
Установить признак некорректности |
1 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
||||
Продолжить обработку |
1 |
3 |
3 |
3 |
3 |
3 |
3 |
3 |
3 |
1 |
1 |
||
Прекратить обработку |
2 |
Таблица 5.2
ТР для функции “Чтение и проверка файла F2”
Условия |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
Поле «№ рейса» введено корректно и не больше 10 символов? |
- |
- |
Н |
- |
- |
- |
- |
- |
- |
Д |
|
Поле «Фамилия, имя, отчество» введено корректно? |
- |
- |
- |
Н |
- |
- |
- |
- |
- |
Д |
|
Поле «Дата продажи» введено корректно и не больше 10 символов? |
- |
- |
- |
- |
Н |
- |
- |
- |
- |
Д |
|
Поле «Дата отправления» введено корректно и не больше 10 символов? |
- |
- |
- |
- |
- |
Н |
- |
- |
- |
Д |
|
Значение поля «Дата продажи» меньше значения поля «Дата отправления»? |
- |
- |
- |
- |
- |
- |
Н |
- |
- |
Д |
|
Не содержатся одинаковые записи? |
- |
- |
- |
- |
- |
- |
- |
Н |
- |
Д |
|
Все записи просмотрены? |
Д |
Д |
Н |
Н |
Н |
Н |
Н |
Н |
Н |
Н |
|
Обнаружена некорректность F2? |
Н |
Д |
- |
- |
- |
- |
- |
- |
- |
- |
|
Вывод сообщения `Поле «№ рейса» содержит недопустимые символы' |
1 |
||||||||||
Вывод сообщения `Поле «Фамилия, имя, отчество» содержит недопустимые символы' |
1 |
||||||||||
Вывод сообщения `Поле «Дата продажи» содержит недопустимые символы' |
1 |
||||||||||
Вывод сообщения `Поле «Дата отправления» содержит недопустимые символы' |
1 |
||||||||||
Вывод сообщения `Поля «Дата отправления» и «Дата продажи» введены некорректно' |
1 |
||||||||||
Вывод сообщения `Содержатся одинаковые записи' |
1 |
||||||||||
Установить признак некорректности |
1 |
2 |
2 |
2 |
2 |
2 |
2 |
||||
Продолжить обработку |
1 |
3 |
3 |
3 |
3 |
3 |
3 |
1 |
1 |
Таблица 5.3
ТР для функции “Формирование и вывод F3”
Условия |
1 |
2 |
3 |
4 |
5 |
|
Найден номер рейса из файла F2 соответствующий номеру рейса в файле F1? |
Н |
Д |
Д |
Д |
Д |
|
Все записи второй таблицы обработаны? |
- |
Н |
Д |
Д |
Д |
|
Все записи просмотрены? |
- |
Н |
Н |
Д |
Д |
|
Уникальные даты отправления сохранены в отдельный массив? |
- |
- |
- |
Н |
Д |
|
Действия |
||||||
Вывод сообщения `Не совпадают номера рейсов файла F1 и F2' |
1 |
|||||
Добавить в таблицу номер рейса и дату отправления |
2 |
1 |
||||
Подсчитать количество пассажиров |
1 |
|||||
Отсортировать таблицу по дате отправления |
1 |
|||||
Добавить уникальные даты отправления в отдельный массив |
2 |
|||||
Вывод на экран и в файл F3 содержимое таблицы |
3 |
|||||
Подсчитать количество пассажиров на каждую дату отправления |
1 |
|||||
Продолжить обработку |
3 |
2 |
4 |
|||
Прекратить обработку |
2 |
6. Тестирование программы
Тестирование программного обеспечения охватывает целый ряд видов деятельности, аналогичных последовательности процессов разработки программного обеспечения. В него входят:
а) постановка задачи для теста,
б) проектирование теста,
в) написание тестов,
г) тестирование тестов,
д) выполнение тестов,
е) изучение результатов тестирования.
Решающую роль играет проектирование тестов. Возможен целый ряд подходов к стратегии проектирования тестов. Чтобы ориентироваться в них, рассмотрим два крайних подхода. Первый состоит в том, что тесты проектируются на основе внешних спецификаций программ и модулей либо спецификаций сопряжения программы или модуля. Программа при этом рассматривается как черный ящик (стратегия `черного ящика'). Существо такого подхода - проверить, соответствует ли программа внешним спецификациям. При этом логика модуля совершенно не принимается во внимание.
Второй подход основан на анализе логики программы (стратегия `белого ящика'). Суть подхода - в проверке каждого пути, каждой ветви алгоритма. При этом внешняя спецификация во внимание не принимается.
Рекомендуется следующая процедура разработки тестов:- разрабатывать тесты, используя методы стратегии “черного ящика”;- дополнительное тестирование, используя методы стратегии “белого ящика”.
Метод тестирования таблиц решений
Тестирование ТР заключается в том, что проектируется такое количество тестов, которое позволяет покрыть все возможные комбинации условий. Как правило, количество этих тестов совпадает с числом столбцов в ТР
Метод позволяет эффективно проверить соответствие разработанной программы ее внешним спецификациям, но не всегда позволяет выявить случаи, когда программа делает то, что спецификацией не предусмотрено. Кроме того, спецификация может содержать ошибки, которые при таком тестировании выявлены не будут, особенно если результаты тестирования являются правдоподобными. Предварительное построение сначала функциональных диаграмм, а затем ТР позволяет осуществлять логический контроль спецификации сначала на уровне функциональных диаграмм, а затем уже на уровне ТР, что значительно снижает вероятность ошибок в спецификации.
6.1 Тестирование функции «Чтение и проверка F1»
Тест 1
Цель теста: проверить функционирование программы при наличии недопустимых символов в поле «Количество мест».
Предусмотренная ошибка в файле f1.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: Количество мест. Содержимое ошибочной строки: 2з007R-318КраснодарУФА 12.401500».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 2
Цель теста: проверить функционирование программы при наличии чисел, не входящих в диапазон [1;200] в поле «Количество мест».
Предусмотренная ошибка в файле f1.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: Количество мест. Содержимое ошибочной строки: 12007R-317НижневартовскУФА05.201500».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 3
Цель теста: проверить функционирование программы при наличии недопустимых символов в поле «№ рейса».
Предусмотренная ошибка в файле f1.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: № рейса. Содержимое ошибочной строки: 1287/R-462Минеральные_водыУФА 14.401500».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 4
Цель теста: проверить функционирование программы при длине значения поля «№ рейса» более 10 символов.
Предусмотренная ошибка в файле f1.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: № рейса. Содержимое ошибочной строки: 20078956995R-317НижневартовскУФА05.201500».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 5
Цель теста: проверить функционирование программы при наличии недопустимых символов в поле «Пункт отправления».
Предусмотренная ошибка в файле f1.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: Пункт отправления. Содержимое ошибочной строки: 2007R-318Кра*снодарУФА 12.401500».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 6
Цель теста: проверить функционирование программы при наличии недопустимых символов в поле «Пункт прибытия».
Предусмотренная ошибка в файле f1.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: Пункт прибытия. Содержимое ошибочной строки: 2007R-471НижневартовскФА* 12.401500».
Результат тестирования: неуспешный.
Тест 7
Цель теста: проверить функционирование программы при наличии недопустимых символов в поле «Время отправления».
Предусмотренная ошибка в файле f1.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: Время отправления. Содержимое ошибочной строки: 200 7R-317НижневартовскУФА36.201500».
Результат тестирования: неуспешный.
Тест 8
Цель теста: проверить функционирование программы при длине значения поля «Время отправления» более 5 символов.
Предусмотренная ошибка в файле f1.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: Время отправления. Содержимое ошибочной строки: 2007R-317НижневартовскУФА105.201500».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 9
Цель теста: проверить функционирование программы при наличии недопустимых символов в поле «Цена».
Предусмотренная ошибка в файле f1.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: Цена. Содержимое ошибочной строки: 200 7R-317НижневартовскУФА05.201500р».
Результат тестирования: неуспешный.
Тест 10
Цель теста: проверить функционирование программы при длине значения поля «Цена» более 5 символов.
Предусмотренная ошибка в файле f1.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: Цена. Содержимое ошибочной строки: 2007R-317НижневартовскУФА05.20100500».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 11
Цель теста: проверить функционирование программы при наличии двух одинаковых значений поля «№ рейса».
Предусмотренная ошибка в файле f1.txt:
Ожидаемый результат: сообщение:
«Номер рейса 7R-461 не уникален».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 12
Цель теста: проверить функционирование программы при наличии двух одинаковых записей в файле.
Предусмотренная ошибка в файле f1.txt:
Ожидаемый результат: сообщение:
«Повторяющаяся запись: 1287R-462Минеральные_водыУФА 14.401500».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 13
Цель теста: проверить функционирование программы при наличии ошибок в нескольких полях одной записи.
Предусмотренная ошибка в файле f1.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: Количество мест, Пункт отправления. Содержимое ошибочной строки: 20л07R-461Ког=алымУФА 08.101500».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 14
Цель теста: проверить функционирование программы при наличии ошибок в нескольких записях.
Предусмотренная ошибка в файле f1.txt:
Ожидаемый результат: сообщения:
«Ошибка в полях: Количество мест. Содержимое ошибочной строки: е2007R-317НижневартовскУФА05.20500».
«Ошибка в полях: Цена. Содержимое ошибочной строки: 2007R-318КраснодарУФА 12.40100500».
«Ошибка в полях: Пункт отправления. Содержимое ошибочной строки: 2007R-472Минер4альные_водыУФА 20.201500».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 15
Цель теста: проверить функционирование программы при отсутствии ошибок в файле.
Содержимое файла f1.txt:
Ожидаемый результат: запись содержимого файла в таблицу 1:
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
6.2 Тестирование функции «Чтение и проверка F2»
Тест 1
Цель теста: проверить функционирование программы при наличии недопустимых символов в поле «№ рейса».
Предусмотренная ошибка в файле f2.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: № рейса. Содержимое ошибочной строки: 7*R-317Герасименко Александр Ф01.03.201207.03.2012».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 2
Цель теста: проверить функционирование программы при длине значения поля «№ рейса» более 10 символов.
Предусмотренная ошибка в файле f2.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: № рейса. Содержимое ошибочной строки: 798454156R-317Герасименко Александр Ф01.03.201207.03.2012».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 3
Цель теста: проверить функционирование программы при наличии недопустимых символов в поле «Фамилия, имя, отчество».
Предусмотренная ошибка в файле f2.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: ФИО. Содержимое ошибочной строки: 7R-461Ахметзяsfнов Шамиль Ф01.03.201206.03.2012».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 4
Цель теста: проверить функционирование программы при наличии недопустимых символов в поле «Дата продажи».
Предусмотренная ошибка в файле f2.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: Дата продажи. Содержимое ошибочной строки: 7R-317Герасименко Александр Фt01.03.201207.03.2012».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 5
Цель теста: проверить функционирование программы при длине значения поля «Дата продажи» более 10 символов.
Предусмотренная ошибка в файле f2.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: Дата продажи. Содержимое ошибочной строки: 7R-471Багров Алексей Ф04.03.20341206.03.2012».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 6
Цель теста: проверить функционирование программы при наличии недопустимых символов в поле «Дата отправления».
Предусмотренная ошибка в файле f2.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: Дата отправления. Содержимое ошибочной строки: 7R-472Бахмухаметов Ильдар Ф05.03.201206.0t3.2012».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 7
Цель теста: проверить функционирование программы при длине значения поля «Дата отправления» более 10 символов.
Предусмотренная ошибка в файле f2.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: Дата отправления. Содержимое ошибочной строки: 7R-462Багавутдинов Ильдар Ф03.03.201206.04893.2012».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 8
Цель теста: проверить функционирование программы при значении поля «Дата продажи» большим, чем значение поля «Дата отправления».
Предусмотренная ошибка в файле f2.txt:
Ожидаемый результат: сообщение:
«Ошибка в полях: Дата продажи, Дата отправления. Содержимое ошибочной строки: 7R-471Багров Алексей Ф14.03.201206.03.2012».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 9
Цель теста: проверить функционирование программы при отсутствии ошибок в файле.
Содержимое файла f2.txt:
Ожидаемый результат: запись содержимого файла в таблицу 2:
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
6.3 Тестирование функции «Формирование и вывод F3»
Тест 1
Цель теста: проверить функционирование программы при отсутствии значения поля «№ рейса» из файла F2 в соответствующем поле файла F1.
Предусмотренная ошибка в файле f2.txt:
Ожидаемый результат: сообщение:
«Не совпадают номера рейсов файла F1 и F2. Содержимое ошибочной строки: 7R-402Булатова Ильвина Ф04.03.201206.03.2012».
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Тест 2
Цель теста: проверить функционирование программы при отсутствии ошибок во входных файлах.
Содержимое файла f1.txt:
Содержимое файла f2.txt:
Ожидаемый результат: формирование таблицы 3 и её сохранение:
Фактический результат совпадает с ожидаемым.
Результат тестирования: неуспешный.
Вывод
Данная программа была протестирована для всех представленных в таблице решений входных условий. Тесты не обнаружили ошибок в работе программы. Получен правильный выходной файл. Следовательно, программа отвечает заявленным внешним спецификациям.
Список литературы
1) Методические указания к курсовой работе по дисциплине «Технология программирования» / Уфимск. Гос. Авиац. техн. ун-т; Сост.: Гвоздев В.Е., Мукасеева В.Н. Хасанов А.Ю - Уфа, 2004, - 42 с.
Приложение А.
Листинг программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, XPMan;
type
TForm1 = class(TForm)
OpenDialog1: TOpenDialog;
Button1: TButton;
Memo1: TMemo;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
Memo2: TMemo;
OpenDialog2: TOpenDialog;
Button2: TButton;
Button5: TButton;
StringGrid3: TStringGrid;
Memo3: TMemo;
SaveDialog1: TSaveDialog;
XPManifest1: TXPManifest;
ComboBox1: TComboBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
F1: String;
A,U,R: set of Char;
KOL: array[0..100] of integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i,n,l,p,p1,p2,k,j: Integer;
s,s1,hh,mm: String;
t,t1,t2,t3,t4,t5,t6: Boolean;
begin
t:=true;
if OpenDialog1.Execute then begin
F1:=OpenDialog1.FileName;
Memo1.Lines.LoadFromFile(F1);
end;
n:=Memo1.Lines.Count+1;
StringGrid1.RowCount:=n;
for i:=0 to n do begin
s:=Memo1.Lines.Strings[i];
l:=Length(s);
k:=0;
while (s<>'') do begin
p1:=Pos(' ',s);
p2:=Pos(#9,s);
if (p1=0) then begin
if (p2=0) then p:=0 else p:=p2;
end else
if (p2=0) then begin
if (p1=0) then p:=0 else p:=p1;
end else
if (p1<p2) then p:=p1 else p:=p2;
if (p=0) then begin s1:=s; s:=''; end else s1:=Copy(s,1,p-1);
StringGrid1.Cells[k,i+1]:=s1;
Delete(s,1,P);
k:=k+1;
end;
end;
n:=Memo1.Lines.Count;
for i:=1 to n do begin
k:=0;
t1:=true; t2:=true; t3:=true; t4:=true; t5:=true; t6:=true;
s:=StringGrid1.Cells[0,i];
for j:=1 to Length(s) do begin
if not (s[j] in A) then t1:=false;
end;
if t1 then if StrToInt(s)>200 then t1:=false;
s:=StringGrid1.Cells[1,i];
for j:=1 to Length(s) do begin
if not ((s[j] in A) or (s[j] in R) or (s[j] in U)) then t2:=false;
end;
if Length(s)>10 then t2:=false;
s:=StringGrid1.Cells[2,i];
for j:=1 to Length(s) do begin
if not (s[j] in R) then t3:=false;
end;
s:=StringGrid1.Cells[3,i];
for j:=1 to Length(s) do begin
if not (s[j] in R) then t4:=false;
end;
s:=StringGrid1.Cells[4,i];
for j:=1 to Length(s) do begin
if not (s[j] in A) then t5:=false;
end;
hh:=s[1]+s[2];
mm:=s[4]+s[5];
if t5=true then begin
if (StrToInt(hh)>23) or (StrToInt(hh)<0) then t5:=false;
if (StrToInt(mm)>59) or (StrToInt(hh)<0) then t5:=false;
end;
if Length(s)>5 then t5:=false;
s:=StringGrid1.Cells[5,i];
for j:=1 to Length(s) do begin
if not (s[j] in A) then t6:=false;
end;
if Length(s)>5 then t6:=false;
s:='Ошибка в полях: '; k:=Length(s);
if (t1=false) and (k=Length(s)) then s:=s+' Количество мест' else if t1=false
then s:=s+', Количество мест';
if (t2=false) and (k=Length(s)) then s:=s+' № рейса' else if t2=false then
s:=s+', № рейса';
if (t3=false) and (k=Length(s)) then s:=s+' Пункт отправления' else if
t3=false then s:=s+', Пункт отправления';
if (t4=false) and (k=Length(s)) then s:=s+' Пункт прибытия' else if t4=false
then s:=s+', Пункт прибытия';
if (t5=false) and (k=Length(s)) then s:=s+' Время отправления' else if
t5=false then s:=s+', Время отправления';
if (t6=false) and (k=Length(s)) then s:=s+' Цена' else if t6=false then s:=s+',
Цена';
s1:=StringGrid1.Cells[0,i]+' '+StringGrid1.Cells[1,i]+'
'+StringGrid1.Cells[2,i]+' '+StringGrid1.Cells[3,i]+'
'+StringGrid1.Cells[4,i]+' '+StringGrid1.Cells[5,i];
if k<>length(s) then begin
s:=s+'. Содержимое ошибочной строки: '+s1+'. Дальнейшая обработка
невозможна';
ShowMessage(s);
t:=false;
end;
end;
if t= true then
for i:=0 to n do begin
s:=StringGrid1.Cells[1,i];
for j:=i+1 to n do begin
if s=StringGrid1.Cells[1,j] then t:=false;
end;
if t=false then begin ShowMessage('Номер рейса '+s+' не уникален');
break; end;
end;
if t=true then
for i:=1 to n do begin
s:=StringGrid1.Cells[0,i]+' '+StringGrid1.Cells[1,i]+'
'+StringGrid1.Cells[2,i]+' '+StringGrid1.Cells[3,i]+'
'+StringGrid1.Cells[4,i]+' '+StringGrid1.Cells[5,i];
t:=true;
for j:=i+1 to n do begin
s1:=StringGrid1.Cells[0,j]+' '+StringGrid1.Cells[1,j]+'
'+StringGrid1.Cells[2,j]+' '+StringGrid1.Cells[3,j]+'
'+StringGrid1.Cells[4,j]+' '+StringGrid1.Cells[5,j];
if s=s1 then begin t:=false; break; end;
end;
if t=false then begin ShowMessage('Повторяющаяся запись: '+s); break;
end;
end;
if t=true then Button2.Enabled:=true else Button2.Enabled:=false;
end;
procedure TForm1.Button2Click(Sender: TObject);
var i,j,n,l,p,p1,p2,k,dd,mm,gg: Integer;
s,s1: String;
t,t1,t2,t3,t4: Boolean;
d1,d2: TDate;
begin
if OpenDialog1.Execute then begin
F1:=OpenDialog1.FileName;
Memo2.Lines.LoadFromFile(F1);
end;
n:=Memo2.Lines.Count+1;
StringGrid2.RowCount:=n;
for i:=0 to n do begin
s:=Memo2.Lines.Strings[i];
l:=Length(s);
k:=0;
while (s<>'') do begin
p1:=Pos(' ',s);
p2:=Pos(#9,s);
if (p1=0) then begin
if (p2=0) then p:=0 else p:=p2;
end else
if (p2=0) then begin
if (p1=0) then p:=0 else p:=p1;
end else
if (p1<p2) then p:=p1 else p:=p2;
if (p=0) then begin s1:=s; s:=''; end else s1:=Copy(s,1,p-1);
if (k=1) then begin
Delete(s,1,P);
p1:=Pos(' ',s);
p2:=Pos(#9,s);
if (p1=0) then begin
if (p2=0) then p:=0 else p:=p2;
end else
if (p2=0) then begin
if (p1=0) then p:=0 else p:=p1;
end else
if (p1<p2) then p:=p1 else p:=p2;
if (p=0) then begin s1:=s; s:=''; end else s1:=s1+' '+Copy(s,1,p-1);
Delete(s,1,P);
p1:=Pos(' ',s);
p2:=Pos(#9,s);
p1:=Pos(' ',s);
p2:=Pos(#9,s);
if (p1=0) then begin
if (p2=0) then p:=0 else p:=p2;
end else
if (p2=0) then begin
if (p1=0) then p:=0 else p:=p1;
end else
if (p1<p2) then p:=p1 else p:=p2;
if (p=0) then begin s1:=s; s:=''; end else s1:=s1+' '+Copy(s,1,p-1);
Delete(s,1,P);
StringGrid2.Cells[k,i+1]:=s1;
k:=k+1;
end else begin
StringGrid2.Cells[k,i+1]:=s1;
Delete(s,1,P);
k:=k+1;
end;
end;
end;
n:=Memo2.Lines.Count;
for i:=1 to n do begin
k:=0;
t:=true; t1:=true; t2:=true; t3:=true; t4:=true;
s:=StringGrid2.Cells[0,i];
for j:=1 to Length(s) do begin
if not ((s[j] in A) or (s[j] in R) or (s[j] in U)) then t1:=false;
end;
if Length(s)>10 then t1:=false;
s:=StringGrid2.Cells[1,i];
for j:=1 to Length(s) do begin
if not (s[j] in R) then t2:=false;
end;
s:=StringGrid2.Cells[2,i];
for j:=1 to Length(s) do begin
if not (s[j] in A) then t3:=false;
end;
if Length(s)>11 then t3:=false;
if t3=true then begin
dd:=StrToInt(Copy(s,1,pos('.',s)-1)); Delete(s,1,pos('.',s));
mm:=StrToInt(Copy(s,1,pos('.',s)-1)); Delete(s,1,pos('.',s));
gg:=StrToInt(s);
if (dd>31) or (dd<1) then t3:=false else
if (mm<1) or (mm>12) then t3:=false else
if gg<>2012 then t3:=false;
end;
if t3=true then d1:=StrToDate(StringGrid2.Cells[2,i]);
s:=StringGrid2.Cells[3,i];
for j:=1 to Length(s) do begin
if not (s[j] in A) then t4:=false;
end;
if Length(s)>11 then t4:=false;
if t4=true then begin
dd:=StrToInt(Copy(s,1,pos('.',s)-1)); Delete(s,1,pos('.',s));
mm:=StrToInt(Copy(s,1,pos('.',s)-1)); Delete(s,1,pos('.',s));
gg:=StrToInt(s);
if (dd>31) or (dd<1) then t4:=false else
if (mm<1) or (mm>12) then t4:=false else
if gg<>2012 then t4:=false;
end;
if t4=true then d2:=StrToDate(StringGrid2.Cells[3,i]);
if d1>d2 then begin t3:=false; t4:=false; end;
s:='Ошибка в полях: '; k:=Length(s);
if (t1=false) and (k=Length(s)) then s:=s+' № рейса' else if t1=false then
s:=s+', № рейса';
if (t2=false) and (k=Length(s)) then s:=s+' ФИО' else if t2=false then s:=s+',
ФИО';
if (t3=false) and (k=Length(s)) then s:=s+' Дата продажи' else if t3=false
then s:=s+', Дата продажи';
if (t4=false) and (k=Length(s)) then s:=s+' Дата отправления' else if
t4=false then s:=s+', Дата отправления';
s1:=StringGrid2.Cells[0,i]+' '+StringGrid2.Cells[1,i]+'
'+StringGrid2.Cells[2,i]+' '+StringGrid2.Cells[3,i];
if k<>length(s) then begin
s:=s+'. Содержимое ошибочной строки: '+s1+'. Дальнейшая обработка
невозможна';
ShowMessage(s);
t:=false;
end;
end;
for i:=1 to n do begin
s:=StringGrid2.Cells[0,i]+' '+StringGrid2.Cells[1,i]+'
'+StringGrid2.Cells[2,i]+' '+StringGrid2.Cells[3,i];
t:=true;
for j:=i+1 to n do begin
s1:=StringGrid2.Cells[0,j]+' '+StringGrid2.Cells[1,j]+'
'+StringGrid2.Cells[2,j]+' '+StringGrid2.Cells[3,j];
if s=s1 then begin t:=false; break; end;
end;
if t=false then begin ShowMessage('Повторяющаяся запись: '+s); break;
end;
end;
if t=true then Button5.Enabled:=true else Button5.Enabled:=false;
end;
procedure TForm1.Button5Click(Sender: TObject);
var S4,S5,s6: array[0..100] of string;
i,n,k,j,che,i1,j1,n1: Integer;
s,s1,S2,nomr,dato,kolm: String;
b,t: Boolean;
begin
k:=StringGrid1.RowCount;
n:=StringGrid2.RowCount;
for i:=1 to n do begin
t:=false;
for j:=1 to k do
if StringGrid1.Cells[1,j]=StringGrid2.Cells[0,i] then t:=true;
if t=false then begin
s1:=StringGrid2.Cells[0,i]+' '+StringGrid2.Cells[1,i]+'
'+StringGrid2.Cells[2,i]+' '+StringGrid2.Cells[3,i];
ShowMessage('Не совпадают номера рейсов файла F1 и F2. Содержимое
ошибочной строки: '+' '+s1);
end;
end;
t:=true;
if t=true then begin
n:=StringGrid2.RowCount;
k:=0;
for i:=0 to 100 do
KOL[k]:=0;
for i:=0 to n do begin
nomr:=StringGrid2.Cells[0,i];
dato:=StringGrid2.Cells[3,i];
b:=false;
che:=0;
for j:=0 to k do begin
if s4[j]=nomr then begin b:=true; KOL[j]:=KOL[j]+1; end;
end;
if b=false then begin s4[k]:=nomr; s5[k]:=dato; KOL[k]:=1; k:=k+1; end;
end;
StringGrid3.RowCount:=k-1;
k:=StringGrid3.RowCount;
n:=StringGrid2.RowCount;
for i:=1 to k do begin
StringGrid3.Cells[0,i]:=s5[i];
StringGrid3.Cells[1,i]:=s4[i];
StringGrid3.Cells[3,i]:=IntToStr(KOL[i]);
end;
n:=StringGrid3.RowCount;
for i:=1 to StringGrid3.RowCount do begin
for j:=1 to StringGrid1.RowCount do
if StringGrid3.Cells[1,i]=StringGrid1.Cells[1,j] then begin
StringGrid3.Cells[2,i]:=StringGrid1.Cells[0,j]; break; end;
end;
n1:=StringGrid3.RowCount;
s2:='';
for i1:=1 to n1 do begin
for j1:=i1+1 to n1 do begin
if StringGrid3.Cells[0,j1]<=StringGrid3.Cells[0,i1] then
if StringGrid3.Cells[1,j1]<=StringGrid3.Cells[1,i1] then begin
s2:=StringGrid3.Cells[0,j1];
StringGrid3.Cells[0,j1]:=StringGrid3.Cells[0,i1];
StringGrid3.Cells[0,i1]:=s2;
s2:=StringGrid3.Cells[1,j1];
StringGrid3.Cells[1,j1]:=StringGrid3.Cells[1,i1];
StringGrid3.Cells[1,i1]:=s2;
s2:=StringGrid3.Cells[2,j1];
StringGrid3.Cells[2,j1]:=StringGrid3.Cells[2,i1];
StringGrid3.Cells[2,i1]:=s2;
s2:=StringGrid3.Cells[3,j1];
StringGrid3.Cells[3,j1]:=StringGrid3.Cells[3,i1];
StringGrid3.Cells[3,i1]:=s2; s2:='';
end;
end;
end;
Memo3.Clear;
for i:=0 to StringGrid3.RowCount-1 do begin
Memo3.Lines.Add(StringGrid3.Cells[0,i]+#9+StringGrid3.Cells[1,i]+#9+Str
ingGrid3.Cells[2,i]+#9+StringGrid3.Cells[3,i]);
end;
if SaveDialog1.Execute then begin
F1:=SaveDialog1.FileName;
Memo3.Lines.SaveToFile(F1);
end;
ComboBox1.Clear;
k:=0;
for i:=1 to StringGrid3.RowCount-1 do begin
t:=false;
for j:=0 to k do
if s6[j]=StringGrid3.Cells[0,i] then begin t:=true; break; end;
if t=false then begin s6[k]:=StringGrid3.Cells[0,i]; k:=k+1; end;
end;
for i:=0 to k-1 do
ComboBox1.Items.Add(s6[i]);
end;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
A:=['0','1','2','3','4','5','6','7','8','9','.'];
U:=['A'..'Z','a'..'z','-'];
R:=['А'..'Я','а'..'я','ё','_','-','.',' '];
StringGrid1.Cells[0,0]:='Количество мест';
StringGrid1.Cells[1,0]:='№ рейса';
StringGrid1.Cells[2,0]:='Пункт отправления';
StringGrid1.Cells[3,0]:='Пункт прибытия';
StringGrid1.Cells[4,0]:='Время отправления';
StringGrid1.Cells[5,0]:='Цена';
StringGrid2.Cells[0,0]:='№ рейса';
StringGrid2.Cells[1,0]:='ФИО';
StringGrid2.Cells[2,0]:='Дата продажи';
StringGrid2.Cells[3,0]:='Дата отправления';
StringGrid3.Cells[0,0]:='Дата отправлления';
StringGrid3.Cells[1,0]:='№ рейса';
StringGrid3.Cells[2,0]:='Количество мест';
StringGrid3.Cells[3,0]:='Количество проданных билетов';
ComboBox1.Clear;
Label2.Caption:=IntToStr(0);
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
var i: Integer;
begin
Label2.Caption:=IntToStr(0);
for i:=0 to StringGrid3.RowCount-1 do begin
if
StringGrid3.Cells[0,i]=ComboBox1.Items.Strings[ComboBox1.ItemIndex]
then Label2.Caption:=IntToStr(StrToInt(Label2.Caption)+1);
end;
end;
end.
Размещено на Allbest.ru
Подобные документы
Структура целей разрабатываемой программы и ограничения на входные и выходные данные. Таблицы решений для функции "Чтение и проверка на корректность файла". Тестирование функции "Проверка на корректность". Результат обработки в виде выходного документа.
курсовая работа [4,1 M], добавлен 26.07.2014Разработка и тестирование программы класса Точка. Спецификация программы. Сценарий диалога с пользователем. Разработка структур данных и алгоритмов. Таблица параметров функций программы. Текст программы на языке C++. Особенности тестирования программы.
лабораторная работа [43,1 K], добавлен 21.07.2012Сравнительный анализ языков программирования высокого уровня Си и Паскаль. Реализация алгоритма обработки данных. Тестирование и отладка программы или пакета программ. Структура программы на языке Турбо Паскаль. Указатели и векторные типы данных.
курсовая работа [233,5 K], добавлен 14.12.2012Разработка программы на языке Pascal. Описание переменных. Действия, которые должна выполнить программа согласно выбранного алгоритма. Детализация графической части программы. Листинг и тестирование программы. Вывод массива данных на экран монитора.
контрольная работа [360,4 K], добавлен 13.06.2012Калькулятор как устройство для арифметических вычислений. Разработка алгоритма, его перевод в программный код. Выбор языка, опции компилятора при сборке программы. Обработка ошибок и исключительных ситуаций в коде. Тестирование программы, файл помощи.
курсовая работа [1,2 M], добавлен 19.02.2015Разработка эскизного и технического проектов программы, ее назначение и область применения, технические характеристики. Организация входных и выходных данных, выбор состава технических и программных средств. Текст программы, ее описание и тестирование.
курсовая работа [1,3 M], добавлен 15.11.2009Общая характеристика и функциональные возможности системы "Компьютерное тестирование". Связи между информационными объектами. Проектирование алгоритмов обработки данных. Реализация алгоритмов обработки информации, разработка соответствующих макросов.
контрольная работа [542,8 K], добавлен 19.10.2010Электронное учебное пособие. Компьютеризированная информационная система. Система управления данными. Требования к программному изделию. Описание структуры, функций и событий обработки данных. Тестирование разработанной программы и выявление ошибок.
курсовая работа [4,2 M], добавлен 18.01.2012Разработка технологии обработки информации, а также структуры и формы представления данных. Подбор алгоритма и программы решения задачи. Определение конфигурации технических средств. Специфика процесса тестирования и оценки надежности программы.
курсовая работа [959,1 K], добавлен 12.12.2011Переменные типа integer, real, их функции. Общее понятие о массиве, файлы для Pascal. Информационный и информанизационный набор списка. Реализация и тестирование программы. Выбор базы данных, внесение имени, меню. Блок-схема алгоритма, листинг программы.
курсовая работа [306,0 K], добавлен 04.02.2013