- •Отчет по курсовой работе
- •Цели и задачи курсовой работы
- •Часть 1. Разработка программы Предметная область
- •Описание алгоритма
- •Описание реализации
- •Часть 2. Тестирование методом «черного ящика» Спецификация программы
- •Ограничения
- •Классы эквивалентности
- •Покрытие тестами классов эквивалентности
- •Часть 3. Тестирование методом «белого ящика». Модульное тестирование Модуль DictionaryParser.Parse() Алгоритм и код
- •Тестирование базового пути
- •Построение потового графа
- •Оценка цикломатической сложности
- •Определение базового множества независимых путей
- •Подготовка тестовых вариантов
- •Тестирование ветвей и операторов отношений
- •Тестирование потоков данных
- •Тестирование циклов
- •Набор модульных тестов.
- •Модуль String.Capitalize() Алгоритм и код
- •Тестирование базового пути
- •Построение потового графа
- •Оценка цикломатической сложности
- •Определение базового множества независимых путей
- •Подготовка тестовых вариантов
- •Тестирование ветвей и операторов отношений
- •Тестирование потоков данных
- •Тестирование циклов
- •Набор модульных тестов
- •Часть 4. Интеграционное тестирование Определение модулей и способа тестирования
- •Набор юнит-тестов
- •Набор интеграционных тестов
- •Часть 5. Регрессионное тестирование Понятие регрессионного тестирования. Основные положения
- •Виды тестов регрессии. Верификационные тесты (Verification Test).
- •Тесты регрессии (Regression Test Pass).
- •Тесты регрессии на "закрытых" багах.
- •Классификация с. Канера
- •Классификация по способу сопровождения
- •Выбор тестов регрессии
- •Автоматизация тестирования
- •Заключение
Часть 3. Тестирование методом «белого ящика». Модульное тестирование Модуль DictionaryParser.Parse() Алгоритм и код
Программный код модуля приведен в листинге 1.
Листинг 1
1 |
public void Parse() |
|
2 |
{ |
|
3 |
using (FileStream stream = new FileStream(_filePath, FileMode.Open, FileAccess.Read)) |
1 |
4 |
{ |
|
5 |
StreamReader reader = new StreamReader(stream); |
2 |
6 |
while (!reader.EndOfStream) |
3 |
7 |
{ |
|
8 |
string line = reader.ReadLine().ToLower(); |
4 |
9 |
int openBracket; |
|
10 |
string initialForm = ""; |
|
11 |
try |
|
12 |
{ |
|
13 |
openBracket = line.IndexOf('('); |
5 |
14 |
if (openBracket == -1) |
6 |
15 |
throw new DictionaryException(_dictionaryType, |
7 |
16 |
DictionaryExceptionReason. НевозможноПроанализироватьВариантыФорм); |
|
17 |
initialForm = string.Concat(line .Where((c, i) => i < openBracket)).Trim().ToUpper(); |
8 |
18 |
} |
|
19 |
catch |
9 |
20 |
{ |
|
21 |
throw new DictionaryException(_dictionaryType, |
|
22 |
DictionaryExceptionReason. НеОбнаруженаНачальнаяФорма); |
|
23 |
} |
|
24 |
Dictionary[initialForm] = new List<string>() {initialForm}; |
10 |
25 |
Dictionary[initialForm].AddRange(line.Substring(openBracket + 1) |
|
26 |
.Split(new string[] {",", ")"}, |
|
27 |
StringSplitOptions. RemoveEmptyEntries) |
|
28 |
.Select(s => s.Trim().ToUpper()) |
|
29 |
.ToList()); |
|
30 |
} |
11 |
31 |
reader.Close(); |
12 |
32 |
} |
13 |
33 |
} |
Блок-схема метода приведена на рисунке ниже (Рисунок 3).
Рисунок 3. Блок-схема модуля DictionaryParser.Parse
Приведенный алгоритм использует язык интегрированных запросов для облегчения чтения и преобразования данных. Все считанные данные хранятся в свойстве Dictionary класса.
Тестирование базового пути
Построение потового графа
Потоковый граф рассматриваемого модуля с указанием регионов и выделенными предикаторными узлами приведен ниже (см. Рисунок 4).
Рисунок 4. Потоковый граф модуля DictionaryParser.Parse
