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

95 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Отчёт по лабораторной работе №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` для проверки.