Statika analizo - de enkonduko ĝis integriĝo

Laca de senfina koda revizio aŭ senararigado, foje vi pensas pri kiel simpligi vian vivon. Kaj serĉante iomete, aŭ hazarde trafante ĝin, vi povas vidi la magian frazon: "Statika analizo". Ni vidu kio ĝi estas kaj kiel ĝi povas interagi kun via projekto.

Statika analizo - de enkonduko ĝis integriĝo
Fakte, se vi skribas en iu ajn moderna lingvo, tiam, eĉ sen rimarki tion, vi trakuris ĝin tra statika analizilo. La fakto estas, ke iu ajn moderna kompililo provizas, kvankam eta, aro da avertoj pri eblaj problemoj en la kodo. Ekzemple, kiam vi kompilas C++-kodon en Visual Studio, vi eble vidos la jenon:

Statika analizo - de enkonduko ĝis integriĝo
En ĉi tiu eligo ni vidas ke la variablo estis neniam estis uzata ie en la funkcio. Do fakte, vi preskaŭ ĉiam uzis simplan statikan kodan analizilon. Tamen, male al profesiaj analiziloj kiel Coverity, Klocwork aŭ PVS-Studio, la avertoj provizitaj de la kompililo povas nur indiki malgrandan gamon da problemoj.

Se vi ne scias certe kio estas statika analizo kaj kiel efektivigi ĝin, legu ĉi tiun artikolonpor lerni pli pri ĉi tiu metodaro.

Kial vi bezonas statikan analizon?

Resume: akcelo kaj simpligo.

Statika analizo permesas trovi multajn malsamajn problemojn en la kodo: de malĝusta uzo de lingvokonstruaĵoj ĝis tajperaroj. Ekzemple, anstataŭ

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

Vi skribis la jenan kodon:

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

Kiel vi povas vidi, estas mistajpo en la lasta linio. Ekzemple, PVS-Studio eligas la sekvan averton:

V537 Konsideru revizii la ĝustecon de la uzado de 'y' objekto.

Se vi volas meti viajn manojn en ĉi tiun eraron, provu pretan ekzemplon en Kompil-Esploristo: *plori*.

Kaj kiel vi komprenas, ne ĉiam eblas tuj atenti tiajn sekciojn de kodo, kaj pro tio, vi povas sidiĝi sencimigi dum bona horo, scivolante kial ĉio funkcias tiel strange.

Tamen, ĉi tio klare estas eraro. Kio se la programisto skribus suboptimuman kodon ĉar li forgesis iun subtilecon de la lingvo? Aŭ eĉ permesis ĝin en la kodo nedifinita konduto? Bedaŭrinde, tiaj kazoj estas tute ordinaraj kaj la plej granda parto de tempo estas elspezita por sencimigi specife laborantan kodon kiu enhavas tajperarojn, tipajn erarojn aŭ nedifinitan konduton.

Ĝuste por ĉi tiuj situacioj aperis statika analizo. Ĉi tio estas asistanto por la programisto, kiu montros diversajn problemojn en la kodo kaj klarigos en la dokumentado kial ne necesas skribi tiel, al kio ĝi povas konduki kaj kiel ripari ĝin. Jen ekzemplo de kiel ĝi povus aspekti: *plori*.

Vi povas trovi pli interesajn erarojn, kiujn la analizilo povas detekti en la artikoloj:

Nun kiam vi legis ĉi tiun materialon kaj estas konvinkita pri la avantaĝoj de statika analizo, vi eble volas provi ĝin. Sed kie komenci? Kiel integri novan ilon en vian nunan projekton? Kaj kiel prezenti la teamon al li? Vi trovos respondojn al ĉi tiuj demandoj sube.

Notu. Senmova analizo ne anstataŭigas aŭ nuligas tian utilan aferon kiel kodaj recenzoj. Ĝi kompletigas ĉi tiun procezon, helpante anticipe rimarki kaj korekti tajperarojn, erarojn kaj danĝerajn dezajnojn. Estas multe pli produktive koncentriĝi pri kodaj recenzoj pri algoritmoj kaj koda klareco, prefere ol serĉi mislokigitajn krampojn aŭ legi enuigajn komparfunkciojn.

