Analisis statik - ti bubuka nepi ka integrasi

Bosen review kode sajajalan atawa debugging, kadang anjeun mikir ngeunaan kumaha carana simplify hirup anjeun. Sarta sanggeus néangan saeutik, atawa ku ngahaja stumbling kana eta, anjeun tiasa ningali frase magic: "Analisis statik". Hayu urang tingali naon éta sareng kumaha éta tiasa berinteraksi sareng proyék anjeun.

Analisis statik - ti bubuka nepi ka integrasi
Nyatana, upami anjeun nyerat dina basa modéren, teras, tanpa disadari, anjeun ngajalankeun éta ngaliwatan analisa statik. Kanyataan yén sagala kompiler modern nyadiakeun, sanajan leutik, susunan warnings ngeunaan masalah poténsi dina kode. Salaku conto, nalika nyusun kode C ++ dina Visual Studio anjeun tiasa ningali ieu:

Analisis statik - ti bubuka nepi ka integrasi
Dina kaluaran ieu kami ningali yén variabel aya ieu pernah dipaké mana dina fungsi. Janten dina kanyataanana, anjeun ampir sok nganggo analisa kode statik saderhana. Nanging, teu sapertos analisa profésional sapertos Coverity, Klocwork atanapi PVS-Studio, peringatan anu disayogikeun ku kompiler ngan ukur nunjukkeun sajumlah leutik masalah.

Upami anjeun henteu terang pasti naon analisa statik sareng kumaha nerapkeunana, maca artikel ieupikeun leuwih jéntré ngeunaan metodologi ieu.

Naha anjeun peryogi analisis statik?

Dina nutshell: akselerasi jeung nyederhanakeun.

Analisis statik ngidinan Anjeun pikeun manggihan loba masalah béda dina kode: ti pamakéan salah constructs basa mun typos. Contona, tinimbang

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

Anjeun nyerat kodeu ieu:

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

Sakumaha anjeun tiasa tingali, aya salah ketik dina baris panungtungan. Contona, PVS-Studio ngaluarkeun peringatan ieu:

V537 Pertimbangkeun marios kabeneran pamakean item 'y'.

Upami anjeun hoyong nyodok leungeun anjeun kana kasalahan ieu, cobian conto anu siap-siap dina Compiler Explorer: *ceurik*.

Jeung anjeun ngartos, teu salawasna mungkin mun nengetan bagian sapertos kode langsung, sarta kusabab ieu, anjeun bisa diuk turun debugging pikeun sajam alus, wondering naha sagalana jalan jadi aneh.

Sanajan kitu, ieu jelas kasalahan. Kumaha lamun pamekar nulis kode suboptimal sabab poho sababaraha subtlety basa? Atawa malah diwenangkeun dina kode kabiasaan undefined? Hanjakalna, kasus-kasus sapertos kitu umumna biasa sareng waktos anu ageung diséépkeun pikeun debugging kode khusus anu dianggo anu ngandung typo, kasalahan umum atanapi kabiasaan anu teu jelas.

Pikeun kaayaan ieu, analisa statik muncul. Ieu asisten pikeun pamekar anu bakal nunjuk kaluar sagala rupa masalah dina kode jeung ngajelaskeun dina dokuméntasi naha teu perlu nulis cara kieu, naon bisa ngakibatkeun na kumaha carana ngalereskeun eta. Ieu conto kumaha sigana: *ceurik*.

Anjeun tiasa mendakan kasalahan anu langkung narik anu tiasa dideteksi ku analisa dina tulisan:

Ayeuna anjeun parantos maca bahan ieu sareng yakin kana mangpaat analisis statik, anjeun panginten badé nyobian éta. Tapi dimana ngamimitian? Kumaha ngahijikeun alat anyar kana proyék anjeun ayeuna? Sareng kumaha ngenalkeun tim ka anjeunna? Anjeun bakal mendakan jawaban kana patarosan ieu di handap.

Catetan. Analisis statik henteu ngagentos atanapi ngabatalkeun hal anu mangpaat sapertos ulasan kode. Éta ngalengkepan prosés ieu, ngabantosan perhatikeun sareng ngabenerkeun typo, kasalahan, sareng desain anu bahaya sateuacanna. Éta langkung produktif pikeun difokuskeun ulasan kode dina algoritma sareng kajelasan kode, tinimbang milarian kurung anu salah tempat atanapi maca fungsi ngabandingkeun boring.

0. Ngauningaan alat

