Санҷидани таҳлилгари рамзи статикӣ осон аст. Аммо барои ба амал баровардани он, махсусан дар тахияи лоихаи калони кухна махоратро талаб мекунад. Агар нодуруст анҷом дода шавад, анализатор метавонад кор илова кунад, рушдро суст кунад ва гурӯҳро аз кор барад. Биёед ба таври мухтасар дар бораи он ки чӣ гуна ба ҳамгироии таҳлили статикӣ ба раванди рушд дуруст муносибат кунем ва ба истифодаи он ҳамчун як қисми CI/CD оғоз кунем.
Муқаддима
Ба наздикӣ таваҷҷӯҳи ман ба нашрия ҷалб карда шуд "
Дастаи мо PVS-Studio назари худро дар ин мавзӯъ пешниҳод мекунад. Биёед бубинем, ки чӣ гуна масъалаи ҷорӣ намудани таҳлилгари коди статикӣ дар навбати аввал ба миён меояд, ин мушкилотро чӣ гуна бояд бартараф кард ва қарзи техникиро чӣ гуна бедард бартараф кардан мумкин аст.
Масъалаҳо
Оғози кор кардан ва дидани он ки чӣ гуна анализатори статикӣ кор мекунад, одатан душвор нест [
Ҳама анализаторҳои статикӣ мусбатҳои бардурӯғ медиҳанд. Ин як хусусияти методологияи таҳлили коди статикӣ аст ва дар ин бора ҳеҷ кор кардан мумкин нест. Дар сурати умумӣ, ин як масъалаи ҳалнашаванда аст, ки онро теоремаи Райс тасдиқ мекунад [
Агар анализатори статикӣ аллакай танзим шуда бошад, мусбатҳои бардурӯғ мушкил нестанд:
- Маҷмӯи қоидаҳои номувофиқро ғайрифаъол кунед;
- Баъзе ташхисҳои номатлуб ғайрифаъол карда шудаанд;
- Агар сухан дар бораи C ё C++ равад, пас макросҳо қайд карда мешаванд, ки дорои конструксияҳои мушаххас мебошанд, ки боиси пайдо шудани огоҳиҳои бефоида дар ҳар ҷое, ки чунин макросҳо истифода мешаванд;
- Функсияҳои худӣ қайд карда шудаанд, ки амалҳои шабеҳи функсияҳои системаро иҷро мекунанд (аналоги худ memcpy ё printf) [
4 ]; - Аломатҳои бардурӯғ махсусан бо истифода аз шарҳҳо ғайрифаъол карда мешаванд;
- Ва ҳамин тавр.
Дар ин ҳолат, мо метавонем сатҳи пасти мусбати бардурӯғро тақрибан 10-15% интизор шавем [
Дар асл, дар як лоиҳаи калон, тасвири ибтидоӣ комилан дигар хоҳад буд. Анализатор барои коди кӯҳна садҳо ё ҳазорҳо огоҳӣ медиҳад. Ба зудӣ фаҳмидан ғайриимкон аст, ки кадоме аз ин огоҳиҳо мувофиқ асту кадоме не. Нишаста бо ин ҳама огоҳиҳо сару кор кардан ғайримантиқӣ аст, зеро кори асосӣ дар ин ҳолат рӯзҳо ё ҳафтаҳо қатъ мешавад. Одатан, як даста қодир ба чунин сенария нест. Инчунин шумораи зиёди фарқиятҳо мавҷуданд, ки таърихи тағиротро вайрон мекунанд. Ва таҳрири босуръати оммавии ин қадар порчаҳо дар код ногузир ба хатогиҳои нави чопӣ ва хатогиҳо оварда мерасонад.
Ва муҳимтар аз ҳама, чунин кор дар мубориза бар зидди огоҳӣ каме маъно дорад. Розӣ шавед, ки азбаски лоиҳа солҳои зиёд бомуваффақият амал мекунад, аксари хатогиҳои муҳими он аллакай ислоҳ шудаанд. Бале, ин ислоҳҳо хеле гарон буданд, бояд ислоҳ карда шаванд, дар бораи хатогиҳо фикру мулоҳизаҳои манфии корбарон гирифтанд ва ғайра. Анализатори статикӣ барои ислоҳи бисёре аз ин хатогиҳо дар марҳилаи рамзгузорӣ, зуд ва арзон кӯмак мекунад. Аммо дар айни замон ин ё он тарз ин хатохо ислох карда шудаанд ва анализатор асосан хатогихои гайриканоатбахши коди кухнаро ошкор мекунад. Ин рамзро истифода бурдан мумкин нест, он метавонад хеле кам истифода шавад ва хато дар он метавонад ба оқибатҳои назаррас оварда расонад. Шояд дар ҷое соя аз тугма ранги нодуруст бошад, аммо ин ба истифодаи касе аз маҳсулот халал намерасонад.
Албатта, хатто хатохои хурд хам хатогй мебошанд. Ва баъзан хато метавонад осебпазирии воқеиро пинҳон кунад. Бо вуҷуди ин, даст кашидан аз ҳама чиз ва сарф кардани рӯзҳо/ҳафтаҳо бо камбудиҳо, ки базӯр зуҳур мекунанд, як идеяи шубҳанок ба назар мерасад.
Программйчиён нигаранд, бубинанд, ба хамаи ин огохкунихо дар бораи коди кухнаи коргарй нигох мекунанд... Ва онхо чунин мешуморанд: мо бе тахлили статикй кор карда метавонем. Биёед баъзе функсияҳои нави муфидро нависед.
Ба таври худ, онҳо дурустанд. Онҳо фикр мекунанд, ки аввал онҳо бояд аз ҳама ин огоҳиҳо халос шаванд. Танҳо дар он сурат онҳо метавонанд аз истифодаи мунтазами анализатори код баҳра баранд. Дар акси ҳол, огоҳиҳои нав танҳо дар пешинаи кӯҳна ғарқ мешаванд ва касе ба онҳо аҳамият намедиҳад.
Ин ҳамон аналогияест, ки бо огоҳиҳои компилятор. Бесабаб нест, ки шумораи ҳушдорҳои компиляторро дар 0 нигоҳ доштан тавсия медиҳанд. Агар 1000 огоҳӣ мавҷуд бошад, пас вақте 1001 бошад, касе ба он аҳамият намедиҳад ва маълум нест, ки ин огоҳии навтаринро аз куҷо ҷустуҷӯ кард.
Бадтарин чиз дар ин ҳикоя он аст, ки агар касе аз боло шуморо маҷбур кунад, ки таҳлили рамзи статикиро истифода баред. Ин танҳо дастаро беэътиноӣ мекунад, зеро аз нуқтаи назари онҳо мураккабии иловагии бюрократӣ вуҷуд хоҳад дошт, ки танҳо дар роҳ халал мерасонад. Ҳеҷ кас ба гузоришҳои анализатор нигоҳ намекунад ва ҳама истифода танҳо "дар рӯи коғаз" хоҳад буд. Онхое. Ба таври расмӣ, таҳлил дар раванди DevOps сохта шудааст, аммо дар амал ин ба касе фоида намеорад. Мо дар стендҳо аз иштироккунандагони конфронс ҳикояҳои муфассалро шунидем. Чунин таҷриба метавонад барномасозонро аз истифодаи абзорҳои таҳлили статикӣ барои муддати тӯлонӣ, агар абадӣ набошад, боздорад.
Татбик ва бархам додани карзи техникй
Дар асл, дар бораи ҷорӣ кардани таҳлили статикӣ ҳатто дар як лоиҳаи калони кӯҳна ҳеҷ чизи душвор ё даҳшатнок нест.
CI / CD
Илова бар ин, анализатор метавонад фавран як қисми раванди рушди муттасил табдил дода шавад. Масалан, тақсимоти PVS-Studio дорои утилитаҳо барои бароҳат дидани ҳисобот дар формати ба шумо лозим ва огоҳиномаҳо ба таҳиягароне, ки қисмҳои мушкили кодро навиштаанд, дар бар мегирад. Барои онҳое, ки ба кушодани PVS-Studio аз системаҳои CI/CD таваҷҷӯҳи бештар доранд, ман тавсия медиҳам, ки шумо бо барномаҳои мувофиқ шинос шавед.
PVS-Studio ба абрҳо меравад: Azure Devops PVS-Studio ба абрҳо меравад: Травис CI PVS-Studio ба абрҳо меравад: GitLab CI/CD PVS-Studio ба абрҳо меравад: CircleCI
Аммо биёед ба масъалаи шумораи зиёди мусбатҳои бардурӯғ дар марҳилаҳои аввали татбиқи воситаҳои таҳлили код баргардем.
Ислоҳи қарзи техникии мавҷуда ва мубориза бо огоҳиҳои нав
Анализаторҳои муосири тиҷории статикӣ ба шумо имкон медиҳанд, ки танҳо огоҳиҳои наверо, ки дар коди нав ё тағирёфта пайдо мешаванд, омӯзед. Татбиқи ин механизм гуногун аст, аммо моҳият як аст. Дар таҳлилгари статикии PVS-Studio, ин функсия ба таври зерин амалӣ карда мешавад.
Барои зуд оғоз кардани истифодаи таҳлили статикӣ, мо ба корбарони PVS-Studio тавсия медиҳем, ки механизми пахши оммавии огоҳиро истифода баранд [
Шумо метавонед ба PVS-Studio бигӯед, ки ин огоҳиҳоро дар ҳоли ҳозир номувофиқ мешуморад (қарзи техникиро барои дертар захира кунед) ва он дигар онҳоро нишон намедиҳад. Анализатор як файли махсус эҷод мекунад, ки дар он маълумот дар бораи хатогиҳое, ки ҳанӯз ҷолиб нестанд, захира мекунад. Ва акнун PVS-Studio танҳо барои рамзи нав ё тағирёфта огоҳӣ медиҳад. Зиёда аз ин, хамаи ин мохирона ба амал бароварда мешавад. Агар масалан, ба ибтидои файли коди ибтидоӣ сатри холӣ илова карда шавад, пас анализатор мефаҳмад, ки воқеан ҳеҷ чиз тағир наёфтааст ва хомӯширо идома медиҳад. Ин файли аломатгузорӣ метавонад ба системаи идоракунии версия гузошта шавад. Файл калон аст, аммо ин мушкилот нест, зеро аксар вақт нигоҳ доштани он маъно надорад.
Акнун ҳама барномасозон огоҳиҳое хоҳанд дид, ки танҳо бо рамзи нав ё тағирёфта алоқаманданд. Ҳамин тариқ, шумо метавонед аз рӯзи дигар, чунон ки мегӯянд, ба истифода аз анализатор шурӯъ кунед. Ва шумо метавонед баъдтар ба қарзи техникӣ баргардед ва хатогиҳоро тадриҷан ислоҳ кунед ва анализаторро танзим кунед.
Ҳамин тариқ, масъалаи аввалини татбиқи анализатор дар лоиҳаи калони кӯҳна ҳал карда шуд. Акнун биёед бифаҳмем, ки бо қарзи техникӣ чӣ кор кунем.
Ислоҳи хатогиҳо ва рефакторингҳо
Оддӣ ва табиитарин чиз ин аст, ки барои таҳлили огоҳиҳои оммавии анализатор ва тадриҷан бо онҳо кор кардан каме вақт ҷудо кунед. Дар ҷое шумо бояд хатогиҳои кодро ислоҳ кунед, дар ҷое шумо бояд рефактор кунед, то ба анализатор бигӯед, ки код мушкил нест. Мисоли оддӣ:
if (a = b)
Аксари компиляторҳо ва анализаторҳои C++ аз чунин код шикоят мекунанд, зеро эҳтимолияти зиёд вуҷуд дорад, ки онҳо воқеан навиштан мехоҳанд. (а == б). Аммо як тавофуқи ногуфта вуҷуд дорад ва ин одатан дар ҳуҷҷатҳо қайд карда мешавад, ки агар қавсҳои иловагӣ вуҷуд дошта бошанд, пас чунин мешуморанд, ки барномасоз дидаву дониста чунин код навиштааст ва ҳоҷат ба дашном додан нест. Масалан, дар ҳуҷҷатҳои PVS-Studio барои ташхис
if ((a = b))
Мисоли дигар. Оё дар ин рамзи C++ фаромӯш шудааст? танаффус ё не?
case A:
foo();
case B:
bar();
break;
Дар ин ҷо таҳлилгари PVS-Studio огоҳӣ медиҳад
case A:
foo();
[[fallthrough]];
case B:
bar();
break;
Гуфтан мумкин аст, ки чунин тағйироти код хатогиро ислоҳ намекунад. Бале, ин дуруст аст, аммо он ду кори фоиданок мекунад. Аввалан, гузориши анализатор аз мусбатҳои бардурӯғ халос мешавад. Дуюм, кодекс барои одамоне, ки дар нигоҳдории он иштирок мекунанд, фаҳмотар мегардад. Ва ин хеле муҳим аст! Танҳо барои ин, анҷом додани рефакторингҳои ночиз бамаврид аст, то кодро равшантар ва нигоҳ доштани он осонтар кунад. Азбаски анализатор намефаҳмад, ки оё "танаффус" лозим аст ё не, барои ҳамкорони барномасоз низ норавшан хоҳад буд.
Илова ба ислоҳи хатогиҳо ва рефакторингҳо, шумо метавонед махсусан огоҳиҳои бардурӯғи таҳлилгари бардурӯғро пахш кунед. Баъзе ташхисҳои номатлубро ғайрифаъол кардан мумкин аст. Масалан, касе фикр мекунад, ки огоҳӣ бемаънӣ аст
Роҳҳои дигари рафъ кардани огоҳиҳои бардурӯғ вуҷуд доранд. Масалан, аломатгузории макрос қаблан зикр шуда буд. Ҳамаи ин дар ҳуҷҷатҳо муфассалтар тасвир шудааст. Муҳимтар аз ҳама он аст, ки фаҳмед, ки агар шумо тадриҷан ва мунтазам ба кор бо мусбатҳои бардурӯғ наздик шавед, дар онҳо ҳеҷ бадӣ нест. Аксарияти зиёди огоҳиҳои ҷолиб пас аз конфигуратсия нопадид мешаванд ва танҳо ҷойҳое боқӣ мемонанд, ки воқеан омӯзиши бодиққат ва баъзе тағйирот дар кодро талаб мекунанд.
Инчунин, мо ҳамеша ба мизоҷони худ дар ташкили PVS-Studio кӯмак мерасонем, агар ягон мушкилот ба миён ояд. Гузашта аз ин, ҳолатҳое буданд, ки мо худамон огоҳиҳои бардурӯғро бартараф карда, хатогиҳоро ислоҳ кардем [
Усули рахна
Боз як равиши ҷолиб барои тадриҷан беҳтар кардани сифати код тавассути бартараф кардани огоҳии анализатори статикӣ вуҷуд дорад. Хулоса ин аст, ки шумораи огоҳиҳо танҳо метавонад кам шавад.
Шумораи огоҳиҳои аз ҷониби анализатори статикӣ додашуда сабт карда мешавад. Дарвозаи сифат тавре танзим карда шудааст, ки акнун шумо метавонед танҳо кодеро ворид кунед, ки шумораи амалиётҳоро зиёд намекунад. Дар натича процесси тадричан кам кардани шумораи сигналхо аз танзими анализатор ва ислохи хатогихо огоз меёбад.
Ҳатто агар шахс каме фиреб кардан мехоҳад ва қарор кунад, ки аз дарвозаи сифат на бо бартараф кардани огоҳиҳо дар рамзи нави худ, балки бо такмил додани коди кӯҳнаи тарафи сеюм гузарад, ин даҳшатнок нест. Хамин тавр, ратчет ба як самт давр мезанад ва охиста-охиста шумораи нуксонхо кам мешавад. Ҳатто агар шахс намехоҳад, ки камбудиҳои нави худро ислоҳ кунад, ӯ бояд дар коди ҳамсоя чизеро такмил диҳад. Дар баъзе мавридҳо, роҳҳои осони кам кардани шумораи огоҳиҳо ба охир мерасад ва вақте ки хатогиҳои воқеӣ ислоҳ карда мешаванд.
Ин методология дар мақолаи хеле ҷолиби Иван Пономарев муфассалтар тасвир шудааст "
Муаллифи мақола низ дар ин мавзӯъ гузорише дорад: "
хулоса
Умедворам, ки пас аз ин мақола хонандагон абзорҳои таҳлили статикиро бештар қабул мекунанд ва мехоҳанд онҳоро дар раванди таҳия татбиқ кунанд. Агар шумо ягон савол дошта бошед, мо ҳамеша омодаем
Шубҳаҳои маъмулии дигар вуҷуд доранд, ки оё таҳлили статикӣ воқеан қулай ва муфид буда метавонад. Ман кӯшиш кардам, ки аксари ин шубҳаҳоро дар нашрияи "Сабабҳои ворид кардани таҳлилгари коди статикии PVS-Studio ба раванди таҳия" бартараф кунам.
Ташаккур барои таваҷҷуҳ ва омадед
Истинодҳои иловагӣ
- Андрей Карпов.
Чӣ тавр ман метавонам зуд огоҳиҳои ҷолибро бинам, ки таҳлилгари PVS-Studio барои коди C ва C++ истеҳсол мекунад? - Википедия
Теоремаи Райс . - Андрей Карпов, Виктория Ханиева.
Истифодаи омӯзиши мошинсозӣ дар таҳлили статикии коди сарчашмаи барнома . - PVS-Studio. Ҳуҷҷатгузорӣ.
Танзимоти иловагии ташхис . - Андрей Карпов.
Хусусиятҳои анализатори PVS-Studio бо истифода аз мисоли EFL Core Libraries, 10-15% мусбатҳои бардурӯғ . - PVS-Studio. Ҳуҷҷатгузорӣ.
Қатъи оммавии паёмҳои анализатор . - Иван Андряшин.
Дар бораи чӣ гуна мо таҳлили статикиро дар лоиҳаи симулятори таълимии ҷарроҳии рентгении эндоваскулярӣ озмоиш кардем . - Павел Еремеев, Святослав Размыслов.
Чӣ тавр дастаи PVS-Studio рамзи Unreal Engine-ро такмил дод . - Андрей Карпов.
Сабабҳои ҷорӣ намудани таҳлилгари коди статикии PVS-Studio ба раванди таҳия .
Агар шумо хоҳед, ки ин мақоларо бо шунавандагони англисзабон мубодила кунед, лутфан истиноди тарҷумаро истифода баред: Андрей Карпов.
Манбаъ: will.com