Ukaguzi wa kujitegemea wa PVS-Studio (Linux, C++)

Niliona chapisho ambalo PVS ilijifunza kuchanganua chini ya Linux, na niliamua kujaribu kwenye miradi yangu mwenyewe. Na hii ndiyo iliyotoka ndani yake.


yaliyomo

  1. Faida
  2. Africa
  3. Matokeo ya
  4. Baada ya

Faida

Msaada msikivu

Niliomba ufunguo wa majaribio na wakanitumia siku hiyo hiyo.

Nyaraka wazi kabisa

Tuliweza kuzindua analyzer bila matatizo yoyote. Usaidizi wa amri za koni unapatikana pia (ingawa kuna malalamiko hapa, angalia sehemu Africa).

Uwezekano wa uchambuzi wa nyuzi nyingi

Analyzer ina chaguo "kiwango". -j, kuruhusu uchambuzi ufanyike sambamba katika kazi kadhaa. Hii inaokoa muda mwingi.

Taswira nzuri

Maumbizo mengi tofauti ya towe, kutoka kwa maandishi hadi mdomo mdogo wa wavuti. Kiolesura cha wavuti ni rahisi, kifupi, na vidokezo karibu na mistari katika msimbo na viungo vya maelezo ya uchunguzi..

Ujumuishaji rahisi kwenye mkusanyiko

Nyaraka zote ziko kwenye tovuti yao, naweza kusema tu kwamba ikiwa mradi wako umejengwa kwa kutumia CMake, basi kila kitu ni rahisi sana.

Maelezo mazuri ya uchunguzi

Ikiwa utatoa pato katika hali fullhtml, basi kila ujumbe una kiungo cha maelezo ya uchunguzi, na maelezo, mifano ya kanuni na viungo vya ziada.

Africa

Kutojua lugha ya C++ na kichanganuzi

Kwa bahati mbaya, PVS wakati mwingine hufanya makosa ya sintaksia na kutoa ujumbe chanya wa uwongo wakati msimbo ni sahihi kabisa.

Kwa mfano, kuna kazi ambayo inarudi 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));
}

Ndio neno kuu auto Inaweza kumaanisha void, hiyo ni kwa ajili yake auto. Lakini PVS ilitoa ujumbe ufuatao:

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.

Tovuti polepole sana

Ndio, katika kiolesura cha wavuti karibu na kila ujumbe kuna kiunga cha maelezo yanayolingana ya uchunguzi na mifano. Lakini unapobofya kiungo, unapaswa kusubiri kwa muda mrefu, na wakati mwingine hutokea 504 Muda wa Lango wa Kuisha.

Lugha

Maelezo yote ni katika Kirusi, ambayo ni nzuri. Lakini viungo kutoka kwa ripoti daima husababisha toleo la Kiingereza. Itakuwa nzuri kuwa na uwezo wa kubadili lugha ili uweze kuona uchunguzi mara moja katika Kirusi. Sikupata chaguo kama hilo kwenye kiolesura.

Haifai kufanya kazi na viwango vya uchunguzi kupitia kiweko

Wacha tuanze na ukweli kwamba amri mbili zilizotumiwa (hii pvs-studio-analyzer ΠΈ plog-converter) miundo tofauti ya kubainisha uchunguzi.

Msaada kwa pvs-studio-analyzer inasoma:

-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

Nilitumia muda mrefu kujaribu kujua niende wapi ongeza ("kuongeza maadili") vitufe. Nilijaribu kuziorodhesha zikitenganishwa na koma:

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

Nilijaribu kusajili ufunguo mara kadhaa:

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

Na hapo ndipo nilipogundua kuwa hizi zilikuwa masks kidogo! Na unahitaji muhtasarina sio ongeza maana. Kwa mfano, ili kupata utambuzi wa jumla, utambuzi wa uboreshaji mdogo na MISRA, unahitaji kuzijumlisha (4 + 8 + 32 = 44):

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

Kutumia bitmasks katika miingiliano ya watumiaji kwa ujumla ni aina mbaya. Haya yote yanaweza kufupishwa ndani, na seti ya bendera inaweza kuwekwa kwa ajili ya mtumiaji.

Kwa kuongeza, pia kuna matumizi plog-converter, ambayo hutoa taarifa za uchanganuzi tuli zinazoweza kusomeka na binadamu. Ana matatizo mengine.

Msaada kwa programu plog-converter ripoti:

-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

Baadhi ya "ngazi" zilionekana hapa ambazo hazikuwepo hapo awali, na sikupata chochote juu yao katika nyaraka pia.

Kwa ujumla, haijulikani wazi. Ndiyo sababu niliweka kila kitu kwa kiwango cha juu.

