Atunyẹwo olominira ti PVS-Studio (Linux, C++)

Mo rii atẹjade kan ti PVS ti kọ lati ṣe itupalẹ labẹ Linux, o pinnu lati gbiyanju lori awọn iṣẹ akanṣe ti ara mi. Ati pe eyi ni ohun ti o jade ninu rẹ.


Awọn akoonu

  1. Плюсы
  2. Минусы
  3. Awọn esi
  4. Lẹhin Ọrọ

Плюсы

Atilẹyin idahun

Mo beere bọtini idanwo kan ati pe wọn fi ranṣẹ si mi ni ọjọ kanna.

Iṣẹtọ ko o iwe aṣẹ

A ṣakoso lati ṣe ifilọlẹ atunnkanka laisi awọn iṣoro eyikeyi. Iranlọwọ fun awọn aṣẹ console tun wa (botilẹjẹpe awọn ẹdun ọkan wa nibi, wo apakan Минусы).

Seese ti olona-asapo onínọmbà

Oluyanju naa ni aṣayan “boṣewa”. -j, gbigba onínọmbà lati wa ni ti gbe jade ni ni afiwe ni orisirisi awọn iṣẹ-ṣiṣe. Eleyi fi kan pupo ti akoko.

Iwoye ti o dara

Ọpọlọpọ awọn ọna kika ti o yatọ, lati ọrọ si muzzle webi kekere kan. Ni wiwo oju opo wẹẹbu rọrun, ṣoki, pẹlu awọn amọran lẹgbẹẹ awọn laini ninu koodu ati awọn ọna asopọ si awọn apejuwe iwadii.

Rọrun Integration sinu ijọ

Gbogbo awọn iwe-ipamọ wa lori oju opo wẹẹbu wọn, Mo le sọ pe ti a ba kọ iṣẹ akanṣe rẹ nipa lilo CMake, lẹhinna ohun gbogbo rọrun pupọ.

Awọn apejuwe aisan ti o dara

Ti o ba ṣe inajade ni ipo fullhtml, lẹhinna ifiranṣẹ kọọkan ni ọna asopọ si apejuwe aisan, pẹlu awọn alaye, awọn apẹẹrẹ koodu ati awọn ọna asopọ afikun.

Минусы

Aimọkan ti ede C ++ nipasẹ oluyanju

Laanu, PVS nigbakan ṣe awọn aṣiṣe sintasi ati ṣe ipilẹṣẹ awọn ifiranṣẹ rere eke nigbati koodu naa jẹ deede.

Fun apẹẹrẹ, iṣẹ kan wa ti o pada 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));
}

Bẹẹni ni koko ọrọ auto Le tumọ si void, ohun ti o jẹ fun auto. Ṣugbọn PVS ṣe agbejade awọn ifiranṣẹ wọnyi:

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.

Gan o lọra ojula

Bẹẹni, ni wiwo wẹẹbu lẹgbẹẹ ifiranṣẹ kọọkan ọna asopọ kan wa si apejuwe iwadii ti o baamu pẹlu awọn apẹẹrẹ. Ṣugbọn nigbati o ba tẹ ọna asopọ kan, o ni lati duro fun igba pipẹ, ati nigbami o ṣẹlẹ 504 Gateway Time-jade.

Ede

Gbogbo awọn apejuwe wa ni Russian, ti o jẹ nla. Ṣugbọn awọn ọna asopọ lati ijabọ naa nigbagbogbo yorisi ẹya Gẹẹsi. Yoo dara lati ni anfani lati yi ede pada ki o le wo awọn iwadii aisan lẹsẹkẹsẹ ni Russian. Emi ko ri iru aṣayan kan ni wiwo.

Korọrun lati ṣiṣẹ pẹlu awọn ipele iwadii nipasẹ console

