Составьте план тестирования модуля вычисления маршрутов (unit, integration, system, edge cases) и предложите метрики качества тестирования

25 Ноя 2025 в 11:36
15 +1
0
Ответы
1
План тестирования модуля вычисления маршрутов (с пояснениями, коротко).
Unit tests (цель — проверка отдельных функций)
- Граф и структура данных:
- создание/удаление узла/ребра; ожидание целостности.
- тест на пустой граф, один узел, изолированные компоненты.
- Алгоритмы поиска (Dijkstra, A*, Bellman‑Ford и т.п.):
- простой граф 3–5 узлов, проверка корректного пути и стоимости.
- граф с несколькими оптимальными путями → проверка допустимого выбора/детерминизма.
- отрицательные веса (если поддерживаются) и детекция невозможности (если не поддерживаются).
- восстановление пути (path reconstruction) при разных предках.
- Оценочные функции (heuristics) для A*:
- эвристика допустима (admissible) и согласована (consistent) на контролируемых примерах.
- Вычисление стоимости маршрута:
- штрафы за трафик, тип дороги, время суток; агрегирование весов.
- Валидация входных данных и ошибки:
- некорректные координаты, совпадающие точки, нулевые/бесконечные веса.
- Кэш и мемоизация:
- попадание/промах, инвалидирование кэша при обновлениях.
- Граничные арифметические случаи:
- переполнение, точность плавающей запятой, сравнение с эпсилон.
Integration tests (цель — взаимодействие подсистем)
- Парсер карт + граф:
- корректная трансформация OSM/GeoJSON → внутренний граф.
- Данные трафика + алгоритм:
- при изменении трафика веса ребер обновляются и маршруты меняются ожидаемо.
- Геокодер/регистр координат + поиск ближайших узлов (snap-to-road):
- близлежащие точки, точки вне карты → fallback.
- БД/репозитории + модуль:
- чтение/запись маршрутов, кэширование, согласованность при рестарте.
- Сервис маршрутизации + API слой:
- форматы запросов/ответов, обработка параллельных запросов, таймауты.
- Тесты на транзакции и откатом данных при ошибках.
System / End‑to‑end тесты (цель — поведение системы в целом)
- Пользовательский сценарий: запрос маршрута (точка A → B) → получение ответа, визуальная/логическая верификация.
- Нагрузочное тестирование:
- пиковая нагрузка, длительная стресс‑нагрузка.
- Скейлинг:
- добавление узлов/реплик сервисов, проверка SLA.
- Резилиентность:
- отказ компонента (БД, кеш, провайдер трафика) → корректные fallback‑поведения.
- Multi‑modal и временные зависимости:
- пересадки, расписания, временно-зависимые ребра.
- Регрессии при обновлении карты/алгоритма:
- контроль качества ключевых сценариев после релиза.
- Тесты на согласованность версий карт и индексов.
Edge cases (особое внимание, минимальный набор)
- Геометрические крайности:
- точки на полюсе, международной линии перемены дат (±180°), совпадающие координаты.
- Нулевые/бесконечные/очень большие веса:
- деление на ноль, overflow.
- Графы с петлями и многократными ребрами.
- Очень длинные/очень короткие маршруты (миллионы узлов / 1 ребро).
- Отсутствие пути (disconnected graph).
- Точки на границе карты/вне покрытия.
- Конкурентный доступ: race conditions при обновлении путей.
- Погрешности FP: сравнение расстояний с эпсилон.
- Таймозависимые ребра: переход через границу времени (ночь/день).
Метрики качества тестирования (формулы и рекомендуемые пороги)
- Покрытие тестами:
- statement coverage: Coveragestmt=executed statementstotal statements\text{Coverage}_{stmt} = \frac{\text{executed statements}}{\text{total statements}}Coveragestmt =total statementsexecuted statements (цель ≥80%\ge 80\%≥80%).
- branch coverage: Coveragebranch\text{Coverage}_{branch}Coveragebranch (цель ≥70%\ge 70\%≥70%).
- Проходимость тестов:
- pass rate: PassRate=passed teststotal tests\text{PassRate} = \frac{\text{passed tests}}{\text{total tests}}PassRate=total testspassed tests .
- Регрессии:
- количество регрессионных багов на релиз.
- Производительность:
- латентность (мс) — процентные перцентили: p50, p90, p95, p99\mathrm{p}_{50},\ \mathrm{p}_{90},\ \mathrm{p}_{95},\ \mathrm{p}_{99}p50 , p90 , p95 , p99 .
- пример целевых значений: p95≤300 ms, p99≤1000 ms\mathrm{p}_{95} \le 300\ \text{ms},\ \mathrm{p}_{99} \le 1000\ \text{ms}p95 ≤300 ms, p99 ≤1000 ms.
-吞吐имость (throughput): запросов в секунду RPS\text{RPS}RPS.
- Достоверность маршрута:
- средний растяг (stretch): Stretch=calculated_costoptimal_cost\text{Stretch} = \frac{\text{calculated\_cost}}{\text{optimal\_cost}}Stretch=optimal_costcalculated_cost (целевой порог ≤1.05\le 1.05≤1.05).
- процент корректных/ожидаемых маршрутов: correcttotal\frac{\text{correct}}{\text{total}}totalcorrect .
- Надёжность/Доступность:
- SLA availability: Availability≥99.9%\text{Availability} \ge 99.9\%Availability≥99.9%.
- Ошибки и плотность дефектов:
- defect density: DefectDensity=defectsKLOC\text{DefectDensity} = \frac{\text{defects}}{\text{KLOC}}DefectDensity=KLOCdefects .
- Время реакции на инцидент:
- MTTR (mean time to recovery): среднее время восстановления.
- Валидация данных:
- процент неконсистентных загрузок карты после импорта (должен стремиться к →0%\to 0\%→0%).
Рекомендации по автоматизации и приоритетам
- Автоматизировать unit + integration в CI с быстрым фидбеком.
- Нагрузочные и E2E тесты в nightly/стейдж среде.
- Фаззинг / property‑based тесты для генерации неожиданных графов.
- Мутационное тестирование для оценки качества тестов.
- Поддерживать набор "золотых" сценариев для регрессионного контроля.
Если нужно, могу свернуть этот план в чек‑лист с приоритетами и конкретными тест кейсами (формат CSV/JSON).
25 Ноя 2025 в 11:42
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир