покрытие кода в C - PullRequest
       25

покрытие кода в C

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

Я хочу получить покрытие кода на C. Я не могу полагаться на такие инструменты, как gcov, так как работаю на разных платформах / компиляторах.

В основном я ищу стратегию для включения покрытия кода в мою (собственную реализацию) структуру модульного тестирования.

Ответы [ 4 ]

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

A Страница, посвященная инструментам покрытия кода говорит, что нечто, называемое Брайаном Мариком, под названием GCT, реализует покрытие кода переводом из исходного кода в исходное, поэтому вы можете преобразовать код C и затем построить его с помощью вашей платформы. конкретный компилятор. Я не отслеживал детали.

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

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

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

Извините, что отвечаю только на вопросы ... HTH

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

Было бы очень полезно, если бы вы обновили свой вопрос, чтобы описать платформы и компиляторы, которые вы используете.

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

В UNIX вы также можете запустить процесс, используя ptrace (), чтобы выполнить одношаговое приложение и, таким образом, зафиксировать выполненные инструкции.

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

Опять же, для получения полезного ответа потребуются дополнительные сведения о среде выполнения и уровне детализации.

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

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

...