Niliona chapisho ambalo PVS ilijifunza kuchanganua chini ya Linux, na niliamua kujaribu kwenye miradi yangu mwenyewe. Na hii ndiyo iliyotoka ndani yake.
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:
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.
Walakini, mchambuzi tuli anaweza hata kuzingatia hii? Sijui.
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:
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.
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.