Поначалу мерил себя процентами покрытия и подгонял, пока не стала зелёная цифра. А потом понял: красивые 90% не спасают, если критичный сценарий не проверен. Уже не скажу, чтобы обрадовала сама цифра, скорее пришло спокойствие — важны сценарии и их границы, а не «строка-в-строку».

Нейтрально: процент покрытия показывает, какие строки трогались тестами, но не гарантирует, что поведение проверено правильно. Лучший компас — список важных сценариев.

# тестируем поведение: успех, пусто, граница
def reserve(slots: int) -> bool:
    if slots <= 0:
        return False
    return True

def test_reserve_pustoy():
    assert reserve(0) is False

def test_reserve_granitsa():
    assert reserve(1) is True

Урок с процентами дорогой: я потратил вечера на «добивание цифры», хотя можно было покрыть главное. Теперь первым делом описываю сценарии, потом думаю о метрике. Итог — меньше фальшивой уверенности, больше пользы от теста.