C встроенная автоматическая генерация тестовых модулей - PullRequest
8 голосов
/ 11 мая 2010

Есть ли ПО для генерации модульных тестов в C и встроенных приложениях? Причина, по которой я спрашиваю, состоит в том, что мой начальник сказал мне, что он услышал от кого-то, что «вам нужен инструмент для анализа кода и автоматического создания 80% всех соответствующих тестовых случаев, оставшиеся 20% вы используете все свое время и сосредотачиваетесь на этом», иначе это займет «слишком много времени».

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

Однако я вижу, что было бы возможно автоматически генерировать тесты интерфейсных модулей для API: s.

Так может ли кто-нибудь просветить меня по этому вопросу?

Ответы [ 7 ]

5 голосов
/ 26 января 2011

Я рекомендую API Sanity Checker инструмент:

Автоматический генератор базовых модульных тестов для общей библиотеки C / C ++. Он способен генерировать разумные (в большинстве, но, к сожалению, не во всех случаях) входные данные для параметров и составлять простые ("нормальные" или "поверхностные") тестовые случаи для каждой функции в API посредством анализа объявлений в заголовке файлы.

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

Уникальные особенности:

  • Автоматическая генерация входных аргументов и тестовых данных (даже для сложных типов данных)
  • Современные специализированные типы вместо шаблонов и шаблонов

См. Примеры для FreeType2 .

enter image description here

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

5 голосов
/ 11 мая 2010

У вашего босса неправильный конец палки.

Я не знаю инструментов, которые бы генерировали для вас юнит-тесты.

То, что он может ошибаться, это покрытие кода и модульное тестирование . Хотя они связаны друг с другом, на самом деле это отдельные вопросы.

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

Довольно легко покрыть первые две трети кода, но уменьшение отдачи означает, что для достижения почти 100% магии требуется много времени и усилий.

2 голосов
/ 04 февраля 2011

Прежде всего, что вы подразумеваете под модульным тестом и генерировать модульные тесты?

Вы имеете в виду создать структуру, использовать тест или вы хотите создать тест с данными и проверками данных или утверждениями, которые фактически вызывают ваш код. И, в последнем случае, как генерируется этот тест?

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

В предыдущем ответе упоминалась Cantata, недавно мы выпустили новую версию с компонентом, называемым «базовое тестирование». Это может быть именно то, что вы ищете. Для кода на языке C он создаст набор модульных тестов, содержащих тестовые примеры, которые имеют хорошие шансы для полной реализации каждого из ваших исходных файлов. Инструмент достигает этого, читая ваш источник и выполняя набор тестов, которые направляют выполнение по каждому пути, чтобы достичь желаемой цели покрытия - 100% утверждение, решение или даже покрытие MC / DC. Намерение состоит в том, чтобы «исходить» из исходного кода в рамках текущей разработки устаревшей системы или заполнить пробелы в покрытии после функционального или, возможно, системного тестирования.

См. Веб-страницу Cantata ++ для получения дополнительной информации (и бесплатных оценок)

1 голос
/ 11 мая 2010

Мы используем CANtata здесь, где я работаю для генерации модульных тестов / покрытия кода. Это прилично, хотя я думаю, что это немного дорого.

1 голос
/ 11 мая 2010

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

Это не модульное тестирование, но вы можете выполнить некоторую проверку кода с помощью lint или связанных инструментов. См .: http://www.lysator.liu.se/c/ten-commandments.html Я думаю, что текущий инструмент с открытым исходным кодом является splint http://www.splint.org/

В книгах Джона Бентли неплохо обсуждается роль кода "строительные леса", включая тестовые леса.

0 голосов
/ 02 августа 2015

Есть ли какой-нибудь SW для генерации модульных тестов в C и встроенных приложениях?

Да. Rational Test Realtime от IBM будет хорошим выбором.

инструмент для анализа кода и автоматического создания 80% всех соответствующих тестовых случаев

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

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

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

0 голосов
/ 11 мая 2010

Мы используем IBM RTRT

http://www -01.ibm.com / Программное обеспечение / awdtools / тест / в реальном времени / index.html

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

...