Файл: Практическая работа 6 по курсу Технологии разработки серверной части вебприложений модуль Unitтестирование.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 06.11.2023
Просмотров: 151
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Министерство науки и высшего образования Российской ФедерацииФедеральное государственное автономное образовательноеучреждение высшего образования«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ» (ФГАОУ ВО «ЮФУ»)Институт компьютерных технологий и информационной безопасностиПрактическая работа №6по курсу «Технологии разработки серверной части веб-приложений» модуль «Unit-тестирование»Выполнилистуденты группы КТбо3-4 _______________ Н. И. Селевцова_______________ Г. Ю. ПолынниковПринялассистент кафедры МОП ЭВМ А. А. Жиглатый
ЦЕЛЬ РАБОТЫ 3
ЗАКЛЮЧЕНИЕ 12
ЛИСТИНГ ПРОГРАММЫ 13
4. Разработать тестовый набор для проверки корректности решения поставленной задачи (основной функции), используя стратегию, позволяющую минимизировать количество тестовых случаев при сохранении максимально возможного тестового покрытия. По возможности оценить величину тестового покрытия для разработанного тестового набора. 5. Используя встроенные в среду разработки средства юнит-тестирования и разработанный тестовый набор, выполнить юнит-тестирование основной функции, реализующей решение поставленной задачи. При этом необходимо использовать файлы в качестве источника входных и эталонных выходных данных. Не допускается их явное задание в коде проекта юнит-тестирования. 6. При обнаружении дефектов в ходе юнит-тестирования выполнить отладку основной функции и повторное её тестирование.
После обнаружения код был изменен следующим образом:Рисунок 2 – Исправление дефекта №1 (выделено серым)Дефект №2
Дефект №3
Дефекты №2 и №3 были исправлены с помощью кода на рисунке 3.Рисунок 3 – Исправление дефектов №2 и №3function 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;}}module.exports = sumЛистинг 2 – Исправленный кодРисунок 3 – Успешное прохождение всех тестов
СОДЕРЖАНИЕ
ЦЕЛЬ РАБОТЫ 3
ЗАКЛЮЧЕНИЕ 12
ЛИСТИНГ ПРОГРАММЫ 13
ЦЕЛЬ РАБОТЫ
Цель работы: научиться применять стратегии при проектировании тестовых наборов для проведения модульного тестирования. Освоить существующие средства автоматизации проведения юнит-тестирования.Задание1. Выполнить подбор задачи, решение которой может быть оформлено в виде одной отдельной основной функции, не включающей в себя чтение входных данных и вывод результата. Входные данные не должны исчерпываться одним входным параметром. Выбранную задачу обсудить с преподавателем. 2. Выполнить корректную постановку выбранной задачи, которая должна включать: формулировку условия; описание входных данных с указанием их состава, формата представления и области допустимых значений для каждого элемента входных данных; описание выходных данных с указанием их состава и формата представления; примеры входных и выходных данных; возможные способы обработки входных данных из области недопустимых значений; возможные указания и дополнительные требования к реализации. 3. Выполнить оформление решения поставленной задачи в виде одной отдельной основной функции. Допускается наличие вспомогательных 2 функций, реализующих решение подзадач, возникающих в ходе решения поставленной задачи. Также допускается вызов вспомогательных функций из основной. Однако, ввод входных данных и вывод выходных данных должен быть исключен из основной функции, в том числе и посредством вспомогательных функций. Источником входных данных должен являться файл. Вывод результата также необходимо осуществлять в файл.4. Разработать тестовый набор для проверки корректности решения поставленной задачи (основной функции), используя стратегию, позволяющую минимизировать количество тестовых случаев при сохранении максимально возможного тестового покрытия. По возможности оценить величину тестового покрытия для разработанного тестового набора. 5. Используя встроенные в среду разработки средства юнит-тестирования и разработанный тестовый набор, выполнить юнит-тестирование основной функции, реализующей решение поставленной задачи. При этом необходимо использовать файлы в качестве источника входных и эталонных выходных данных. Не допускается их явное задание в коде проекта юнит-тестирования. 6. При обнаружении дефектов в ходе юнит-тестирования выполнить отладку основной функции и повторное её тестирование.
1. Постановка задачи
Даны три целых числа a, b и c, такие, что верно только одно из следующих равенств:1. a+b=c;2. a−b=c.Необходимо реализовать функцию, возвращающую число d, равное номеру выполняемого неравенства.Входные данныеДопустимыми входными данными является три целых числа a, b, c, при условиях:a, b = , Формат текстового представления: в единственной строке через пробел три числа a, b, c.Выходные данныеЦелое число d.Формат текстового представления: в единственной строке одно число d.Обработка исключительных ситуаций и данных из области недопустимых значенийЕсли входных параметров меньше трех, вывести 3. Если больше трех, функция должна работать с первыми тремя введенными параметрами (при условии, что значения данных допустимы).Если хотя бы одно входное значение не является целочисленным числом в диапазоне от -1000 до 1000, вывести 255.Если хотя бы одно входное значение является целочисленным числом, выходящим из диапазона [-1000;1000], вывести 244.Если входные данные - это три допустимых значения, при которых оба равенства верны или оба ложны, вывести 0.Примеры входных данных:| Входные данные | Выходные данные |
| 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((a<-1000 || a>1000) || (b<-1000 || b>1000) || (c<-1000 || c>1000)){ return 244; } else if (((a+b==c) && (a-b==c))){ return 0; } else if (a+b==c){ return 1; } else if (a-b==c){ return 2;}}module.exports = sumЛистинг 1 – Алгоритм неполного решения3. Тестовый набор
Для получение минимального количества тестов, имеющих максимальное тестовое покрытие выделим следующие тесты:1. Позитивные тесты: 2 теста, когда входные данные корректны и d равно 1 или 2.2. Тесты граничных значений: 6 тестов на границу интервала a, b, c.3. Негативные тесты: 18 тестов. 1 тест при b=0. 1 тест при 3 теста на вызов функции с двумя, одним и нулём переменных. 1 тест на вызов функции с избыточным количеством переменных. 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 | Распознавание недопустимых значений |
| 18 | 0,2 98 -8 | 255 | Распознавание недопустимых значений |
| 19 | -7 0,34 6 | 255 | Распознавание недопустимых значений |
| 20 | 8 23 0,987 | 255 | Распознавание недопустимых значений |
| 21 | 1001 15 9 | 244 | Выход значений за допустимый интервал |
| 22 | -1001 89 -94 | 244 | Выход значений за допустимый интервал |
| 23 | 124 1001 -900 | 244 | Выход значений за допустимый интервал |
| 24 | 34 -1001 9 | 244 | Выход значений за допустимый интервал |
| 25 | 900 101 1001 | 244 | Выход значений за допустимый интервал |
| 26 | -100 -804 -1001 | 244 | Выход значений за допустимый интервал |
4. Юнит-тестирование
Для проведения автоматизированного юнит-тестирования была использована библиотека Jest. Тесты описаны в файле sum.test.js в виде одного метода, в котором прописаны множество тест-кейсов. Результаты выполнения тестов можно увидеть на скриншоте ниже:Рисунок 1 – Результаты тестированияВо время выполнения тестов были найдены некоторые ошибки, которые были расписаны и исправлены в следующем разделе.5. Баг-репорты и исправление дефектов
Дефект №1| Название дефекта | Некорректная обработка случая, когда оба равенства не выполняются |
| Приоритет дефекта | Высокий |
| Серьезность дефекта | Критический |
| Версия системы | ОС Windows 10, NodeJS v18.14.0 |
| Инструкция по воспроизведению | Входные данные: 12 85 102 |
| Фактический результат | undefined |
| Ожидаемый результат | 0 |
| Вид, тип, область тестирования | Функциональное, модульное тестирование |
| Вложения | |
| Название дефекта | Некорректная обработка случая, когда первый параметр – вещественное число |
| Приоритет дефекта | Высокий |
| Серьезность дефекта | Критический |
| Версия системы | ОС Windows 10, NodeJS v18.14.0 |
| Инструкция по воспроизведению | Входные данные: 0.2 98 -8 |
| Фактический результат | 0 |
| Ожидаемый результат | 255 |
| Вид, тип, область тестирования | Функциональное, модульное тестирование |
| Вложения | |
Дефект №3
| Название дефекта | Некорректная обработка случая, когда первый параметр – строка |
| Приоритет дефекта | Высокий |
| Серьезность дефекта | Критический |
| Версия системы | ОС Windows 10, NodeJS v18.14.0 |
| Инструкция по воспроизведению | Входные данные: ‘six’ 45 578 |
| Фактический результат | 0 |
| Ожидаемый результат | 255 |
| Вид, тип, область тестирования | Функциональное, модульное тестирование |
| Вложения | |