Static analysis - manomboka amin'ny fampidirana ka hatramin'ny fampidirana

Reraka amin'ny famerenana kaody tsy misy farany na debugging, indraindray ianao mieritreritra ny fomba hanatsorana ny fiainanao. Ary rehefa avy nikaroka kely, na tamin'ny fahatafintohinana tsy nahy teo aminy, dia afaka mahita ilay andian-teny mahagaga: "Fandalinana static." Andeha hojerentsika hoe inona izany ary ahoana no ahafahany mifandray amin'ny tetikasanao.

Static analysis - manomboka amin'ny fampidirana ka hatramin'ny fampidirana
Raha ny marina, raha manoratra amin'ny fiteny maoderina ianao, dia tsy tsapanao akory izany, dia nihazakazaka tamin'ny alalan'ny analyse static ianao. Ny zava-misy dia ny compiler maoderina rehetra dia manome fampitandremana, na dia kely aza, momba ny olana mety hitranga amin'ny code. Ohatra, rehefa manangona kaody C++ ao amin'ny Visual Studio ianao dia mety hahita ireto manaraka ireto:

Static analysis - manomboka amin'ny fampidirana ka hatramin'ny fampidirana
Amin'ity vokatra ity dia hitantsika fa ny variable dia tsy nampiasaina na taiza na taiza tao amin'ilay asa. Ka raha ny tena izy dia saika mampiasa mpanadihady kaody static tsotra foana ianao. Na izany aza, tsy toy ny mpanadihady matihanina toy ny Coverity, Klocwork na PVS-Studio, ny fampitandremana omen'ny mpanangona dia mety manondro olana kely fotsiny.

Raha tsy fantatrao tsara ny atao hoe analyse static sy ny fomba fampiharana azy, vakio ity lahatsoratra ityraha te hahalala bebe kokoa momba an'io fomba fiasa io.

Nahoana ianao no mila analyse static?

Raha fintinina: fanafainganana sy fanatsorana.

Ny famakafakana static dia ahafahanao mahita olana maro samihafa ao amin'ny kaody: manomboka amin'ny fampiasana diso amin'ny fananganana fiteny ka hatramin'ny typos. Ohatra, raha tokony ho

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

Nanoratra ity code manaraka ity ianao:

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

Araka ny hitanao dia misy typo amin'ny andalana farany. Ohatra, ny PVS-Studio dia mamoaka izao fampitandremana manaraka izao:

V537 Diniho ny fijerena ny fahamarinan'ny fampiasana singa 'y'.

Raha te hampiditra tanana amin'ity hadisoana ity ianao dia andramo ohatra efa vita ao amin'ny Compiler Explorer: *Miantsoa*.

Ary araka ny azonao, tsy azo atao foana ny mijery ireo fizarana code toy izany avy hatrany, ary noho izany dia afaka mipetraka amin'ny debugging mandritra ny ora iray ianao, manontany tena hoe nahoana ny zava-drehetra no miasa amin'ny fomba hafahafa.

Na izany aza, mazava ho azy fa fahadisoana izany. Ahoana raha nanoratra code suboptimal ilay mpamorona satria nanadino ny hafetsen'ilay fiteny izy? Na navela tao amin'ny code mihitsy aza fitondran-tena tsy voafaritra? Indrisy anefa fa mahazatra tanteraka ny tranga toy izany ary ny anjaran'ny liona dia lany amin'ny debugging manokana kaody miasa izay misy typos, fahadisoana mahazatra na fihetsika tsy voafaritra.

Ho an'ireo toe-javatra ireo no nisehoan'ny fanadihadiana static. Ity dia mpanampy ho an'ny mpamorona izay hanondro olana isan-karazany ao amin'ny code ary hanazava ao amin'ny antontan-taratasy ny antony tsy ilaina ny manoratra amin'ity fomba ity, inona no mety hitarika azy ary ahoana no hamahana azy. Ity misy ohatra iray amin'ny mety ho endriny: *Miantsoa*.

Azonao atao ny mahita fahadisoana mahaliana kokoa izay hitan'ny mpanadihady ao amin'ny lahatsoratra:

Ankehitriny rehefa namaky ity fitaovana ity ianao ary resy lahatra amin'ny tombontsoa azo avy amin'ny famakafakana static, dia azonao atao ny manandrana azy io. Aiza no hanombohana? Ahoana ny fampidirana fitaovana vaovao amin'ny tetikasanao ankehitriny? Ary ahoana ny fampahafantarana ny ekipa aminy? Hahita valiny amin'ireo fanontaniana ireo ianao eto ambany.

Mariho. Ny famakafakana static dia tsy manolo na manafoana zavatra mahasoa toy ny famerenana code. Mameno an'io dingana io izy io, manampy amin'ny fahitana sy hanitsiana ny diso, ny tsy mety ary ny famolavolana mampidi-doza mialoha. Mamokatra kokoa ny fifantohana amin'ny famerenana kaody momba ny algorithm sy ny fahazavana kaody, fa tsy ny fitadiavana fononteny diso toerana na mamaky asa fampitahana mankaleo.

0. Fahalalana ny fitaovana

Izany rehetra izany dia manomboka amin'ny dikan-andrana. Sarotra tokoa ny manapa-kevitra ny hampihatra zavatra amin'ny fizotran'ny fampandrosoana raha mbola tsy nahita mivantana ilay fitaovana ianao taloha. Noho izany, ny zavatra voalohany tokony hataonao dia ny tΓ©lΓ©charger kinova andrana.

Inona no hianaranao amin'ity dingana ity:

  • Inona avy ireo fomba hifandraisana amin'ny mpandinika;
  • Mifanaraka amin'ny tontolo iainanao ve ny mpandinika?
  • Inona no olana misy amin'izao fotoana izao amin'ny tetikasanao?

Rehefa avy nametraka izay rehetra ilainao ianao, ny zavatra voalohany tokony hataonao dia ny famakafakana ny tetikasa manontolo (Windows, Linux, macOS). Raha ny PVS-Studio ao amin'ny Visual Studio dia hahita sary mitovitovy amin'izany ianao (azo kitihina):

Static analysis - manomboka amin'ny fampidirana ka hatramin'ny fampidirana
Ny zava-misy dia matetika ny mpandinika static dia mamoaka fampitandremana marobe ho an'ny tetikasa manana fototra code lehibe. Tsy ilaina ny manamboatra azy rehetra, satria efa mandeha ny tetikasanao, midika izany fa tsy mitsikera ireo olana ireo. Na izany aza, ianao azonao jerena ny fampitandremana mahaliana indrindra ary ahitsio raha ilaina izany. Mba hanaovana izany dia mila manivana ny vokatra ianao ary mamela ny hafatra azo antoka indrindra. Ao amin'ny plugin PVS-Studio ho an'ny Visual Studio, izany dia atao amin'ny alΓ lan'ny fanivanana amin'ny ambaratonga sy ny sokajy. Mba hahazoana vokatra marina indrindra, avelao ihany High ΠΈ General (azo kitika ihany koa):

Static analysis - manomboka amin'ny fampidirana ka hatramin'ny fampidirana
Eny tokoa, fampitandremana 178 dia mora kokoa ny mijery noho ny an'arivony ...

Amin'ny tabilao Medium ΠΈ Low Matetika dia misy fampitandremana tsara, fa ireo sokajy ireo dia ahitana ireo diagnostika izay tsy dia marina loatra ( azo antoka). Ny fampahalalana bebe kokoa momba ny haavon'ny fampitandremana sy ny safidy amin'ny fiasana amin'ny Windows dia azo jerena eto: *Miantsoa*.

Rehefa nandinika tamim-pahombiazana ireo fahadisoana mahaliana indrindra (ary nanitsy azy ireo tamim-pahombiazana) dia mendrika esory ny fampitandremana sisa. Ilaina izany mba tsy ho very eo amin'ireo fampitandremana taloha. Fanampin'izany, ny mpanadihady static dia mpanampy ho an'ny mpandrindra, fa tsy lisitry ny bibikely. πŸ™‚

1. Automation

Rehefa avy nifankahalala dia tonga ny fotoana hanamboarana plugins ary ampidiro ao amin'ny CI. Tsy maintsy atao izany alohan'ny hanombohan'ny mpandrindra ny fampiasana ny mpanadihady static. Ny zava-misy dia mety hadinon'ny programmer ny mamela ny famakafakana na tsy te hanao izany mihitsy. Mba hanaovana izany dia mila manao fanamarinana farany amin'ny zava-drehetra ianao mba tsy hiditra ao amin'ny sampana fampandrosoana ankapobeny ny kaody tsy voamarina.

Inona no hianaranao amin'ity dingana ity:

  • Inona no safidy automatique omen'ny fitaovana;
  • Mifanaraka amin'ny rafitra fanamorianao ve ny analyse?

Satria tsy misy ny antontan-taratasy tonga lafatra, indraindray mila manoratra ianao MANAMPY. Ara-dalΓ na izany ary faly izahay manampy anao. πŸ™‚

Andeha isika izao hiroso amin'ny serivisy fampidirana mitohy (CI). Ny mpandinika rehetra dia azo ampiharina amin'izy ireo tsy misy olana lehibe. Mba hanaovana izany, mila mamorona dingana misaraka amin'ny fantsona ianao, izay matetika no misy aorian'ny fitsapana fananganana sy unit. Izany dia atao amin'ny fampiasana fitaovana console isan-karazany. Ohatra, ny PVS-Studio dia manome ireto fitaovana manaraka ireto:

Mba hampidirana ny fanadihadiana amin'ny CI dia mila manao zavatra telo ianao:

  • Apetraho ny analyzer;
  • Run analysis;
  • Alefaso ny valiny.

Ohatra, raha hametraka PVS-Studio amin'ny Linux (Debian-base), dia mila manaraka ireto baiko manaraka ireto ianao:

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

Amin'ny rafitra mihazakazaka Windows, tsy misy fomba hametrahana ny analyzer avy amin'ny mpitantana ny fonosana, fa azo atao ny mametraka ny analyzer avy amin'ny tsipika baiko:

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

Azonao atao ny mamaky bebe kokoa momba ny fametrahana PVS-Studio amin'ny rafitra mandeha Windows *eto*.

Aorian'ny fametrahana dia mila mihazakazaka mivantana ny fanadihadiana ianao. Na izany aza, dia asaina manao izany raha tsy aorian'ny fanangonana sy ny fitsapana. Izany dia satria matetika ny famakafakana static dia maharitra avo roa heny noho ny fanangonana.

Satria ny fomba fandefasana dia miankina amin'ny sehatra sy ny endriky ny tetikasa, dia hasehoko ohatra ny safidy ho an'ny C++ (Linux):

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

Ny baiko voalohany dia hanao ny fanadihadiana, ary ny faharoa valopymamadika ny tatitra ho endrika lahatsoratra, aseho eo amin'ny efijery ary mamerina fehezan-dalΓ na miverina ankoatra ny 0 raha misy fampitandremana. Ny mekanika toy izany dia azo ampiasaina tsara hanakanana fananganana rehefa misy hafatra diso. Na izany aza, azonao atao foana ny manala ny saina -w ary aza sakanana ny fivoriambe misy fampitandremana.

Mariho. Ny endrika lahatsoratra dia tsy mety. Omena ho ohatra tsotra fotsiny izany. Tandremo ny endrika tatitra mahaliana kokoa - FullHtml. Izany dia ahafahanao mivezivezy amin'ny code.

Azonao atao ny mamaky bebe kokoa momba ny fametrahana fanadihadiana momba ny CI ao amin'ny lahatsoratra "PVS-Studio sy Fampidirana mitohy"(Windows) na"Ahoana ny fametrahana PVS-Studio ao amin'ny Travis CI"(Linux).

Eny, efa namboarinao ny mpanadihady amin'ny lohamilina fananganana. Ankehitriny, raha misy olona nandefa kaody tsy voamarina, dia tsy hahomby ny dingana fanamarinana, ary ho hitanao ny olana, na izany aza, tsy dia mety loatra izany, satria mahomby kokoa ny manamarina ny tetikasa tsy aorian'ny natambatra ny sampana, fa alohan'izany, amin'ny dingana fangatahana fisarihana A.

