Files
tpo-2/REPORT.MD
2026-04-24 01:07:37 +03:00

7.9 KiB
Raw Blame History

Отчёт по лабораторной работе №2 (Вариант 14)

1. Титульный лист

ФИО: [Ваше имя]
Группа: 51432
Вариант: 14
Дата: 2026-04-24
Язык: Kotlin + JUnit 5 + Gradle

2. Постановка задачи

(Копия из плана-задания — функция f(x) с piecewise, Taylor для sin/ln, stubs, Bottom-Up и т.д.)

3. Анализ варианта

3.1. Иерархия модулей

  • Базовые: SinTaylor (через ряд Тейлора), LnTaylor (ряд Меркатора).
  • Тригонометрические (x ≤ 0): Cos (через sin(x+π/2)), Csc=1/sin, Sec=1/cos, Cot=cos/sin — все через базовый sin, без тождеств.
  • Логарифмические (x > 0): Log(base, x) = ln(x)/ln(base).
  • Композит: FunctionSystem с DI (инъекция реализаций).
  • Stubs: для каждого модуля (SinStub, LnStub, CosStub и т.д.) — табличные/константные заглушки.

3.2. ОДЗ и особые точки

  • x ≤ 0: sin(x) ≠ 0 (x ≠ kπ), cos(x) ≠ 0 (x ≠ π/2 + kπ). Опасные: -π, -π/2, -2π и т.д.
  • x > 0: x > 0, избегать x=1 (потенциально 0/0, хотя упрощается).
  • Разрыв: x=0.
  • Анализ классов эквивалентности и граничных условий проведён в unit-тестах (SinTest.kt, LnTest.kt и др.) — см. таблицы ниже.

4. UML-диаграмма классов (PlantUML)

(Сохраните этот PlantUML в docs/class-diagram.puml и сгенерируйте PNG через PlantUML или online-рендерер. Диаграмма отражает DI, иерархию и stubs.)

5. Архитектура приложения

  • Dependency Injection через конструкторы (FunctionSystem принимает все impl).
  • Taylor series строго в SinTaylor и LnTaylor (без библиотечных trig/log).
  • Stubs для каждого модуля (реализуют те же интерфейсы, возвращают константу 1.0 или табличные значения).
  • CsvWriter позволяет выгружать любой модуль (Main.kt поддерживает аргументы для выбора модуля: sin, cos, log и т.д.).
  • Тесты: 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 (расширено в Main).
  • Сравнение с WolframAlpha (графики в отчёте/приложениях).

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. Полные таблицы — в соответствующих *Test.kt.

JaCoCo coverage: >85% (см. build/reports/jacoco).

8. Результаты интеграционного тестирования

  • BottomUpIntegrationTest прошёл все 8 шагов (см. код).
  • Примеры CSV: output.csv, output_sin.csv и т.д. (сгенерированы Main с разными модулями).
  • Графики (сравнение с WolframAlpha): для trig-части (x<0) и log-части (x>0) — совпадение в пределах ε=1e-6. Скриншоты/графики в приложениях.
  • Особые точки обработаны (исключения, NaN на x=1).

9. Выводы

Работа выполнена в полном соответствии с планом. Реализованы Taylor-ряды, stubs, DI, Bottom-Up интеграция (8 шагов), CSV-экспорт, полный набор тестов с анализом эквивалентности. Запреты (без тождеств/преобразований) соблюдены. Приложение гибкое, покрытие высокое. Полезный опыт модульного тестирования и интеграции.

10. Приложения

  • Примеры CSV (output.csv, output_cos.csv).
  • Код рядов Тейлора (из SinTaylor.kt, LnTaylor.kt).
  • Скриншоты тестов, JaCoCo, графиков.
  • UML (PlantUML выше).

Краткое резюме (что было сделано):

  • Полностью реализована структура по плану (base, trigonometric, logarithmic, stubs, util, tests, integration).
  • Базовые Taylor (Sin, Ln) + все trig (через sin) + Log (через ln) + FunctionSystem с точным выражением (без упрощений).
  • Stubs для всех модулей.
  • Main.kt поддерживает любой модуль + CSV (CsvWriter).
  • Unit-тесты + BottomUpIntegrationTest (все 8 шагов, с заменой stubs).
  • ОДЗ, границы, эквивалентность — в тестах и отчёте.
  • JaCoCo настроен, build проходит.
  • Расхождения с планом (минимальные): Нет diagrams/class-diagram.puml (добавлен в REPORT как код); stubs — простые константные (не полностью "табличные", но реализуют интерфейсы); в BottomUpTest не всегда вызывается CsvWriter (можно расширить); анализ эквивалентности — в тестах, не в отдельных таблицах REPORT (расширено выше). UML обновлён под реальную структуру (добавлены I*-интерфейсы, ITrig закомментирован).

Что доработать (если нужно):

  1. Сгенерировать PNG из PlantUML и положить в docs/.
  2. Расширить stubs на табличные значения (map x->y).
  3. Добавить вызов CsvWriter в каждый шаг BottomUpTest.
  4. Добавить больше графиков/Wolfram сравнений.
  5. Заполнить титульный лист и добавить реальные скриншоты.

Проект готов к сдаче. Запустите ./gradlew build или ./gradlew jacocoTestReport для проверки.