Static analysis — dastur kodini odatda bajarmasdan, uning matni, sintaksis daraxti, oraliq tasviri yoki binar tuzilmasini tahlil qilish usulidir. Analizator type xatosi, mumkin bo‘lgan null murojaat, resurs sizishi, xavfsizlik zaifligi va uslub buzilishini topishi mumkin. Natija dalilga asoslangan ogohlantirish bo‘lib, uning aniqligi tahlil modeliga bog‘liq.
Tahlil darajalari
Oddiy linter token va AST naqshlarini tekshiradi: ishlatilmagan import, shubhali taqqoslash yoki style qoidasi. Control-flow analysis branch va looplar bo‘yicha qiymat holatini kuzatadi. Data-flow analysis ta’rif qayerdan kelgani va qayerda ishlatilishini hisoblaydi. Interprocedural analysis funksiya chegarasidan o‘tib, chaqiruv grafigi orqali ta’sirni yoyadi.
Taint analysis ishonchsiz source’dan qiymat oqimini SQL, shell, HTML yoki fayl yo‘li kabi sinkgacha izlaydi. Sanitizer ma’lum kontekst uchun oqimni xavfsiz deb belgilashi mumkin. Bitta escaping barcha sink uchun mos emas; HTML text, URL, SQL va shell kontekstlari alohida modellashtiriladi.
Abstract interpretation konkret qiymatlarning barchasini bajarish o‘rniga interval, nullability yoki symbolik holat kabi abstrakt domen ustida ishlaydi. Sound analizator ayrim xato sinfi uchun barcha mumkin holatni qamrashga intiladi, evaziga false positive ko‘payishi mumkin. Heuristic vosita kamroq shovqin beradi, lekin ayrim haqiqiy xatoni o‘tkazadi.
Cheklovlar
Reflection, dynamic loading, code generation, native extension va runtime konfiguratsiya maqsadlarni yashiradi. Analizatorga framework modeli, entry point, generated source va dependency summary berilmasa natija to‘liq bo‘lmaydi. Concurrency interleavinglari va tashqi tizim xulqi ham qimmat yoki noaniq.
False positive dasturchini ogohlantirishlardan bezdiradi. Baseline eski qarzni ajratishi mumkin, lekin yangi muammo uchun qat’iy gate saqlanadi. Suppression izoh, aniq qoida va tor source oralig‘i bilan yoziladi; umumiy o‘chirish haqiqiy zaiflikni yashirmasligi kerak. False negative yo‘qligini faqat “tool hech narsa topmadi” bilan isbotlab bo‘lmaydi.
Pipeline va tuzatish
IDE’da tez lokal qoidalar darhol feedback beradi, chuqur interprocedural scan CI’da ishlaydi. Natija source qatori, ma’lumot oqimi va xavf sababini ko‘rsatadi. SARIF kabi format turli vosita natijasini code review interfeysiga olib keladi. Dependency va secret scanning static analysis bilan yaqin, ammo alohida ma’lumot manbalari va siyosatga ega.
Auto-fix faqat semantikasi ishonchli saqlanadigan mexanik o‘zgarishga qo‘llanadi. Patch review va testdan o‘tadi. Xavfsizlik topilmasida faqat sinkni yopish emas, shu naqshning boshqa nusxalari va API dizayni ham tekshiriladi. Qoidalar production hodisa va code review tajribasi asosida takomillashtiriladi.
Static analysis unit, integration, fuzzing va runtime monitoringni almashtirmaydi. Uning kuchi xato yo‘li kam bajarilsa ham kod bo‘ylab tizimli qidirish va muammoni deploydan oldin ko‘rsatishdir.
+## Custom qoida yaratish
Tashkilotning takroriy xatosi umumiy analizatorda bo‘lmasa, ichki API uchun maxsus qoida yozilishi mumkin. Masalan, secret oluvchi funksiya natijasi log sinkiga uzatilmasligi yoki database query har doim tenant scope bilan qurilishi talab qilinadi. Qoida haqiqiy ijobiy va salbiy code namunalar bilan unit test qilinadi. Juda keng pattern foydali kodni bloklaydi; avval audit rejimida precision o‘lchanadi. Rule versiyasi repository konfiguratsiyasi bilan pin qilinadi. Auto-fix bo‘lsa, komment va formatni saqlashi, idempotent ishlashi va ikkinchi ishga tushishda yangi diff yaratmasligi kerak. Qoidaning egasi hamda yangilash jarayoni belgilanadi.
Bog‘liq tushunchalar
Linter, Data-flow analysis, Taint analysis, Abstract interpretation, SARIF, Code review, Auto-fix