AtradÄm rakstu, ka PVS tomÄr ir iemÄcÄ«jies analizÄt Linux vidÄ, un nolÄmu pamÄÄ£inÄt to savos projektos. Un Å”eit ir tas, kas no tÄ iznÄca.
Satelīte
Ätra atbalsta komanda
Es pieprasÄ«ju izmÄÄ£inÄjuma atslÄgu, tajÄ paÅ”Ä dienÄ to saÅÄmu.
Pietiekami saprotama dokumentÄcija
Analizatora palaiÅ”ana izdevÄs bez Ä«paÅ”Äm problÄmÄm. Ir arÄ« palÄ«dzÄ«ba konsoles komandÄm (lai gan Å”eit ir iebildumi, skat. sadaļu ).
MoguÄÄ«ba veikt analÄ«zi daudz pavedienos
Analizatoram ir "standarta" opcija -j, kas ļauj veikt analÄ«zi paralÄli vairÄkÄs uzdevumos. Tas ļoti ietaupa laiku.
Laba vizualizÄcija
Daudz dažÄdu izejas formÄtu, no teksta lÄ«dz nelielai tÄ«mekļa saskarnei. .
VienkÄrÅ”a integrÄcija projektÄ
Visa dokumentÄcija ir viÅu vietnÄ, teikÅ”u tikai, ka, ja jÅ«su projekts tiek veidots ar CMake, tad viss ir ļoti vienkÄrÅ”i.
Labi apraksti diagnostikÄm
Ja Ä£enerÄt izeju režīmÄ fullhtml, tad katram ziÅojumam ir saite uz diagnostikas aprakstu ar paskaidrojumiem, koda piemÄriem un papildu saitÄm.
Analizatora nezinÄÅ”ana par C++ valodu
DiemžÄl, PVS dažreiz kļūdÄs sintaksÄ un Ä£enerÄ viltus pozitÄ«vus ziÅojumus pat tad, ja kods ir pilnÄ«gi korekts.
PiemÄram, ir funkcija, kas atgriež 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));
}JÄ, atslÄgvÄrds auto var nozÄ«mÄt void, tÄdÄļ tas tÄ arÄ« ir. auto. Bet PVS izdeva Å”Ädus ziÅojumus:
dynamic_tuple_management.hpp:29:1: kļūda: V591 Funkcijai, kurai nav void atgrieztÄjs, jÄatgriež vÄrtÄ«ba.
dynamic_tuple_management.hpp:29:1: kļūda: V2542 Funkcijai ar ne-void atgrieztÄju jÄatgriež vÄrtÄ«ba no visiem izejas ceļiem.Ä»oti lÄns tÄ«mekļa vietne
JÄ, tÄ«mekļa saskarnÄ blakus katram ziÅojumam ir saite uz atbilstoÅ”o diagnostikas aprakstu ar piemÄriem. Bet, noklikŔķinot uz saites, jÄgaida diezgan ilgi, dažreiz pat .
Valoda
Visi apraksti ir krievu valodÄ, tas ir lieliski. Bet saites no ziÅojuma vienmÄr ved uz angļu versiju. BÅ«tu jauki, ja bÅ«tu iespÄjams pÄrslÄgt valodu, lai diagnostikas varÄtu skatÄ«t uzreiz krieviski. Å Ädus iespÄju es saskarnÄ neatradu.
NepatÄ«kami strÄdÄt ar diagnostikas lÄ«meÅiem caur konsoli
SÄksim ar to, ka divÄm izmantotajÄm komandÄm (tas ir pvs-studio-analyzer un plog-converter) ir dažÄdi diagnostikas uzdevumu formÄti.
Palīgs pvs-studio-analyzer apgalvo:
-a [MODE], --analysis-mode [MODE]
MODE nosaka brÄ«dinÄjumu veidu:
1 - 64-bit kļūdas;
2 - rezervÄts;
4 - VispÄrÄjÄ analÄ«ze;
8 - Mikro-optimizÄcija;
16 - Klientu specifiskas prasības;
32 - MISRA.
Režīmus var apvienot, pievienojot vÄrtÄ«bas
NoklusÄjums: 4Ilgi mÄÄ£inÄju saprast, kur tad ir jÄpievieno pievienojot (āadding the valuesā) atslÄgas. MÄÄ£inÄju uzskaitÄ«t ar komatu:
pvs-studio-analyzer analyze ... -a 1,4,16MÄÄ£inÄju rakstÄ«t atslÄgu vairÄkas reizes:
pvs-studio-analyzer analyze ... -a 1 -a 4 -a 16Un tikai tad es sapratu, ka tÄs ir bitu maskas! Un jÄ saskaitÄ«t, nevis pievienojot vÄrtÄ«bas. PiemÄram, lai iegÅ«tu vispÄrÄjo diagnostiku, diagnostiku par mikro-optimizÄcijÄm un MISRA, tÄs jÄsaskaita (4 + 8 + 32 = 44):
pvs-studio-analyzer analyze ... -a 44Bitmasku izmantoÅ”ana lietotÄju saskarnÄs parasti tiek uzskatÄ«ta par sliktu toni. Viss to varÄja saskaitÄ«t arÄ« iekÅ”Äji, bet lietotÄjam iesniegt karogu kopumu.
TurklÄt ir vÄl rÄ«ks plog-converter, kas Ä£enerÄ cilvÄkam saprotamu informÄciju par statisko analÄ«zi. Tam ir citi jautÄjumi.
Programmas palÄ«dzÄ«ba plog-converter ziÅo:
-a, --analyzer Nosaka analÄ«zator(us) un lÄ«meni/lÄ«meÅus, kas
tiks izmantoti filtrÄÅ”anai, proti,
'GA:1,2;64:1;OP:1,2,3;CS:1;MISRA:1,2'
NoklusÄjums: GA:1,2Å eit parÄdÄ«jÄs kaut kÄdi ālÄ«meÅiā, kas iepriekÅ” nevienÄ vietÄ nebija un dokumentÄcijÄ es par tiem arÄ« neko neatradu.
Pavisam, neskaidri. TÄpÄc es visu iestatÄ«ju maksimÄli.
Jaunu muļķīgu pÄrmetumu jÅ«ra uz Catch
Divos no trim projektiem, kurus es analizÄju, tiek izmantota moduļu testÄÅ”anas bibliotÄka . Un lielÄkÄ daļa ziÅojumu (!!! 90 no 138 vienÄ un 297 no 344 otrÄ !!!) izskatÄs Å”Ädi:

