Перейти к содержимому

🧙 Садовник: уточнил шаги, добавил проверки и обоснования. Примите, если полезно.

#1
открыто+2~14предложил gardener · 12 авг. 2026 г. · на основе v1
Итог · станет v2
1
Поведение соответствует требованиям

Сверить реализованные сценарии, ограничения и результаты с согласованными критериями приёмки; для каждого обязательного требования должно существовать подтверждение в тесте или демонстрации.

Зачем: Даже технически качественный код бесполезен, если решает неверную задачу.
  • –Обязательные сценарии подтверждены
  • –Ограничения и исключения учтены
  • –Лишнее поведение не изменяет требования
  • –Каждый кейс приёмки имеет соответствующий тест
2
Решение остаётся простым по принципу KISS

Проверить на ревью, что основной путь выполнения легко прослеживается, уровни абстракции оправданы, а более простая реализация не обеспечивает те же требования.

Зачем: Простое решение легче понимать, проверять, изменять и восстанавливать после сбоев.
  • –Основной поток читается без лишних переходов
  • –Абстракции решают существующую проблему
  • –Нет неоправданных фреймворков и шаблонов
  • –Количество зависимостей минимально
3
Знания не дублируются по принципу DRY

Найти бизнес-правила, формулы, схемы и конфигурацию, представленные в нескольких местах, и убедиться, что у каждого знания есть единый источник истины.

Зачем: DRY устраняет не просто похожий текст, а риск несогласованного изменения одного и того же знания.
  • –Бизнес-правило определено в одном месте
  • –Производные данные генерируются из источника истины
  • –Копии конфигурации не расходятся
  • –Нет дублирования логики в разных модулях
4
Случайное сходство не превращено в преждевременную абстракциюРекомендуется

Проверить, что объединённый код действительно меняется по одной причине; допустимое структурное повторение оставлено раздельным, если предметные правила независимы.

Зачем: Буквальное применение DRY часто связывает независимые части системы и делает изменения опаснее; иногда небольшое повторение дешевле неверной абстракции.
  • –Объединённые случаи имеют общую семантику
  • –Абстракция не переполнена флагами и исключениями
  • –Независимые правила могут изменяться отдельно
  • –Абстракции не усложняют понимание кода
5
Спекулятивная функциональность отсутствует по принципу YAGNI

Убедиться, что расширения, точки конфигурации и обобщения связаны с текущим требованием или подтверждённым ближайшим сценарием, а не с гипотетическим будущим.

Зачем: Неиспользуемая гибкость увеличивает объём кода, тестов и решений, которые придётся сопровождать.
  • –У каждой возможности есть текущий потребитель
  • –Неиспользуемые параметры и ветви отсутствуют
  • –Будущие идеи не встроены без требования
  • –Нет избыточных интерфейсов и методов
6
Ответственности разделены и связность модулей высока

Проверить, что модуль объединяет поведение вокруг одной причины изменения, а бизнес-логика не смешана с вводом-выводом, хранением, интерфейсом или инфраструктурой.

Зачем: Высокая связность внутри модулей и разделение причин изменения локализуют доработки и ошибки.
  • –У модуля сформулирована одна основная роль
  • –Бизнес-правила отделены от инфраструктуры
  • –Изменение требования затрагивает ограниченную область
  • –Модули не зависят от деталей реализации друг друга
7
Зависимости направлены к устойчивым контрактамРекомендуется

Проверить, что существенная бизнес-логика не зависит напрямую от нестабильных деталей, внешние интеграции изолированы, а интерфейсы вводятся в местах реальной заменяемости или тестового шва.

Зачем: Инверсия зависимостей снижает стоимость замены инфраструктуры, но интерфейс для каждого класса лишь создаёт лишнюю сложность.
  • –Внешние системы изолированы адаптерами
  • –Контракты минимальны и ориентированы на потребителя
  • –Тривиальные детали не обёрнуты без причины
  • –Используются интерфейсы, а не конкретные реализации
8
Контракты и ошибки выражены явно

Проверить, что входные условия, возвращаемые значения, состояния ошибок и побочные эффекты понятны из типов, интерфейсов, тестов или документации, а ошибки не подавляются молча.

Зачем: Явные контракты сокращают число скрытых предположений и позволяют обнаруживать нарушения ближе к источнику.
  • –Недопустимые входы отклоняются предсказуемо
  • –Ошибки сохраняют полезный контекст
  • –Побочные эффекты видимы вызывающему коду
  • –Типы данных чётко определяют допустимые значения