Éta sadayana dimimitian ku versi percobaan. Mémang, sesah mutuskeun pikeun ngenalkeun hiji hal kana prosés pamekaran upami anjeun teu acan kantos ningali alat éta langsung. Ku alatan éta, hal kahiji anjeun kedah ngalakukeun nyaéta ngundeur Vérsi uji coba.

Naon anu anjeun bakal diajar dina tahap ieu:

  • Naon cara pikeun berinteraksi sareng analisa;
  • Naha analisa cocog sareng lingkungan pangembangan anjeun?
  • Masalah naon anu ayeuna aya dina proyék anjeun?

Saatos Anjeun masang sadaya anu anjeun peryogikeun, hal kahiji anu anjeun kedah laksanakeun nyaéta ngajalankeun analisa sadaya proyék (Windows, Linux, macOS). Dina kasus PVS-Studio di Visual Studio anjeun bakal ningali gambar anu sami (bisa diklik):

Analisis statik - ti bubuka nepi ka integrasi
Kanyataan yén analis statik biasana ngaluarkeun sajumlah ageung peringatan pikeun proyék-proyék kalayan dasar kode anu ageung. Henteu kedah ngalereskeun sadayana, sabab proyék anjeun parantos jalan, anu hartosna masalah ieu henteu kritis. Sanajan kitu, anjeun anjeun tiasa ningali peringatan anu paling pikaresepeun sareng koréksi upami diperyogikeun. Jang ngalampahkeun ieu, anjeun kudu nyaring kaluaran jeung ninggalkeun ngan pesen paling dipercaya. Dina plugin PVS-Studio pikeun Visual Studio, ieu dilakukeun ku nyaring ku tingkat kasalahan sareng kategori. Pikeun kaluaran anu paling akurat, tinggalkeun waé luhur и umum (ogé tiasa diklik):

Analisis statik - ti bubuka nepi ka integrasi
Mémang, 178 peringatan langkung gampang ditingali tibatan sababaraha rébu ...

Dina tab medium и saeutik Sering aya peringatan anu saé, tapi kategori ieu kalebet diagnostik anu kirang akurasi (reliabilitas). Inpormasi langkung seueur ngeunaan tingkat peringatan sareng pilihan pikeun dianggo dina Windows tiasa dipendakan di dieu: *ceurik*.

Saanggeus hasil marios kasalahan anu paling pikaresepeun (sareng suksés ngabenerkeunana) patut ngurangan warnings sésana. Ieu diperlukeun ku kituna warnings anyar teu leungit diantara nu heubeul. Salaku tambahan, analisa statik mangrupikeun asisten pikeun programer, sanés daptar bug. 🙂

1. Otomatisasi

Saatos kenal, waktosna pikeun ngonpigurasikeun plugins sareng ngahijikeun kana CI. Ieu kedah dilakukeun sateuacan programer ngamimitian nganggo analisa statik. Kanyataanna nyaéta programer tiasa hilap ngaktipkeun analisa atanapi henteu hoyong ngalakukeunana. Jang ngalampahkeun ieu, anjeun kedah ngalakukeun sababaraha pamariksaan ahir sadayana supados kode anu teu diuji henteu tiasa lebet kana cabang pangembangan umum.

Naon anu anjeun bakal diajar dina tahap ieu:

  • pilihan automation naon alat nyadiakeun;
  • Naha analisa cocog sareng sistem assembly anjeun?

Kusabab dokuméntasi anu sampurna teu aya, sakapeung anjeun kedah nyerat ngadukung. Ieu normal sareng kami bagja ngabantosan anjeun. 🙂

Ayeuna hayu urang teraskeun kana jasa integrasi kontinyu (CI). Sakur analisa tiasa dilaksanakeun kana aranjeunna tanpa aya masalah anu serius. Jang ngalampahkeun ieu, anjeun kudu nyieun hiji tahap misah dina pipa, nu biasana lokasina sanggeus tés wangunan jeung Unit. Hal ieu dilakukeun nganggo sababaraha utilitas konsol. Salaku conto, PVS-Studio nyayogikeun utilitas ieu:

Pikeun ngahijikeun analisis kana CI, anjeun kedah ngalakukeun tilu hal:

  • Pasang analisa;
  • Ngajalankeun analisis;
  • Nepikeun hasil.

Contona, pikeun masang PVS-Studio dina Linux (Debian-base), anjeun kedah ngajalankeun paréntah di handap ieu:

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

Dina sistem anu ngajalankeun Windows, teu aya cara pikeun masang analisa ti manajer pakét, tapi mungkin waé nyebarkeun analisa tina garis paréntah:

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

Anjeun tiasa maca langkung seueur ngeunaan nyebarkeun PVS-Studio dina sistem anu ngajalankeun Windows *di dieu*.

