Есть ли способ определить покрытие кода без запуска кода?

Я не прошу статического анализа кода, который предоставляется StyleCop или Fxcop. У обоих разные цели, и это хорошо служит. Я спрашиваю, есть ли способ найти покрытие кода вашего пользовательского элемента управления или подмодуля? Например, у вас есть приложение, которое использует вспомогательные классы в отдельной сборке. Чтобы обеспечить покрытие кода модульным тестированием, нам необходимо запустить приложение и убедиться, что используется NCover или аналогичный инструмент.

Мое требование: можно ли без его запуска найти покрытие кода вспомогательных классов или подобных сборок?


person sankar    schedule 25.02.2010    source источник


Ответы (5)


Я бы сказал нет; за исключением «мертвого кода», который может определить компилятор.

Мое определение покрытия кода - это результат, который указывает, сколько раз каждая строка кода запускается в вашей программе: что, конечно, означает запуск программы. Определяющим фактором здесь обычно являются значения данных, проходящих через программу, которые определяют пути выполнения условными операторами. Статический анализ, как и компилятор, может вывести строки кода, которые не могут работать ни при каких условиях.

Например, ваша программа использует стороннюю библиотеку, но в ней есть ошибка. Если ваша программа никогда не использует эти части библиотеки или данные, которые вы отправляете в библиотеку, заставляют ее избегать ошибки, вы не пострадаете.

Вы можете написать программу, которая путем отражения предполагает, что все условные выражения будут приняты, и будет следовать всем вызовам функций через все производные классы, но я не уверен, что это вам скажет. Он, конечно, не может сказать вам, есть ли какие-либо ошибки в строках кода, о которых идет речь.

person quamrana    schedule 27.02.2010
comment
В общем, я слышал, что термин «покрытие кода» относится к измерению того, выполняются ли определенные строки кода, а не к тому, сколько раз они были выполнены. - person John Saunders; 27.02.2010
comment
@John Saunders: IIRC gcov сообщает вам, сколько раз выполняется каждая строка. См .: gcc.gnu.org/onlinedocs/gcc/Gcov- Intro.html # Gcov-Intro Но да, вам действительно нужно знать, была ли строка выполнена или нет. - person quamrana; 27.02.2010
comment
это был вопрос о gcov? Если так, то я это пропустил. Я знаком только с полдюжиной других систем покрытия кода, ни одна из которых не заботится ни о чем, кроме того, какие строки покрываются. - person John Saunders; 27.02.2010
comment
@John Saunders: Нет, вы правы, речь идет только о покрытии кода, но я дал свое определение, на которое повлияло использование gcov. У меня есть опыт работы примерно с четырьмя различными программами покрытия, и, вероятно, это правда, что только gcov считает время выполнения. - person quamrana; 27.02.2010
comment
Без проблем. Первым инструментом покрытия, который я использовал, был Анализатор производительности и покрытия. Он сделал и то, и другое, используя одну и ту же базовую технологию. - person John Saunders; 27.02.2010

См. Статическая оценка покрытия тестами, чтобы узнать о методе, который оценивает охват без выполнения исходного кода.

Основная идея состоит в том, чтобы вычислить фрагмент программы для каждого тестового примера, а затем «подсчитать», что срез перечисляет. Срез (прямой) - это фактически та часть программы, к которой вы можете перейти из определенной начальной точки в коде, в данном случае тестового кода.

Хотя технический документ выше трудно получить, если вы не являетесь членом ACM [или вы не присутствовали на конференции, на которой он был представлен:], есть слайд-презентация здесь.

Конечно, запуск этого статического оценщика только сообщает вам (примерно), какой код будет выполняться. Это не заменяет фактическое выполнение тестов и проверку их прохождения!

person Ira Baxter    schedule 26.02.2010
comment
Ссылки кажутся мертвыми, найдите статью здесь: researchgate.net/publication/ - person Jan Petzold; 07.08.2019

В общем, нет. Это эквивалентно проблеме остановки, которую невозможно вычислить.

person Simon Nickerson    schedule 25.02.2010

Существуют (исследовательские) инструменты, основанные на абстрактной интерпретации или проверке модели, которые могут показывать свойства покрытия без выполнения для подмножеств языка. См., Например,

«Анализ функционального покрытия при проверке ограниченных моделей», Гросс, Д. Кун, У. Дрекслер, Р. 2008 г.

В общем, да, подходы есть, но они специализированы и могут потребовать некоторого опыта в формальных методах. Такого рода исследования все еще находятся на переднем крае.

person Don Stewart    schedule 25.02.2010

Статический анализ покрытия - это инструмент, который может выявить множество безопасных недостатков в программе. Он также может идентифицировать мертвый код и может использоваться для удовлетворения требований к тестированию, таких как D0178B, который требует, чтобы разработчики продемонстрировали, что весь код может быть выполнен.

person rook    schedule 25.02.2010