Jẹ ki a bẹrẹ pẹlu otitọ pe awọn ofin meji lo (eyi pvs-studio-analyzer и plog-converter) awọn ọna kika oriṣiriṣi fun sisọ awọn iwadii aisan.

Iranlọwọ fun pvs-studio-analyzer ka:

-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

Mo ti lo igba pipẹ gbiyanju lati ro ero ibi ti mo ti lọ fi kun ("fifi awọn iye sii") awọn bọtini. Mo gbiyanju lati ṣe atokọ wọn niya nipasẹ aami idẹsẹ:

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

Mo gbiyanju lati forukọsilẹ bọtini ni ọpọlọpọ igba:

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

Ati pe lẹhinna ni Mo rii pe iwọnyi jẹ awọn iboju iparada! Ati pe o nilo akopọsugbon ko fi kun itumo. Fun apẹẹrẹ, lati gba awọn iwadii gbogbogbo, awọn iwadii fun awọn iṣapeye micro-ati MISRA, o nilo lati ṣe akopọ wọn (4 + 8 + 32 = 44):

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

Lilo awọn bitmasks ni awọn atọkun olumulo jẹ fọọmu buburu gbogbogbo. Gbogbo eyi le ṣe akopọ ninu inu, ati pe o le ṣeto awọn asia kan fun olumulo.

Ni afikun, nibẹ ni tun kan IwUlO plog-converter, eyiti o ṣe agbekalẹ alaye itupalẹ aimi ti eniyan le ṣee ka. O ni awọn iṣoro miiran.

Iranlọwọ fun eto plog-converter iroyin:

-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

Diẹ ninu awọn “awọn ipele” han nibi ti ko si tẹlẹ, ati pe Emi ko rii ohunkohun nipa wọn ninu iwe boya.

Ni gbogbogbo, ko ṣe kedere. Ti o ni idi ti mo ṣeto ohun gbogbo si o pọju.

A ìdìpọ aimọgbọnwa bura on Catch

Meji ninu awọn iṣẹ akanṣe mẹta ti Mo ṣe atupale lo ile-ikawe idanwo kan Catch2. Ati ipin kiniun ti awọn ifiranṣẹ (!!! 90 ninu 138 ni ọkan ati 297 ninu 344 ni ekeji !!!) ni fọọmu atẹle yii:

Atunyẹwo olominira ti PVS-Studio (Linux, C++)

Ko ṣe akiyesi multithreading

Ọpọlọpọ awọn idaniloju eke wa nipa awọn oniyipada ti ko yipada tabi awọn losiwajulosehin ailopin, lakoko ti iṣẹ pẹlu awọn oniyipada wọnyi waye lati oriṣiriṣi awọn okun, ati pe ti eyi ko ba jẹ bẹ, lẹhinna awọn idanwo ẹyọkan kii yoo ṣiṣẹ.

Atunyẹwo olominira ti PVS-Studio (Linux, C++)

Sibẹsibẹ, le a aimi analyzer ani ya yi sinu iroyin? Ko mọ.

Awọn esi

PVS ko rii awọn idun gidi eyikeyi ninu awọn iṣẹ akanṣe orisun ṣiṣi mi ti nwaye и Itele, bakannaa ninu iwe-iṣẹ iṣẹ, eyiti, fun awọn idi ti o han gbangba, Emi ko le ṣafihan. Lóòótọ́, ó yẹ ká fi sọ́kàn pé àwọn kùdìẹ̀-kudiẹ kan ti wà tẹ́lẹ̀ tí a sì ti ṣàtúnṣe rẹ̀ ṣáájú lílo Cppcheck и scan-build.

Ni gbogbogbo, iwunilori lati ọdọ gbogbo awọn olutupalẹ wọnyi jẹ isunmọ kanna: bẹẹni, wọn mu nkan kan, nigbakan paapaa nkan pataki, ṣugbọn lapapọ akopọ ti to.

