Statik tahlil - kirishdan integratsiyagacha

Kodni cheksiz ko'rib chiqish yoki disk raskadrovka qilishdan charchab, ba'zida hayotingizni qanday soddalashtirish haqida o'ylaysiz. Va biroz qidirgandan so'ng yoki tasodifan unga qoqilib, sehrli iborani ko'rishingiz mumkin: "Statik tahlil". Keling, bu nima ekanligini va u sizning loyihangiz bilan qanday o'zaro ta'sir qilishi mumkinligini ko'rib chiqaylik.

Statik tahlil - kirishdan integratsiyagacha
Haqiqatan ham, agar siz biron bir zamonaviy tilda yozsangiz, uni o'zingiz ham sezmasdan, uni statik analizator orqali o'tkazdingiz. Gap shundaki, har qanday zamonaviy kompilyator koddagi yuzaga kelishi mumkin bo'lgan muammolar haqida kichik bo'lsa ham, ogohlantirishlar to'plamini taqdim etadi. Masalan, Visual Studio'da C++ kodini kompilyatsiya qilishda siz quyidagilarni ko'rishingiz mumkin:

Statik tahlil - kirishdan integratsiyagacha
Ushbu chiqishda biz o'zgaruvchini ko'ramiz bor funktsiyada hech qachon ishlatilmagan. Shunday qilib, aslida siz deyarli har doim oddiy statik kod analizatoridan foydalangansiz. Biroq, Coverity, Klocwork yoki PVS-Studio kabi professional analizatorlardan farqli o'laroq, kompilyator tomonidan taqdim etilgan ogohlantirishlar faqat kichik bir qator muammolarni ko'rsatishi mumkin.

Agar siz statik tahlil nima ekanligini va uni qanday amalga oshirishni aniq bilmasangiz, ushbu maqolani o'qingUshbu metodologiya haqida ko'proq ma'lumot olish uchun.

Nima uchun sizga statik tahlil kerak?

Qisqacha aytganda: tezlashtirish va soddalashtirish.

Statik tahlil sizga kodda juda ko'p turli xil muammolarni topishga imkon beradi: til konstruktsiyalarini noto'g'ri ishlatishdan tortib, matn terish xatolarigacha. Masalan, o'rniga

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

Siz quyidagi kodni yozdingiz:

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

Ko'rib turganingizdek, oxirgi qatorda xato bor. Masalan, PVS-Studio quyidagi ogohlantirishni chiqaradi:

V537 "y" elementidan foydalanishning to'g'riligini ko'rib chiqing.

Agar siz ushbu xatoga qo'l qo'ymoqchi bo'lsangiz, Compiler Explorer-da tayyor misolni sinab ko'ring: *yig'lamoq*.

Va tushunganingizdek, kodning bunday bo'limlariga darhol e'tibor berish har doim ham mumkin emas va shuning uchun siz bir soat davomida nosozliklarni tuzatish uchun o'tirib, nima uchun hamma narsa g'alati ishlayotganiga hayron bo'lishingiz mumkin.

Biroq, bu aniq xato. Agar ishlab chiquvchi tilning ba'zi nozikligini unutganligi sababli suboptimal kod yozgan bo'lsa-chi? Yoki hatto kodda ruxsat bergan aniqlanmagan xatti-harakatlar? Afsuski, bunday holatlar mutlaqo odatiy hol va vaqtning asosiy qismi matn terish xatolari, odatiy xatolar yoki aniqlanmagan xatti-harakatlarni o'z ichiga olgan maxsus ishlaydigan kodni tuzatishga sarflanadi.

Aynan shu holatlar uchun statik tahlil paydo bo'ldi. Bu ishlab chiquvchining yordamchisi bo'lib, u koddagi turli muammolarni ko'rsatadi va hujjatlarda nima uchun bunday yozish kerak emasligini, bu nimaga olib kelishi va uni qanday tuzatish kerakligini tushuntiradi. Bu qanday ko'rinishi mumkinligiga misol: *yig'lamoq*.

Analizator aniqlay oladigan qiziqarli xatolarni maqolalarda topishingiz mumkin:

Endi siz ushbu materialni o'qib chiqdingiz va statik tahlilning afzalliklariga ishonchingiz komil bo'lsa, uni sinab ko'rishingiz mumkin. Lekin qaerdan boshlash kerak? Yangi vositani joriy loyihangizga qanday qo'shish mumkin? Va unga jamoani qanday tanishtirish kerak? Quyida ushbu savollarga javob topasiz.

Eslatma. Statik tahlil kodni ko'rib chiqish kabi foydali narsani almashtirmaydi yoki bekor qilmaydi. U ushbu jarayonni to'ldiradi, matn terish xatolarini, noaniqliklarni va xavfli dizaynlarni oldindan sezish va tuzatishga yordam beradi. Noto'g'ri joylashtirilgan qavs yoki kodni qidirishdan ko'ra, algoritmlar va kod ravshanligiga e'tibor qaratish ancha samaraliroq bo'ladi. zerikarli taqqoslash funktsiyalarini o'qing.

0. Asbob bilan tanishish

Hammasi sinov versiyasidan boshlanadi. Haqiqatan ham, agar siz ushbu vositani ilgari hech qachon jonli ravishda ko'rmagan bo'lsangiz, ishlab chiqish jarayoniga biror narsani kiritishga qaror qilish qiyin. Shuning uchun siz qilishingiz kerak bo'lgan birinchi narsa yuklab olishdir sinov versiyasi.

Ushbu bosqichda nimani o'rganasiz:

  • Analizator bilan o'zaro ta'sir qilish usullari qanday;
  • Analizator ishlab chiqish muhitingizga mos keladimi?
  • Hozirda loyihalaringizda qanday muammolar mavjud?

Sizga kerak bo'lgan hamma narsani o'rnatganingizdan so'ng, qilishingiz kerak bo'lgan birinchi narsa butun loyihani tahlil qilishdir (Windows, Linux, MacOS). Visual Studio'da PVS-Studio holatida siz shunga o'xshash rasmni ko'rasiz (bosish mumkin):

Statik tahlil - kirishdan integratsiyagacha
Gap shundaki, statik analizatorlar odatda katta kod bazasiga ega bo'lgan loyihalar uchun juda ko'p ogohlantirishlarni chiqaradilar. Ularning barchasini tuzatishning hojati yo'q, chunki sizning loyihangiz allaqachon ishlamoqda, demak, bu muammolar muhim emas. Biroq, siz eng qiziqarli ogohlantirishlarni ko'rishingiz mumkin va agar kerak bo'lsa, ularni tuzating. Buning uchun siz chiqishni filtrlashingiz va faqat eng ishonchli xabarlarni qoldirishingiz kerak. Visual Studio uchun PVS-Studio plaginida bu xato darajalari va toifalari bo'yicha filtrlash orqali amalga oshiriladi. Eng aniq chiqish uchun faqat qoldiring baland ΠΈ umumiy (shuningdek bosish mumkin):

Statik tahlil - kirishdan integratsiyagacha
Darhaqiqat, 178 ta ogohlantirishni ko'rish bir necha mingdan ko'ra osonroqdir ...

Yorliqlarda o'rta ΠΈ past Ko'pincha yaxshi ogohlantirishlar mavjud, ammo bu toifalarga kamroq aniqlik (ishonchlilik) ega bo'lgan diagnostika kiradi. Ogohlantirish darajalari va Windows ostida ishlash imkoniyatlari haqida ko'proq ma'lumotni bu yerda topishingiz mumkin: *yig'lamoq*.

Eng qiziqarli xatolarni muvaffaqiyatli ko'rib chiqish (va ularni muvaffaqiyatli tuzatish) arziydi qolgan ogohlantirishlarni bostirish. Bu yangi ogohlantirishlar eskilari orasida yo'qolmasligi uchun kerak. Bundan tashqari, statik analizator xatolar ro'yxati emas, balki dasturchi uchun yordamchidir. πŸ™‚

1. Avtomatlashtirish

Tanishgandan so'ng, plaginlarni sozlash va CI-ga integratsiya qilish vaqti keldi. Bu dasturchilar statik analizatordan foydalanishni boshlashdan oldin bajarilishi kerak. Gap shundaki, dasturchi tahlilni yoqishni unutishi yoki umuman qilishni xohlamasligi mumkin. Buni amalga oshirish uchun siz hamma narsani yakuniy tekshirishingiz kerak, shunda tekshirilmagan kod umumiy rivojlanish bo'limiga kira olmaydi.

Ushbu bosqichda nimani o'rganasiz:

  • Asbob qanday avtomatlashtirish imkoniyatlarini taqdim etadi;
  • Analizator yig'ish tizimingizga mos keladimi?

Mukammal hujjatlar mavjud emasligi sababli, ba'zida siz yozishingiz kerak bo'ladi qo'llab-quvvatlash. Bu normal holat va biz sizga yordam berishdan xursandmiz. πŸ™‚

Endi uzluksiz integratsiya (CI) xizmatlariga o'tamiz. Har qanday analizator ularga jiddiy muammolarsiz kiritilishi mumkin. Buni amalga oshirish uchun quvur liniyasida alohida bosqichni yaratishingiz kerak, bu odatda qurilish va birlik sinovlaridan keyin joylashgan. Bu turli xil konsol yordam dasturlari yordamida amalga oshiriladi. Masalan, PVS-Studio quyidagi yordamchi dasturlarni taqdim etadi:

Tahlilni CIga integratsiya qilish uchun siz uchta narsani qilishingiz kerak:

  • Analizatorni o'rnatish;
  • Tahlil qilish;
  • Natijalarni yetkazib berish.

Masalan, PVS-Studio-ni Linuxda (Debian-base) o'rnatish uchun siz quyidagi buyruqlarni bajarishingiz kerak:

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 operatsion tizimida ishlaydigan tizimlarda analizatorni paketlar menejeridan o'rnatishning hech qanday usuli yo'q, lekin analizatorni buyruq satridan o'rnatish mumkin:

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

Windows bilan ishlaydigan tizimlarda PVS-Studio-ni o'rnatish haqida ko'proq o'qishingiz mumkin *shu yerda*.

O'rnatishdan so'ng siz tahlilni to'g'ridan-to'g'ri bajarishingiz kerak. Biroq, buni faqat kompilyatsiya va testlardan o'tgandan keyin qilish tavsiya etiladi. Buning sababi shundaki, statik tahlil odatda kompilyatsiyadan ikki baravar ko'p vaqt oladi.

Ishga tushirish usuli platforma va loyiha xususiyatlariga bog'liq bo'lgani uchun men misol sifatida C++ (Linux) variantini ko'rsataman:

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

Birinchi buyruq tahlilni amalga oshiradi, ikkinchisi konvertlarhisobotni matn formatiga o'zgartiradi, uni ekranda ko'rsatadi va ogohlantirishlar mavjud bo'lsa, 0 dan boshqa qaytarish kodini qaytaradi. Bunday mexanizm xato xabarlari mavjud bo'lganda qurilishni bloklash uchun qulay foydalanish mumkin. Biroq, siz har doim bayroqni olib tashlashingiz mumkin -w va ogohlantirishlarni o'z ichiga olgan yig'ilishni bloklamang.

Eslatma. Matn formati noqulay. U oddiygina misol sifatida keltirilgan. Hisobotning yanada qiziqarli formatiga e'tibor bering - FullHtml. Bu sizga kodlar bo'ylab harakatlanish imkonini beradi.

CI bo'yicha tahlilni o'rnatish haqida ko'proq maqolada o'qishingiz mumkin "PVS-Studio va uzluksiz integratsiya"(Windows) yoki"Travis CI-da PVS-Studio-ni qanday sozlash kerak" (Linux).

OK, siz analizatorni qurish serverida sozladingiz. Endi, agar kimdir tekshirilmagan kodni yuklagan bo'lsa, tekshirish bosqichi muvaffaqiyatsiz bo'ladi va siz muammoni aniqlay olasiz, ammo bu unchalik qulay emas, chunki loyihani filiallar birlashtirilgandan keyin emas, balki tekshirish samaraliroq bo'ladi. undan oldin, tortish so'rovi bosqichida.

