Analîza statîk - ji destpêk heya entegrasyonê

Ji vekolîna kodê ya bêdawî an xeletkirin aciz bûne, carinan hûn difikirin ka meriv çawa jiyana xwe hêsan dike. Û piştî ku piçekî lê bigere, an bi xeletî li ser wê biqelişe, hûn dikarin hevoka sêhrbazê bibînin: "Analîzkirina statîk". Ka em bibînin ka ew çi ye û ew çawa dikare bi projeya we re têkilî daynin.

Analîza statîk - ji destpêk heya entegrasyonê
Di rastiyê de, heke hûn bi zimanek nûjen binivîsin, wê hingê, bêyî ku hûn pê hay bibin, we ew di nav analîzatorek statîk re derbas kir. Rastî ev e ku her berhevkarek nûjen, her çend piçûkek piçûk be jî, li ser pirsgirêkên potansiyel ên di kodê de hişyariyan peyda dike. Mînakî, dema ku koda C ++ li Visual Studio berhev dikin hûn dikarin jêrîn bibînin:

Analîza statîk - ji destpêk heya entegrasyonê
Di vê derketinê de em dibînin ku guhêrbar li wir in çu carî di fonksiyonê de li cîhek nehatiye bikar anîn. Ji ber vê yekê di rastiyê de, we hema hema her gav analîzkerek koda statîk a hêsan bikar anî. Lêbelê, berevajî analîzkerên profesyonel ên wekî Coverity, Klocwork an PVS-Studio, hişyariyên ku ji hêla berhevkar ve têne peyda kirin dibe ku tenê rêzek piçûk a pirsgirêkan destnîşan bikin.

Ger hûn teqez nizanin analîza statîk çi ye û meriv wê çawa bicîh tîne, vê gotarê bixwîninli ser vê metodolojiyê bêtir fêr bibin.

Çima hûn hewceyê analîzek statîk in?

Bi kurtî: lezkirin û hêsankirin.

Analîzkirina statîk dihêle hûn di kodê de gelek pirsgirêkên cihêreng bibînin: ji karanîna nerast a avahîyên ziman bigire heya xeletiyên tîpan. Ji bo nimûne, li şûna

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

We koda jêrîn nivîsand:

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

Wekî ku hûn dibînin, di rêza dawî de xeletiyek tîpî heye. Mînakî, PVS-Studio hişyariya jêrîn dide:

V537 Binihêrin ku rastdariya karanîna "y" ya babetê binirxînin.

Heke hûn dixwazin destên xwe bixin nav vê xeletiyê, mînakek amade-amade li Compiler Explorer-ê biceribînin: *girîn*.

Û wekî ku hûn fêm dikin, ne her gav ne gengaz e ku meriv tavilê bala xwe bide beşên wusa kodê, û ji ber vê yekê, hûn dikarin demjimêrek baş rûnin debugkirinê, meraq bikin ka çima her tişt ew qas ecêb dixebite.

Lêbelê, ev eşkere xeletiyek e. Ger pêşdebir kodek nebaş binivîsîne ji ber ku wî hin hûrguliyên ziman ji bîr kiriye? An jî di kodê de destûr da reftarên nediyar? Mixabin, rewşên weha bi tevahî asayî ne û para şêrê wextê bi taybetî koda xebatê ya ku xeletiyên tîpî, xeletiyên tîpîk an behremendiya nediyar vedihewîne, derbas dibe.

Ji bo van rewşan e ku analîza statîk xuya bû. Ev arîkarek ji bo pêşdebiran e ku dê di kodê de pirsgirêkên cihêreng destnîşan bike û di belgeyê de rave bike ka çima ne hewce ye ku bi vî rengî were nivîsandin, ew dikare bibe sedema çi û meriv wê çawa rast bike. Li vir mînakek e ku ew dikare çawa xuya bike: *girîn*.

Hûn dikarin xeletiyên balkêştir ên ku analîzer dikare di gotaran de bibîne:

