2008-10-16 3 views
6

Недавно я начал работу над очень большим проектом на C++, который после завершения 90% реализации определил, что им нужно продемонстрировать покрытие на 100% филиалов во время тестирования. Проект размещен на встроенной платформе (Integrity Green Hills). Я ищу предложения и опыт других пользователей в StackOverflow, которые использовали продукты покрытия кода в аналогичных средах. Меня интересуют как положительные, так и отрицательные комментарии относительно этих типов инструментов.Анализ покрытия кода для проектов с встроенным C++

ответ

5

100% площадь покрытия? Это совершенно необходимо, особенно потому, что некоторые ветви (по умолчанию в операциях case для состояний машин, например) не могут быть запущены. Я ожидаю, что есть исключения, и если нет, вам, возможно, потребуется понять, что тестирование покрытия может и не может выполнить, прежде чем вы начнете - в противном случае вы в конечном итоге потянете свои волосы или, что еще хуже, дадите неверные данные.

Большинство проверок покрытия для встроенных систем фактически выполняется на ПК. Код переносится, некоторые аспекты микроконтроллера эмулируются в программном обеспечении, а Bullseye или другая аналогичная утилита для покрытия кода ПК. Причина этого заключается в том, что существует слишком много микроконтроллеров и компиляторов/отладчиков/тестовых сред для разработки инструментов покрытия кода для каждого из них.

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

Портирование кода не является ужасно трудным, если вы можете абстрагироваться от конкретного аппаратного кода (и поскольку вы используете C++ правильно, это должно быть легко, правильно? ;-D). Самая большая проблема, с которой вы столкнетесь, - это типы, которые, хотя они лучше указаны на C++, чем в C, по-прежнему создают некоторые проблемы. Убедитесь, что вы используете тип.h или аналогичную настройку, чтобы конкретно рассказать компилятору, что именно вы используете, и как его следует интерпретировать.

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

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

Если вы должны сделать это на самой системе, вам нужно приобрести эмулятор для процессора с возможностью покрытия - не недорогое предложение (многие эмуляторы стоят выше 30 000 долларов США для полного набора инструментов и эмуляционного оборудования), но это один из многих инструментов, используемых в средах с высокой надежностью, таких как автомобилестроение и аэрокосмическая промышленность.

-Adam

Отказ от ответственности: Я работаю в компании, которая производит MxVDev.

+0

Просто к сведению, что, кажется, не Меченый для поддержки Greenhills целостности для тех, кто рассматривает его использование. – Gary 2010-05-12 11:29:14

2

Как и у Адама, мы переносим наш внедренный код на компьютерную проводку и выполняем большую часть покрытия и профилирования. Я использовал AutomatedQA AQTime и Compuwares DevPartner, оба из которых являются хорошими продуктами,

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

100% охват амбициозен, так как вам понадобится много ошибок, чтобы попасть во все ваши обработчики ошибок и обработчики исключений. ИМО, это также было бы легче сделать в упряжи, чем на борту.

Также стоит обратить внимание на тех, кто попросил 100% -ный охват кода, что 100% покрытие кода никоим образом не соответствует 100% -ному охвату тестирования. Рассмотрим, например, следующую функцию;

int div(int a, int b) 
{ 
return (a/b); 
} 

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

3

Мы использовали Cantata и vectorcast в прошлом для модульного тестирования и покрытия кода. Мы также используем инструменты Greenhills, и оба этих инструмента работают с инструментами разработки Greenhills. Мы проводим большую часть нашего теста на симуляторе PPC и просто запускаем тест, который полагается на аппаратное обеспечение на аппаратном обеспечении Target через модуль JTAG. Canatata и Vector cast очень похожи с кататой, которые немного удобнее в использовании и имеют несколько больше функций, но небольшие дополнения делают большую разницу в работе пользователя.

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

Мы также попробовали тестирование ПК по сравнению с встроенным тестированием, что вызвало проблемы из-за endianess, но это только проблема на аппаратном уровне.

Кроме того, эти инструменты сертифицированы по стандарту RTCA/DO-178B.

+0

+1 для кантаты ... мы также должны использовать его! – espais 2010-03-05 16:15:49

0

См. SD C++ Test Coverage. Это семейство (отраслевых) средств для тестирования множества разнообразных диалектов C++ (ANSI, GNU, MS ...), которые прекрасно воспроизводятся даже в реальных аппаратных средствах встроенных систем благодаря наличию очень небольшой занимаемой площади и легкому способ экспортировать собранные данные о пробных покрытиях. Имеется экран покрытия GUI, который не зависит от вашего фактического встроенного оборудования, которое также будет содержать полный отчет о сводке отчетов.

[Я главный в компании, которая предоставляет эти инструменты.]

Смежные вопросы