0. Konatiĝi kun la ilo

Ĉio komenciĝas per prova versio. Efektive, estas malfacile decidi enkonduki ion en la disvolvan procezon, se vi neniam antaŭe vidis la ilon viva. Tial, la unua afero, kiun vi devus fari, estas elŝuti testo-versio.

Kion vi lernos en ĉi tiu etapo:

  • Kio estas la manieroj interagi kun la analizilo;
  • Ĉu la analizilo estas kongrua kun via evolumedio?
  • Kiuj problemoj estas nuntempe en viaj projektoj?

Post kiam vi instalis ĉion, kion vi bezonas, la unua afero, kiun vi devas fari, estas analizi la tutan projekton (fenestroj, linux, MacOS). En la kazo de PVS-Studio en Visual Studio vi vidos similan bildon (klakeblan):

Statika analizo - de enkonduko ĝis integriĝo
La fakto estas, ke senmovaj analiziloj kutime eligas grandegan nombron da avertoj por projektoj kun granda koda bazo. Ne necesas ripari ilin ĉiujn, ĉar via projekto jam funkcias, kio signifas, ke ĉi tiuj problemoj ne estas kritikaj. Tamen, vi vi povas rigardi la plej interesajn avertojn kaj korektu ilin se necese. Por fari tion, vi devas filtri la eligon kaj lasi nur la plej fidindajn mesaĝojn. En la kromaĵo PVS-Studio por Visual Studio, tio estas farita per filtrado laŭ eraraj niveloj kaj kategorioj. Por la plej preciza eligo, lasu nur alta и Ĝenerala (ankaŭ klakebla):

Statika analizo - de enkonduko ĝis integriĝo
Efektive, 178 avertoj estas multe pli facile rigardeblaj ol pluraj miloj...

En langetoj mediumo и malalte Ofte estas bonaj avertoj, sed ĉi tiuj kategorioj inkluzivas tiujn diagnozojn, kiuj havas malpli da precizeco (fidindeco). Pliaj informoj pri avertaj niveloj kaj opcioj por labori sub Vindozo troveblas ĉi tie: *plori*.

Sukcese revizii la plej interesajn erarojn (kaj sukcese korekti ilin) ​​valoras subpremi ceterajn avertojn. Ĉi tio estas necesa por ke novaj avertoj ne perdiĝu inter la malnovaj. Krome, statika analizilo estas asistanto por la programisto, kaj ne listo de cimoj. 🙂

1. Aŭtomatigo

Post konatiĝo, estas tempo agordi kromaĵojn kaj integri en CI. Ĉi tio devas esti farita antaŭ ol programistoj komencas uzi la senmovan analizilon. La fakto estas, ke la programisto eble forgesos ebligi analizon aŭ tute ne volas fari ĝin. Por fari tion, vi devas fari iun finan kontrolon de ĉio, por ke neprovita kodo ne eniru la ĝeneralan evolubranĉon.

Kion vi lernos en ĉi tiu etapo:

  • Kiajn aŭtomatigajn elektojn la ilo provizas;
  • Ĉu la analizilo estas kongrua kun via munta sistemo?

Ĉar perfekta dokumentado ne ekzistas, foje vi devas enskribi subteno. Ĉi tio estas normala kaj ni volonte helpas vin. 🙂

Nun ni transiru al kontinua integriĝo (CI) servoj. Ajna analizilo povas esti efektivigita en ilin sen seriozaj problemoj. Por fari tion, vi devas krei apartan etapon en la dukto, kiu kutime troviĝas post la konstruo kaj unuotestoj. Ĉi tio estas farita uzante diversajn konzolajn utilecojn. Ekzemple, PVS-Studio disponigas la sekvajn servaĵojn:

Por integri analizon en CI, vi devas fari tri aferojn:

  • Instalu la analizilon;
  • Kuru analizon;
  • Liveru rezultojn.

Ekzemple, por instali PVS-Studio en Linukso (Debian-bazo), vi devas ruli la jenajn komandojn:

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

Sur sistemoj funkciantaj Vindozo, ne ekzistas maniero instali la analizilon de la pakaĵa administranto, sed eblas deploji la analizilon de la komandlinio:

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

Vi povas legi pli pri deplojado de PVS-Studio sur sistemoj kurantaj Vindozo *tie*.