Amin'ny ankapobeny, ny fametrahana famakafakana fangatahana fisintonana dia tsy mitovy amin'ny fandefasana fanadihadiana mahazatra momba ny CI. Afa-tsy ny ilaina ny hahazo lisitry ny rakitra niova. Matetika dia azo alaina amin'ny fangatahana ny fahasamihafana misy eo amin'ny sampana mampiasa git:

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

Ankehitriny dia mila mampita ity lisitry ny rakitra ity amin'ny mpandinika ianao ho fampidirana. Ohatra, ao amin'ny PVS-Studio dia ampiharina amin'ny fampiasana ny saina -S:

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

Azonao atao ny mahita bebe kokoa momba ny famakafakana ny fangatahana fisintonana *eto*. Na dia tsy ao amin'ny lisitry ny serivisy voalaza ao amin'ny lahatsoratra aza ny CI-nao, dia ho hitanao fa ilaina ny fizarana ankapobeny natokana ho an'ny teoria momba ity karazana fanadihadiana ity.

Amin'ny fametrahana famakafakana ny fangatahana fisintonana, azonao atao ny manakana ny commits misy fampitandremana, ka mamorona sisintany izay tsy azo iampitana ny code tsy voasedra.

Azo antoka fa tsara daholo izany, saingy tiako ny hahita ny fampitandremana rehetra amin'ny toerana iray. Tsy avy amin'ny analyzer static ihany, fa avy amin'ny fitsapana unit na avy amin'ny analyzer dinamika. Misy serivisy sy plugins isan-karazany amin'izany. PVS-Studio, ohatra, dia manana plugin ho fampidirana ao amin'ny SonarQube.

2. Fampidirana amin'ny milina mpamorona

Fotoana izao hametrahana sy hamboarina ny mpandinika ho an'ny fampivoarana andavanandro. Amin'izao fotoana izao dia efa zatra ny ankamaroan'ny fomba fiasa ianao, ka azo antsoina hoe ampahany mora indrindra izany.

Amin'ny maha safidy tsotra indrindra, ny mpamorona dia afaka mametraka ny mpanadihady ilaina. Na izany aza, haka fotoana be izany ary hanelingelina azy ireo amin'ny fampandrosoana, ka azonao atao ny manamboatra an'io dingana io amin'ny fampiasana installer sy ny saina ilaina. Ho an'ny PVS-Studio dia misy isan-karazany saina ho an'ny fametrahana mandeha ho azy. Na izany aza, misy foana ny mpitantana fonosana, ohatra, Chocolatey (Windows), Homebrew (macOS) na safidy am-polony ho an'ny Linux.

Avy eo dia mila mametraka plugins ilaina ianao, ohatra, maso Studio, hevitra, Rider etc.

3. Fampiasana isan'andro

Amin'ity dingana ity, fotoana izao hilazana teny vitsivitsy momba ny fomba hanafainganana ny mpandinika mandritra ny fampiasana isan'andro. Ny famakafakana feno ny tetikasa iray manontolo dia mitaky fotoana be, fa impiry isika no manova fehezan-dalΓ na manerana ny tetikasa manontolo indray mandeha? Zara raha misy refactoring lehibe loatra ka hisy fiantraikany avy hatrany amin'ny fototry ny code manontolo. Ny isan'ny rakitra ovaina amin'ny fotoana iray dia mahalana mihoatra ny am-polony, noho izany dia misy dikany ny mandinika azy ireo. Ho an'ny toe-javatra toy izany dia misy fomba famakafakana incremental. Aza taitra fotsiny fa tsy fitaovana hafa ity. Ity dia fomba manokana ahafahanao mamakafaka ireo rakitra niova sy ny fiankinany ihany, ary mitranga ho azy izany aorian'ny fananganana raha miasa amin'ny IDE ianao miaraka amin'ny plugin napetraka.

Raha mahita olana amin'ny kaody novaina vao haingana ny mpanadihady dia hitatitra izany tsy miankina izy. Ohatra, ny PVS-Studio dia hilaza aminao momba izany amin'ny alΓ lan'ny fanairana:

Static analysis - manomboka amin'ny fampidirana ka hatramin'ny fampidirana
Mazava ho azy fa tsy ampy ny milaza amin'ny mpamorona hampiasa ilay fitaovana. Mila milaza amin'izy ireo isika hoe inona izany ary ahoana izany. Eto, ohatra, ny lahatsoratra momba ny fanombohana haingana ho an'ny PVS-Studio, saingy afaka mahita fampianarana mitovy amin'izany ianao amin'ny fitaovana tianao:

Ny lahatsoratra toy izany dia manome ny fampahalalana rehetra ilaina amin'ny fampiasana andavanandro ary tsy maka fotoana be. πŸ™‚

Na dia teo am-pahafantarana ilay fitaovana aza dia nanakana fampitandremana be dia be izahay nandritra ny iray tamin'ireo fandefasana voalohany. Mampalahelo fa tsy tonga lafatra ny analyse static, ka indraindray dia manome valiny diso izy ireo. Matetika dia mora ny manafoana azy ireo, ohatra, ao amin'ny plugin PVS-Studio ho an'ny Visual Studio dia mila manindry bokotra iray ianao:

Static analysis - manomboka amin'ny fampidirana ka hatramin'ny fampidirana
Na izany aza, afaka manao mihoatra noho ny fanafoanana azy ireo ianao. Ohatra, azonao atao ny mitatitra olana ho fanohanana. Raha azo ahitsy ny lafy tsara diso, dia ho hitanao amin'ny fanavaozana ho avy fa isaky ny misy tsikombakomba tsy misy dikany manokana ho an'ny codebase-nao.

Taorian'ny fampidirana

Noho izany dia nandalo ny dingana rehetra amin'ny fampidirana ny fanadihadiana static amin'ny dingana fampandrosoana. Na dia eo aza ny maha-zava-dehibe ny fametrahana fitaovana toy izany amin'ny CI, ny toerana manan-danja indrindra hampandehanana azy ireo dia ny solosain'ny mpamorona. Rehefa dinihina tokoa, ny mpanadihady static dia tsy mpitsara izay milaza any amin'ny toerana lavitra anao fa tsy tsara ny code. Ny mifanohitra amin'izany, dia mpanampy iray izay milaza aminao raha reraka ianao ary mampahatsiahy anao raha misy adinonao.

Marina, raha tsy misy fampiasana tsy tapaka, ny fanadihadiana static dia tsy azo inoana fa hanamora ny fampandrosoana. Rehefa dinihina tokoa, ny tombony lehibe indrindra ho an'ny mpamorona dia tsy miankina amin'ny fitadiavana ireo ampahany sarotra sy mampiady hevitra amin'ny fehezan-dalΓ na, fa amin'ny fahitana azy ireo aloha. Ekeo fa tsy mahafinaritra fotsiny ny mahita olana aorian'ny fandefasana ny fanitsiana, fa mandany fotoana be. Ny famakafakana static, rehefa ampiasaina tsy tapaka, dia mijery mivantana ny fiovana rehetra ao amin'ny solosainao ary mitatitra toerana mampiahiahy eo am-piasana ny kaody.

Ary raha toa ianao na ny mpiara-miasa aminao dia mbola tsy azonao antoka raha mendrika ny hampiharana ny mpandinika, dia manoro hevitra anao aho hanomboka hamaky ilay lahatsoratra "Antony hampidirana ny mpanadihady kaody static PVS-Studio amin'ny dingana fampandrosoana". Miresaka ny ahiahin'ny mpamorona fa ny famakafakana static dia haka ny fotoanany sy ny sisa.

Static analysis - manomboka amin'ny fampidirana ka hatramin'ny fampidirana

Raha te hizara ity lahatsoratra ity amin'ny mpihaino miteny anglisy ianao dia ampiasao ny rohy fandikana: Maxim Zvyagintsev. Fanadihadiana static: Manomboka amin'ny fanombohana ka hatramin'ny fampidirana.

Source: www.habr.com

Add a comment