В Java/Kotlin почему-то берут 80% как обязательный критерий. Есть ощущение, что это не что-то выведенное из опыта, а просто на основе закона Парето. Т.е. мы не хотим полного покрытия (качества кода), а только охотимся за легкой мишенью.
На практике, для Kotlin backend-кода я бы выставлял 92%: это часто означает полное покрытие. Технически 100% пока что особо не получается из-за различных конструкций c null, логами или недостижимого кода (когда компилятор не понимает, что он не может быть достигнут).
Естественно, не нужно исключать никакие классы. Например, некоторые программисты любят исключать классы моделей (DTO), но там так же могут в какой-то момент оказаться рукописные методы. При этом обычно утилы показывают там покрытие 100%, так что непонятно зачем исключать.
При этом, обычно, не тестирую логирование: обычно логи улучшаются в процессе эксплуатации, а именно юнит-тест на них ничего не даст.