Есть ли у кого-нибудь инструменты или опыт в области покрытия кода для PL/SQL. Я считаю, что это возможно с помощью DBMS_PROFILER?
Покрытие кода для PL/SQL
Ответ 1
http://www.toadworld.com/BLOGS/tabid/67/EntryID/267/Default.aspx содержит информацию о проверке покрытия кода с использованием профилировщика PL/SQL.
Некоторая полезная информация о профилировании на 9i или 10g включена в статью Metalink 243755.1 "Реализация и использование профилировщика PL/SQL" для получения информации о профилировании кода. Возьмите prof.zip со дна статьи, у него есть profiler.sql, который будет хорошо форматировать ваши результаты после прогона профилирования.
Более 10-граммовая документация доступна здесь без учетной записи MetaLinka: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_profil.htm
Если вы используете 11g, здесь описан новый иерархический профайлер: http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28424/adfns_profiler.htm
Ответ 2
См. Инструменты проверки оболочки SD. Мы собираемся выпустить инструмент для тестирования PLSQL с теми же возможностями, что и наши другие инструменты, включая графический интерфейс для отображения результатов поверх исходного кода, а также сформированный отчет о покрытии, который собирает сведения о отдельных функциях, а также свопы для пакеты.
РЕДАКТИРОВАНИЕ 2/15/2011: доступен PLSQL инструмент для тестирования покрытия.
Ответ 3
Не уверен, что это совсем то, что вам нужно, но в 10-м году есть инструмент для статического анализа кода PL/SQL.
Информация здесь... http://www.psoug.org/reference/plsql_warnings.html
Обратите внимание, что он может быть включен на уровне сеанса или базы данных.
По моему опыту, до сих пор появилось немало ложных негативов.
Ответ 4
Я нашел что-то полезное на странице http://www.databasejournal.com/features/oracle/article.php/10893_2197231_3.
select exec.cnt/total.cnt * 100 "Code% coverage"
from (select count(1) cnt
from plsql_profiler_data d, plsql_profiler_units u
where d.runid = &&runid
and u.runid = d.runid
and u.unit_number = d.unit_number
and u.unit_name = upper('&&name')
and u.unit_owner = upper('&&owner')
) total,
(select count(1) cnt
from plsql_profiler_data d, plsql_profiler_units u
where d.runid = &&runid
and u.runid = d.runid
and u.unit_number = d.unit_number
and u.unit_name = upper('&&name')
and u.unit_owner = upper('&&owner')
and d.total_occur > 0) exec;
Ответ 5
Существует пакет, который вы можете установить под названием DBMS_profiler. При этом вы можете запустить профиль, и Oracle будет хранить данные в специальных таблицах. Затем остановите профиль и отправьте отчет из этих таблиц.