Модуль DictionaryParser.Parse()

Алгоритм и код

Программный код модуля приведен в листинге 1.

Листинг 1

public void Parse()  
{  
using (FileStream stream = new FileStream(_filePath, FileMode.Open, FileAccess.Read))
{
StreamReader reader = new StreamReader(stream);
while (!reader.EndOfStream)
{
string line = reader.ReadLine().ToLower();
int openBracket;
string initialForm = "";
try  
{
openBracket = line.IndexOf('(');
if (openBracket == -1)
throw new DictionaryException(_dictionaryType,
DictionaryExceptionReason. НевозможноПроанализироватьВариантыФорм);
initialForm = string.Concat(line .Where((c, i) => i < openBracket)).Trim().ToUpper();
}  
catch
{
throw new DictionaryException(_dictionaryType,
DictionaryExceptionReason. НеОбнаруженаНачальнаяФорма);
}
Dictionary[initialForm] = new List<string>() {initialForm};
Dictionary[initialForm].AddRange(line.Substring(openBracket + 1)
.Split(new string[] {",", ")"},
StringSplitOptions. RemoveEmptyEntries)
.Select(s => s.Trim().ToUpper())
.ToList());
}
reader.Close();
}
}

Блок-схема метода приведена на рисунке ниже (Рисунок 3).

Модуль DictionaryParser.Parse() - student2.ru

Рисунок 3. Блок-схема модуля DictionaryParser.Parse

Приведенный алгоритм использует язык интегрированных запросов для облегчения чтения и преобразования данных. Все считанные данные хранятся в свойстве Dictionary класса.

Тестирование базового пути

Построение потового графа

Потоковый граф рассматриваемого модуля с указанием регионов и выделенными предикаторными узлами приведен ниже (см. Рисунок 4).

Модуль DictionaryParser.Parse() - student2.ru

Рисунок 4. Потоковый граф модуля DictionaryParser.Parse

Оценка цикломатической сложности

Приведенный граф позволяет оценить минимальное количество тестов, которые должны быть проведены. Оценку цикломатической сложности будем производить тремя указанными методами:

1) V(G) = количество регионов = 4

2) V(G) = количество дуг – количество узлов + 2 = 15 – 13 + 2 = 4

3) V(G) = количество предикатных узлов +1 = 3 + 1 = 4

Таким образом, необходимо составить 4 теста, охватывающих независимые пути в графе.

Определение базового множества независимых путей

Путь начинается в начальном узле, а заканчивается в конечном узле графа. Независимые пути необходимо разрабатывать в порядке от самого короткого к самому длинному.

Были выявлены следующие независимые пути:

1) 1-12-13

2) 1-2-3-12-13

3) 1-2-3-4-5-6-8-10-11-3-12-13

4) 1-2-3-4-5-6-7-9-10-11-3-12-13

В представленном списке не учитывался факт наличия цикла (отрезки путей 3-4…-…-11могут повторяться неоднократно)

Подготовка тестовых вариантов

Для тестирования каждого из независимых путей были созданы тестовые варианты исходных данных. Сами данные (ИД), ожидаемый от них результат (ОЖ. РЕЗ.) и результат, полученный фактически при выполнении программы (Ф. РЕЗ.), приведены в Таблица 5. Тестирование выполняется для справочника «Субъекты».

Таблица 5. Тестовые варианты для метода базового пути

ИД ОЖ. РЕЗ.
Файл Субъекты.txt отсутствует Выброшено исключение FileNotFoundException, которое затем перехвачено в методе Program.Main.
Файл Субъекты.txt не содержит данных Свойство DictionaryParser.Dictionary инициализировано пустым словарем.
Файл Субъекты.txt содержит одну или несколько корректных строк:   Студент (Студента, Студенту, Студентом, Студенте) Студенты (Студентов, Студентам, Студентами, Студентах) Свойство DictionaryParser.Dictionary содержит словарь: СТУДЕНТ -> [0]: "СТУДЕНТ" [1]: "СТУДЕНТА" [2]: "СТУДЕНТУ" [3]: "СТУДЕНТОМ" [4]: "СТУДЕНТЕ" СТУДЕНТЫ -> [0]: "СТУДЕНТЫ" [1]: "СТУДЕНТОВ" [2]: "СТУДЕНТАМ" [3]: "СТУДЕНТАМИ" [4]: "СТУДЕНТАХ"    
Файл Субъекты.txt содержит одну или несколько некорректных строк: Студент Студента, Студенту, Студентом, Студенте)   Примечание: отсутствует символ ‘(‘ Выброшено исключение DictionaryException, которое затем перехвачено в методе Program.Main.

Наши рекомендации