feat(ldd): реестр утверждений, evidence gate и runtime-проверки
This commit is contained in:
76
docs/evidence/README.md
Normal file
76
docs/evidence/README.md
Normal file
@@ -0,0 +1,76 @@
|
||||
# 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` — что утверждение **не** покрывает.
|
||||
|
||||
## Запуск
|
||||
|
||||
```bash
|
||||
# 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`.
|
||||
|
||||
## Правила
|
||||
|
||||
1. Новое P0-требование без свидетельства не мержится.
|
||||
2. Свидетельство должно быть воспроизводимым в CI, а не «проверил руками».
|
||||
3. Тест должен падать при поломке соответствующей логики; для критичных
|
||||
пакетов позже добавим mutation testing.
|
||||
4. Один тест может подтверждать несколько claims, но claim не должен
|
||||
опираться на тест, который проверяет только реализацию.
|
||||
5. `limitations` обязателен: LDD не должен создавать иллюзию полного
|
||||
доказательства.
|
||||
6. При переименовании теста обновляется `claims.json`; устаревшая ссылка —
|
||||
это gap, а не «забыли».
|
||||
7. 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`.
|
||||
Reference in New Issue
Block a user