Code Coverage общие функции / параметры? - PullRequest
1 голос
/ 09 декабря 2008

Я работаю над покрытием кода для моих приложений. Теперь я знаю, что покрытие кода - это действие, связанное с типом тестов, которые вы создаете, и языком, для которого вы хотите выполнить покрытие кода.

Мой вопрос таков: есть ли какой-нибудь возможный способ сделать общее покрытие кода? Например, можем ли мы иметь набор функций / тестовых случаев, которые можно запустить (наряду с гораздо более конкретными тестами для тестируемого приложения), чтобы получить покрытие кода, скажем, 10% или более кода?

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

Ответы [ 2 ]

1 голос
/ 09 декабря 2008

Я не уверен, что универсальные инструменты покрытия - это Святой Грааль, по нескольким причинам:

  1. Покрытие - это не цель, это инструмент. Он говорит вам, какие части кода не полностью поражены тестом. О том, насколько хороши тесты, ничего не говорится.
  2. Сгенерированные тесты не могут угадать семантику вашего кода. Фреймворки, которые генерируют тесты только для вас, могут вывести значение из чтения вашего кода, что, по сути, может быть неверным, потому что весь смысл юнит-тестирования заключается в том, чтобы увидеть, действительно ли код ведет себя так, как вы и предполагали.
  3. Поскольку автоматизированная инфраструктура будет генерировать искусственное покрытие, вы никогда не сможете сказать, тестируется ли фрагмент кода с помощью правильного юнит-теста или поверхностно тестируется платформой. Я предпочел бы, чтобы непроверенный код отображался как непокрытый, поэтому я исправляю это.

Что вы могли бы сделать (и я сделал ;-)) - написать общий тест для тестирования Java-бинов. С помощью отражения вы можете протестировать Java-бин на соответствие спецификации Sun Java-бина. Утвердите, что equals и hashcode оба реализованы (или ни один из них), посмотрите, что получатель фактически возвращает значение, которое вы указали с помощью установщика, проверьте, все ли свойства имеют методы получения и установки.

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

Это легко сделать, легко обслуживать и вынуждает вас иметь чистые бобы. Что касается остальной части юнит-тестов, я стараюсь сосредоточиться на тестировании важных деталей в первую очередь.

Покрытие может дать ложное чувство безопасности. Здравый смысл нельзя автоматизировать.

0 голосов
/ 09 декабря 2008

Обычно это достигается путем сочетания статического анализа кода (Coverity, Klockwork или их бесплатных аналогов) с динамическим анализом путем запуска тестов с использованием инструментального приложения (профилировщик + проверка памяти). К сожалению, это трудно автоматизировать тестовые алгоритмы, большинство инструментов являются своего рода «регистраторами», способными записывать трафик / ключи / сигналы - в зависимости от домена и воспроизводить их (с минимальными изменениями / заменами, такими как идентификатор сессии / пользователь / / и т. Д.)

...