Saatos instalasi, anjeun kedah ngajalankeun analisa langsung. Nanging, disarankeun pikeun ngalakukeun ieu ngan saatos kompilasi sareng tés parantos lulus. Ieu kusabab analisa statik biasana butuh dua kali salami kompilasi.

Kusabab metodeu peluncuran gumantung kana platform sareng fitur proyék, kuring bakal nunjukkeun pilihan pikeun C ++ (Linux) salaku conto:

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

Paréntah kahiji bakal ngalakukeun analisa, sareng anu kadua amplopngarobah laporan kana format téks, mintonkeun eta dina layar tur mulih kodeu balik lian ti 0 lamun aya warnings. Mékanisme sapertos kieu tiasa dianggo pikeun meungpeuk ngawangun nalika aya pesen kasalahan. Najan kitu, anjeun salawasna bisa nyabut bandéra -w sarta ulah meungpeuk hiji assembly nu ngandung warnings.

Catetan. Format téks teu merenah. Ieu disadiakeun saukur salaku conto. Nengetan format laporan anu leuwih narik - FullHtml. Eta ngidinan Anjeun pikeun napigasi ngaliwatan kode.

Anjeun tiasa maca langkung seueur ngeunaan netepkeun analisa dina CI dina tulisan "PVS-Studio sarta Integrasi kontinyu"(Windows) atawa"Kumaha nyetél PVS-Studio di Travis CI"(Linux).

Oke, anjeun parantos ngonpigurasikeun analisa dina server ngawangun. Ayeuna, upami aya anu ngunggah kodeu anu teu acan diuji, tahap verifikasi bakal gagal, sareng anjeun bakal tiasa ngadeteksi masalahna, kumaha oge, ieu henteu sapinuhna merenah, sabab éta langkung éfisién pikeun pariksa proyék sanés saatos cabangna dihijikeun, tapi sateuacanna, dina tahap paménta tarik.

Sacara umum, nyetel hiji analisis pamundut tarikan teu jauh béda ti peluncuran biasa analisis on CI. Iwal mun kudu meunang daptar file robah. Ieu biasana tiasa didapet ku naroskeun bédana antara cabang nganggo git:

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

Ayeuna anjeun kedah ngalebetkeun daptar file ieu ka analisa salaku input. Contona, dina PVS-Studio ieu dilaksanakeun ngagunakeun bandéra -S:

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

Anjeun tiasa mendakan langkung seueur ngeunaan nganalisa pamundut tarik *di dieu*. Sanaos CI anjeun henteu aya dina daptar jasa anu disebatkeun dina tulisan éta, anjeun bakal mendakan bagian umum anu dikhususkeun pikeun téori jinis analisis ieu mangpaat.

Ku netepkeun up analisis requests tarikan, anjeun tiasa meungpeuk commits ngandung warnings, kukituna nyieun wates nu kode untested teu bisa meuntas.

Ieu sadayana pasti saé, tapi kuring hoyong ningali sadaya peringatan dina hiji tempat. Henteu ngan ukur tina analisa statik, tapi ogé tina tés unit atanapi tina analisa dinamis. Aya sababaraha jasa sareng plugins pikeun ieu. PVS-Studio, contona, boga plugin pikeun integrasi kana SonarQube.

2. Integrasi dina mesin pamekar

Ayeuna waktuna pikeun masang sareng ngonpigurasikeun analisa pikeun panggunaan pangwangunan sapopoé. Ku titik ieu anjeun geus jadi akrab jeung lolobana cara gawé, jadi ieu bisa disebut bagian panggampangna.

Salaku pilihan pangbasajanna, pamekar tiasa masang analis anu diperyogikeun nyalira. Nanging, ieu bakal nyandak seueur waktos sareng ngaganggu aranjeunna tina pangwangunan, ku kituna anjeun tiasa ngajadikeun otomatis prosés ieu nganggo pamasang sareng umbul anu diperyogikeun. Pikeun PVS-Studio aya rupa-rupa umbul pikeun instalasi otomatis. Tapi, sok aya manajer pakét, contona, Chocolatey (Windows), Homebrew (macOS) atanapi puluhan pilihan pikeun Linux.

Teras anjeun kedah pasang plugins anu diperyogikeun, contona pikeun visual Studio, Idéal, Rider jsb

3. pamakéan sapopoé