Umuman olganda, tortishish so'rovi tahlilini o'rnatish CI bo'yicha tahlilni odatiy ishga tushirishdan unchalik farq qilmaydi. O'zgartirilgan fayllar ro'yxatini olish zarurati bundan mustasno. Buni odatda git yordamida filiallar orasidagi farqlarni so'rash orqali olish mumkin:

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

Endi siz ushbu fayllar ro'yxatini kirish sifatida analizatorga o'tkazishingiz kerak. Masalan, PVS-Studio-da bu bayroq yordamida amalga oshiriladi -S:

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

Pull so'rovlarini tahlil qilish haqida ko'proq bilib olishingiz mumkin *shu yerda*. Sizning CI maqolada keltirilgan xizmatlar ro'yxatida bo'lmasa ham, ushbu turdagi tahlil nazariyasiga bag'ishlangan umumiy bo'limni foydali deb topasiz.

Pull so'rovlari tahlilini o'rnatish orqali siz ogohlantirishlarni o'z ichiga olgan majburiyatlarni bloklashingiz mumkin va shu bilan tekshirilmagan kodni kesib o'tolmaydigan chegara yaratishingiz mumkin.

Bu, albatta, yaxshi, lekin men barcha ogohlantirishlarni bir joyda ko'rishni xohlayman. Faqat statik analizatordan emas, balki birlik testlaridan yoki dinamik analizatordan ham. Buning uchun turli xil xizmatlar va plaginlar mavjud. Masalan, PVS-Studio bor SonarQube-ga integratsiya uchun plagin.

2. Ishlab chiquvchi mashinalarda integratsiya

Analizatorni kundalik foydalanish uchun o'rnatish va sozlash vaqti keldi. Shu paytgacha siz ishlashning ko'p usullari bilan tanishib oldingiz, shuning uchun buni eng oson qismi deb atash mumkin.

Eng oddiy variant sifatida ishlab chiquvchilar kerakli analizatorni o'zlari o'rnatishlari mumkin. Biroq, bu juda ko'p vaqtni oladi va ularni rivojlanishdan chalg'itadi, shuning uchun siz o'rnatuvchi va kerakli bayroqlar yordamida ushbu jarayonni avtomatlashtirishingiz mumkin. PVS-Studio uchun har xil avtomatlashtirilgan o'rnatish uchun bayroqlar. Biroq, har doim paket menejerlari mavjud, masalan, Chocolatey (Windows), Homebrew (macOS) yoki Linux uchun o'nlab variantlar.

Keyin kerakli plaginlarni o'rnatishingiz kerak bo'ladi, masalan Visual Studio, IDEA, Rider va hokazo

3. Kundalik foydalanish

Ushbu bosqichda, kundalik foydalanish paytida analizatorni tezlashtirish usullari haqida bir necha so'z aytish vaqti keldi. Butun loyihani to'liq tahlil qilish juda ko'p vaqtni oladi, lekin biz bir vaqtning o'zida butun loyiha davomida kodni qanchalik tez-tez o'zgartiramiz? Shu qadar katta refaktoring deyarli yo'qki, u darhol butun kod bazasiga ta'sir qiladi. Bir vaqtning o'zida o'zgartirilayotgan fayllar soni kamdan-kam hollarda o'ndan oshadi, shuning uchun ularni tahlil qilish mantiqan. Bunday vaziyat uchun mavjud qo'shimcha tahlil rejimi. Faqat xavotirlanmang, bu boshqa vosita emas. Bu faqat o'zgartirilgan fayllar va ularning bog'liqliklarini tahlil qilish imkonini beruvchi maxsus rejim bo'lib, agar siz plagin o'rnatilgan IDE da ishlayotgan bo'lsangiz, bu qurgandan so'ng avtomatik ravishda sodir bo'ladi.