Naha ku we ev materyal xwendiye û ji feydeyên analîza statîk piştrast in, dibe ku hûn bixwazin wê biceribînin. Lê ji ku derê dest pê bike? Meriv çawa amûrek nû di projeya xweya heyî de yek dike? Û meriv çawa tîmê bi wî bide nasîn? Hûn ê bersiva van pirsan li jêr bibînin.

Têbînî: Analîza statîk tiştek wusa kêrhatî wekî nirxandinên kodê cîh nagire an betal nake. Ew vê pêvajoyê temam dike, dibe alîkar ku pêşî li xeletiyên tîpan, nerastî û sêwiranên xeternak were dîtin û rastkirin. Pir berhemdartir e ku meriv bala xwe bide ser vekolînên kodê yên li ser algorîtmayan û zelaliya kodê, ji dêvla ku hûn li pêşekek xelet an jî negerin. fonksiyonên berhevdana bêzar bixwînin.

0. Naskirina hacet

Ew hemî bi guhertoyek ceribandinê dest pê dike. Bi rastî, dijwar e ku hûn biryar bidin ku hûn tiştek di pêvajoya pêşkeftinê de bidin nasîn ger we berê amûrek zindî nedîtibe. Ji ber vê yekê, yekem tiştê ku divê hûn bikin dakêşandin e guhertoya ceribandinê.

Tiştê ku hûn ê di vê qonaxê de fêr bibin:

  • Awayên danûstandina bi analyzer re çi ne;
  • Ma analîzer bi hawîrdora pêşveçûna we re hevaheng e?
  • Niha di projeyên we de çi pirsgirêk hene?

Piştî ku we her tiştê ku hûn hewce ne saz kirin, yekem tiştê ku divê hûn bikin ev e ku analîzek tevahiya projeyê bimeşînin (Windows, Linux, MacOS). Di doza PVS-Studio de di Visual Studio de hûn ê wêneyek wekhev bibînin (bikirtînin):

Analîza statîk - ji destpêk heya entegrasyonê
Rastî ev e ku analîzkerên statîk bi gelemperî ji bo projeyên bi bingehek kodek mezin hejmareke mezin hişyarî didin. Ne hewce ye ku wan hemî rast bikin, ji ber ku projeya we jixwe dixebite, ku tê vê wateyê ku ev pirsgirêk ne krîtîk in. Lêbelê, hûn hûn dikarin li hişyariyên herî balkêş binêrin û heke pêwîst be wan rast bikin. Ji bo vê yekê, hûn hewce ne ku hilberê fîlter bikin û tenê peyamên herî pêbawer bihêlin. Di pêveka PVS-Studio de ji bo Visual Studio, ev ji hêla fîlterkirina astên xeletî û kategoriyan ve tête kirin. Ji bo encamek herî rast, tenê bihêle bilind и giştî (jî bitikîne):

Analîza statîk - ji destpêk heya entegrasyonê
Bi rastî, 178 hişyarî ji çend hezaran pir hêsantir têne dîtin ...

Di tabloyan de Medya и Nizm Pir caran hişyariyên baş hene, lê van kategoriyan wan teşhîsên ku xwedan rastbûna (bawerî) kêmtir in, vedigirin. Zêdetir agahdarî li ser astên hişyariyê û vebijarkên ji bo xebata di bin Windows-ê de dikarin li vir werin dîtin: *girîn*.

Bi serfirazî vekolîna xeletiyên herî balkêş (û bi serfirazî rastkirina wan) hêja ye hişyariyên mayî bitepisînin. Ji bo ku hişyariyên nû di nav yên kevin de winda nebin ev pêdivî ye. Wekî din, analîzerek statîk ji bo bernameçêker alîkarek e, û ne navnîşek xeletiyan e. 🙂

1. Automatization

