Файл: Практическая работа 5 по курсу Технологии разработки серверной части вебприложений модуль Unitтестирование.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 06.11.2023
Просмотров: 16
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Таганрог 2023
Министерство науки и высшего образования Российской Федерации
Федеральное государственное автономное образовательное учреждение высшего образования
«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ» (ФГАОУ ВО «ЮФУ»)
Институт компьютерных технологий и информационной безопасности
Практическая работа №5
по курсу «Технологии разработки серверной части веб-приложений» модуль
«Unit-тестирование»
Выполнили студенты группы КТбо3-4
_______________
Н. И. Селевцова
_______________
Г. Ю. Полынников
Принял ассистент кафедры МОП ЭВМ
______________
А. А. Жиглатый
2
СОДЕРЖАНИЕ
ЦЕЛЬ РАБОТЫ ..................................................................................................... 3
1. Постановка задачи ............................................................................................ 5
2. Алгоритм решения поставленной задачи .................................................... 6
3. Тестовый набор .................................................................................................. 6
4. Юнит-тестирование .......................................................................................... 8
5. Баг-репорты ....................................................................................................... 9
ЗАКЛЮЧЕНИЕ ................................................................................................... 12
ЛИСТИНГ ПРОГРАММЫ ............................................................................... 13
3
ЦЕЛЬ РАБОТЫ
Цель работы: научиться применять стратегии при проектировании тестовых наборов для проведения модульного тестирования. Освоить существующие средства автоматизации проведения юнит-тестирования.
Задание
1. Выполнить подбор задачи, решение которой может быть оформлено в виде одной отдельной основной функции, не включающей в себя чтение входных данных и вывод результата. Входные данные не должны исчерпываться одним входным параметром. Выбранную задачу обсудить с преподавателем.
2. Выполнить корректную постановку выбранной задачи, которая должна включать: формулировку условия; описание входных данных с указанием их состава, формата представления и области допустимых значений для каждого элемента входных данных; описание выходных данных с указанием их состава и формата представления; примеры входных и выходных данных; возможные способы обработки входных данных из области недопустимых значений; возможные указания и дополнительные требования к реализации.
3. Выполнить оформление решения поставленной задачи в виде одной отдельной основной функции. Допускается наличие вспомогательных 2 функций, реализующих решение подзадач, возникающих в ходе решения поставленной задачи. Также допускается вызов вспомогательных функций из основной. Однако, ввод входных данных и вывод выходных данных должен быть исключен из основной функции, в том числе и посредством вспомогательных функций. Источником входных данных должен являться файл. Вывод результата также необходимо осуществлять в файл.
4. Разработать тестовый набор для проверки корректности решения поставленной задачи
(основной функции), используя стратегию, позволяющую минимизировать количество тестовых случаев при сохранении
4 максимально возможного тестового покрытия. По возможности оценить величину тестового покрытия для разработанного тестового набора.
5. Используя встроенные в среду разработки средства юнит- тестирования и разработанный тестовый набор, выполнить юнит- тестирование основной функции, реализующей решение поставленной задачи.
При этом необходимо использовать файлы в качестве источника входных и эталонных выходных данных. Не допускается их явное задание в коде проекта юнит-тестирования.
6. При обнаружении дефектов в ходе юнит-тестирования выполнить отладку основной функции и повторное её тестирование.
5
1. Постановка задачи
Даны три целых числа a, b и c, такие, что верно только одно из следующих равенств:
1. a+b=c;
2. a−b=c.
Необходимо реализовать функцию, возвращающую число d, равное номеру выполняемого неравенства.
Входные данные
Допустимыми входными данными является последовательность трех целых чисел a, b, c, при условиях: a, b =
{
−1000 ≤ ????, ???? ≤ 1000
???? ≠ 0
???? + ???? = ???? ИЛИ ???? − ???? = ????
,
−1000 ≤ ???? ≤ 1000
Формат текстового представления: в единственной строке через пробел три числа a, b, c.
Выходные данные
Натуральное число d.
Формат текстового представления: в единственной строке одно число d.
Обработка исключительных ситуаций и данных из области
недопустимых значений
Если входных данных меньше трех, вывести 3. Если больше трех, функция должна работать с первыми тремя введенными данными (при условии, что значения данных допустимы).
Если хотя бы одно входное значение не является целочисленным числом в диапазоне от -1000 до 1000, вывести 255.
Если хотя бы одно входное значение является целочисленным числом, выходящим из диапазона [-1000;1000], вывести 244.
Если входные данные - это три допустимых значения, при которых оба равенства верны или оба ложны, вывести 0.
Примеры входных данных:
6
Входные данные
Выходные данные
1 2 3 1
4 3 1 2
-50 0 -50 0
2. Алгоритм решения поставленной задачи
Решение задачи было реализовано с помощью языка Javascript. Код программы представлен ниже: function sum
(
a
, b
, c
){ if
(
a
===
undefined
||
b
===
undefined
||
c
==
undefined
){ return
3
;
} else if
(
!
Number isInteger
(
a
)
||
!
Number isInteger
(
b
)
||
!
Number isInteger
(
c
)){ return
255
;
} else if
((
a
<-
1000
||
a
>
1000
)
||
(
b
<-
1000
||
b
>
1000
)
||
(
c
<-
1000
||
c
>
1000
)){ return
244
;
} else if
(((
a
+
b
==
c
)
&&
(
a
- b
==
c
))
||
((
a
+
b
!=
c
)
&&
(
a
- b
!=
c
))){ return
0
;
} else if
(
a
+
b
==
c
){ return
1
;
} else if
(
a
- b
==
c
){ return
2
;
} else if
((
typeof a
!==
"number"
)
&&
(
typeof b
!==
"number"
)
&&
(
typeof c
!==
"number"
)){ return
255
;
}
} module exports
=
sum
Листинг 1 – Алгоритм решения
3. Тестовый набор
Для получение минимального количества тестов, имеющих максимальное тестовое покрытие выделим следующие тесты:
1. Позитивные тесты: 2 теста, когда входные данные корректны и d равно 1 или 2.
2. Тесты граничных значений: 6 тестов на границу интервала a, b, c.
3. Негативные тесты: 18 тестов. 1 тест при b=0. 1 тест при а + b ≠ ???? и а −
b ≠ ????. 3 теста на вызов функции с двумя, одним и нулём переменных. 1 тест
7 на вызов функции с избыточным количеством переменных. 3 теста на вызов функции с не числовыми переменными. 3 теста на вызов функции с не целочисленными переменами. 6 тестов на проверку a, b, c на выход за правую и левую границу допустимого интервала.
№ теста
Входные данные Ожидаемый вывод
Что проверяет тест
1 24 4 20 2
Условие выполнения второго равенства
2
-450 -48 -498 1
Условие выполнения первого равенства
3 999 1 998 2
Пограничное условие выполнения второго равенства
4 0 999 -999 2
Пограничное условие выполнения второго равенства
5 999 -999 0 1
Пограничное условие выполнения второго равенства
6
-999 31 -968 1
Пограничное условие выполнения первого равенства
7 244 999 -755 2
Пограничное условие выполнения второго равенства
8
-555 444 -999 2
Пограничное условие выполнения второго равенства
9 89 0 89 0
Условие выполнения первого и второго равенства одновременно
10 12 85 102 0
Условие невыполнения первого и второго равенства одновременно
11 1 2 3
Условие проверки не менее трех переданных значений
12 998 3
Условие проверки не менее трех переданных значений
13
Нет данных
3
Условие проверки не менее трех переданных значений
14 45 -2 43 1001 1
Работа функции при избыточности данных
15
‘six’ 45 578 255
Распознавание недопустимых значений
16
-90 ‘j’ -87 255
Распознавание недопустимых значений
17 1 2 ‘a’
255
Распознавание недопустимых значений
8 18 0,2 98 -8 255
Распознавание недопустимых значений
19
-7 0,34 6 255
Распознавание недопустимых значений
20 8 23 0,987 255
Распознавание недопустимых значений
21 1020 15 9 244
Выход значений за допустимый интервал
22
-9999 89 -94 244
Выход значений за допустимый интервал
23 124 1024 -900 244
Выход значений за допустимый интервал
24 34 -1230 9 244
Выход значений за допустимый интервал
25 900 101 1001 244
Выход значений за допустимый интервал
26
-100 -804 -1004 244
Выход значений за допустимый интервал
4. Юнит-тестирование
Для проведения автоматизированного юнит-тестирования была использована библиотека Jest. Тесты описаны в файле sum.test.js в виде одного метода, в котором прописаны множество тест-кейсов. Результаты выполнения тестов можно увидеть на скриншоте ниже:
Рисунок 1 – Результаты тестирования
До выполнения всех тестов были найдены некоторые ошибки в ходе выполнения тестов, которые были расписаны и исправлены в следующем разделе.
9
5. Баг-репорты и исправление дефектов
Дефект №1
Название дефекта
Не обработан тест с условиями а + b ≠ ???? и а − b ≠ ????
Приоритет дефекта Высокий
Серьезность дефекта
Критический
Версия системы
ОС Windows 10, NodeJS v18.14.0
Инструкция по воспроизведению
Входные данные: 12 85 102
Фактический результат undefined
Ожидаемый результат
0
Вид, тип, область тестирования
Функциональное, модульное тестирование
Вложения
После обнаружения код был изменен следующим образом:
Рисунок 2 – Исправление дефекта №1 (выделено серым)
Дефект №2
Название дефекта
Неправильная обработка некорректных данных
Приоритет дефекта Высокий
Серьезность дефекта
Критический
Версия системы
ОС Windows 10, NodeJS v18.14.0
Инструкция по воспроизведению
Входные данные: 0.2 98 -8
10
Фактический результат undefined
Ожидаемый результат
0
Вид, тип, область тестирования
Функциональное, модульное тестирование
Вложения
Дефект №3
Название дефекта
Неправильная обработка некорректных данных
Приоритет дефекта Высокий
Серьезность дефекта
Критический
Версия системы
ОС Windows 10, NodeJS v18.14.0
Инструкция по воспроизведению
Входные данные: ‘six’ 45 578
Фактический результат
0
Ожидаемый результат
255
Вид, тип, область тестирования
Функциональное, модульное тестирование
Вложения
Дефекты №2 и №3 были исправлены с помощью кода на рисунке 3.
11
Рисунок 3 – Исправление дефектов №2 и №3
12
ЗАКЛЮЧЕНИЕ
При выполнении лабораторной работы были получены навыки в базовом юнит-тестировании, подборе тест кейсов и анализе покрытия тестов.
Была разработана корректно работающая программа, решающая поставленную задачу, а также были использованы средства автоматизации языка JavaScript (Jest).
13
ЛИСТИНГ ПРОГРАММЫ
Файл sum.test.js
const sum
=
require
(
'./sum'
); test
(
'тесты'
, ()
=>
{ expect
(
sum
(
24
,
4
,
20
)).
toBe
(
2
); expect
(
sum
(
-
450
,
-
48
,
-
498
)).
toBe
(
1
); expect
(
sum
(
999
,
1
,
998
)).
toBe
(
2
); expect
(
sum
(
0
,
999
,
-
999
)).
toBe
(
2
); expect
(
sum
(
999
,
-
999
,
0
)).
toBe
(
1
); expect
(
sum
(
-
999
,
31
,
-
968
)).
toBe
(
1
); expect
(
sum
(
244
,
999
,
-
755
)).
toBe
(
2
); expect
(
sum
(
-
555
,
444
,
-
999
)).
toBe
(
2
); expect
(
sum
(
89
,
0
,
89
)).
toBe
(
0
); expect
(
sum
(
12
,
85
,
102
)).
toBe
(
0
); expect
(
sum
(
1
,
2
)).
toBe
(
3
); expect
(
sum
(
998
)).
toBe
(
3
); expect
(
sum
()).
toBe
(
3
); expect
(
sum
(
45
,
-
2
,
43
,
1001
)).
toBe
(
1
); expect
(
sum
(
'six'
,
45
,
578
)).
toBe
(
255
); expect
(
sum
(
-
90
,
'j'
,
-
87
)).
toBe
(
255
); expect
(
sum
(
1
,
2
,
'a'
)).
toBe
(
255
); expect
(
sum
(
0.2
,
98
,
-
8
)).
toBe
(
255
); expect
(
sum
(
-
7
,
0.34
,
6
)).
toBe
(
255
); expect
(
sum
(
8
,
23
,
0.987
)).
toBe
(
255
); expect
(
sum
(
1020
,
15
,
9
)).
toBe
(
244
); expect
(
sum
(
-
9999
,
89
,
-
94
)).
toBe
(
244
); expect
(
sum
(
124
,
1024
,
-
900
)).
toBe
(
244
); expect
(
sum
(
34
,
-
1230
,
9
)).
toBe
(
244
); expect
(
sum
(
900
,
101
,
1001
)).
toBe
(
244
); expect
(
sum
(
-
100
,
-
804
,
-
1004
)).
toBe
(
244
);
});