Провести интеграционное тестирование программы, осуществляющей вычисление системы функций (в соответствии с вариантом).
x <= 0 : (((((tan(x) * cos(x)) + (cot(x) + sec(x))) + csc(x)) * csc(x)) + sec(x))
x > 0 : (((((log_10(x) - log_10(x)) * (log_2(x) - log_3(x))) * ((log_3(x) - log_5(x)) / log_10(x))) ^ 3) + ((ln(x) * log_10(x)) / log_2(x)))
Правила выполнения работы:
- Все составляющие систему функции (как тригонометрические, так и логарифмические) должны быть выражены через базовые (тригонометрическая зависит от варианта; логарифмическая - натуральный логарифм).
- Структура приложения, тестируемого в рамках лабораторной работы, должна выглядеть следующим образом (пример приведён для базовой тригонометрической функции sin(x)):
.png)
- Обе "базовые" функции (в примере выше -
sin(x)иln(x)) должны быть реализованы при помощи разложения в ряд с задаваемой погрешностью. Использовать тригонометрические / логарифмические преобразования для упрощения функций ЗАПРЕЩЕНО. - Для КАЖДОГО модуля должны быть реализованы табличные заглушки. При этом, необходимо найти область допустимых значений функций, и, при необходимости, определить взаимозависимые точки в модулях.
- Разработанное приложение должно позволять выводить значения, выдаваемое любым модулем системы, в сsv файл вида «X, Результаты модуля (X)», позволяющее произвольно менять шаг наращивания Х. Разделитель в файле csv можно использовать произвольный.
Порядок выполнения работы:
- Разработать приложение, руководствуясь приведёнными выше правилами.
- С помощью JUNIT4 разработать тестовое покрытие системы функций, проведя анализ эквивалентности и учитывая особенности системы функций. Для анализа особенностей системы функций и составляющих ее частей можно использовать сайт https://www.wolframalpha.com/.
- Собрать приложение, состоящее из заглушек. Провести интеграцию приложения по 1 модулю, с обоснованием стратегии интеграции, проведением интеграционных тестов и контролем тестового покрытия системы функций.
Дальше идут дополнительные задания от препода (@Kyoto67) - Демонстрировать работу частичных заглушек с использованием шпионов на
Mockito. - Реализовать проверку тестового покрытия.
Отчёт по работе должен содержать:
- Текст задания, систему функций.
- UML-диаграмму классов разработанного приложения.
- Описание тестового покрытия с обоснованием его выбора.
- Графики, построенные csv-выгрузкам, полученным в процессе интеграции приложения.
- Выводы по работе.
Вопросы к защите лабораторной работы:
- Цели и задачи интеграционного тестирования. Расположение фазы интеграционного тестирования в последовательности тестов; предшествующие и последующие виды тестирования ПО.
- Алгоритм интеграционного тестирования.
- Концепции и подходы, используемые при реализации интеграционного тестирования.
- Программные продукты, используемые для реализации интеграционного тестирования. Использование JUnit для интеграционных тестов.
- Автоматизация интеграционных тестов. ПО, используемое для автоматизации интеграционного тестирования.
| .pdf (Light) | .pdf (Dark) | .pdf (AMOLED) |
|---|---|---|
| Тык | Тык | Тык |
Тригонометрические функции:
| Класс | Зависимости | Формула |
|---|---|---|
| cos(x) | — | |
| sec(x) | cos(x) |
|
| csc(x) | sec(x) |
|
| tg(x) | sec(x) |
|
| ctg(x) | csc(x) |
Логарифмические функции:
| Класс | Зависимости | Формула |
|---|---|---|
| ln(x) | — | |
| logₐ(x) | ln(x) |
Important
Замечания:
- Я попытался реализовать функцию без использования синуса. Если вас интересует реализация с этой функцией, то загляните в репу Макса Барсукова. Там принцип реализации такой же, как и мой.
- В связи с первым пунктом я много страдал с проблемой погрешности (судя по довольно нестандартным формулам). Я рекомендую не страдать хернёй и оставить реализацию как можно проще, так как дисциплина ориентирована на деятельности, связанные с тестированием, а не с вычислительной математикой.
- Также реализовано создание графиков функции с помощью использования JFreeChart. Такого требования нигде не указано (но графики должны рисовать), поэтому рекомендую использовать
matplotlibизPython. Пример реализации у моего препода. - У меня в интеграционных тестах также проверяется корректность значении самих функции. Такая практика строго не рекомендуется, так как этим по сути занимается не интеграционные тесты, а модульные.
