Uchambuzi tuli - kutoka utangulizi hadi ujumuishaji

Umechoshwa na ukaguzi usio na mwisho wa msimbo au utatuzi, wakati mwingine unafikiria jinsi ya kurahisisha maisha yako. Na baada ya kutafuta kidogo, au kwa kujikwaa kwa bahati mbaya, unaweza kuona maneno ya uchawi: "Uchambuzi wa tuli". Hebu tuone ni nini na jinsi inavyoweza kuingiliana na mradi wako.

Uchambuzi tuli - kutoka utangulizi hadi ujumuishaji
Kwa kweli, ikiwa unaandika kwa lugha yoyote ya kisasa, basi, bila hata kutambua, uliiendesha kupitia analyzer tuli. Ukweli ni kwamba mkusanyaji yeyote wa kisasa hutoa, ingawa ni seti ndogo ya maonyo juu ya shida zinazowezekana katika nambari. Kwa mfano, wakati wa kuunda nambari ya C++ kwenye Visual Studio unaweza kuona yafuatayo:

Uchambuzi tuli - kutoka utangulizi hadi ujumuishaji
Katika pato hili tunaona kwamba kutofautiana ilikuwa haijawahi kutumika popote katika kazi. Kwa hivyo kwa ukweli, karibu kila wakati ulitumia kichanganuzi rahisi cha nambari tuli. Hata hivyo, tofauti na wachanganuzi wa kitaalamu kama vile Coverity, Klocwork au PVS-Studio, maonyo yanayotolewa na mkusanyaji yanaweza kuonyesha matatizo madogo tu.

Ikiwa haujui kwa hakika uchambuzi tuli ni nini na jinsi ya kuutekeleza, soma makala hiiili kujifunza zaidi kuhusu mbinu hii.

Kwa nini unahitaji uchambuzi wa tuli?

Kwa kifupi: kuongeza kasi na kurahisisha.

Uchanganuzi tuli hukuruhusu kupata shida nyingi tofauti katika msimbo: kutoka kwa utumiaji mbaya wa muundo wa lugha hadi uchapaji. Kwa mfano, badala ya

auto x = obj.x;
auto y = obj.y;
auto z = obj.z;

Uliandika nambari ifuatayo:

auto x = obj.x;
auto y = obj.y;
auto z = obj.x;

Kama unaweza kuona, kuna makosa ya kuandika kwenye mstari wa mwisho. Kwa mfano, PVS-Studio inatoa onyo lifuatalo:

V537 Zingatia kukagua usahihi wa matumizi ya kipengee cha 'y'.

Ikiwa unataka kuingiza mikono yako kwenye kosa hili, jaribu mfano uliotengenezwa tayari katika Kichunguzi cha Mkusanyaji: *kulia*.

Na kama unavyoelewa, si mara zote inawezekana kulipa kipaumbele kwa sehemu kama hizo za nambari mara moja, na kwa sababu ya hii, unaweza kukaa chini ukirekebisha kwa saa nzuri, ukishangaa kwa nini kila kitu kinafanya kazi kwa kushangaza.

Walakini, hii ni kosa wazi. Je, ikiwa msanidi programu aliandika msimbo mdogo kwa sababu amesahau ujanja fulani wa lugha? Au hata kuruhusiwa katika kanuni tabia isiyobainishwa? Kwa bahati mbaya, visa kama hivyo ni vya kawaida kabisa na sehemu kubwa ya wakati hutumiwa kutatua msimbo mahususi wa kufanya kazi ambao una makosa ya kuchapa, makosa ya kawaida au tabia isiyobainishwa.

Ni kwa hali hizi kwamba uchambuzi wa tuli ulionekana. Huyu ni msaidizi wa msanidi programu ambaye ataonyesha matatizo mbalimbali katika kanuni na kueleza katika nyaraka kwa nini si lazima kuandika kwa njia hii, nini inaweza kusababisha na jinsi ya kurekebisha. Hapa kuna mfano wa jinsi inavyoweza kuonekana: *kulia*.

