Есть ли способ определить покрытие кода без запуска кода? - PullRequest
4 голосов
/ 25 февраля 2010

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

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

Ответы [ 5 ]

5 голосов
/ 26 февраля 2010

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

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

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

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

3 голосов
/ 25 февраля 2010

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

2 голосов
/ 25 февраля 2010

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

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

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

0 голосов
/ 27 февраля 2010

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

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

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

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

0 голосов
/ 25 февраля 2010

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

...