Piştî ku hûn nas kirin, ew dem e ku hûn pêvekan mîheng bikin û di CI-ê de yek bikin. Berî ku bernamenûs dest bi karanîna analyzera statîk bikin divê ev were kirin. Rastî ev e ku bernamenûs dibe ku ji bîr bike ku analîzê çalak bike an jî qet naxwaze wiya bike. Ji bo kirina vê yekê, hûn hewce ne ku hin kontrolkirina dawîn a her tiştî bikin da ku kodê neceribandinî nekare têkeve şaxê pêşkeftina gelemperî.

Tiştê ku hûn ê di vê qonaxê de fêr bibin:

  • Amûr çi vebijarkên otomasyonê peyda dike;
  • Ma analîzer bi pergala meclîsa we re hevaheng e?

Ji ber ku belgeyên bêkêmasî tune, carinan divê hûn tê de binivîsin alîkarî. Ev normal e û em kêfxweş in ku alîkariya we bikin. 🙂

Naha em werin ser karûbarên yekbûna domdar (CI). Her analîzer dikare bêyî pirsgirêkên cidî di nav wan de were bicîh kirin. Ji bo vê yekê, hûn hewce ne ku qonaxek veqetandî di boriyê de biafirînin, ku bi gelemperî piştî ceribandinên çêkirin û yekîneyê pêk tê. Ev bi karanîna karûbarên konsolê yên cihêreng pêk tê. Mînakî, PVS-Studio karûbarên jêrîn peyda dike:

Ji bo yekkirina analîzê di CI de, hûn hewce ne ku sê tiştan bikin:

  • Analîzatorê saz bikin;
  • Analîz bimeşîne;
  • Encamên radest bikin.

Mînakî, ji bo sazkirina PVS-Studio li Linux (Debian-base), hûn hewce ne ku emrên jêrîn bimeşînin:

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

Li ser pergalên ku Windows-ê dixebitin, rêyek tune ku analîzkerê ji rêveberê pakêtê saz bike, lê gengaz e ku analîzker ji rêzika fermanê were bicîh kirin:

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

Hûn dikarin di derbarê bicîhkirina PVS-Studio de li ser pergalên ku Windows-ê dixebitin bêtir bixwînin *vir*.

Piştî sazkirinê, hûn hewce ne ku rasterast analîzê bikin. Lêbelê, tê pêşniyar kirin ku vê yekê tenê piştî berhevkirin û ceribandinan derbas bikin. Ev ji ber ku analîza statîk bi gelemperî du caran ji berhevkirinê dirêj dike.

Ji ber ku rêbaza destpêkirinê bi platform û taybetmendiyên projeyê ve girêdayî ye, ez ê vebijarka C++ (Linux) wekî mînak nîşan bidim:

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

Fermana yekem dê analîzê bike, û ya duyemîn zerfênraporê vediguherîne formata nivîsê, wê li ser ekranê nîşan dide û heke hişyarî hebin ji bilî 0 kodek vegerê vedigerîne. Mekanîzmayek bi vî rengî dikare bi hêsanî were bikar anîn da ku avahiyek asteng bike dema ku peyamên xeletiyê hebin. Lêbelê, hûn her gav dikarin ala rakin -w û meclîsa ku tê de hişyarî tê de asteng nekin.

Têbînî: Forma nivîsê nerehet e. Ew bi tenê wekî nimûne tê pêşkêş kirin. Bala xwe bidin forma raporek balkêştir - FullHtml. Ew dihêle hûn di nav kodê de rêve bibin.

Hûn dikarin di gotarê de li ser sazkirina analîzê li ser CI-ê bêtir bixwînin "PVS-Studio û Yekbûna Berdewam"(Windows) an"Meriv çawa li Travis CI PVS-Studio saz dike"(Linux).

Baş e, te analîzker li ser servera çêkirinê mîheng kiriye. Naha, heke kesek kodek neceribandinî bar kir, qonaxa verastkirinê dê têk biçe, û hûn ê karibin pirsgirêkê tesbît bikin, lêbelê, ev bi tevahî ne rehet e, ji ber ku kontrolkirina projeyê ne piştî ku şax hatine yek kirin, bikêrtir e, lê berî wê, di qonaxa daxwaza kişandinê de. A.

