Klocwork mahsulotlari statik kodni avtomatlashtirilgan tahlil qilish, dasturiy ta'minotdagi nuqsonlar va xavfsizlik muammolarini aniqlash va oldini olish uchun mo'ljallangan. Mahsulotlarimiz ishlab chiqish guruhlariga dasturiy ta'minot sifati va xavfsizlik kamchiliklarining asosiy sabablarini aniqlash hamda ishlab chiqish jarayonida ushbu kamchiliklarni kuzatish va oldini olish vositalarini taqdim etadi. Klocwork kompaniyasining patentlangan texnologiyasi 1996-yilda tashkil etilgan va 80 dan ortiq mijozlar uchun yuqori sarmoya daromadini (ROI) taqdim etdi, ularning aksariyati Fortune 500 kompaniyalari bo'lib, dunyoda eng ko'p talab qilinadigan dasturiy ta'minotni ishlab chiqish muhitini taklif qiladi. Klocwork xususiy kompaniya bo'lib, ofislari Burlington, San-Xose, Chikago, Dallas (AQSh) va Ottavada (Kanada).
Ushbu atama odatda maxsus dasturiy ta'minot tomonidan amalga oshiriladigan tahlil uchun qo'llaniladi, qo'lda tahlil deb ataladi tushunish yoki tushunish dasturlari.
Amaldagi vositaga qarab, tahlil chuqurligi individual bayonotlarning xatti-harakatlarini aniqlashdan boshlab barcha mavjud manba kodlarini o'z ichiga olgan tahlilgacha farq qilishi mumkin. Tahlil davomida olingan ma'lumotlardan foydalanish usullari ham har xil - xatolar bo'lishi mumkin bo'lgan joylarni aniqlashdan tortib, dasturning har qanday xususiyatlarini matematik jihatdan isbotlash imkonini beruvchi rasmiy usullargacha (masalan, xatti-harakatlarning spetsifikatsiyaga muvofiqligi).
Ba'zi odamlar dasturiy ta'minot ko'rsatkichlari va teskari muhandislikni statik tahlil shakllari deb bilishadi.
So'nggi paytlarda statik tahlil ishlatiladigan dasturiy ta'minotning xususiyatlarini tekshirish uchun tobora ko'proq foydalanilmoqda kompyuter tizimlari yuqori ishonchlilik.
Ko'pgina kompilyatorlar (masalan, GNU C kompilyatori) ekranda "ogohlantirishlar" ni ko'rsatadi. ogohlantirishlar) - sintaktik jihatdan to'g'ri bo'lgan kodda xatolik borligi haqidagi xabarlar. Masalan:
intx; int y = x+ 2 ; // x o'zgaruvchisi ishga tushirilmagan!
Bu eng oddiy statik tahlil. Kompilyator boshqa ko'plab muhim xususiyatlarga ega - birinchi navbatda, ish tezligi va mashina kodining sifati, shuning uchun kompilyatorlar kodni faqat aniq xatolar uchun tekshiradilar. Statik analizatorlar kodni batafsil tahlil qilish uchun mo'ljallangan.
Aniqlanmagan xatti-harakatlar - ishga tushirilmagan o'zgaruvchilar, NULL ko'rsatkichlariga kirish. Kompilyatorlar eng oddiy holatlar haqida ham signal beradi.
Kutubxonadan foydalanishning blok-sxemasini buzish. Masalan, har bir fopenga fclose kerak. Va agar fayl o'zgaruvchisi fayl yopilishidan oldin yo'qolsa, analizator xato haqida xabar berishi mumkin.
Hujjatsiz xatti-harakatlarga olib keladigan odatiy stsenariylar. C standart kutubxonasi ko'plab texnik nosozliklar bilan mashhur. get kabi ba'zi funktsiyalar o'z-o'zidan xavfsiz emas. sprintf va strcpy faqat ma'lum sharoitlarda xavfsizdir.
Bufer to'lib ketishi - kompyuter dasturi xotirada ajratilgan bufer chegarasidan tashqarida ma'lumotlarni yozganda.
Void doSomething(const char * x) ( char s[ 40 ] ; sprintf (s, "[%s]" , x) ; // mahalliy buferga sprintf, to'lib ketishi mumkin .... }
O'zaro platformaga xalaqit beradigan odatiy stsenariylar.
Ob'ekt * p = getObject(); int pNum = reinterpret_cast< int >(p); // x86-32 da true, x64 da ko'rsatgichning bir qismi yo'qoladi; size_t kerak
Takrorlanuvchi koddagi xatolar. Ko'pgina dasturlar bir xil narsani turli argumentlar bilan bir necha marta bajaradi. Odatda, takrorlanuvchi parchalar noldan yozilmaydi, balki takrorlanadi va tuzatiladi.
dest.x = src.x + dx; dest.y = src.y + dx; // Xato, kerak!
std::wstrings; printf("s - %s", s);
Funksiyaga berilgan o‘zgarmas parametr dasturga qo‘yilgan talablarning o‘zgarganligi belgisidir. Bir marta parametr yoqilgan edi, lekin endi u endi kerak emas. Bunday holda, dasturchi ushbu parametrdan va u bilan bog'liq mantiqdan butunlay xalos bo'lishi mumkin.
doSomething (int n, bool bayrog'i) // bayroq har doim to'g'ri( agar (bayroq) ( // ba'zi mantiq) boshqa ( // kod bor, lekin ishlatilmaydi) ) doSomething(n, rost ); ... doSomething (10 , rost ); ... doSomething (x.size() , true );
std::strings; ...s.empty(); // kod hech narsa qilmaydi; siz s.clear() ni nazarda tutgandirsiz?
Do'stlaringiz bilan baham: |