9
Критические сценарии и границы покрыты тестами

Сопоставить тесты с критериями приёмки и проверить наличие успешных, граничных и ошибочных сценариев; тесты должны проверять наблюдаемое поведение, а не внутреннее устройство.

Зачем: Тесты подтверждают корректность и позволяют безопасно менять реализацию без закрепления её случайных деталей.
  • –Основные сценарии покрыты
  • –Граничные значения проверены
  • –Ожидаемые отказы проверены
  • –Тесты устойчивы к внутреннему рефакторингу
  • –Есть тесты для критических путей
10
Автоматические проверки проходят воспроизводимо

Убедиться, что обязательный конвейер CI на актуальном коммите успешно выполняет тесты, статический анализ, форматирование, сборку и применимые проверки безопасности в чистом окружении.

Зачем: Автоматизация превращает соглашения о качестве в повторяемые условия интеграции изменений.
  • –Обязательный конвейер завершён успешно
  • –Проверки запускаются в чистом окружении
  • –Случайно нестабильные тесты отсутствуют
  • –Защита ветки требует успешных проверок
  • –Все зависимости загружаются автоматически
11
Имена и структура соответствуют соглашениям проектаРекомендуется

Сверить названия, форматирование, организацию файлов и публичные интерфейсы с зафиксированным стандартом проекта; отклонения должны быть обоснованы.

Зачем: Единообразие снижает когнитивную нагрузку и позволяет сосредоточиться на поведении программы.
  • –Имена отражают предметный смысл
  • –Форматирование единообразно
  • –Структура файлов предсказуема
  • –Неочевидные сокращения отсутствуют
  • –Используются общепринятые названия для стандартных компонентов
12
Документация объясняет актуальные решенияРекомендуется

Сопоставить документацию с текущими интерфейсами и поведением; комментарии должны объяснять причины, ограничения и компромиссы, а не пересказывать очевидный код.

Зачем: Документация особенно ценна там, где код не может сохранить контекст принятого решения.
  • –Инструкции запуска актуальны
  • –Публичные контракты описаны
  • –Архитектурные компромиссы зафиксированы
  • –Устаревшие комментарии отсутствуют
  • –Документация синхронизирована с изменениями кода
13
Границы доверия и привилегии ограничены

Проверить валидацию недоверенных данных, авторизацию операций, хранение секретов, безопасные значения по умолчанию и минимально необходимые права компонентов.

Зачем: Корректность программы включает устойчивость к ошибочному и злонамеренному вводу, а не только штатное поведение.
  • –Недоверенные данные валидируются
  • –Авторизация проверяется на серверной стороне
  • –Секреты не находятся в коде и логах
  • –Компоненты имеют минимальные права
  • –Используются механизмы защиты от инъекций
14
Принципы применены как компромиссы, а не догмыРекомендуется

Проверить, что отступления от KISS, DRY, YAGNI или SOLID объясняются измеримыми требованиями, а применение одного принципа не создаёт больший риск для понятности, корректности или изменений.

Зачем: Принципы могут конфликтовать: хорошее решение учитывает контекст и стоимость изменения, а не максимизирует формальное соответствие лозунгам.
  • –Компромиссы сформулированы явно
  • –Сложность оправдана требованием
  • –Решение можно пересмотреть при изменении условий
  • –Есть обоснование для отклонений от принципов
15
Логи не содержат конфиденциальной информации

Проверить, что в логах нет чувствительных данных, таких как пароли, токены, персональные данные пользователей.

Зачем: Утечка конфиденциальной информации через логи может привести к серьёзным последствиям, включая компрометацию системы и нарушение законодательства о защите данных.
  • –Конфиденциальные данные не записываются в логи
  • –Используются механизмы маскировки чувствительных данных
  • –Логи не содержат информации, которая может быть использована для атаки на систему
16
Обработка исключений не нарушает бизнес-логику

Проверить, что при обработке исключений программа не теряет критически важные данные и не переходит в некорректное состояние.

Зачем: Неправильная обработка исключений может привести к потере данных, нестабильной работе системы и труднодиагностируемым ошибкам.
  • –Исключения не подавляются без обработки
  • –При обработке исключений сохраняется целостность данных
  • –Программа корректно восстанавливается после обработки исключения