Kundi la watu wanaoapa kijinga kwenye Catch

Miradi miwili kati ya mitatu niliyochanganua hutumia maktaba ya upimaji wa kitengo Kukamata2. Na sehemu kubwa ya jumbe (!!! 90 kati ya 138 katika moja na 297 kati ya 344 katika nyingine!!!) zina fomu ifuatayo:

Ukaguzi wa kujitegemea wa PVS-Studio (Linux, C++)

Haizingatii usomaji mwingi

Kuna mambo mengi mazuri ya uwongo kuhusu vigezo vinavyodaiwa kuwa visivyobadilika au vitanzi visivyo na mwisho, wakati kazi na vigezo hivi hutokea kutoka kwa nyuzi tofauti, na ikiwa hii sivyo, basi vipimo vya kitengo havitafanya kazi.

Ukaguzi wa kujitegemea wa PVS-Studio (Linux, C++)

Walakini, mchambuzi tuli anaweza hata kuzingatia hii? Sijui.

Matokeo ya

PVS haikupata hitilafu zozote katika miradi yangu ya chanzo huria Kupasuka ΠΈ Ifuatayo, pamoja na katika rasimu ya kazi, ambayo, kwa sababu za wazi, siwezi kuwasilisha. Ukweli, inafaa kukumbuka kuwa mapungufu kadhaa tayari yamekamatwa na kusahihishwa mapema kwa kutumia Cppcheck ΠΈ scan-build.

Kwa ujumla, hisia kutoka kwa wachambuzi hawa wote ni takriban sawa: ndiyo, wanapata kitu, wakati mwingine hata kitu muhimu, lakini kwa ujumla mkusanyaji ni wa kutosha.

Inawezekana (na mimi binafsi napenda kufikiria hivyo) kwamba timu yetu inatumia mazoea ya kuunda programu ambayo huturuhusu kutoa kiwango cha chini cha msimbo mbaya. Ni bora sio kuunda shida kuliko kuzishinda kishujaa.

Kwa hivyo, ninachukua uhuru wa kutoa ushauri juu ya jinsi ya kuandika kwa C++ kwa njia ambayo nisipige miguu ya mtu yeyote au kumpiga mtu yeyote kwenye paji la uso na reki.

Tumia vyema uchunguzi wa mkusanyaji

Timu yetu hutumia (na kukushauri) chaguo zifuatazo za ujumuishaji:

-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

Wawezeshe katika mradi wako na ujifunze mengi kuhusu msimbo wako.

Shikilia kiwango

Jaribu kutotumia vitu vinavyotegemea jukwaa ikiwa kuna analogi za kawaida, na ikiwa huwezi kabisa kufanya bila hizo, zifunge kwa vizuizi maalum vya macros (au kitu kingine) na usiruhusu nambari yako ikusanywe chini ya hali zisizotumika.

Shikilia semantiki za kawaida za uendeshaji

Nyongeza lazima iwe ya kujumlisha, kuzidisha lazima iwe kuzidisha, simu ya chaguo la kukokotoa lazima iwe simu ya utendakazi, nakala lazima iwe nakala, kubeba, kontena lazima iweze kuelezeka, kiboreshaji lazima kiwe na tangazo. ++ na kughairi *. Na kadhalika na kadhalika.

Nadhani wazo liko wazi. Kuna kanuni zilizoanzishwa ambazo hazilazimiki, lakini ambazo watumiaji na wasomaji wote wa msimbo wako wanatarajia kuona. Usijaribu kuwashinda wengine, vinginevyo utajishinda mwenyewe.

Andika msimbo unaoendana

Kwanza kabisa, ninamaanisha maktaba ya kawaida. Inastahili sana kwamba miingiliano ya madarasa na utendaji wako inaweza kutumika na maktaba za kawaida na zingine (kwa mfano, Boost).

Jisikie huru kuangalia violesura vya STL na Boost. Isipokuwa nadra, utaona mfano mzuri wa kuigwa hapo.

Tumia vyema zana huria

Kwa uchanganuzi sawa wa tuli, kuna angalau zana mbili za bure ambazo zinaweza kuunganishwa mara moja tu kwa mradi wowote na mfumo wa kujenga wa CMake.

Unaweza kusoma zaidi kuhusu hili katika uchapishaji wangu wa hivi majuzi.

Baada ya

Hatimaye, ningependa kusisitiza kwamba sitetei kutotumia PVS au vichanganuzi vingine vyovyote. Lakini ninakuhimiza ufikirie jinsi ilivyotokea kwamba analyzer tuli daima hupata makosa makubwa katika nambari yako.

Haya ni matokeo tu. Tunahitaji kutafuta na kuondoa sababu.

Chanzo: mapenzi.com

Kuongeza maoni