Post instalado, vi devas direkti la analizon rekte. Tamen, oni rekomendas fari ĉi tion nur post kiam kompilo kaj provoj pasis. Ĉi tio estas ĉar senmova analizo kutime prenas duoble pli longe ol kompilo.

Ĉar la lanĉa metodo dependas de la platformo kaj projektaj funkcioj, mi montros la opcion por C++ (Linukso) kiel ekzemplo:

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

La unua komando faros la analizon, kaj la dua kovertojnkonvertas la raporton en tekstan formaton, montras ĝin sur la ekrano kaj resendas revenkodon krom 0 se estas avertoj. Mekanismo kiel ĉi tiu povas esti oportune uzata por bloki konstruaĵon kiam estas erarmesaĝoj. Tamen, vi ĉiam povas forigi la flagon -w kaj ne bloku aron kiu enhavas avertojn.

Notu. La tekstoformato estas maloportuna. Ĝi estas provizita simple kiel ekzemplo. Atentu pli interesan raportformaton - FullHtml. Ĝi permesas vin navigi tra la kodo.

Vi povas legi pli pri agordo de analizo pri CI en la artikolo "PVS-Studio kaj Kontinua Integriĝo" (Vindozo) aŭ "Kiel agordi PVS-Studio en Travis CI" (Linukso).

Bone, vi agordis la analizilon sur la konstruservilo. Nun, se iu alŝutis neprovitan kodon, la kontrola etapo malsukcesos, kaj vi povos detekti la problemon, tamen, tio ne estas tute oportuna, ĉar estas pli efike kontroli la projekton ne post kiam la branĉoj estas kunfanditaj, sed antaŭ ĝi, ĉe la tiropeta stadio. A.

Ĝenerale, starigi tiran petan analizon ne multe diferencas de la kutima lanĉo de analizo pri CI. Krom la bezono akiri liston de ŝanĝitaj dosieroj. Ĉi tiuj kutime povas esti akiritaj pridemandante la diferencojn inter branĉoj uzante git:

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

Nun vi devas transdoni ĉi tiun liston de dosieroj al la analizilo kiel enigo. Ekzemple, en PVS-Studio tio estas efektivigita uzante la flagon -S:

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

Vi povas ekscii pli pri analizado de tirpetoj *tie*. Eĉ se via CI ne estas en la listo de servoj menciitaj en la artikolo, vi trovos la ĝeneralan sekcion dediĉitan al la teorio de ĉi tiu speco de analizo utila.

Agordante analizon de tirpetoj, vi povas bloki komitaĵojn enhavantajn avertojn, tiel kreante limon, kiun neprovita kodo ne povas transiri.

Ĉio ĉi estas certe bona, sed mi ŝatus povi vidi ĉiujn avertojn en unu loko. Ne nur de la statika analizilo, sed ankaŭ de unutestoj aŭ de la dinamika analizilo. Estas diversaj servoj kaj kromaĵoj por ĉi tio. PVS-Studio, ekzemple, havas kromaĵo por integriĝo en SonarQube.

2. Integriĝo sur programistaj maŝinoj

Nun estas tempo instali kaj agordi la analizilon por ĉiutaga disvolva uzo. Je ĉi tiu punkto vi jam konatiĝis kun la plej multaj el la labormanieroj, do ĉi tio povas esti nomata la plej facila parto.

Kiel la plej simpla opcio, programistoj povas mem instali la necesan analizilon. Tamen, ĉi tio prenos multan tempon kaj malatentigos ilin de disvolviĝo, do vi povas aŭtomatigi ĉi tiun procezon uzante instalilon kaj la necesajn flagojn. Por PVS-Studio estas diversaj flagoj por aŭtomata instalado. Tamen ĉiam ekzistas pakaĵadministrantoj, ekzemple Chocolatey (Vindozo), Homebrew (macOS) aŭ dekoj da opcioj por Linukso.

Tiam vi devos instali la necesajn kromaĵojn, ekzemple por Vida Studio, IDEO, Rajdanto ktp

3. Ĉiutaga uzo