O ṣee ṣe (ati pe emi tikalararẹ fẹ lati ronu bẹ) pe ẹgbẹ wa lo awọn iṣe idagbasoke sọfitiwia ti o gba wa laaye lati ṣe agbekalẹ iye ti o kere ju ti koodu shitty. O dara ki a ko ṣẹda awọn iṣoro ju lati bori wọn pẹlu akọni.

Nítorí náà, mo gba òmìnira láti fúnni ní ìmọ̀ràn lórí bí a ṣe ń kọ̀wé sí C++ lọ́nà tí a kò fi ní yìnbọn lu ẹsẹ̀ ẹnikẹ́ni tàbí kí n lu ẹnikẹ́ni ní iwájú orí.

Ṣe pupọ julọ ti awọn iwadii alakojọ

Ẹgbẹ wa nlo (ati gba ọ niyanju lati) awọn aṣayan akojọpọ atẹle wọnyi:

-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

Mu wọn ṣiṣẹ ninu iṣẹ akanṣe rẹ ki o kọ ẹkọ pupọ nipa koodu rẹ.

Stick si bošewa

Gbiyanju lati ma lo awọn ohun ti o gbẹkẹle pẹpẹ ti awọn analogues boṣewa wa, ati pe ti o ko ba le ṣe laisi wọn, fi ipari si wọn ni awọn bulọọki pataki fun awọn macros (tabi nkan miiran) ati nirọrun ma ṣe jẹ ki koodu rẹ ṣajọ labẹ awọn ipo ti ko ni atilẹyin.

Stick si awọn atunmọ iṣiṣẹ boṣewa

Afikun gbọdọ jẹ afikun, isodipupo gbọdọ jẹ isodipupo, ipe iṣẹ gbọdọ jẹ ipe iṣẹ, ẹda gbọdọ jẹ ẹda, gbe gbọdọ gbe, apoti gbọdọ jẹ iterable, iterator gbọdọ ni igbega. ++ ati yiyọ kuro *. Ati bẹbẹ lọ ati bẹbẹ lọ.

Mo ro pe ero naa jẹ kedere. Awọn apejọ ti iṣeto ti ko ṣe abuda, ṣugbọn pe gbogbo awọn olumulo ati awọn oluka koodu rẹ nireti lati rii. Maṣe gbiyanju lati ṣaja awọn ẹlomiran, bibẹẹkọ iwọ yoo ṣaja ararẹ.

Kọ koodu ibaramu

Ni akọkọ, Mo tumọ si ile-ikawe boṣewa. O jẹ iwunilori gaan pe awọn atọkun ti awọn kilasi ati awọn iṣẹ rẹ le ṣee lo pẹlu boṣewa ati awọn ile-ikawe miiran (fun apẹẹrẹ, Igbelaruge).

Lero ọfẹ lati wo STL ati awọn atọkun Igbelaruge. Pẹlu awọn imukuro toje, iwọ yoo rii apẹẹrẹ ti o yẹ nibẹ.

Ṣe pupọ julọ awọn irinṣẹ orisun ṣiṣi

Fun itupalẹ aimi kanna, o kere ju awọn irinṣẹ ọfẹ ọfẹ meji ti o le sopọ ni ẹẹkan si eyikeyi iṣẹ akanṣe pẹlu eto kikọ CMake.

O le ka diẹ sii nipa eyi ninu atẹjade mi laipe.

Lẹhin Ọrọ

Nikẹhin, Emi yoo fẹ lati fi rinlẹ pe Emi ko ṣe agbero lati ma lo PVS tabi eyikeyi awọn olutupalẹ aimi miiran. Ṣugbọn Mo gba ọ niyanju lati ronu nipa bii o ṣe ṣẹlẹ pe oluyẹwo aimi nigbagbogbo n wa awọn aṣiṣe pataki ninu koodu rẹ.

Eyi jẹ abajade nikan. A nilo lati wa ati imukuro idi naa.

orisun: www.habr.com

Fi ọrọìwòye kun