01 · почему так много
Надёжность — это не обещание, а побочный продукт процесса
Девиз SQLite — «Маленькая. Быстрая. Надёжная. Выберите любые три». Третье свойство стоит на простой и неудобной мысли: база данных помнит ошибки.
Упавший сервер можно перезапустить. Повреждённую запись — нет. Стоимость дефекта в СУБД асимметрична: ошибка на проде не просто роняет процесс, она тихо портит данные, которые будут читать годами. Поэтому всё тестирование выстроено вокруг одной цели — не дать дефекту дожить до релиза.
Из этого следует второй принцип. Легко написать движок, который работает на корректных входных данных и исправном железе. Трудно — тот, что ведёт себя предсказуемо, когда заканчивается память, отказывает диск, пропадает питание посреди записи или на вход прилетает враждебный мусор. Большая часть усилий направлена именно на это «когда всё ломается».
Полное покрытие здесь работает как страховка скорости, а не только качества: разработчик может смело переписать одну часть движка, зная, что тесты немедленно поймают регресс в любой другой. Без этого многие улучшения последних лет были бы слишком рискованными, чтобы их вообще пробовать.
Важная оговорка — читать до того, как копировать
Сами авторы SQLite прямо предупреждают: поддерживать 100% MC/DC дорого и трудоёмко, и для типового приложения это, скорее всего, не окупается. Оправдано это для инфраструктурной библиотеки, развёрнутой на миллиардах устройств, где цена ошибки огромна, а сама природа продукта — «помнить» прошлое.
Поэтому правильное чтение этого документа — брать принципы, а не цифру. Цель не в том, чтобы завтра достичь 100% покрытия, а в том, чтобы понимать, какие уровни защиты существуют, и осознанно выбирать, до какого доходить, исходя из цены ошибки в своём продукте.