4.1 KiB
4.1 KiB
LDD: доказательное тестирование
Этот каталог — реестр утверждений о системе и свидетельств того, что они выполняются. LDD здесь означает не «тесты вместо требований», а риск-ориентированную проверку: требование → проверяемое утверждение → независимый оракул → воспроизводимое свидетельство → допуск.
Уровни
- P0 — утверждение о безопасности, сохранности данных, доступах или
ключевом доменном правиле. P0 без зелёного свидетельства валит
./gradlew evidenceCheck. - P1 — важное поведение/UX/контракт. Пробел показывается в отчёте, но не блокирует сборку.
- runtime — проверка на реально поднятом стеке. Выполняется отдельным скриптом; в unit-CI может отсутствовать, но обязательна перед релизом.
Реестр
claims.json содержит:
id— стабильный идентификатор (LDD-ACCESS-001);title— короткая формулировка;criticality—P0/P1;status—activeилиgap;requirement— ссылка на ТЗ/отчёт;claim— проверяемое утверждение (что именно истинно);oracle— как это проверяется;evidence— списокfully.qualified.Class#test name()из JUnit XML;runtime— идентификаторы проверок изbuild/evidence/runtime.json;limitations— что утверждение не покрывает.
Запуск
# 1. Все тесты и линтеры
./gradlew test ktlintCheck detekt
# 2. Гейт свидетельств (P0 без evidence = fail)
./gradlew evidenceCheck
# 3. Полный runtime-smoke на одноразовой БД
./scripts/ldd-runtime.sh
# 4. Проверка upgrade с master-схемы
./scripts/ldd-migration-upgrade.sh
Отчёт: build/reports/evidence/index.md.
Правила
- Новое P0-требование без свидетельства не мержится.
- Свидетельство должно быть воспроизводимым в CI, а не «проверил руками».
- Тест должен падать при поломке соответствующей логики; для критичных пакетов позже добавим mutation testing.
- Один тест может подтверждать несколько claims, но claim не должен опираться на тест, который проверяет только реализацию.
limitationsобязателен: LDD не должен создавать иллюзию полного доказательства.- При переименовании теста обновляется
claims.json; устаревшая ссылка — это gap, а не «забыли». - Runtime-свидетельства обязательны перед релизом; CI проверяет unit/ integration-слой.
Текущий baseline
Первый прогон LDD выполнен 2026-10-27:
- 267 автоматических тестов, 0 failures/errors;
- 33 claims: P0 — доступы, повышение, жизненный цикл, профиль/скачивание, материалы/активы, миграция V13, аудит; P1 — группы, авторство, UI, контракты, импорт, копирование лаб, runtime.
- Runtime-smoke и master-upgrade вынесены в отдельные скрипты.
Результаты и найденные пробелы — в baseline-2026-10-27.md.