Вы не упоминаете свой инструмент тестирования. Во многих есть функции «объединения», которые позволяют объединять результаты нескольких прогонов или наборов. Если вам нужна сводная метрика покрытия, изучите функцию объединения в вашем инструменте покрытия.
Теперь мы можем поговорить о слоне в комнате?
Здесь нет ложки. И нет никакого «общего процента покрытия». По крайней мере, нет простого.
Процент охвата - это легко понятный показатель, представленный для того, чтобы помочь понять объем, глубину и диапазон комплектов тестирования. Но, как и любой простой тест, очень легко стать целью, зацикленной на этом значении, как своего рода волшебный талисман «полного тестирования».
Допустим, вы достигли славы «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
Сколько раз вам пришлось бы покрывать эту строку, чтобы действительно исчерпывающе проверить ее? Сколько раз вы должны были бы покрыть это, чтобы проверить это в сочетании со всеми другими переменными в программе (с их собственными, возможно, такими же редкими) вероятностями?
Я не говорю, что показатели охвата бесполезны. Они на самом деле великолепны . Они сосредоточены на одном из ключевых вопросов: насколько интенсивно тестируется моя программная система? Они помогают перейти от «у нас есть некоторые тесты» к «мы тщательно протестировали».
Но пока вы работаете над «комбинированными баллами», реальность такова, что ваш балл будет, как правило, за «покрытие заявления», а не «условие», «предикат» или «путь» . Таким образом, независимо от того, какое число дают вам ваши совокупные оценки, маловероятно, что оно даст вам истинную картину того, сколько из ваших потенциальных состояний программы и комбинаций состояний тестируется. Пока вы работаете над увеличением процента покрытия, рассмотрите возможность измерения предикатного покрытия. Это даст вам более реалистичный и почти всегда более отрезвляющий взгляд на объем тестов.