Баррасии мустақили PVS-Studio (Linux, C++)

Ман як нашрияеро дидам, ки PVS тањлилро дар зери Linux омўхтааст ва тасмим гирифт, ки онро дар лоињањои худам санљам. Ва ин аст он чизе ки аз он баромад.


Мундариҷа

  1. Плюсы
  2. Минусы
  3. Натиҷаҳо
  4. Пас аз он

Плюсы

Дастгирии ҷавобӣ

Ман калиди озмоиширо дархост кардам ва онҳо ҳамон рӯз онро ба ман фиристоданд.

Ҳуҷҷатҳои хеле равшан

Мо муяссар шудем, ки анализаторро бе ягон мушкилй ба кор андозем. Кӯмак барои фармонҳои консол низ дастрас аст (гарчанде ки дар ин ҷо баъзе шикоятҳо мавҷуданд, ба қисм нигаред Минусы).

Имконияти таҳлили чанд ришта

Анализатор варианти "стандартӣ" дорад -j, имкон медиҳад, ки таҳлил дар як қатор вазифаҳо дар як вақт гузаронида шавад. Ин хеле вактро сарфа мекунад.

Визуализатсияи хуб

Бисёр форматҳои баромади гуногун, аз матн то веби хурд. Интерфейси веб қулай, мухтасар аст, бо маслиҳатҳо дар паҳлӯи сатрҳои код ва истинодҳо ба тавсифи ташхис.

Интегратсияи осон ба маҷлис

Ҳама ҳуҷҷатҳо дар вебсайти онҳо мавҷуданд, ман танҳо гуфта метавонам, ки агар лоиҳаи шумо бо истифода аз CMake сохта шуда бошад, пас ҳама чиз хеле содда аст.

Тавсифи хуби ташхис

Агар шумо баромадро дар реҷа тавлид кунед fullhtml, пас ҳар як паём дорои истинод ба тавсифи ташхис, бо тавзеҳот, мисолҳои код ва истинодҳои иловагӣ.

Минусы

Надонистани забони C++ аз ҷониби анализатор

Мутаассифона, PVS баъзан хатогиҳои синтаксисиро мекунад ва ҳангоми комилан дуруст будани код паёмҳои мусбати бардурӯғ тавлид мекунад.

Масалан, функсияе вуҷуд дорад, ки бармегардад void:

template <typename T>
auto copy (const void * source, void * destination)
    ->
        std::enable_if_t
        <
            std::is_copy_constructible<T>::value
        >
{
    new (destination) T(*static_cast<const T *>(source));
}

Бале калимаи калидӣ auto Дар назар дошта метавонад void, ин барои он аст мошин. Аммо PVS паёмҳои зеринро истеҳсол кард:

dynamic_tuple_management.hpp:29:1: error: V591 Non-void function should return a value.
dynamic_tuple_management.hpp:29:1: error: V2542 Function with a non-void return type should return a value from all exit paths.

Сайти хеле суст

Бале, дар интерфейси веб дар паҳлӯи ҳар як паём истинод ба тавсифи ташхиси мувофиқ бо мисолҳо мавҷуд аст. Аммо вақте ки шумо истинодро пахш мекунед, шумо бояд муддати тӯлонӣ интизор шавед ва баъзан ин рӯй медиҳад Вақти тамомшавии 504 Gateway.

забон

Ҳама тавсифҳо бо забони русӣ ҳастанд, ки ин хеле хуб аст. Аммо истинодҳо аз гузориш ҳамеша ба версияи англисӣ оварда мерасонанд. Хуб мешуд, ки забонро иваз карда тавонед, то дарҳол ташхисро бо забони русӣ бинед. Ман чунин вариантро дар интерфейс наёфтам.

Кор бо сатҳҳои ташхис тавассути консол номувофиқ аст

Биёед аз он оғоз кунем, ки ин ду фармон истифода шудаанд (ин pvs-studio-analyzer и plog-converter) форматҳои гуногун барои муайян кардани ташхис.

Кӯмак барои pvs-studio-analyzer мехонад:

