Кіріспе

Компьютерлік бағдарламалауда бағдарламаны кесу – бағдарламаның қандай операторлар жиынтығы қызығушылық тудыратын нүктедегі мәндерге әсер ететінін анықтау, яғни бағдарламаның кесіндісін есептеу процесі. Бұл кесу критерийі деп аталады. Бағдарламаны кесу қателердің көзін анықтауды жеңілдету үшін жөндеу жұмыстарында қолданылады. Слайсингтің басқа да қолданыс аяларына бағдарламалық жасақтаманы күтіп-ұстау, оңтайландыру, бағдарламаны талдау және ақпарат ағынын басқару жатады. Кесу техникалары Марк Вайзердің алғашқы анықтамасынан бері қарқынды дамып келеді. Алғашқыда кесу тек статикалық болды, яғни бағдарлама кодына қатысты, басқа ақпаратсыз қолданылды. Богдан Корел мен Януш Ласки динамикалық кесуді ұсынды, ол бағдарламаның нақты орындалуына (берілген орындалу іздеріне) қатысты жұмыс істейді. Кесудің басқа да түрлері бар, мысалы, жол бойынша кесу.

Статикалық кесу

Вайзердің бастапқы анықтамасына сүйенсек, ресми емес тұрғыда, статикалық бағдарламаның S кесіндісі – бұл P бағдарламасындағы x нұсқауындағы v айнымалысының мәніне әсер етуі мүмкін барлық нұсқаулардың жиынтығы. Кесінді C=(x,v) кесу критерийі үшін анықталады, мұнда x – P бағдарламасындағы нұсқау, ал v – x нұсқауындағы айнымалы. Статикалық кесінді кез келген мүмкін кіріс дерегі үшін x нұсқауындағы v айнымалысының мәніне әсер ететін барлық нұсқауларды қамтиды. Статикалық кесінділер нұсқаулар арасындағы тәуелділіктерді кері бағытта іздеу арқылы есептеледі. Нақтырақ айтқанда, (x,v) статикалық кесіндісін есептеу үшін, бірінші кезекте x нұсқауына дейін v айнымалысының мәніне тікелей әсер ететін барлық нұсқауларды анықтаймыз. Содан кейін, рекурсивті түрде, x нұсқауындағы v айнымалысына әсер ететін әрбір y нұсқауы үшін, v айнымалысына әсер ететін y нұсқауындағы барлық z айнымалыларының кесінділерін есептейміз. Бұл кесінділердің біріктірілуі (x,v) үшін статикалық кесіндіні құрайды.

Жеңіл алдыңғы статикалық кесу әдісі

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

Динамикалық кесу

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