En ĉi tiu etapo, estas tempo diri kelkajn vortojn pri manieroj akceli la analizilon dum ĉiutaga uzo. Kompleta analizo de la tuta projekto prenas multan tempon, sed kiom ofte ni ŝanĝas kodon tra la tuta projekto samtempe? Estas apenaŭ iu refaktorado kiu estas tiel granda ke ĝi tuj influos la tutan kodbazon. La nombro de dosieroj ŝanĝitaj samtempe malofte superas dekduon, do estas senco analizi ilin. Por tia situacio ekzistas pliiga analiza reĝimo. Nur ne maltrankviliĝu, ĉi tio ne estas alia ilo. Ĉi tio estas speciala reĝimo, kiu permesas analizi nur ŝanĝitajn dosierojn kaj iliajn dependecojn, kaj tio okazas aŭtomate post konstruado se vi laboras en IDE kun la kromaĵo instalita.

Se la analizilo detektas problemojn en la lastatempe ŝanĝita kodo, ĝi raportos tion sendepende. Ekzemple, PVS-Studio informos vin pri tio per atentigo:

Statika analizo - de enkonduko ĝis integriĝo
Kompreneble, diri al programistoj uzi la ilon ne sufiĉas. Ni devas iel diri al ili kio ĝi estas kaj kiel ĝi estas. Jen, ekzemple, artikoloj pri rapida komenco por PVS-Studio, sed vi povas trovi similajn lernilojn por iu ajn ilo, kiun vi preferas:

Tiaj artikoloj provizas ĉiujn informojn necesajn por ĉiutaga uzo kaj ne bezonas multe da tempo. 🙂

Eĉ en la stadio de koni la ilon, ni subpremis multajn avertojn dum unu el la unuaj lanĉoj. Bedaŭrinde, senmovaj analiziloj ne estas perfektaj, do de tempo al tempo ili donas falsajn pozitivojn. Kutime estas facile subpremi ilin; ekzemple, en la kromaĵo PVS-Studio por Visual Studio vi nur bezonas alklaki unu butonon:

Statika analizo - de enkonduko ĝis integriĝo
Tamen, vi povas fari pli ol nur subpremi ilin. Ekzemple, vi povas raporti problemon al subteno. Se la falsa pozitivo povas esti korektita, tiam en estontaj ĝisdatigoj vi povas rimarki, ke ĉiufoje estas pli kaj malpli da falsaj pozitivoj specifaj por via kodbazo.

Post integriĝo

Do ni trapasis ĉiujn stadiojn de integriĝo de statika analizo en la evoluprocezon. Malgraŭ la graveco instali tiajn ilojn sur CI, la plej grava loko por ruli ilin estas la komputilo de la programisto. Post ĉio, senmova analizilo ne estas juĝisto, kiu diras ie malproksime de vi, ke la kodo ne estas bona. Male, ĝi estas asistanto, kiu diras al vi ĉu vi estas laca kaj memorigas vin, ĉu vi forgesis ion.

Vere, sen regula uzo, senmova analizo verŝajne ne signife simpligos disvolviĝon. Post ĉio, ĝia ĉefa avantaĝo por programisto kuŝas ne tiom en serĉado de kompleksaj kaj polemikaj sekcioj de kodo, sed en ilia frua detekto. Konsentu, ke malkovri problemon post kiam la redaktoj estis senditaj por testado estas ne nur malagrabla, sed ankaŭ tre tempopostula. Statika analizo, kiam uzata regule, rigardas ĉiun ŝanĝon rekte en via komputilo kaj raportas suspektindajn lokojn dum ili laboras pri la kodo.

Kaj se vi aŭ viaj kolegoj ankoraŭ ne certas ĉu ĝi valoras efektivigi la analizilon, tiam mi sugestas, ke vi nun komencu legi la artikolon "Kialoj por enkonduki la statikan kodan analizilon PVS-Studio en la evoluprocezon". Ĝi traktas tipajn zorgojn de programistoj, ke senmova analizo okupos ilian tempon kaj tiel plu.

Statika analizo - de enkonduko ĝis integriĝo

Se vi volas dividi ĉi tiun artikolon kun anglalingva publiko, bonvolu uzi la tradukan ligilon: Maxim Zvyagintsev. Statika Analizo: De Komenco al Integriĝo.

fonto: www.habr.com

Aldoni komenton