-a [MODE], --analysis-mode [MODE]
    MODE defines the type of warnings:
    1 - 64-bit errors;
    2 - reserved;
    4 - General Analysis;
    8 - Micro-optimizations;
    16 - Customers Specific Requests;
    32 - MISRA.
    Modes can be combined by adding the values
    Default: 4

Ман муддати тӯлонӣ кӯшиш кардам, ки ба куҷо равам илова кардан ("илова кардани арзишҳо") калидҳо. Ман кӯшиш кардам, ки онҳоро бо вергул ҷудо кунам:

pvs-studio-analyzer analyze ... -a 1,4,16

Ман якчанд маротиба кӯшиш кардам, ки калидро сабт кунам:

pvs-studio-analyzer analyze ... -a 1 -a 4 -a 16

Ва танҳо он вақт ман фаҳмидам, ки инҳо ниқобҳои каме буданд! Ва ба шумо лозим аст ҷамъбаства не илова кардан маънохо. Масалан, барои гирифтани ташхиси умумӣ, ташхис барои микрооптимизатсияҳо ва MISRA, шумо бояд онҳоро ҷамъбаст кунед (4 + 8 + 32 = 44):

pvs-studio-analyzer analyze ... -a 44

Истифодаи ниқобҳо дар интерфейсҳои корбар одатан шакли бад аст. Ҳамаи инро метавон дар дохили худ ҷамъбаст кард ва маҷмӯи парчамҳоро барои корбар муқаррар кардан мумкин аст.

Илова бар ин, як коммуналӣ низ вуҷуд дорад plog-converter, ки иттилооти таҳлили статикиро, ки барои одамон хондан мумкин аст, тавлид мекунад. Вай мушкилоти дигар дорад.

Кӯмак барои барнома plog-converter маърӯзаҳо:

-a, --analyzer            Specifies analyzer(s) and level(s) to be
                          used for filtering, i.e.
                          'GA:1,2;64:1;OP:1,2,3;CS:1;MISRA:1,2'
                          Default: GA:1,2

Дар ин ҷо баъзе "сатҳҳо" пайдо шуданд, ки қаблан вуҷуд надоштанд ва ман дар ҳуҷҷатҳо низ дар бораи онҳо чизе наёфтам.

Умуман, маълум нест. Аз ин рӯ, ман ҳама чизро ба ҳадди аксар гузоштам.

Як хӯшаи дашномҳои аблаҳона дар бораи Catch

Аз се лоиҳаи ман дутоаш аз китобхонаи санҷишии воҳид истифода мебаранд Catch2. Ва ҳиссаи шер аз паёмҳо (!!! 90 аз 138 дар як ва 297 аз 344 дар дигар!!!) шакли зерин дорад:

Баррасии мустақили PVS-Studio (Linux, C++)

Якчанд риштаро ба назар намегирад

Дар бораи тағирёбандаҳои гӯё тағирнаёбанда ё ҳалқаҳои беохир бисёр мусбатҳои бардурӯғ мавҷуданд, дар ҳоле ки кор бо ин тағирёбандаҳо аз риштаҳои гуногун сурат мегирад ва агар ин тавр намебуд, санҷишҳои воҳидҳо кор намекунанд.

Баррасии мустақили PVS-Studio (Linux, C++)

Аммо, оё таҳлилгари статикӣ ҳатто инро ба назар гирифта метавонад? Намедонам.

Натиҷаҳо

PVS дар лоиҳаҳои кушодаи ман ягон хатогиҳои воқеӣ пайдо накард дарида и Проксима, инчунин дар лоидаи корй, ки бо сабабдои маълум пешнидод карда наметавонам. Дуруст аст, ки бояд дар хотир дошт, ки баъзе камбудиҳо аллакай қаблан ошкор ва ислоҳ карда шудаанд Cppcheck и scan-build.

Умуман, таассуроти ҳамаи ин анализаторҳо тақрибан як аст: бале, онҳо чизеро, баъзан ҳатто чизи муҳимро мегиранд, аммо дар маҷмӯъ компилятор кофӣ аст.