Bi gelemperî, sazkirina analîzek daxwaziya kişandinê ji destpêkirina asayî ya analîzek li ser CI-ê ne pir cûda ye. Ji bilî hewcedariya ku hûn navnîşek pelên guherî bistînin. Vana bi gelemperî bi pirskirina cûdahiyên di navbera şaxên git de têne wergirtin:

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

Naha hûn hewce ne ku vê navnîşa pelan wekî têketinê ji analîzkerê re derbas bikin. Mînakî, di PVS-Studio de ev bi karanîna ala ve tête bicîh kirin -S:

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

Hûn dikarin di derbarê analîzkirina daxwazên kişandinê de bêtir fêr bibin *vir*. Tewra ku CI-ya we ne di navnîşa karûbarên ku di gotarê de hatî destnîşan kirin de be jî, hûn ê beşa giştî ya ku ji teoriya vê celebê analîzê re hatî veqetandin kêrhatî bibînin.

Bi sazkirina analîza daxwazên kişandinê, hûn dikarin berpirsiyariyên ku hişyarî hene asteng bikin, bi vî rengî sînorek ku koda neceribandinî nikare derbas bike biafirînin.

Ev hemî bê guman baş e, lê ez dixwazim ku bikaribim hemî hişyariyan li yek cîhek bibînim. Ne tenê ji analîzerê statîk, lê di heman demê de ji ceribandinên yekîneyê an jî ji analîzkera dînamîkî. Ji bo vê karûbar û pêvekên cihêreng hene. Mînakî, PVS-Studio heye pêvek ji bo entegrasyona SonarQube.

2. Entegrasyonê li ser makîneyên pêşdebiran

Naha dem dema sazkirin û mîhengkirina analîzkerê ji bo karanîna pêşkeftina rojane ye. Di vê xalê de we berê bi piraniya awayên xebatê nas kir, ji ber vê yekê ev dikare wekî beşa herî hêsan were gotin.

Wekî vebijarka herî hêsan, pêşdebir dikarin bixwe analîzkera pêwîst saz bikin. Lêbelê, ev ê gelek dem bigire û wan ji pêşkeftinê dûr bixe, ji ber vê yekê hûn dikarin vê pêvajoyê bi karanîna sazkerek û alên pêwîst bixweber bikin. Ji bo PVS-Studio cûrbecûr hene alên ji bo sazkirina otomatîk. Lêbelê, her gav rêveberên pakêtê hene, mînakî, Chocolatey (Windows), Homebrew (macOS) an bi dehan vebijarkên ji bo Linux.

Dûv re hûn hewce ne ku pêvekên pêwîst saz bikin, mînakî ji bo Visual Studio, FIKIR, Rider hwd.

3. Bikaranîna rojane

Di vê qonaxê de, dem e ku meriv çend peyvan li ser awayên bilezkirina analîzer di dema karanîna rojane de bêje. Analîzek bêkêmasî ya tevahiya projeyê gelek dem digire, lê çend caran em di yekcarê de li seranserê projeyê kodê diguherînin? Ne mimkûn e ku refaktorek ew qas mezin hebe ku ew ê tavilê bandorê li tevahiya bingeha kodê bike. Hejmara pelên ku di carekê de têne guheztin kêm caran ji dehan derbas dibe, ji ber vê yekê analîzkirina wan maqûl e. Ji bo rewşeke wiha heye moda analîza zêde. Tenê netirsin, ev ne amûrek din e. Ev modek taybetî ye ku destûrê dide te ku hûn tenê pelên guheztin û girêdanên wan analîz bikin, û ev bixweber piştî çêkirinê diqewime heke hûn bi pêveka sazkirî re di IDE de dixebitin.

