Кіріспе

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

Функционалдық сынақ

Функционалдық тестілеуге бірлік тестілеу, интеграциялық тестілеу және жүйелік тестілеу сияқты салыстырмалы түрде кең таралған бағдарламалау әдістері кіреді.

Кодты қамту

Сынақтың кодтық қамтуын есептеу сынақтан өтпеген кодты анықтайды; сынақтан өтпеген. Бұл талдау сыналмаған кодты анықтаса да, сыналған кодтың жеткілікті сыналғандығын анықтамайды. Кодты орындау, тіпті сынақтар дұрыс әрекетін нақты тексермесе де орындалуы мүмкін. Gcov - GNU бастапқы кодын қамту бағдарламасы. VB Watch кодты қамтуды, шақыру стегін, орындау ізін, инстанцияланған объектілер мен айнымалыларды бақылау үшін Visual Basic бағдарламаларына динамикалық талдау кодын енгізеді.

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

Динамикалық тестілеу тест жағдайларының жиынтығында бағдарламаны орындауды қамтиды.

Жад қателерін анықтау

AddressSanitizer: Linux, macOS, Windows және басқалар үшін жад қателерін анықтау. LLVM-нің бір бөлігі. BoundsChecker: Windows негізделген қолданбалар үшін жад қателерін анықтау. Micro Focus DevPartner компаниясының бір бөлігі. Dmalloc: Жад үлестірімін және ақауларын тексеру кітапханасы. Бағдарламалық жасақтаманы қайта компиляциялау керек, және барлық файлдарға арнайы C бас файлы dmalloc кіруі керек. h. Intel Inspector: Windows және Linux-та жұмыс істейтін C, C++ және Fortran бағдарламалары үшін динамикалық жад қателерін жөндеуші. Тазарту: Негізінен жад бұзылуын анықтау және жадтың ағуын анықтау. Valgrind: Виртуалды процессорда бағдарламаларды орындайды және жад қателерін (мысалы, malloc және free-ті дұрыс қолданбау) және көптірікті бағдарламаларда жарыс жағдайларын анықтай алады.

Қаңқалау

Фуззинг - бұл бағдарламаны әр түрлі кіріспен орындауды қамтитын сынақ техникасы; көбінесе бұл кіріс кездейсоқ (кем дегенде ішінара) жасалады. "Сұр қорап" файзерлері кіріс генерациясын басқару үшін кодты қолдануды қолданады.

Динамикалық символды орындау

Динамикалық символды орындау (ДСЭ немесе конкольді орындау деп те аталады) - нақты кіріс бойынша тест бағдарламасын орындау, орындауға байланысты жол шектеулерін жинау және шектеулерді шешушіді (әдетте, SMT шешуші) пайдалану арқылы жаңа кіріс енгізу, бұл бағдарламаның басқа басқару ағыны жолын қабылдауына әкеледі, осылайша тест жиынтығының кодтық қамтуын арттырады. DSE-ді фузлингтің бір түрі деп қарастыруға болады ("ақ қорап" фузлинг).

Деректер ағынының динамикалық талдауы

Динамикалық деректер ағынын талдау ақпараттың көздерден тұнбаларға ағынын қадағалайды. Динамикалық деректер ағынын талдаудың түрлері динамикалық ластануды талдауды және тіпті динамикалық символды орындауды қамтиды.

Өзгермейтін тұжырым

Дайкон - динамикалық инвариантты анықтаудың жүзеге асырылуы. Daikon бағдарламаны орындайды, бағдарлама есептеген мәндерді бақылайды, содан кейін байқалған орындалуларға қатысты дұрыс қасиеттерді хабарлайды, сондықтан барлық орындалуларға қатысты дұрыс болуы мүмкін.

Қауіпсіздік талдау

Қауіпсіздік мәселелерін анықтау үшін динамикалық талдауды пайдалануға болады. IBM Rational AppScan - бұл даму өмірінің әртүрлі кезеңдеріне арналған қосымша қауіпсіздік шешімдерінің жиынтығы. Бұл жиынтыққа екі негізгі динамикалық талдау өнімдері кіреді: IBM Rational AppScan Standard Edition және IBM Rational AppScan Enterprise Edition. Сонымен қатар, жиынтық IBM Rational AppScan Source Edition статикалық талдау құралын қамтиды.

Бір мезгілделік қателер

Parasoft Jtest орындалу уақытында қателерді анықтауды пайдаланып, жарыс шарттары, ерекшеліктер, ресурстар мен жадтың ағып кетуі және қауіпсіздіктің шабуылдарына ұшырау мүмкіндігін анықтайды. Intel Inspector Windows-та орындалу уақытын талдауды және жад қателерін талдауды жүргізеді. Parasoft Insure++ - орындалу уақытында жадыны талдау және қателерді анықтау құралы. Оның Inuse компоненті уақыт бойынша жад үлестірудің графикалық көрінісін ұсынады, жалпы үйінді пайдаланудың, блок үлестірудің, мүмкін болатын шығындардың және т.б. нақты көрінісі бар. Google-дың Thread Sanitizer - бұл деректерді жарысты анықтау құралы. Ол LLVM IR-ді жадының кіруін бақылауға пайдаланады.

Бағдарламаны кесу

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

Орындауды талдау

Көптеген орындауды талдау құралдары динамикалық бағдарламаны талдау әдістерін қолданады.

Техникалар

Динамикалық талдаудың көпшілігі аспаптарды немесе трансформацияны қамтиды. Құралдар орындау уақытында орындалуына әсер етуі мүмкін болғандықтан, сынақ нәтижелерін түсіндіруде бұл жағдайды ескеріп, орындау кезінде проблемаларды анықтауға жол бермеу керек.

Мысалдар

DynInst - динамикалық бағдарламаны талдау зондтарын әзірлеуде және оларды компиляцияланған орындалатын файлдарға қолдануда пайдалы орындалу уақытында кодты жақтау кітапханасы. Dyninst жалпыға бастапқы кодын немесе қайта компиляцияны қажет етпейді, алайда, тазаланбаған орындалатын файлдар мен жөндеу символдары бар орындалатын файлдарды құрастыру оңайырақ. Айрох. js - JavaScript-ке арналған орындалу уақытында кодты талдау кітапханасы. Ол кодты орындау жолын қадағалайды, орындалатын кодтың нақты үлгілерін тыңдау үшін орындалу уақытын тыңдаушыларды ұсынады және бағдарламаның орындау мінез-құлқын ұстап алуға және манипуляциялауға мүмкіндік береді.