Unaweza kupata makosa ya kuvutia zaidi ambayo analyzer anaweza kugundua katika makala:

Sasa kwa kuwa umesoma nyenzo hii na umeshawishika na manufaa ya uchanganuzi tuli, unaweza kutaka kuijaribu. Lakini wapi kuanza? Jinsi ya kuunganisha zana mpya katika mradi wako wa sasa? Na jinsi ya kuanzisha timu kwake? Utapata majibu ya maswali haya hapa chini.

Kumbuka. Uchanganuzi tuli hauchukui nafasi au kughairi kitu muhimu kama ukaguzi wa kanuni. Inakamilisha mchakato huu, kusaidia kutambua na kusahihisha makosa ya kuandika, makosa na miundo hatari mapema. Ni vyema zaidi kuzingatia mapitio ya kanuni juu ya algoriti na uwazi wa kanuni, badala ya kutafuta mabano yaliyowekwa vibaya au soma vipengele vya ulinganifu vinavyochosha.

0. Kupata kujua chombo

Yote huanza na toleo la majaribio. Hakika, ni vigumu kuamua kuanzisha kitu katika mchakato wa maendeleo ikiwa hujawahi kuona chombo moja kwa moja hapo awali. Kwa hiyo, jambo la kwanza unapaswa kufanya ni kupakua toleo la majaribio.

Utajifunza nini katika hatua hii:

  • Ni njia gani za kuingiliana na analyzer;
  • Je, kichanganuzi kinaendana na mazingira yako ya ukuzaji?
  • Je, kuna matatizo gani kwa sasa katika miradi yako?

Baada ya kusanikisha kila kitu unachohitaji, jambo la kwanza unapaswa kufanya ni kufanya uchambuzi wa mradi mzima (Windows, Linux, MacOS) Kwa upande wa PVS-Studio katika Visual Studio utaona picha inayofanana (inayobofya):

Uchambuzi tuli - kutoka utangulizi hadi ujumuishaji
Ukweli ni kwamba wachambuzi tuli kawaida hutoa idadi kubwa ya maonyo kwa miradi iliyo na msingi mkubwa wa nambari. Hakuna haja ya kuzirekebisha zote, kwani mradi wako tayari unafanya kazi, ambayo inamaanisha kuwa shida hizi sio muhimu. Hata hivyo, wewe unaweza kuangalia maonyo ya kuvutia zaidi na kuwasahihisha ikibidi. Ili kufanya hivyo, unahitaji kuchuja pato na kuacha tu ujumbe wa kuaminika zaidi. Katika programu-jalizi ya PVS-Studio ya Visual Studio, hii inafanywa kwa kuchuja kwa viwango vya makosa na kategoria. Kwa matokeo sahihi zaidi, acha pekee High ΠΈ ujumla (pia inaweza kubofya):

Uchambuzi tuli - kutoka utangulizi hadi ujumuishaji
Hakika, maonyo 178 ni rahisi kutazama kuliko elfu kadhaa ...

Katika vichupo Kati ΠΈ Chini Mara nyingi kuna maonyo mazuri, lakini makundi haya yanajumuisha uchunguzi huo ambao una usahihi mdogo (kuegemea). Habari zaidi juu ya viwango vya onyo na chaguzi za kufanya kazi chini ya Windows zinaweza kupatikana hapa: *kulia*.

Baada ya kukagua kwa mafanikio makosa ya kuvutia zaidi (na kusahihisha kwa mafanikio) inafaa kukandamiza maonyo iliyobaki. Hii ni muhimu ili maonyo mapya yasipotee kati ya yale ya zamani. Kwa kuongeza, analyzer tuli ni msaidizi wa programu, na sio orodha ya mende. πŸ™‚

1. Automation

