Files
tpo-2/REPORT.MD
SlavaVlad 08fdceb875 Допилил stubs
Улучшил отчёт, добавил скрины
2026-04-24 12:59:27 +03:00

79 KiB
Raw Permalink Blame History

Отчёт по лабораторной работе №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)

<?plantuml 1.2026.2?>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<?plantuml-src bLJBJiCm4BptArQSG3G8hXNq0a922X9IaJYxPXii73lARdW8yUzid3gDcnJ1gTdPzNXcQhjI-bKL24URncastfsj5U4HVCq0Z6EiDqeZtAsC2n30AHbt_B606z-iBSu1Aue5NC45PXVd9n6G1TyfJzxJsF-oQAk8G8Gyga_hQp1bPR54nnJazHFvr43kPj-pMJKooxKflFCboeVkN7SirvuI0gbtFT9fZ_HE7wOzgGUSlCV9qcjtoh9bDD6I3ygMRzWLYhwST6HzeMh3BsNg9_T56eWlfDUYWUvGFiJDceOyikzAi5_I7xLpDqnrrDvBTjnFqntldYOymS_35CRo90dntWtSReslFecn3BupEV1tCh-8HZCRw-0iqvwsTMSbqwGZ4BHdX17enCeIxfTmeFH5v0n_pAdsPTKm_lcEY8CzxVqncSBpQRWrC8cBZqbwr0TuU7fRCRSxPGqRczmvUdkIeujrV2FUs-hH2twyCHQTAd41AxcghfZ3isArWDmGNpueKrzkO-f-biivMBL66-TFmYiYATqhUSfQCQc-7Twh-040?>

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

  • Dependency Injection через конструкторы (FunctionSystem принимает все impl).
  • Taylor series строго в SinTaylor и LnTaylor (без библиотечных trig/log).
  • Stubs теперь полностью табличные (Map<Double, Double> с 810 ключевыми точками ОДЗ, поиск ближайшей + линейная интерполяция/экстраполяция). Реализованы в 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 И наши точки это вывод программы: Снимок экрана_20260424_125552.png
  • Особые точки обработаны (исключения, NaN на x=1).

9. Выводы

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