русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Визначення ступеня покриття


Дата додавання: 2014-10-07; переглядів: 911.


Визначення ступеня покриття не має ніякого відношення до оптимізації додатків і це побічна функція профіліровщиков. Алі, оскільки вона все-таки є, мораль зобов'язує нас розглянути її, хоч і коротко.

Отже, покриття — це відсоток реально виконаного коду програми в процесі його профілювання. Кому потрібна така інформація? Ну, у першу чергу, тестерам — повинні ж смороду переконатися, що весь код додатка протестований цілком і в ньому не залишилося ніяких "темних" місць.

З іншого боку, оптимізуючи програму, дуже важливо знаті, які саме її частини були профільовані, а які ні. У противному випадку багатьох "гарячих" крапок можна просто не помітити тільки тому, що відповідні їм гілки програми взагалі жодного разу не одержали керування!

Розглянемо, наприклад, як може виглядати протокол покриття функцій, сгенерований profile.exe для нашого тестового приклада pswd.exe

Лістинг 1.7. Приклад протоколу покриття функцій.

program statistics ; СТАТИСТИКА ПО ПРОГРАМІ

Command line at 2002 Aug 20 03:36: pswd ; КОМАНДНИЙ РЯДОК

call depth: 2 ; ГЛИБИНА ВИКЛИКІВ: 2

total functions: 5 ; УСЬОГО ФУНКЦІЙ: 5

Function coverage: 60,0% ; ПОКРИТО ФУНКЦІЙ: 60%

 

Module Statistics for pswd.exe ; СТАТИСТИКА ПО МОДУЛІ pswd

Functions in module: 5 ; ФУНКЦІЙ У МОДУЛІ: 5

Module function coverage: 60,0% ; ФУНКЦІЙ ПРОКРЫТО: 60%

 

Covered Function ; ПОКРИТІ ФУНКЦІЇ

. _DeCrypt (pswd.obj)

. __real@4@4008fa00000000000000 (pswd.obj)

* _gen_pswd (pswd.obj)

* _main (pswd.obj)

* _print_dot (pswd.obj)

З лістингу 1.7 треба, що лише 60% функцій одержали керування, а інші 40% не були викликані жодного разу! Розумно переконатися: а чи викликаються ці функції коли не будь взагалі або являють собою "мертвий" код, якому можна безболісно видалити із програми, практично на половину зменшивши її в розмірах?

Якщо ж ці функції при якихось певних обставинах все-таки одержують керування, нам необхідно проаналізувати вихідний код, щоб розібратися: що ж це за обставини й відтворити їх, щоб профіліровщик зміг пройти й інші ділянки програми. Імена покритих і непокритих функцій перераховані в секції Covered Function. Покриті відзначаються знаком "*", а непокриті — "."

Взагалі ж, для визначення ступеня покриття існує безліч додатків (наприклад, NuMega Code Coverage), споконвічно спрямованих на рішення саме цього завдання й зі своєю роботою смороду справляються набагато краще будь-якого профіліровщика.


<== попередня лекція | наступна лекція ==>
Визначення кількості викликів | Фундаментальні проблеми профілювання.


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн