Статикалық талдау – кіріспеден интеграцияға дейін

Кодты шексіз қараудан немесе жөндеуден шаршап, кейде сіз өз өміріңізді қалай жеңілдету туралы ойлайсыз. Кішкене іздегеннен кейін немесе кездейсоқ оған тап болғаннан кейін сіз «Статикалық талдау» деген сиқырлы сөйлемді көре аласыз. Оның не екенін және жобаңызбен қалай әрекеттесетінін көрейік.

Статикалық талдау – кіріспеден интеграцияға дейін
Шын мәнінде, егер сіз кез келген қазіргі тілде жазсаңыз, онда сіз оны тіпті түсінбей, оны статикалық анализатор арқылы жүргіздіңіз. Өйткені, кез келген заманауи компилятор кодтағы ықтимал проблемалар туралы аздаған болса да ескертулер жиынтығын береді. Мысалы, Visual Studio бағдарламасында C++ кодын құрастыру кезінде келесіні көруге болады:

Статикалық талдау – кіріспеден интеграцияға дейін
Бұл шығыста біз айнымалыны көреміз бар функцияның ешбір жерінде ешқашан пайдаланылмаған. Шындығында сіз әрқашан қарапайым статикалық код анализаторын қолдандыңыз. Дегенмен, Coverity, Klocwork немесе PVS-Studio сияқты кәсіби анализаторлардан айырмашылығы, компилятор ұсынатын ескертулер проблемалардың аз ғана ауқымын көрсетуі мүмкін.

Статикалық талдаудың не екенін және оны қалай жүзеге асыру керектігін нақты білмесеңіз, осы мақаланы оқыңызосы әдістеме туралы көбірек білу үшін.

Неліктен сізге статикалық талдау қажет?

Бір сөзбен айтқанда: жеделдету және жеңілдету.

Статикалық талдау кодта көптеген әртүрлі мәселелерді табуға мүмкіндік береді: тілдік құрылымдарды дұрыс пайдаланбаудан бастап, қателерге дейін. Мысалы, орнына

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

Сіз келесі кодты жаздыңыз:

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

Көріп отырғаныңыздай, соңғы жолда қате бар. Мысалы, PVS-Studio келесі ескертуді береді:

V537 «y» элементін пайдаланудың дұрыстығын қарастырыңыз.

Егер сіз осы қатеге қолыңызды тигізгіңіз келсе, Compiler Explorer бағдарламасында дайын мысалды қолданып көріңіз: *нұқыңыз*.

Түсінгеніңіздей, кодтың мұндай бөлімдеріне бірден назар аудару әрқашан мүмкін емес, сондықтан сіз бір сағат бойы отладтауға отыра аласыз, неге бәрі соншалықты оғаш жұмыс істейді деген сұрақ туындайды.

Дегенмен, бұл қате екені анық. Егер әзірлеуші ​​тілдің кейбір нәзіктігін ұмытып кеткендіктен, оңтайлы емес кодты жазса ше? Немесе тіпті кодта рұқсат етті анықталмаған мінез-құлық? Өкінішке орай, мұндай жағдайлар мүлдем қарапайым және уақыттың көп бөлігі қателерді, әдеттегі қателерді немесе анықталмаған әрекетті қамтитын арнайы жұмыс кодын жөндеуге жұмсалады.

Дәл осы жағдайлар үшін статикалық талдау пайда болды. Бұл әзірлеушінің көмекшісі, ол кодтағы әртүрлі мәселелерді көрсетеді және құжаттамада неге бұлай жазудың қажеті жоқ екенін, бұл неге әкелуі мүмкін екенін және оны қалай түзетуге болатынын түсіндіреді. Міне, оның қандай болуы мүмкін екендігінің мысалы: *нұқыңыз*.

Сіз мақалалардан талдағыш анықтай алатын қызықты қателерді таба аласыз:

Енді сіз осы материалды оқып, статикалық талдаудың артықшылықтарына көз жеткізген болсаңыз, оны қолданып көргіңіз келуі мүмкін. Бірақ неден бастау керек? Ағымдағы жобаға жаңа құралды қалай біріктіруге болады? Ал оған команданы қалай таныстыруға болады? Төменде осы сұрақтарға жауап таба аласыз.

Ескерту: Статикалық талдау кодты шолу сияқты пайдалы нәрсені ауыстырмайды немесе жоймайды. Ол осы процесті толықтырып, қателерді, дәлсіздіктерді және қауіпті дизайнды алдын ала байқап, түзетуге көмектеседі. Қате жақшаны немесе дұрыс емес жақшаны іздеудің орнына, алгоритмдер мен кодтың анықтығына арналған кодты шолуларға назар аудару әлдеқайда өнімдірек. қызықсыз салыстыру функцияларын оқыңыз.

