Spec-Zone.ru › MariaDB

Покрытие кода

Мы работаем над тем, чтобы больше исходного кода MariaDB было покрыто нашим набором тестов mysql-test-run (MTR). Это непрерывная (и медленная) задача, так как все еще много старого кода с не очень хорошим покрытием.

Цели для нового кода

Для нового кода в MariaDB мы ставим гораздо более высокие цели:

Цели следующие:

  1. Все новые строки кода должны, в идеале, проверяться с помощью MTR.
  2. Код, который нельзя разумно протестировать с помощью MTR, должен быть протестирован другим инструментом, и эти строки кода должны быть помечены комментарием /* purecov: tested */.
    • В этом случае инструмент, используемый для тестирования, должен быть описан в записи журнала работ по этому коду или в сообщении об изменении.
  3. Код, который нельзя разумно протестировать (например, условия ошибок), должен быть помечен комментарием '/* purecov: inspected */', чтобы проверяющий код мог легко обнаружить этот код.
  4. Код, который, как предполагается, является мертвым кодом, должен содержать 'DBUG_ASSERT(0)' или быть помечен комментарием '/* purecov: deadcode */', чтобы мы имели возможность заметить, если код когда-либо выполняется.

Причина, по которой мы используем 'purecov' для маркировки строк, связана с инструментом purecov, который мы изначально использовали для измерения покрытия кода в ранние годы MySQL.

Маркеры

Рекомендуемые маркеры:

/* purecov: tested */

  • Для строк кода, которые тестируются чем-то другим, чем mysql-test-run:

/* purecov: inspected */

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

/* purecov: deadcode */

  • Для строк кода, которые, как предполагается, никогда не будут вызываться. Наличие этого маркера позволяет генерировать предупреждение во время проверки покрытия кода mysql-test-run, если эта строка выполняется.

Комментарий должен быть размещен в строке/строках, которые затронуты.

Для блоков кода, больших, чем 1 строка, можно использовать синтаксис блока:

/* purecov: begin tested */
....
/* purecov: end */

Запуск mysql-test-run с gcov

Предварительные условия

  1. Сначала убедитесь, что установлен gcov 4.9. Более старые версии библиотеки gocv (lgcov) не могут обрабатывать одновременный запуск нескольких экземпляров программы. Это приводит к тому, что сгенерированные файлы .gov не содержат все выполненные строки при запуске mysql-test-run с параметром --parallel или при запуске тестов, которые запускают несколько серверов mysqld, таких как тесты репликации или паутины.
  2. Скомпилируйте MariaDB с BUILD/compile-pentium64-gcov (если на вашем компьютере нет процессора Pentium, измените этот скрипт или просто смиритесь со спецификой Pentium).

Запуск mysql-test-run

Чтобы увидеть уровень покрытия в текущем наборе тестов, выполните следующие действия:

  1. В каталоге mysql-test выполните эту команду: ./mysql-test-run -gcov
  2. Чтобы увидеть, какие строки еще не покрыты, см. source_file_name.gcov в дереве исходного кода. В MariaDB 10.1 или ниже он находится в каталоге CMakeFiles, где хранятся объектные файлы. В MariaDB 10.2 он хранится вместе с исходными файлами.
  3. Внимательно подумайте над тестовым случаем, который покроет эти строки, которые не протестированы, и напишите его.

Инструменты

  • Вы можете использовать инструмент code-coverage-with-dgcov/dgcov для проверки покрытия для нового кода. Он специально разработан и поддерживается для MariaDB.
  • Для измерения покрытия кода также используется инструмент lcov.

Покрытие кода в buildbot

buildbot, система сборки MariaDB, выполняет автоматическое тестирование покрытия кода для каждого изменения.

Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают мнения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/code-coverage/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API