xintrea / mytetra_dev

MyTetra - smart crossplatform manager for information collecting / MyTetra - кроссплатформенный менеджер накопления информации / Официальная страница:
http://webhamster.ru/site/page/index/articles/projectcode/105
254 stars 55 forks source link

Статический анализ кода #128

Open and-semakin opened 4 years ago

and-semakin commented 4 years ago

Использование статических анализаторов кода в процессе разработки -- общепризнанно хорошая практика. Для кода на C++ есть несколько статических анализаторов, которые помогают находить различные ошибки (как в плане стиля оформления кода, так и в плане функционала).

На данный момент нашёл следующие:

Попробовал прогнать cppcheck по кодовой базе MyTetra из ветки experimental, отчёт можно найти здесь. Если хотите, то я мог бы попытаться починить эти предупреждения/ошибки и настроить прохождение этого линтера в Travis CI, так чтобы в последствии эта проверка автоматически прогонялась при создании Pull Request'ов (будет блокировать, если есть ошибки) или коммитов (будут просто надоедливые красные крестики).

Опыта разработки на C++ у меня не много, я в основном питонист, но я заинтересован в том, чтобы в MyTetra был хороший код :)

jubnzv commented 4 years ago

Вы можете повысить качество анализа cppcheck, используя опции, описанные в документации. Например, cppcheck поддерживает библиотеки -- дополнительные файлы конфигурации, в которых содержится информация о функциях популярных библиотек. Для данного проекта было бы логично подключить qt.cfg. Также бывает полезно указать стандарт и используемую версию языка: это позволит получить советы о возможной модернизации кода и задействовать дополнительные проверки для новых функций.

Вот пример отчёта, полученного для ветки experimental с помощью следующей команды:

$CPPCHECK/bin/cppcheck . -q -j4 --library=qt --enable=all \
    --language=c++ --std=c++14                            \
    -ithirdParty -iscript  2>&1 | tee cppcheck.log

Можно найти больше возможных ошибок, подключив опции вроде --inconclusive и добавив дополнительные файлы библиотек. Либо попробовать интегрировать cppcheck с используемой системой сборки.

and-semakin commented 4 years ago

 Спасибо за дополнение @jubnzv! Мир разработки на С++ мне далёк, поэтому я принёс сюда только то, что смог по-быстрому нагуглить :) Может быть скажете что-нибудь про другие линтеры? Например, люди очень хорошо отзываются про clang-tidy. Я не уверен, насколько его можно применять, если для сборки MyTetra используется gcc, а не clang.