Baada ya kufahamiana, ni wakati wa kusanidi programu-jalizi na kuunganisha kwenye CI. Hii lazima ifanyike kabla waandaaji wa programu kuanza kutumia kichanganuzi tuli. Ukweli ni kwamba programu inaweza kusahau kuwezesha uchambuzi au hataki kuifanya kabisa. Ili kufanya hivyo, unahitaji kufanya ukaguzi wa mwisho wa kila kitu ili nambari ambayo haijajaribiwa isiweze kuingia kwenye tawi la jumla la ukuzaji.

Utajifunza nini katika hatua hii:

  • Ni chaguzi gani za otomatiki ambazo chombo hutoa;
  • Je, kichanganuzi kinaendana na mfumo wako wa kuunganisha?

Kwa kuwa hati kamili haipo, wakati mwingine lazima uandike msaada. Hii ni kawaida na tunafurahi kukusaidia. πŸ™‚

Sasa hebu tuendelee kwenye huduma za ujumuishaji endelevu (CI). Analyzer yoyote inaweza kutekelezwa ndani yao bila matatizo yoyote makubwa. Ili kufanya hivyo, unahitaji kuunda hatua tofauti katika bomba, ambayo kawaida iko baada ya vipimo vya kujenga na kitengo. Hii inafanywa kwa kutumia huduma mbalimbali za console. Kwa mfano, PVS-Studio hutoa huduma zifuatazo:

Ili kuunganisha uchambuzi katika CI, unahitaji kufanya mambo matatu:

  • Sakinisha analyzer;
  • Uchambuzi wa kukimbia;
  • Toa matokeo.

Kwa mfano, ili kusakinisha PVS-Studio kwenye Linux (Debian-base), unahitaji kutekeleza amri zifuatazo:

wget -q -O - https://files.viva64.com/etc/pubkey.txt 
    | sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list 
  https://files.viva64.com/etc/viva64.list
  
sudo apt-get update -qq
sudo apt-get install -qq pvs-studio

Kwenye mifumo inayoendesha Windows, hakuna njia ya kufunga analyzer kutoka kwa meneja wa kifurushi, lakini inawezekana kupeleka analyzer kutoka kwa mstari wa amri:

PVS-Studio_setup.exe /verysilent /suppressmsgboxes 
/norestart /nocloseapplications

Unaweza kusoma zaidi juu ya kupeleka PVS-Studio kwenye mifumo inayoendesha Windows *hapa*.

Baada ya ufungaji, unahitaji kuendesha uchambuzi moja kwa moja. Walakini, inashauriwa kufanya hivyo tu baada ya mkusanyiko na vipimo vimepita. Hii ni kwa sababu uchanganuzi tuli kawaida huchukua mara mbili ya muda mrefu kama mkusanyiko.

Kwa kuwa njia ya uzinduzi inategemea jukwaa na huduma za mradi, nitaonyesha chaguo la C++ (Linux) kama mfano:

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log
plog-converter -t errorfile PVS-Studio.log --cerr -w

Amri ya kwanza itafanya uchambuzi, na ya pili bahashahubadilisha ripoti kuwa umbizo la maandishi, kuionyesha kwenye skrini na kurudisha msimbo wa kurejesha isipokuwa 0 ikiwa kuna maonyo. Utaratibu kama huu unaweza kutumika kwa urahisi kuzuia muundo wakati kuna ujumbe wa makosa. Walakini, unaweza kuondoa bendera kila wakati -w na usizuie mkusanyiko ambao una maonyo.

Kumbuka. Muundo wa maandishi haufai. Imetolewa kama mfano tu. Zingatia umbizo la ripoti la kuvutia zaidi - FullHtml. Inakuruhusu kupitia msimbo.

Unaweza kusoma zaidi juu ya kuanzisha uchambuzi kwenye CI katika kifungu "PVS-Studio na Ushirikiano unaoendelea"(Windows) au"Jinsi ya kusanidi PVS-Studio katika Travis CI"(Linux).