Dina tahap ieu, waktuna pikeun nyarios sababaraha kecap ngeunaan cara nyepetkeun analisa nalika dianggo sapopoé. Analisis lengkep sakabéh proyék butuh loba waktu, tapi sabaraha sering urang ngarobah kode sapanjang sakabéh proyék sakaligus? Aya boro sagala refactoring anu jadi badag yén éta bakal langsung mangaruhan sakabéh basa kode. Jumlah file nu dirobah dina hiji waktu jarang ngaleuwihan belasan, jadi masuk akal pikeun nganalisis aranjeunna. Pikeun kaayaan kitu aya modeu analisis incremental. Entong hariwang, ieu sanés alat sanés. Ieu mangrupikeun modeu khusus anu ngamungkinkeun anjeun nganalisis ngan ukur file anu dirobih sareng katergantunganna, sareng ieu kajantenan sacara otomatis saatos ngawangun upami anjeun damel di IDE sareng plugin dipasang.

Upami analisa ngadeteksi masalah dina kode anu nembé dirobih, éta bakal ngalaporkeun ieu sacara mandiri. Salaku conto, PVS-Studio bakal nyarioskeun ka anjeun ngeunaan ieu nganggo ngageter:

Analisis statik - ti bubuka nepi ka integrasi
Tangtosna, nyarioskeun pamekar ngagunakeun alat éta henteu cekap. Urang kedah kumaha waé nyarioskeun ka aranjeunna naon éta sareng kumaha éta. Di dieu, contona, aya tulisan ngeunaan mimiti gancang pikeun PVS-Studio, tapi anjeun tiasa mendakan tutorial anu sami pikeun alat anu anjeun pikahoyong:

Tulisan sapertos kitu nyayogikeun sadaya inpormasi anu dipikabutuh pikeun dianggo sapopoé sareng henteu nyandak seueur waktos. 🙂

Malah dina tahapan uninga alatna, kami nahan seueur peringatan nalika salah sahiji peluncuran anu munggaran. Hanjakalna, analisa statik henteu sampurna, janten ti waktos ka waktos aranjeunna masihan positip palsu. Biasana gampang pikeun ngeureunkeunana; contona, dina plugin PVS-Studio pikeun Visual Studio anjeun ngan ukur kedah klik hiji tombol:

Analisis statik - ti bubuka nepi ka integrasi
Najan kitu, anjeun tiasa ngalakukeun leuwih ti saukur ngurangan aranjeunna. Salaku conto, anjeun tiasa ngalaporkeun masalah pikeun ngadukung. Upami positip palsu tiasa dilereskeun, teras dina pembaruan anu bakal datang anjeun tiasa perhatikeun yén unggal waktos aya pangsaeutikna sareng pangsaeutikna positip palsu khusus pikeun basis kode anjeun.

Sanggeus integrasi

Janten kami parantos ngalangkungan sadaya tahapan ngahijikeun analisa statik kana prosés pangwangunan. Sanaos pentingna nyetél alat sapertos dina CI, tempat anu paling penting pikeun ngajalankeunana nyaéta komputer pamekar. Barina ogé, analisa statik sanés hakim anu nyarioskeun ka tempat anu jauh ti anjeun yén kode éta henteu saé. Sabalikna, éta asisten anu nyarioskeun ka anjeun upami anjeun bosen sareng ngingetkeun anjeun upami anjeun hilap.

Leres, tanpa nganggo biasa, analisa statik sigana moal nyederhanakeun pangwangunan. Barina ogé, kauntungan utamina pikeun pamekar henteu langkung seueur pikeun milarian bagian kode anu rumit sareng kontroversial, tapi dina deteksi awalna. Satuju yén manggihan masalah sanggeus éditan geus dikirim pikeun nguji teu ngan pikaresepeun, tapi ogé pisan consuming waktu. Analisis statik, nalika dianggo sacara teratur, ningali unggal parobihan langsung dina komputer anjeun sareng ngalaporkeun tempat anu curiga nalika ngerjakeun kodeu.

Sareng upami anjeun atanapi kolega anjeun masih henteu yakin naha éta patut ngalaksanakeun analisa, maka kuring nyarankeun anjeun ayeuna ngamimitian maca tulisan "Alesan pikeun ngawanohkeun analisa kode statik PVS-Studio kana prosés pangwangunan". Ieu alamat masalah has pamekar yén analisis statik bakal nyandak up waktos maranéhanana jeung saterusna.

Analisis statik - ti bubuka nepi ka integrasi

Upami anjeun hoyong ngabagikeun tulisan ieu ka pamiarsa anu nyarios basa Inggris, mangga nganggo tautan tarjamahan: Maxim Zvyagintsev. Analisis statik: Ti Ngamimitian ka Integrasi.

sumber: www.habr.com

Tambahkeun komentar