Как улучшить покрытие ветвей тестов, сгенерированных Randoop.

Вопрос или проблема

Как улучшить покрытие ветвей тестов, сгенерированных Randoop.

Мне необходимо сгенерировать тесты с помощью Randoop, чтобы получить >=50% покрытия ветвлений, но я получаю только 48%. Показано, что один из моих классов имеет очень низкое покрытие (43%). Обратите внимание, что я не могу изменять свой класс. Я хотел бы изменить тест Junit, но как? У меня нет никаких идей.

Я попытался сгенерировать тест снова, но результат все еще неудовлетворительный.

CMD prompt:
java -ea -classpath …\randoop-all-4.3.3.jar;…\eclipse-workspace\Proj\bin randoop.main.Main gentests –testclass=JSubj –time-limit=60 –junit-output-dir=…\eclipse-workspace\Proj/test –regression-test-basename=”JunitTest”

Ответ или решение

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

  1. Анализ текущего покрытия: Используйте инструменты анализа покрытия, такие как JaCoCo или Cobertura, чтобы детально выяснить, какие ветви кода не охвачены. Это даст вам четкое представление о том, какие конкретные условия и методы остаются необработанными вашими тестами.

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

  3. Использование Randoop с дополнительными параметрами: Попробуйте настроить дополнительные параметры в Randoop, которые могут помочь улучшить их результаты. Например, вы можете увеличить время генерации тестов, чтобы дать Randoop больше возможностей для создания тестов, которые охватывают требуемые ветви. Можно добавить параметр --max-size для управления размером генерируемых тестов, чтобы убедиться, что более сложные сценарии также рассматриваются.

    Пример команды может выглядеть так:

    java -ea -classpath ...\randoop-all-4.3.3.jar;...\eclipse-workspace\Proj\bin randoop.main.Main gentests --testclass=JSubj --time-limit=300 --max-size=8 --junit-output-dir=...\eclipse-workspace\Proj/test --regression-test-basename="JunitTest"
  4. Комбинирование Randoop с другими инструментами: Рассмотрите возможность использования других инструментов генерации тестов совместно с Randoop. Такие утилиты, как EvoSuite, могут помочь в создании тестов, которые могут охватить дополнительные ветви и условия.

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

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

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

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

Оцените материал
Добавить комментарий

Капча загружается...