Sawa, umesanidi kichanganuzi kwenye seva ya ujenzi. Sasa, ikiwa mtu alipakia msimbo usiojaribiwa, hatua ya uthibitishaji itashindwa, na utaweza kugundua tatizo, hata hivyo, hii si rahisi kabisa, kwa kuwa ni ufanisi zaidi kuangalia mradi si baada ya matawi kuunganishwa, lakini kabla yake, katika hatua ya ombi la kuvuta. A.

Kwa ujumla, kuanzisha uchanganuzi wa ombi la kuvuta sio tofauti sana na uzinduzi wa kawaida wa uchambuzi kwenye CI. Isipokuwa kwa hitaji la kupata orodha ya faili zilizobadilishwa. Kawaida hizi zinaweza kupatikana kwa kuuliza tofauti kati ya matawi kwa kutumia git:

git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list

Sasa unahitaji kupitisha orodha hii ya faili kwa kichanganuzi kama pembejeo. Kwa mfano, katika PVS-Studio hii inatekelezwa kwa kutumia bendera -S:

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log 
                            -S .pvs-pr.list

Unaweza kujua zaidi kuhusu kuchambua maombi ya kuvuta *hapa*. Hata kama CI yako haiko kwenye orodha ya huduma zilizotajwa katika kifungu, utapata sehemu ya jumla iliyotolewa kwa nadharia ya aina hii ya uchanganuzi kuwa muhimu.

Kwa kuweka uchanganuzi wa maombi ya kuvuta, unaweza kuzuia ahadi zilizo na maonyo, na hivyo kuunda mpaka ambao nambari ambayo haijajaribiwa haiwezi kuvuka.

Hii yote ni nzuri, lakini ningependa kuweza kuona maonyo yote katika sehemu moja. Sio tu kutoka kwa analyzer tuli, lakini pia kutoka kwa vipimo vya kitengo au kutoka kwa analyzer ya nguvu. Kuna huduma mbalimbali na programu-jalizi kwa hili. PVS-Studio, kwa mfano, ina programu-jalizi ya kuunganishwa kwenye SonarQube.

2. Kuunganishwa kwenye mashine za watengenezaji

Sasa ni wakati wa kusakinisha na kusanidi kichanganuzi kwa matumizi ya kila siku ya ukuzaji. Kufikia hatua hii tayari umezoea njia nyingi za kufanya kazi, kwa hivyo hii inaweza kuitwa sehemu rahisi zaidi.

Kama chaguo rahisi, watengenezaji wanaweza kusakinisha analyzer muhimu wenyewe. Walakini, hii itachukua muda mwingi na kuwavuruga kutoka kwa ukuzaji, kwa hivyo unaweza kubinafsisha mchakato huu kwa kutumia kisakinishi na bendera zinazohitajika. Kwa PVS-Studio kuna anuwai bendera kwa usakinishaji wa kiotomatiki. Walakini, kuna wasimamizi wa vifurushi kila wakati, kwa mfano, Chocolatey (Windows), Homebrew (macOS) au chaguzi kadhaa za Linux.

Kisha utahitaji kufunga Plugins muhimu, kwa mfano kwa Visual Studio, WAZO, Rider nk

3. Matumizi ya kila siku

Katika hatua hii, ni wakati wa kusema maneno machache kuhusu njia za kuongeza kasi ya analyzer wakati wa matumizi ya kila siku. Uchambuzi kamili wa mradi mzima huchukua muda mwingi, lakini ni mara ngapi tunabadilisha msimbo katika mradi mzima mara moja? Hakuna urekebishaji wowote ambao ni mkubwa sana kwamba utaathiri mara moja msingi wote wa nambari. Idadi ya faili zinazobadilishwa kwa wakati mara chache huzidi kumi na mbili, kwa hivyo ni busara kuzichanganua. Kwa hali kama hiyo kuna hali ya uchambuzi wa nyongeza. Usiogope tu, hii sio zana nyingine. Hii ni hali maalum ambayo inakuwezesha kuchambua faili zilizobadilishwa tu na utegemezi wao, na hii hutokea moja kwa moja baada ya kujenga ikiwa unafanya kazi katika IDE na Plugin imewekwa.

