init
This commit is contained in:
94
REPORT.MD
Normal file
94
REPORT.MD
Normal file
@@ -0,0 +1,94 @@
|
||||
# Отчёт по лабораторной работе №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` для проверки.
|
||||
|
||||
Reference in New Issue
Block a user