self-test-designlisted
Install: claude install-skill InExSu/claude-skills
# Self-Test Design (программы как устройства)
## Философия
Надёжные устройства не тестируют «снаружи» через дырочку в корпусе — тестируемость встроена в схему: BIST, POST, JTAG, коды неисправностей, watchdog. Тест — не последний этап, а часть архитектуры.
Применяй к программам:
- Модуль должен **сам** говорить «я в порядке» или «вот код неисправности»
- Тестируемость — требование к архитектуре с первого дня
---
## Золотое правило тестирования
> **Проверяй не только наличие желаемого поведения, но и отсутствие нежелательного.**
**Следствия:**
1. **Проверяй весь снимок состояния**, а не только ожидаемое поле
2. **Тестируй переходы между состояниями** — баги живут там, а не в стационарных состояниях
3. **Используй state transition table** — для пары (состояние, событие) фиксируй ожидаемые (новое состояние, побочные эффекты, вывод)
---
## Архитектурный паттерн: TestPort
Единый контракт для всех модулей:
```
TestPort {
markReady() // модуль прошёл инициализацию
heartbeat() // "я жив" — периодически
reportFault(code, message, ctx) // стандартизированная ошибка
assertGolden(name, actual, expected) // сверка с эталоном
assertStateTransition(event, before, after) // сверка перехода
getStatus() -> { stage, faultCount }
}
```
---
## Коды неисправностей
Числовые коды вместо строк (для агрегации):
| Диапазон | Категория | Примеры |
|----------|-----------|---------|
| 1xx | Контракт/интерфейс | зависимость не найдена, мет