Ikiwa analyzer hutambua matatizo katika msimbo uliobadilishwa hivi karibuni, itaripoti hii kwa kujitegemea. Kwa mfano, PVS-Studio itakuambia kuhusu hili kwa kutumia tahadhari:

Uchambuzi tuli - kutoka utangulizi hadi ujumuishaji
Bila shaka, kuwaambia watengenezaji kutumia chombo haitoshi. Tunahitaji kwa namna fulani kuwaambia ni nini na jinsi ni. Hapa, kwa mfano, kuna nakala kuhusu kuanza haraka kwa PVS-Studio, lakini unaweza kupata mafunzo sawa kwa zana yoyote unayopendelea:

Nakala kama hizo hutoa habari zote muhimu kwa matumizi ya kila siku na hazichukui muda mwingi. πŸ™‚

Hata katika hatua ya kujua zana, tulikandamiza maonyo mengi wakati wa uzinduzi wa kwanza. Kwa bahati mbaya, wachambuzi wa tuli sio kamili, kwa hivyo mara kwa mara wanatoa chanya za uwongo. Kawaida ni rahisi kuzikandamiza; kwa mfano, kwenye programu-jalizi ya PVS-Studio ya Visual Studio unahitaji tu kubofya kitufe kimoja:

Uchambuzi tuli - kutoka utangulizi hadi ujumuishaji
Hata hivyo, unaweza kufanya zaidi ya kuwakandamiza tu. Kwa mfano, unaweza kuripoti tatizo kwa usaidizi. Ikiwa chanya ya uwongo inaweza kusahihishwa, basi katika masasisho yajayo unaweza kugundua kuwa kila wakati kuna chanya chache na chache za uwongo mahususi kwa codebase yako.

Baada ya kuunganishwa

Kwa hivyo tumepitia hatua zote za kuunganisha uchambuzi tuli katika mchakato wa maendeleo. Licha ya umuhimu wa kuanzisha zana kama hizo kwenye CI, mahali muhimu zaidi pa kuziendesha ni kompyuta ya msanidi programu. Baada ya yote, analyzer tuli si hakimu ambaye anasema mahali fulani mbali na wewe kwamba kanuni si nzuri. Kinyume chake, ni msaidizi anayekuambia ikiwa umechoka na kukukumbusha ikiwa umesahau kitu.

Kweli, bila matumizi ya kawaida, uchambuzi wa tuli hauwezekani kurahisisha maendeleo. Baada ya yote, faida yake kuu kwa msanidi programu haipo sana katika kutafuta sehemu ngumu na zenye utata za nambari, lakini katika utambuzi wao wa mapema. Kubali kwamba kugundua tatizo baada ya uhariri kutumwa kwa ajili ya majaribio sio tu kwamba ni jambo lisilopendeza, lakini pia linatumia muda mwingi. Uchambuzi tuli, unapotumiwa mara kwa mara, huangalia kila mabadiliko moja kwa moja kwenye kompyuta yako na huripoti maeneo ya kutiliwa shaka unapofanyia kazi msimbo.

Na ikiwa wewe au wenzako bado huna uhakika kama inafaa kutekeleza kichanganuzi, basi ninapendekeza sasa uanze kusoma kifungu "Sababu za kutambulisha kichanganuzi tuli cha msimbo PVS-Studio katika mchakato wa ukuzaji". Inashughulikia maswala ya kawaida ya watengenezaji kwamba uchambuzi tuli utachukua wakati wao na kadhalika.

Uchambuzi tuli - kutoka utangulizi hadi ujumuishaji

Ikiwa ungependa kushiriki makala hii na hadhira inayozungumza Kiingereza, tafadhali tumia kiungo cha kutafsiri: Maxim Zvyagintsev. Uchambuzi Tuli: Kutoka Kuanza Hadi Kuunganishwa.

Chanzo: mapenzi.com

Kuongeza maoni