0. Құралмен танысу

Барлығы сынақ нұсқасынан басталады. Шынында да, егер сіз құралды бұрын ешқашан тікелей эфирде көрмеген болсаңыз, әзірлеу процесіне бірдеңе енгізу туралы шешім қабылдау қиын. Сондықтан, ең алдымен, жүктеп алу керек сыналатын нұсқа.

Бұл кезеңде нені үйренесіз:

  • Анализатормен әрекеттесу тәсілдері қандай;
  • Талдағыш әзірлеу ортасымен үйлесімді ме?
  • Қазіргі уақытта жобаларыңызда қандай мәселелер бар?

Сізге қажет нәрсенің барлығын орнатқаннан кейін, ең алдымен, бүкіл жобаны талдауды орындау керек (Windows, Linux, MacOS). Visual Studio бағдарламасындағы PVS-Studio жағдайында сіз ұқсас суретті көресіз (басуға болады):

Статикалық талдау – кіріспеден интеграцияға дейін
Шындығында, статикалық анализаторлар әдетте үлкен кодтық базасы бар жобалар үшін көптеген ескертулер береді. Олардың барлығын түзетудің қажеті жоқ, себебі сіздің жобаңыз жұмыс істеп тұр, яғни бұл мәселелер маңызды емес. Дегенмен, сіз Сіз ең қызықты ескертулерді көре аласыз және қажет болған жағдайда оларды түзетіңіз. Ол үшін шығысты сүзіп, ең сенімді хабарламаларды ғана қалдыру керек. Visual Studio үшін PVS-Studio плагинінде бұл қате деңгейлері мен санаттары бойынша сүзу арқылы орындалады. Ең дәл шығу үшін тек қалдырыңыз биік и жалпы (сонымен қатар басуға болады):

Статикалық талдау – кіріспеден интеграцияға дейін
Шынында да, 178 ескертуді көру бірнеше мыңға қарағанда әлдеқайда оңай...

Қойындыларда орта и төмен Көбінесе жақсы ескертулер бар, бірақ бұл санаттарға дәлдігі (сенімділігі) азырақ диагностика кіреді. Ескерту деңгейлері мен Windows жүйесінде жұмыс істеу опциялары туралы қосымша ақпаратты мына жерден табуға болады: *нұқыңыз*.

Ең қызықты қателерді сәтті қарап шығу (және оларды сәтті түзету) маңызды қалған ескертулерді өшіріңіз. Бұл жаңа ескертулер ескілердің арасында жоғалып кетпеуі үшін қажет. Сонымен қатар, статикалық анализатор қателер тізімі емес, бағдарламашы үшін көмекші болып табылады. 🙂

1. Автоматтандыру

Танысып болғаннан кейін плагиндерді конфигурациялау және CI-ге біріктіру уақыты келді. Бұл бағдарламашылар статикалық анализаторды қолдана бастағанға дейін жасалуы керек. Мәселе мынада, бағдарламашы талдауды қосуды ұмытып кетуі немесе оны мүлдем жасағысы келмеуі мүмкін. Бұл әрекетті орындау үшін, сынақтан өтпеген код жалпы даму бөліміне түспеуі үшін барлығын соңғы тексеруді орындау керек.

Бұл кезеңде нені үйренесіз:

  • Құрал автоматтандырудың қандай опцияларын ұсынады;
  • Анализатор құрастыру жүйеңізбен үйлесімді ме?

Мінсіз құжаттама болмағандықтан, кейде жазуға тура келеді қолдау. Бұл қалыпты жағдай және біз сізге көмектесуге қуаныштымыз. 🙂

Енді үздіксіз интеграция (CI) қызметтеріне көшейік. Оларға кез келген анализаторды күрделі проблемаларсыз енгізуге болады. Мұны істеу үшін құбырдағы бөлек кезеңді жасау керек, ол әдетте құрылыс пен блок сынақтарынан кейін орналасады. Бұл әртүрлі консольдік утилиталар арқылы жасалады. Мысалы, PVS-Studio келесі утилиталарды ұсынады:

Талдауды CI-ге біріктіру үшін сізге үш нәрсені істеу керек:

  • анализаторды орнату;
  • Талдау жүргізу;
  • Нәтижелерді жеткізу.

Мысалы, PVS-Studio бағдарламасын Linux жүйесінде (Debian-база) орнату үшін келесі пәрмендерді орындау керек:

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

Windows жүйесінде жұмыс істейтін жүйелерде анализаторды пакет менеджерінен орнату мүмкін емес, бірақ пәрмен жолынан анализаторды орналастыруға болады:

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

Windows жүйесімен жұмыс істейтін жүйелерде PVS-Studio қолдану туралы қосымша ақпаратты оқуға болады *осында*.

Орнатқаннан кейін талдауды тікелей іске қосу керек. Дегенмен, мұны жинақтау мен сынақтардан өткеннен кейін ғана жасау ұсынылады. Себебі статикалық талдау әдетте компиляциядан екі есе көп уақыт алады.

Іске қосу әдісі платформаға және жоба мүмкіндіктеріне байланысты болғандықтан, мысал ретінде C++ (Linux) опциясын көрсетемін:

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

Бірінші команда талдауды орындайды, ал екіншісі конверттересепті мәтін пішіміне түрлендіреді, оны экранда көрсетеді және ескертулер болса, 0-ден басқа қайтару кодын қайтарады. Осындай механизмді қате туралы хабарлар болған кезде құрастыруды блоктау үшін ыңғайлы пайдалануға болады. Дегенмен, сіз әрқашан жалаушаны алып тастай аласыз -w және ескертулері бар жинақты блоктамаңыз.

Ескерту: Мәтін пішімі ыңғайсыз. Ол жай ғана мысал ретінде берілген. Неғұрлым қызықты есеп пішіміне назар аударыңыз - FullHtml. Бұл код арқылы шарлауға мүмкіндік береді.

CI бойынша талдауды орнату туралы толығырақ мақаладан оқи аласыз «PVS-Studio және үздіксіз интеграция"(Windows) немесе"Travis CI жүйесінде PVS-Studio қалай орнатуға болады" (Linux).

Жарайды, құрастыру серверінде анализаторды теңшедіңіз. Енді, егер біреу тексерілмеген кодты жүктеп салса, тексеру кезеңі сәтсіз болады және сіз мәселені анықтай аласыз, бірақ бұл мүлдем ыңғайлы емес, өйткені жобаны филиалдар біріктірілгеннен кейін емес, тексеру тиімдірек. оның алдында, тарту сұрау сатысында.

Жалпы алғанда, тарту сұрауының талдауын орнату CI жүйесіндегі талдауды әдеттегі іске қосудан айтарлықтай ерекшеленбейді. Өзгертілген файлдардың тізімін алу қажеттілігінен басқа. Оларды әдетте git көмегімен филиалдар арасындағы айырмашылықтарды сұрау арқылы алуға болады:

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

Енді осы файлдар тізімін анализаторға кіріс ретінде беру керек. Мысалы, PVS-Studio-да бұл жалауша арқылы жүзеге асырылады -S:

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

Сіз тарту сұрауларын талдау туралы көбірек біле аласыз *осында*. Сіздің CI мақалада көрсетілген қызметтер тізімінде болмаса да, талдаудың осы түрінің теориясына арналған жалпы бөлімді пайдалы деп табасыз.

Тарту сұрауларының талдауын орнату арқылы ескертулерді қамтитын тапсырмаларды блоктай аласыз, осылайша тексерілмеген код өте алмайтын шекара жасай аласыз.

Мұның бәрі жақсы, бірақ мен барлық ескертулерді бір жерден көргім келеді. Тек статикалық анализатордан ғана емес, сонымен қатар бірлік сынақтарынан немесе динамикалық анализатордан. Бұл үшін әртүрлі қызметтер мен плагиндер бар. Мысалы, PVS-Studio бар SonarQube интеграциясына арналған плагин.

2. Әзірлеуші ​​машиналардағы интеграция

Енді күнделікті әзірлеу үшін анализаторды орнату және конфигурациялау уақыты келді. Осы уақытқа дейін сіз жұмыс істеу тәсілдерінің көпшілігімен таныс болдыңыз, сондықтан оны ең оңай бөлігі деп атауға болады.

Ең қарапайым нұсқа ретінде әзірлеушілер қажетті анализаторды өздері орната алады. Дегенмен, бұл көп уақытты алады және оларды әзірлеуден алшақтатады, сондықтан орнатушы мен қажетті жалаушаларды пайдаланып бұл процесті автоматтандыруға болады. PVS-Studio үшін әртүрлі автоматтандырылған орнатуға арналған жалаушалар. Дегенмен, әрқашан пакет менеджерлері бар, мысалы, Chocolatey (Windows), Homebrew (macOS) немесе Linux үшін ондаған опциялар.

Содан кейін сізге қажетті плагиндерді орнату қажет болады, мысалы Visual Studio, IDEA, Rider және т.б.

