Есть четыре гипотетических пути через эту функцию. Каждое условие if удваивает количество путей. Каждый оператор if - это ветка, в которой вы можете пойти двумя разными путями. Поэтому, когда ваш инструмент встречает «если», он предполагает, что код может принять «истинную» ветвь или «ложную» ветвь. Однако, это не всегда возможно. Рассмотрим:
bool x = true;
if (x) {
do_something();
}
Ложная ветвь оператора if недоступна. Это очевидный пример, но когда вы учитываете несколько операторов if, становится все сложнее увидеть, возможен ли путь.
В вашем коде только три возможных пути. Путь, который принимает «ложную» ветвь в первом операторе if и «истинную» ветвь во второй, недоступен.
Ваш инструмент недостаточно умен, чтобы понять это.
При этом, даже если инструмент идеален, получение 100% покрытия пути, вероятно, маловероятно в реальном приложении. Однако очень низкий охват тракта является верным признаком того, что ваш метод имеет слишком высокую цикломатическую сложность.