# Отчёт по лабораторной работе №2 по Тестированию ПО ## 1. Титульник **ФИО:** Владимиров Владислав Александрович **Группа:** P3322 **Вариант:** 51432 **Язык:** Kotlin + JUnit 5 + Gradle 2026г. ## 2. Постановка задачи Провести интеграционное тестирование программы, осуществляющей вычисление системы функций (в соответствии с вариантом).\ x <= 0 : ((((sin(x) + csc(x)) ^ 2) / csc(x)) / ((sec(x) ^ 3) + ((cos(x) ^ 2) * (sin(x) + cot(x)))))\ x > 0 : (((((log_10(x) / log_5(x)) * log_10(x)) * log_10(x)) * log_3(x)) * (((log_2(x) / log_2(x)) ^ 3) - ((log_3(x) * ln(x)) + (log_5(x) - log_5(x))))) Правила выполнения работы: - Все составляющие систему функции (как тригонометрические, так и логарифмические) должны быть выражены через базовые (тригонометрическая зависит от варианта; логарифмическая - натуральный логарифм). - Структура приложения, тестируемого в рамках лабораторной работы, должна выглядеть следующим образом (пример приведён для базовой тригонометрической функции sin(x)): - Обе "базовые" функции (в примере выше - sin(x) и ln(x)) должны быть реализованы при помощи разложения в ряд с задаваемой погрешностью. Использовать тригонометрические / логарифмические преобразования для упрощения функций ЗАПРЕЩЕНО. - Для КАЖДОГО модуля должны быть реализованы табличные заглушки. При этом, необходимо найти область допустимых значений функций, и, при необходимости, определить взаимозависимые точки в модулях. - Разработанное приложение должно позволять выводить значения, выдаваемое любым модулем системы, в сsv файл вида «X, Результаты модуля (X)», позволяющее произвольно менять шаг наращивания Х. Разделитель в файле csv можно использовать произвольный. Порядок выполнения работы: - Разработать приложение, руководствуясь приведёнными выше правилами. - С помощью JUNIT5 разработать тестовое покрытие системы функций, проведя анализ эквивалентности и учитывая особенности системы функций. Для анализа особенностей системы функций и составляющих ее частей можно использовать сайт https://www.wolframalpha.com/. - Собрать приложение, состоящее из заглушек. Провести интеграцию приложения по 1 модулю, с обоснованием стратегии интеграции, проведением интеграционных тестов и контролем тестового покрытия системы функций. ## 3. Анализ варианта ### 3.1. Иерархия модулей - Базовые: SinTaylor (через ряд Тейлора), LnTaylor (ряд Меркатора). - Тригонометрические (x ≤ 0): Cos (через sin(x+π/2)), Csc=1/sin, Sec=1/cos, Cot=cos/sin. - Логарифмические (x > 0): Log(base, x) = ln(x)/ln(base). - Композит: FunctionSystem. - Stubs: для каждого модуля (SinStub, LnStub, CosStub и т.д.) — табличные заглушки через статическую мапу. ### 3.2. ОДЗ и особые точки - **Sin, Cos**: определены для всех x (периодические). - **Csc, Cot**: x ≠ kπ (исключение ArithmeticException). - **Sec**: x ≠ π/2 + kπ (исключение). - **Ln, Log**: x > 0, base > 0 и base ≠ 1 (IllegalArgumentException). - Взаимозависимые точки: 0, ±π/2, ±π, 1, e, 10 (использованы в таблицах stubs). ## 4. UML-диаграмма классов (PlantUML) functionbasetrigonometriclogarithmicstubsutilISinsin(x: Double, eps: Double = 1e-10): DoubleILnln(x: Double, eps: Double = 1e-10): DoubleSinTaylorLnTaylorCosICosCscICscSecISecCotICotLogILogSinStubISinLnStubILnCosStubICosCscStubICscSecStubISecCotStubICotLogStubILogCsvWriterwriteToCsv(filename: String, data: List<Pair<Double,Double>>, label: String)FunctionSystemsinImpl: ISinlnImpl: ILncosImpl: ICoscscImpl: ICscsecImpl: ISeccotImpl: ICotlogImpl: ILogcompute(x: Double, eps: Double = 1e-10): DoubleISinILnICosICscISecICotILogMain ## 5. Архитектура приложения - **Dependency Injection** через конструкторы (FunctionSystem принимает все impl). - **Taylor series** строго в SinTaylor и LnTaylor (без библиотечных trig/log). - **Stubs** теперь полностью табличные (Map с 8–10 ключевыми точками ОДЗ, поиск ближайшей + линейная интерполяция/экстраполяция). Реализованы в `function.stubs.*Stub.kt` (SinStub, CosStub, CscStub, SecStub, CotStub, LnStub, LogStub). ОДЗ и исключения добавлены где необходимо. - **CsvWriter** позволяет выгружать любой модуль. - Тесты: unit для каждого, интеграционные Bottom-Up. ## 6. Обоснование стратегии интеграции Bottom-Up Bottom-Up выбран как указано в плане: начинаем с базовых (Ln, Sin), постепенно заменяем stubs на реальные реализации (Cos+Sin, Csc+Sin, Sec+Cos/Sin, Cot+Sin/Cos, Log+Ln, наконец FunctionSystem). Это позволяет изолированно тестировать каждый слой, выявлять ошибки на ранних этапах. 8 шагов реализованы в `BottomUpIntegrationTest.kt` (каждый тест — шаг интеграции, использует mix реальных + stub). На каждом шаге: - Запуск теста. - Генерация CSV через CsvWriter. - Сравнение с Desmos. ## 7. Тестовое покрытие и анализ - **Unit-тесты**: SinTest, LnTest, CosTest, CscTest, SecTest, CotTest, LogTest, FunctionSystemTest — покрывают классы эквивалентности (нормальные значения, границы ОДЗ, исключения при sin=0/cos=0, x<=0 для ln и т.д.).\ **Пример таблицы классов эквивалентности (для Sin)**: | Класс эквивалентности | Тест-кейсы | Ожидаемый результат | |------------------------|------------|---------------------| | x в (-π,0) excl. multiples of π | x=-0.5, eps=1e-10 | ~ -0.4794 | | Граница (x ~ -π) | x=-3.14 | Исключение или близко к 0 | | x=0 (запрещено) | x=0 | ArithmeticException | | Большой | x=-10.0 | Сходимость ряда | Аналогично для Ln (x>0, x~1, x>1), trig и log. Покрытие составляет 100% для функций. Подтверждается в (build/reports/jacoco/test/html/index.html) ## 8. Результаты интеграционного тестирования - BottomUpIntegrationTest прошёл все 8 шагов. - Примеры CSV: `output.csv`, `output_sin.csv` и т.д. (сгенерированы Main с разными модулями). - Графики (сравнение с Desmos): для trig-части (x<0) и log-части (x>0) — совпадение в пределах ε=1e-6. ![image_2026-04-24_12-47-01.png](docs/image_2026-04-24_12-47-01.png) И наши точки это вывод программы: ![Снимок экрана_20260424_125552.png](docs/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA%20%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0_20260424_125552.png) - Особые точки обработаны (исключения, NaN на x=1). ## 9. Выводы Работа выполнена в полном соответствии с планом. Реализованы Taylor-ряды, stubs, DI, Bottom-Up интеграция (8 шагов), CSV-экспорт, полный набор тестов с анализом эквивалентности.