3. Күнделікті қолдану

Бұл кезеңде күнделікті пайдалану кезінде анализаторды жылдамдату жолдары туралы бірнеше сөз айту керек. Бүкіл жобаны толық талдау көп уақытты алады, бірақ біз бүкіл жоба бойынша кодты бір уақытта қаншалықты жиі өзгертеміз? Бүкіл кодтық базаға бірден әсер ететіндей үлкен рефакторинг жоқ. Бір уақытта өзгертілетін файлдардың саны оннан асады, сондықтан оларды талдаудың мәні бар. Мұндай жағдай үшін бар инкрементті талдау режимі. Тек үрейленбеңіз, бұл басқа құрал емес. Бұл тек өзгертілген файлдарды және олардың тәуелділіктерін талдауға мүмкіндік беретін арнайы режим және плагин орнатылған IDE-де жұмыс істеп жатсаңыз, бұл құрастырудан кейін автоматты түрде орын алады.

Егер анализатор жақында өзгертілген кодта ақауларды анықтаса, ол бұл туралы дербес хабарлайды. Мысалы, PVS-Studio бұл туралы ескерту арқылы айтып береді:

Статикалық талдау – кіріспеден интеграцияға дейін
Әрине, әзірлеушілерге құралды пайдалануды айту жеткіліксіз. Біз оларға бұл не екенін және қалай екенін айтуымыз керек. Мұнда, мысалы, PVS-Studio-ны жылдам бастау туралы мақалалар бар, бірақ сіз өзіңіз қалаған кез келген құрал үшін ұқсас оқулықтарды таба аласыз:

Мұндай мақалалар күнделікті қолдануға қажетті барлық ақпаратты береді және көп уақытты қажет етпейді. 🙂

Құралмен танысу кезеңінде де, біз алғашқы іске қосулардың бірінде көптеген ескертулерді басып тастадық. Өкінішке орай, статикалық анализаторлар мінсіз емес, сондықтан мезгіл-мезгіл жалған позитивтер береді. Оларды басу әдетте оңай; мысалы, Visual Studio үшін PVS-Studio плагинінде бір түймені басу жеткілікті:

Статикалық талдау – кіріспеден интеграцияға дейін
Дегенмен, сіз оларды басып қана қоймай, көп нәрсені жасай аласыз. Мысалы, қолдау қызметіне ақаулық туралы хабарлауға болады. Егер жалған позитивті түзетуге болатын болса, болашақ жаңартуларда кодтық базаға тән жалған позитивтердің аз және аз болатынын байқауға болады.

После интеграция

Сонымен, біз статикалық талдауды әзірлеу процесіне енгізудің барлық кезеңдерін бастан өткердік. CI-де мұндай құралдарды орнатудың маңыздылығына қарамастан, оларды іске қосу үшін ең маңызды орын әзірлеушінің компьютері болып табылады. Өйткені, статикалық анализатор сізден алыс жерде код жақсы емес деп айтатын судья емес. Керісінше, бұл сіздің шаршағаныңызды айтып, бір нәрсені ұмытып қалсаңыз, еске салатын көмекші.

Рас, тұрақты пайдаланусыз статикалық талдау дамуды айтарлықтай жеңілдетуі екіталай. Өйткені, оның әзірлеуші ​​үшін басты пайдасы кодтың күрделі және даулы бөлімдерін іздеуде емес, оларды ерте анықтауда. Өңдеулерді сынаққа жібергеннен кейін ақауды табу жағымсыз ғана емес, сонымен қатар көп уақытты қажет ететінімен келісесіз. Тұрақты түрде пайдаланылған кезде статикалық талдау компьютердегі әрбір өзгерісті тікелей қарап, кодпен жұмыс істеу кезінде күдікті жерлерді хабарлайды.

Егер сіз немесе сіздің әріптестеріңіз әлі күнге дейін анализаторды енгізу керек пе екеніне сенімді болмасаңыз, мен сізге мақаланы оқуды бастауды ұсынамын »PVS-Studio статикалық код анализаторын әзірлеу процесіне енгізудің себептері". Ол статикалық талдау олардың уақытын алады және т.б. алатын әзірлеушілердің әдеттегі мәселелерін шешеді.

Статикалық талдау – кіріспеден интеграцияға дейін

Егер сіз осы мақаланы ағылшын тілінде сөйлейтін аудиториямен бөліскіңіз келсе, аударма сілтемесін пайдаланыңыз: Максим Звягинцев. Статикалық талдау: Жұмысты бастаудан бастап интеграцияға дейін.

Ақпарат көзі: www.habr.com

пікір қалдыру