Добавлен: 28.03.2023
Просмотров: 86
Скачиваний: 2
Введение
Компьютерная технология надежно вошли в человеческую жизнь. Подъем научного и технического прогресса невозможен без автоматизации вычислительных процессов. Именно необходимость в автоматизации вычислительных процессов стала изначальным импульсом к популяризации программирования.
Традиционная технология программирования формировалась на заре вычислительной техники, когда в распоряжении обычных пользователей были ограниченные ресурсы ЭВМ, а разработчик программ был в то же время и главным ее пользователем. В этих условиях главное внимание обращалось на получение эффективных программ и оптимального использования ресурсов ЭВМ.
Сейчас же, когда сфера применения техники и интернета чрезвычайно расширилась, разработка программ осуществляется разными людьми и компаниями. Поэтому наряду с эффективностью на первый план выдвигаются и другие важные характеристики программ такие, как удобство, хорошая документированность, надежность. Проблема разработки программ, соответсвующий подобным требованиям, объясняется трудоемкостью процесса программирования.
Для создания программы есть необходимость придерживаться определенных принципов и новых тенденций программирования.
В наше время из-за постоянного прогресса компьютерных технологий программирование играет одну из важнейших ролей в жизни человека.
Глава 1. Разработка программы
Предметная область.
Суждения – это мысль о предмете, в которой утверждается или отрицается связь между предметом и его признаком, отношения между предметами, и которая может быть либо истинной, либо ложной. Языковой формой выражения суждения является повествовательное предложение. Вопросительные и побудительные предложения суждениями не являются.
Простое суждение — это суждение о принадлежности предметам свойств , а также суждения об отсутствии у предметов каких-либо свойств. В простом суждении могут быть выделены термины суждения — субъект, предикат, связка, квантор.
Для упрощения записи операций над суждениями введем следующие обозначения:
- символ «S» используется для обозначения субъекта;
- символ «P» используется для обозначения предиката;
- символ «:» применяется для обозначения связки «есть»;
- символ «~» используется для обозначения отрицательной частицы «не»;
- символ «#» обозначает термин «ни один»;
- символ «!» применяется для обозначения термина «только»;
Тогда результат выполнения операций в общем виде может быть представлен в виде таблицы (см. Таблица 1).
модульный эквивалентность тестирование регрессионный
Таблица 1. Правила выполнения операций над суждениями
Операция |
Суждение |
|
Общеутвердительное S : P |
Общеотрицательное # S ~: P |
|
Превращение |
# S ~: ~P |
S : ~P |
Обращение |
Р : S |
# P ~: S |
Противопоставление предикату |
# ~P ~: S |
Р : S |
Описание алгоритма.
На вход программе подается одна или несколько строк. Эти строки представляет собой простое категорическое суждение, над которым необходимо выполнить требуемые операции. Для удобства дальнейшей работы строка разбивается на компоненты (квантор, субъект, связка, предикат).
Дополнительными данными для работы программы являются словари, которые хранят используемые кванторы, субъекты, связки и предикаты (все компоненты суждения).
В случае, если формат строки не удовлетворяет требования, или тип суждения не соответствует указанному в задании (в соответствии с классификацией, приведенной выше), генерируется исключение (ошибка времени выполнения).
При успешном разборе суждения последовательно выполняются требуемые операции и их результат возвращается пользователю в виде строки на естественном языке. При этом реализация грамматической точности построенного предложения не является приоритетной задачей.
Входные данные могут быть считаны из текстового файла (файл input.txt находится в той же директории, что и исполняемый файл). В случае отсутствия указанного файла пользователю предлагается ввести исходные данные с клавиатуры. Выходные данные выводятся на экран и дублируются в текстовом файле (файл output.txt находится также в той же директории, что и исполняемый файл). Данные словарей находятся в текстовых файлах, расположенных в подкаталоге Data (сам подкаталог располагается в том же каталоге, что и исполняемый файл) и имеют имя:
<Название_компонента>.txt
Процесс выполнения операций над суждениями представлен в виде блок-схемы: выполняется построчное чтение данных из потока ввода (файл или консоль), для каждой строки определяет тип суждения и выполняются допустимые операции над ним.
Глава 2. Тестирование методом «черного ящика»
Спецификация программы.
Написать консольную программу выполнения операций превращения, обращения и противопоставления предикату над общеутвердительными и общеотрицательными суждениями.
Входные данные находятся в текстовых файлах (расширение .txt). Каждая строка файла содержит единственную запись – суждение. При отсутствии входного файла осуществляется пользовательский ввод. Словари компонентов суждений так же хранятся в текстовых файлов в соответствии с определенным форматом.
Результаты выполнения операций записываются в текстовый файл (расширение .txt). Также осуществляется вывод результатов на экран.
Программа должна быть написана на алгоритмическом языке высокого уровня C#. Требуемая версия .NET Framework – 4.0 и выше. Программа должна выполняться на операционных системах семейства Windows версии XP и выше.
При ошибках пользовательского ввода или внутренних ошибках программа должна осуществлять вывод соответствующего сообщения.
Ограничения.
-
-
-
- По умолчанию, суждения записываются на русском языке. Для записи суждений на английском языке следует изменить строку 11 в файле app.config. Допустимые значения: Ru – русский зык (по умолчанию), En – английский язык.
- Формат записи суждений:
-
-
<Квантор> <Субъект> <Логическая связка> <Предикат>
Все компоненты являются обязательными. Компоненты Субъект и Логическая связка должны состоять из единственного слова.
-
-
-
- Формат записи элементов словарей:
-
-
<Начальная_форма> ([Форма_слова] [,Форма_слова] … [,Форма_слова])
То есть, в файле должна быть записана начальная форма фразы (слово или словосочетание), затем в скобках через запятую перечислены формы этой фразы, используемые в суждениях.
-
-
-
- Предикат должен иметь положительный характер (не должен иметь отрицательной частицы «не»)
- При записи результата все компоненты новых суждений должны иметь либо начальную форму фразы, как она указана в словарях компонентов, либо ту же форму, что и в записи исходного суждения. Знаки препинания игнорируются. Выходные суждения записываются в верхнем регистре.
- Текстовые файлы должны кодироваться UTF-8 и иметь расширение .txt.
- Требование к структуре файловой системы: текстовые файлы для ввода и вывода данных должны находиться в том же каталоге, что и исполняемый файл. Текстовые файлы со словарями компонентов должны располагаться в подкаталоге Data в том же каталоге, что и исполняемый файл и именоваться в формате <Компонент>.txt
- При возникновении любой ошибки выполнение программы останавливается.
-
-
Классы эквивалентности.
Классы эквивалентности будем представлять в виде таблицы (см. Таблица 2)
Таблица 2. Классы эквивалентности
№ |
Ситуация |
Классы эквивалентности |
|
Допустимые |
Недопустимые |
||
1 |
Ввод данных |
Данные успешно считаны из файла |
|
Файл не найден, пользователь вводит данные |
|||
2 |
Синтаксический анализ |
Запись суждения соответствует формату, обнаружены все компоненты в словарях |
Отсутствует любой (любые) из компонентов суждения |
Все компоненты присутствуют, но не могут быть распознаны |
|||
Тип суждения не соответствует заявленному в задании |
|||
Файл со словарем для какого-либо компонента не обнаружен |
|||
3 |
Выполнение операций |
Операции выполнены успешно |
|
4 |
Вывод данных |
Данные успешно записаны в существующий файл |
|
Данные успешно записаны в созданный файл |
Покрытие тестами классов эквивалентности.
Тесты, покрывающие классы эквивалентности, приведены в нижеследующей таблице (Таблица 3).
Таблица 3. Используемые тесты
№ |
Значение входных данных |
Значение выходных данных |
Тип ошибки |
Причина |
1 |
Файл пустой |
Пустая строка |
Ошибки нет |
|
2 |
Файл не существует, пользователь вводит пустую строку |
Пустая строка |
Ошибки нет |
|
3 |
Все студенты учатся хорошо |
I > Входные данные: ВСЕ СТУДЕНТЫ УЧИТЬСЯ ХОРОШО I > Тип: Общеутвердительное I > Превращение: НИ ОДИН ИЗ ТЕХ КТО СТУДЕНТЫ НЕ УЧИТЬСЯ НЕ ХОРОШО I > Обращение: НЕКОТОРЫЕ ИЗ ТЕХ КТО УЧАТСЯ ХОРОШО СТУДЕНТЫ I > Противопоставление: НИ ОДИН ИЗ ТЕХ КТО НЕ УЧАТСЯ ХОРОШО НЕ СТУДЕНТЫ |
Ошибки нет |
|
4 |
Студенты учатся хорошо |
E > Квантор не определен |
Неверный формат ввода |
Отсутствует квантор суждения |
5 |
Почти все студенты учатся хорошо |
E > Не могу считать данные для объекта: Квантор, так как Не обнаружена требуемая форма |
Неверный формат ввода |
Квантор суждения не определен |
6 |
Все учатся хорошо |
E > Субъект не определен |
Неверный формат ввода |
Отсутствует субъект суждения |
7 |
Все студенты хорошо |
E > Не могу считать данные для объекта: Связка, так как Не обнаружена начальная форма |
Неверный формат ввода |
Отсутствует логическая связка |
8 |
Все студенты учатся |
E > Предикат не определен |
Неверный формат ввода |
Отсутствует предикат суждения |
9 |
Некоторые студенты учатся хорошо |
I > Входные данные: НЕКОТОРЫЕ СТУДЕНТЫ УЧИТЬСЯ ХОРОШО I > Тип: Частноутвердительное W > Данное суждение не является общеутвердительным или общеотрицательным |
Несоответствие типа |
Тип суждения не соответствует указанному в задании |
10 |
Все студенты учатся хорошо |
E > Не могу считать данные для объекта: Предикат, так как Файл со справочиком не обнаружен |
Файл не найден |
Отстутствует файл со справочником |
При выполнении тестов использовались следующие записи в словарях компонентов:
-
-
-
- Кванторы (Квантор.txt)
-
-
Все (Вся, Всё, Всех)
Некоторые (Некоторых, Некоторым, Некоторыми)
Ни один (Ни одного, Ни одному, Ни одна, Ни одно)
Ни один из (Ни одного из, Ни одному из, Ни одна из, Ни одно из)
Ни один из тех кто (Ни одного из тех кто, Ни одному из тех кто, Ни одна из тех кто, Ни одно из тех кто)
-
-
-
- Субъекты (Субъект.txt)
-
-
Студент (Студента, Студенту, Студентом, Студенте)
Студенты (Студентов, Студентам, Студентами, Студентах)
-
-
-
- Логические связки (Связка.txt)
-
-
Учиться (учусь, учимся, учишься, учится, учатся)
Быть (есть, был, была, было, были, будет, будут)
Бывать (бывает, бывают, бывал, бывала, бывало, бывали)
-
-
-
- Предикаты (Предикат.txt)
-
-
Хорошо ()
Плохо ()
Умный (умная, умное, умные, умного, умную, умных, умному, умной, умным, умными, умном, умных)
Используемые тесты покрывают следующие классы эквивалентности (см. Таблица 4):
Таблица 4. Соотношение классов эквивалентности и тестов
№ |
Описание класса эквивалентности |
Допустимый класс? |
Номер(-а) тестов |
1 |
Данные успешно считаны из файла |
+ |
1, 3-9 |
2 |
Файл не найден, пользователь вводит данные |
+ |
2-9 |
3 |
Запись суждения соответствует формату, обнаружены все компоненты в словарях |
+ |
3 |
4 |
Отсутствует любой (любые) из компонентов суждения |
– |
4,6-8 |
5 |
Все компоненты присутствуют, но не могут быть распознаны |
– |
5,7 |
6 |
Тип суждения не соответствует заявленному в задании |
– |
9 |
7 |
Файл со словарем для какого-либо компонента не обнаружен |
– |
10 |
8 |
Операции выполнены успешно |
+ |
3 |
9 |
Данные успешно записаны в существующий файл |
+ |
1-10 |
10 |
Данные успешно записаны в созданный файл |
+ |
1-10 |
Глава 3. Тестирование методом «белого ящика». Модульное тестирование
Модуль DictionaryParser.Parse().
Алгоритм и код
Программный код модуля приведен в листинге 1.