Ger analîzer di koda nû ya guherî de pirsgirêkan bibîne, ew ê vê yekê serbixwe rapor bike. Mînakî, PVS-Studio dê bi karanîna hişyariyek ji we re vebêje:

Analîza statîk - ji destpêk heya entegrasyonê
Bê guman, ji pêşdebiran re bêje ku amûrê bikar bînin ne bes e. Divê em bi awayekî ji wan re bêjin ka ew çi ye û çawa ye. Mînakî, li vir gotarên li ser destpêkek bilez ji bo PVS-Studio hene, lê hûn dikarin ji bo her amûrek ku hûn tercîh dikin dersên weha bibînin:

Gotarên weha hemî agahdariya ku ji bo karanîna rojane hewce ne peyda dikin û pir wext nagirin. 🙂

Tewra di qonaxa naskirina amûrê de jî, me di yek ji destpêkirina yekem de gelek hişyarî tepisandin. Mixabin, analîzkerên statîk ne bêkêmasî ne, ji ber vê yekê dem bi dem ew erênîyên derewîn didin. Bi gelemperî çewisandina wan hêsan e; Mînakî, di pêveka PVS-Studio de ji bo Visual Studio hûn tenê hewce ne ku bişkojek bikirtînin:

Analîza statîk - ji destpêk heya entegrasyonê
Lêbelê, hûn dikarin ji tenê tepeserkirina wan zêdetir bikin. Mînakî, hûn dikarin pirsgirêkek ji bo piştgiriyê ragihînin. Ger pozîtîfiya derewîn dikare were rast kirin, wê hingê di nûvekirinên pêşerojê de hûn dikarin bala xwe bidin ku her carê kêm û hindik pozîtîfên derewîn ên taybetî yên koda we hene.

Piştî entegrasyonê

Ji ber vê yekê me hemî qonaxên yekkirina analîza statîk di pêvajoya pêşkeftinê de derbas kiriye. Tevî girîngiya sazkirina amûrên weha li ser CI-ê, cîhê herî girîng ji bo meşandina wan komputera pêşdebiran e. Beriya her tiştî, analîzerek statîk ne dadgerek e ku li cîhek dûr ji we bêje ku kod ne baş e. Berevajî vê, ew arîkarek e ku ji we re vedibêje ka hûn westiyayî ne û heke we tiştek ji bîr kiriye bi bîr tîne.

Rast e, bêyî karanîna birêkûpêk, analîza statîk ne mimkûn e ku pêşveçûnê bi girîngî hêsan bike. Beriya her tiştî, feydeya wê ya sereke ji bo pêşdebirek ne ew qas di lêgerîna beşên tevlihev û nakokî yên kodê de, lê di tespîtkirina wan a zû de ye. Bipejirînin ku vedîtina pirsgirêkek piştî ku guherandin ji bo ceribandinê hatine şandin ne tenê ne xweş e, lê di heman demê de pir dem dixwe. Analîza statîk, dema ku bi rêkûpêk tê bikar anîn, rasterast li her guhertinê li ser komputera we dinêre û dema ku li ser kodê dixebite cîhên gumanbar radigihîne.

Û heke hûn an hevkarên we hîn jî nebawer in ka ew hêja ye ku analîzkerê bicîh bikin, wê hingê ez ji we re pêşniyar dikim ku nuha dest bi xwendina gotarê bikin "Sedemên danasîna analyzera koda statîk PVS-Studio di pêvajoya pêşkeftinê de". Ew fikarên tîpîk ên pêşdebiran dike ku analîza statîk dê wextê wan bigire û hwd.

Analîza statîk - ji destpêk heya entegrasyonê

Heke hûn dixwazin vê gotarê bi temaşevanên ku bi Îngilîzî diaxivin re parve bikin, ji kerema xwe lînka wergerê bikar bînin: Maxim Zvyagintsev. Analîza Statîk: Ji Destpêkirina Berbi Yekbûnê.

Source: www.habr.com

Add a comment