Вопрос

Есть ли способ измерить покрытие кода с помощью DUnit?Или есть какие-нибудь бесплатные инструменты для этого?Что вы для этого используете?Какое покрытие кода вы обычно предпочитаете?

Джим МакКит:Спасибо за подробный ответ.Я говорю о модульном тестировании в смысле подхода TDD, а не только о модульных тестах после возникновения сбоя.Меня интересует покрытие кода, которого я могу достичь с помощью некоторых заранее написанных базовых модульных тестов.

Это было полезно?

Решение

Я только что создал новый проект с открытым исходным кодом в Google Code с базовым инструментом покрытия кода для Delphi 2010. https://sourceforge.net/projects/delphicodecoverage/

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

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

Обновлять:Начиная с версии 0.3 Покрытие кода Delphi вы можете создавать отчеты XML, совместимые с плагином Hudson EMMA, для отображения тенденций покрытия кода внутри Хадсон.

Обновлять:Версия 0.5 содержит исправления ошибок, расширенные возможности настройки и очищенные отчеты.

Обновлять:Версия 1.0 обеспечивает поддержку вывода emma, покрытие классов и методов, а также поддержку DLL и BPL.

Другие советы

Я не знаю никаких бесплатных инструментов. AQTime это почти стандарт де-факто для профилирования Delphi.Я им не пользовался, но быстрый поиск нашел Откройте для себя Delphi, который теперь имеет открытый исходный код, но просто охватывает код.

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

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

С другой стороны, устаревший код — это совсем другая история.Устаревший код — это код, который не используется.Скорее всего, вам не понадобится инструмент, который сообщит вам об этом для большей части вашего кода, просто ищите маленькие синие точки после компиляции в Delphi.Все, что не отмечено синей точкой, является устаревшим.Обычно, если код не используется, его следует удалить.Это будет 100% покрытие кода.

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

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

Думаю, я не ответил на ваш вопрос о DUnit и покрытии кода, но думаю, что, возможно, оставил у вас больше вопросов, чем вы начали.Какое покрытие кода вы ищете?

ОБНОВЛЯТЬ: Если вы используете подход TDD, то код не будет написан до тех пор, пока вы не напишете для него тест, поэтому по своей природе у вас есть 100 тестовых покрытий.Конечно, тот факт, что каждый метод проверяется с помощью теста, не означает, что проверяется весь диапазон его поведения. СмартИнспект предоставляет действительно простой метод измерения того, какие методы вызываются, а также время и т. д.Это немного меньше, чем у AQTime, но не бесплатно.Проделав дополнительную работу с вашей стороны, вы можете добавить инструменты для измерения каждого пути кода (ветви операторов «if» и т. д.). Конечно, вы также можете просто добавить собственное ведение журнала в свои методы, чтобы получить отчет о покрытии, и это бесплатно. (ну, рассчитывайте на свое время, которое, вероятно, стоит больше, чем инструменты).Если вы используете JEDI Debug, вы также можете получить стек вызовов.

TDD действительно не может быть легко применен задним числом к ​​существующему коду без большого рефакторинга.Хотя более новые IDE Delphi имеют возможность генерировать заглушки модульных тестов для каждого общедоступного метода, что затем дает вам 100% покрытие ваших общедоступных методов.От того, что вы впишете в эти корешки, зависит, насколько эффективным будет это покрытие.

я использую Откройте для себя Delphi и он выполняет всю работу по модульному тестированию с помощью DUnit и функциональному тестированию с помощью TestComplete.

Для автоматизации Discover можно настроить для запуска из командной строки.Как в:

Discover.exe Project.dpr -s -c -m

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

Я использую Discover» уже много лет, он отлично работал вплоть до BDS2006 (который был последней версией Delphi до XE*, которую я использовал и использую до сих пор), но в настоящее время его исходный код открыт, неясно, как заставить его работать с XE* версии Delphi.Очень жаль, потому что мне очень понравился этот инструмент, быстрый и удобный практически во всех отношениях.Итак, теперь я перехожу к покрытию кода Delphi...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top