Abstrakt sintaksis daraxtini tekshirish- kodning asosiy sintaksisi va tuzilishini tekshirish.
Kod yo'lini tahlil qilish- kodni bajarish yo'lining ma'lum bir nuqtasida dastur ma'lumotlari ob'ektlarining holatini tushunishga bog'liq bo'lgan to'liqroq tahlil qilish.
Abstrakt sintaksis daraxtlari
Mavhum sintaksis daraxti oddiygina kompilyatordan oldingi bosqichlarda yaratilishi mumkin bo'lgan manba kodining daraxt strukturasi tasviridir. Daraxt kod strukturasining batafsil birma-bir parchalanishini o'z ichiga oladi, bu asboblarga anomal sintaksis nuqtalarini oddiy qidirishni amalga oshirish imkonini beradi.
Nomlash konventsiyalari va funktsiya chaqiruvlari cheklovlari bilan bog'liq standartlarni tekshiradigan tekshiruvchini yaratish juda oson, masalan, xavfli kutubxonalarni tekshirish. AST tekshiruvlarini o'tkazishdan maqsad odatda kodning bajarilishi paytida qanday harakat qilishini bilmasdan kodning o'zidan qandaydir xulosa chiqarishdir.
Ko'pgina vositalar turli tillar uchun AST asosidagi tekshiruvlarni taklif qiladi, jumladan Java uchun PMD kabi ochiq manbali vositalar. Ba'zi vositalar dasturlarni boshqarish uchun qiziq bo'lgan shartlarni aniqlash uchun X-yo'l grammatikasidan yoki X-yo'ldan olingan grammatikadan foydalanadi. Boshqa vositalar foydalanuvchilarga o'zlarini yaratishga imkon beradigan ilg'or mexanizmlarni taqdim etadi o'z dasturlari AST asosidagi tekshiruvlar. Ushbu turdagi ko'rib chiqishni bajarish nisbatan oson va ko'plab tashkilotlar korporativ kodlash standartlari yoki sanoat tomonidan tavsiya etilgan eng yaxshi amaliyotlarga muvofiqligini tekshirish uchun ushbu turdagi yangi ko'rib chiqish dasturlarini yaratmoqda.
Kod yo'lini tahlil qilish
Keling, murakkabroq misolni ko'rib chiqaylik. Endi biz dasturlash uslubini buzish holatlarini qidirish o'rniga, biz ko'rsatgichni o'zgartirishga urinish to'g'ri yoki muvaffaqiyatsiz ishlashini tekshirmoqchimiz:
If(x & 1) ptr = NULL; *ptr = 1;
Fragmentni yuzaki tadqiq qilish, agar x o'zgaruvchisi toq bo'lsa, ptr o'zgaruvchisi NULL bo'lishi mumkinligi haqidagi aniq xulosaga olib keladi va bu shartga murojaat qilinganda, muqarrar ravishda null sahifaga olib keladi. Biroq, AST asosida test dasturini yaratishda, bunday dastur xatosini topish juda muammoli. Yuqoridagi kod parchasi uchun yaratiladigan AST daraxtini (aniqlik uchun soddalashtirilgan) ko'rib chiqing:
Bayonot bloki If-iborani tekshirish-ifoda Ikkilik-operator & x 1 Toʻgʻri-tarmoqli ifoda-iborani tayinlash-operator = ptr 0 Ifoda-iborani tayinlash-operator = Dereference-pointer - ptr 1 Bunday hollarda hech qanday daraxt qidirish yoki oddiy roʻyxat boʻlmaydi. tugunlar ko'rsatgichni o'zgartirishga urinishni (hech bo'lmaganda ba'zan noto'g'ri) oqilona umumlashtirilgan shaklda aniqlay olmaydi. Shunga ko'ra, tahlil qilish vositasi sintaksis modelini shunchaki qidira olmaydi. Shuningdek, ma'lumotlar ob'ektlarining hayot aylanishini ular paydo bo'lishi va bajarilishi davomida boshqaruv mantiqi doirasida ishlatilishini tahlil qilish kerak.
Kod yo'li tahlili bajarilish yo'llaridagi ob'ektlarni kuzatib boradi, shunda validatorlar ma'lumotlardan to'g'ri va to'g'ri foydalanilganligini aniqlashlari mumkin. Kod yo'li tahlilidan foydalanish statik tahlil jarayonida javob berilishi mumkin bo'lgan savollar doirasini kengaytiradi. Kod yo'lini tahlil qilish dastur kodining to'g'riligini oddiygina tahlil qilish o'rniga, kodning "niyatlarini" aniqlashga va kodning ushbu niyatlarga muvofiq yozilganligini tekshirishga harakat qiladi. Bu quyidagi savollarga javob berishi mumkin:
Yangi yaratilgan ob'ekt unga barcha havolalar ko'lamdan olib tashlanishidan oldin ozod qilinganmi?
Ob'ektni OT funktsiyasiga o'tkazishdan oldin ba'zi ma'lumotlar ob'ekti uchun ruxsat etilgan qiymatlar diapazoni tekshirilganmi?
Qatorni SQL so'rovi sifatida o'tkazishdan oldin belgilar qatorida maxsus belgilar mavjudligi tekshirildimi?
Nusxalash operatsiyasi bufer to'lib ketishiga olib keladimi?
Ayni paytda bu funksiyani chaqirish xavfsizmi?
Kodni bajarish yo'llarini shu tarzda tahlil qilib, hodisa boshlanishidan maqsad skriptga o'tish va hodisani ishga tushirishdan kerakli ma'lumotlarni ishga tushirishgacha, vosita savollarga javob bera oladi va agar maqsadli skript yoki ishga tushirishlar bajarilgan bo'lsa, xato hisobotini chiqaradi. yoki kutilganidek bajarilmaydi.
Bunday qobiliyatni amalga oshirish ilg'or manba kodini tahlil qilish uchun zarurdir. Shu sababli, ishlab chiquvchilar xotira oqishini, noto'g'ri ko'rsatgichga murojaat qilishlarini, xavfli yoki noto'g'ri ma'lumotlarni uzatishni, parallellik buzilishini va boshqa ko'plab muammoli vaziyatlarni aniqlash uchun ilg'or kod yo'li tahlilidan foydalanadigan vositalarni izlashlari kerak.