Neizskata daudzplūsmu
Daudz viltus pozitÄ«vo noteikumu par it kÄ nemainÄ«gÄm mainÄ«gajÄm vai bezgalÄ«giem cikliem, savukÄrt datu apstrÄde notiek no dažÄdiem pavedieniem, un, ja tÄ nebÅ«tu, tad moduļu testi nedarbotos.

TomÄr vai statiskais analizators vispÄr varÄtu to Åemt vÄrÄ? Nezinu.
PVS nenokÄrtojis nevienu Ä«stu kļūdu manÄs atvÄrtajÄs projektÄs un , kÄ arÄ« darba projektÄ, ko es, saprotamu iemeslu dÄļ, nevaru uzrÄdÄ«t. PatiesÄ«bÄ ir jÄÅem vÄrÄ, ka dažas nepilnÄ«bas jau tika atrastas un labotas iepriekÅ”. un .
KopumÄ iespaids par visiem Å”iem analÄ«zes rÄ«kiem ir aptuveni vienÄdi: jÄ, tie kaut ko atpazÄ«st, dažreiz pat kaut ko svarÄ«gu, bet kopumÄ kompilatoram pietiek.
IespÄjams (un man personÄ«gi tas patÄ«k domÄt), ka mÅ«su komanda izmanto tÄdas programmatÅ«ras izstrÄdes prakses, kas ļauj Ä£enerÄt minimÄlu sliktÄ koda daudzumu. LabÄk neradÄ«t problÄmas, nekÄ varonÄ«gi tÄs pÄrvarÄt.
TÄdÄļ uzÅemos drosmi sniegt dažus padomus par to, kÄ rakstÄ«t C++ valodÄ tÄ, lai nesistÄ«tos sev kÄjÄs un neiegÅ«tu ar grÄbekli pa pieri.
Izmantojiet kompilatora diagnostiku maksimÄli
MÅ«su komanda izmanto (un jums iesaka) Å”Ädas kompilÄcijas opcijas:
-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-promoIekļaujiet tÄs savÄ projektÄ, uzzinÄsiet daudz jauna par savu kodu.
IevÄrojiet standartu
Centieties neizmantot platformu atkarÄ«gus rÄ«kus, ja ir standarta analoga, bet ja bez tiem nepietiks, iesaiÅojiet tos Ä«paÅ”os blokos zem makro (vai kÄ citÄdi) un vienkÄrÅ”i nepieļaujiet, ka jÅ«su kods tiek kompilÄts neatbalstÄ«tajos apstÄkļos.
IevÄrojiet standarta operÄciju semantiku
SaskaitīŔana jÄbÅ«t saskaitīŔanai, reizÄÅ”ana ā reizÄÅ”anai, funkcijas izsaukums ā funkcijas izsaukt, kopÄÅ”ana jÄbÅ«t kopÄÅ”anai, pÄrvietoÅ”ana ā pÄrvietot, konteineram jÄbÅ«t iterÄjamam, iterÄtors jÄbÅ«t ar virzÄ«bu ++ un dereferencÄÅ”anu *. Un tÄ tÄlÄk, un tÄ tÄlÄk.
DomÄju, doma skaidra. Ir pastÄvÄ«gi nosacÄ«jumi, kas nav obligÄti izpildÄmi, bet ko gaida redzÄt visi jÅ«su koda lietotÄji un lasÄ«tÄji. Neskatieties, kÄ pievilt citus, citÄdi pÄrsteigsiet sevi.
Rakstiet saderīgu kodu
Vispirms es domÄju par standarta bibliotÄku. ļoti vÄlams, lai jÅ«su klaÅ”u un funkciju saskarnes varÄtu izmantot kopÄ ar standarta un citÄm bibliotÄkÄm (piemÄram, Boost).
Neaizdedziniet ieskatÄ«ties STL un Boost saskarnÄs. Reti izÅÄmumi tur jÅ«s redzÄsiet cienÄ«gu piemÄrti sekot.
Izmantojiet maksimÄli atvÄrtos rÄ«kus
TÄdam paÅ”am statiskajam analÄ«zes rÄ«kam ir vismaz divi atvÄrti bezmaksas rÄ«ki, kas reÄ£istrÄjas āreizÄā jebkuram projektam ar CMake bÅ«ves sistÄmu.
.
NobeigumÄ gribu uzsvÄrt, ka es nesaku, ka nevajadzÄtu izmantot PVS vai citus statiskos analizatorus. TaÄu es aicinu padomÄt, kÄdÄļ static analizators pastÄvÄ«gi atrod jÅ«su kodÄ bÅ«tiskas kļūdas.
Tas ir tikai sekas. JÄmeklÄ un jÄnovÄrÅ” cÄlonis.
Avots: habr.com