Agar analizator yaqinda o'zgartirilgan kodda muammolarni aniqlasa, u bu haqda mustaqil ravishda xabar beradi. Masalan, PVS-Studio sizga bu haqda ogohlantirish yordamida xabar beradi:

Statik tahlil - kirishdan integratsiyagacha
Albatta, ishlab chiquvchilarga ushbu vositadan foydalanishni aytish etarli emas. Biz qandaydir tarzda ularga bu nima ekanligini va qanday ekanligini aytishimiz kerak. Bu yerda, masalan, PVS-Studio-ni tez boshlash haqida maqolalar, lekin siz o'zingiz yoqtirgan har qanday vosita uchun shunga o'xshash qo'llanmalarni topishingiz mumkin:

Bunday maqolalar kundalik foydalanish uchun zarur bo'lgan barcha ma'lumotlarni taqdim etadi va ko'p vaqt talab qilmaydi. πŸ™‚

Asbob bilan tanishish bosqichida ham biz birinchi ishga tushirishlardan birida juda ko'p ogohlantirishlarni bostirdik. Afsuski, statik analizatorlar mukammal emas, shuning uchun vaqti-vaqti bilan ular noto'g'ri ijobiy natijalar beradi. Odatda ularni bostirish oson; masalan, Visual Studio uchun PVS-Studio plaginida siz faqat bitta tugmani bosishingiz kerak:

Statik tahlil - kirishdan integratsiyagacha
Biroq, siz ularni bostirishdan ko'ra ko'proq narsani qilishingiz mumkin. Masalan, muammo haqida qo'llab-quvvatlash xizmatiga xabar berishingiz mumkin. Agar noto'g'ri pozitiv tuzatilishi mumkin bo'lsa, kelajakdagi yangilanishlarda siz har safar kod bazangizga xos bo'lgan noto'g'ri pozitivlar kamroq va kamroq ekanligini ko'rishingiz mumkin.

Integratsiyadan keyin

Shunday qilib, biz statik tahlilni rivojlanish jarayoniga integratsiyalashning barcha bosqichlaridan o'tdik. CI-da bunday vositalarni o'rnatish muhimligiga qaramasdan, ularni ishga tushirish uchun eng muhim joy ishlab chiquvchining kompyuteridir. Axir, statik analizator sizdan uzoqroq joyda kod yaxshi emasligini aytadigan sudya emas. Aksincha, bu sizning charchaganingizni bildiradigan va biror narsani unutgan bo'lsangiz, eslatib turadigan yordamchidir.

To'g'ri, muntazam foydalanmasdan, statik tahlil rivojlanishni sezilarli darajada soddalashtirishi dargumon. Axir, uning ishlab chiquvchi uchun asosiy foydasi kodning murakkab va bahsli bo'limlarini izlashda emas, balki ularni erta aniqlashdadir. Tahrirlar sinovga yuborilgandan keyin muammoni aniqlash nafaqat yoqimsiz, balki juda ko'p vaqt talab qilishiga rozi bo'ling. Statik tahlil, muntazam foydalanilganda, har bir o'zgarishlarni bevosita kompyuteringizda ko'rib chiqadi va kod ustida ishlayotganda shubhali joylar haqida xabar beradi.

Va agar siz yoki sizning hamkasblaringiz hali ham analizatorni qo'llashga arziydimi yoki yo'qligiga ishonchingiz komil bo'lmasa, men sizga maqolani o'qishni boshlashingizni maslahat beraman "PVS-Studio statik kod analizatorini ishlab chiqish jarayoniga kiritish sabablari". U ishlab chiquvchilarning statik tahlil vaqtini olishi haqidagi odatiy tashvishlarini hal qiladi va hokazo.

Statik tahlil - kirishdan integratsiyagacha

Agar siz ushbu maqolani ingliz tilida so'zlashuvchi auditoriya bilan baham ko'rishni istasangiz, iltimos, tarjima havolasidan foydalaning: Maksim Zvyagintsev. Statik tahlil: Ishni boshlashdan integratsiyagacha.

Manba: www.habr.com

a Izoh qo'shish