Вы не упоминаете свой инструмент тестирования. Во многих есть функции «объединения», которые позволяют объединять результаты нескольких прогонов или наборов. Если вам нужна сводная метрика покрытия, изучите функцию объединения в вашем инструменте покрытия.
Теперь мы можем поговорить о слоне в комнате?
Здесь нет ложки. И нет никакого «общего процента покрытия». По крайней мере, нет простого.
Процент охвата - это легко понятный показатель, представленный для того, чтобы помочь понять объем, глубину и диапазон комплектов тестирования. Но, как и любой простой тест, очень легко стать целью, зацикленной на этом значении, как своего рода волшебный талисман «полного тестирования».
Допустим, вы достигли славы «100% тестового покрытия». Ура! Но что это значит? 100% строк кода проверены, верно? Тогда как насчет этой строки?
launch_missile = launch_authorized and launch_cmd_given else previous_launch_status
«Покрытие» этой строки означает что-то, но не много, потому что существует множество условий, которые есть True
или False
с некоторой вероятностью, но маловероятно, что вы проверили все комбинации этих условий. Даже если эта линия пройдена десяток раз, если одно из условий является относительно необычным, вы не приблизились к тестированию всех реальных результатов, которые могут произойти на практике. Чтобы сделать это более понятным, более синтетический пример:
engage_laser = (laser_armed and safety_disengaged) or random.random() < 0.0000003
Сколько раз вам пришлось бы покрывать эту строку, чтобы действительно исчерпывающе проверить ее? Сколько раз вы должны были бы покрыть это, чтобы проверить это в сочетании со всеми другими переменными в программе (с их собственными, возможно, такими же редкими) вероятностями?
Я не говорю, что показатели охвата бесполезны. Они на самом деле великолепны . Они сосредоточены на одном из ключевых вопросов: насколько интенсивно тестируется моя программная система? Они помогают перейти от «у нас есть некоторые тесты» к «мы тщательно протестировали».
Но пока вы работаете над «комбинированными баллами», реальность такова, что ваш балл будет, как правило, за «покрытие заявления», а не «условие», «предикат» или «путь» . Таким образом, независимо от того, какое число дают вам ваши совокупные оценки, маловероятно, что оно даст вам истинную картину того, сколько из ваших потенциальных состояний программы и комбинаций состояний тестируется. Пока вы работаете над увеличением процента покрытия, рассмотрите возможность измерения предикатного покрытия. Это даст вам более реалистичный и почти всегда более отрезвляющий взгляд на объем тестов.