Мумкин аст (ва шахсан ман чунин фикр карданро дӯст медорам), ки дастаи мо таҷрибаҳои таҳияи нармафзорро истифода мебарад, ки ба мо имкон медиҳанд, ки ҳадди ақалли коди шиканҷаро тавлид кунем. Мушкилотро ба миён наовардан беҳтар аст, аз он ки онҳоро қаҳрамонона бартараф кунем.

Аз ин рӯ, ман озодона маслиҳат медиҳам, ки чӣ гуна дар C++ нависед, то ба пойи касе тир наандозад ё ба пешонии касе бо мола назанад.

Аз ташхиси компилятор бештар истифода баред

Дастаи мо имконоти зеринро истифода мебарад (ва ба шумо маслиҳат медиҳад):

-Werror

-Wall
-Wextra
-Wpedantic

-Wcast-align
-Wcast-qual
-Wconversion
-Wctor-dtor-privacy
-Wenum-compare
-Wfloat-equal
-Wnon-virtual-dtor
-Wold-style-cast
-Woverloaded-virtual
-Wredundant-decls
-Wsign-conversion
-Wsign-promo

Онҳоро дар лоиҳаи худ фаъол созед ва дар бораи рамзи худ бисёр чизҳоро омӯзед.

Ба стандарт риоя кунед

Кӯшиш кунед, ки чизҳои аз платформа вобастаро истифода набаред, агар аналогҳои стандартӣ вуҷуд дошта бошанд ва агар шумо комилан бе онҳо кор карда наметавонед, онҳоро дар блокҳои махсус барои макросҳо (ё чизи дигар) печонед ва танҳо нагузоред, ки коди шумо дар шароити дастгирӣнашаванда тартиб дода шавад.

Ба семантикаи амалиёти стандартӣ часпида

Илова бояд илова бошад, зарб бояд зарб бошад, занги функсия бояд занги функсия бошад, нусха бояд нусхабардорӣ карда шавад, интиқол бояд интиқол дода шавад, контейнер бояд такроршаванда бошад, итератор бояд пешбарӣ дошта бошад. ++ ва барҳам додани истинод *. Ва гайра ва гайра.

Ман фикр мекунам, ки идея равшан аст. Конвенсияҳои муқарраршуда мавҷуданд, ки ҳатмӣ нестанд, аммо ҳамаи корбарон ва хонандагони коди шумо интизори дидани онҳо ҳастанд. Кӯшиш накунед, ки дигаронро фиреб диҳед, вагарна худатонро фиреб медиҳед.

Рамзи мувофиқро нависед

Пеш аз хама китобхонаи стандартиро дар назар дорам. Хеле матлуб аст, ки интерфейсҳои синфҳо ва функсияҳои шумо метавонанд бо китобхонаҳои стандартӣ ва дигар китобхонаҳо истифода шаванд (масалан, Boost).

Озод ҳис ба интерфейсҳои STL ва Boost нигаред. Ба истиснои истисноҳои нодир, шумо дар он ҷо намунаи шоистаеро хоҳед дид.

Аз асбобҳои кушодаасос бештар истифода баред

Барои ҳамон як таҳлили статикӣ, ҳадди аққал ду асбоби ройгони кушод мавҷуданд, ки метавонанд танҳо як маротиба ба ҳама гуна лоиҳа бо системаи сохтани CMake пайваст шаванд.

Шумо метавонед дар ин бора бештар дар нашрияи охирини ман бихонед.

Пас аз он

Дар охир, ман мехоҳам таъкид намоям, ки ман тарафдори истифодаи PVS ё дигар анализаторҳои статикӣ нестам. Аммо ман шуморо ташвиқ мекунам, ки дар бораи он фикр кунед, ки чӣ гуна ҳодиса рӯй дод, ки анализатори статикӣ ҳамеша дар коди шумо хатогиҳои назаррасро пайдо мекунад.

Ин танҳо натиҷа аст. Мо бояд сабабро чустучу ва бартараф кунем.

Манбаъ: will.com

Илова Эзоҳ