
- •1. Основні терміни технології програмування
- •2. Класифікація програмного забезпечення
- •Поняття життєвого циклу розробки програмного забезпечення.
- •Етапи розробки
- •Базові моделі розробки програмних продуктів.
- •Вимоги до методології та технології розробки пп
- •Каскадна модель
- •3. Модель прототипування програмного продукту
- •4. Спіральна модель
- •5. Модель rad
- •6. Модель екстремального програмування (xp)
- •7. Модель msf (Microsoft Solutions Framework)
- •Принципи й види налагодження.
- •Аксіоми налагодження.
- •Автономне налагодження модуля.
- •Комплексне налагодження програмного засобу.
- •Інструменти розробки програмних засобів.
- •Інструментальні середовища розробки й супроводу програмних засобів.
- •Інструментальні середовища програмування.
- •Поняття комп'ютерної технології розробки програмних засобів і її робочі місця.
- •Інструментальні системи технології програмування.
- •Приклад реалізації класу Log.
- •Розробка програмного продукту з двома потоками
- •Визначення крапок контролю програмного продукту.
- •Визначення кількості викликів
- •Визначення ступеня покриття
- •Фундаментальні проблеми профілювання.
- •Причини рефакторингу
- •Підстави для проведення рефакторингу
- •Прийоми рефакторингу
- •Автоматизований рефакторинг
- •1. Принципи повторного використання елементів програм
- •2. Створення шаблонів форм у вигляді файлів
- •3. Використання шаблонів форм у новому проекті
- •4. Збереження шаблонів форм в депозитарії
- •5. Використання шаблонів форм із депозитарію
- •Шаблони класів на мові програмування с#.
- •Приклади шаблонів (класів шаблонів).
- •1. Використання підпрограм в оброблювачах подій
- •2. Звертання до активного компонента не за ім’ям
- •2. Обробка групи компонентів
- •4. Обробка компонентів як масиву
- •5. Сортування даних у компонентах
- •1. Принципи модульного програмування
- •2. Принцип «приховання даних»
- •3. Поняття модуля в Object Pascal
- •4. Структура модульного файлу
- •5. Створення модуля в Object Pascal
- •6. Створення модуля з переліком стандартних діалогів
- •7. Використання текстових констант у модулях
- •8. Створення підпрограм для обробки компонентів
- •1. Поняття dll
- •2. Створення dll бібліотеки в Delphi
- •3. Внесення форм в dll
- •4. Використання dll бібліотеки
- •Питання для самоконтролю
- •Використання регулярних виразів у програмах.
- •1. Призначення зовнішніх компонентів
- •2. Установка й видалення зовнішніх компонентів
- •3. Установка й видалення бібліотек компонентів
- •4. Запуск зовнішніх програм і файлів
- •Питання для самоконтролю
- •1. Загальні принципи технології com
- •2. Робота з com-сервером Microsoft Word
- •Робота з документами в Microsoft Word
- •Використання шаблону для формування документів
- •Робота з таблицями
- •Вставка малюнків і їх форматування
- •1. Операції з Com-Сервером Microsoft Excel
- •Робота із книгами в Microsoft Excel
- •Робота з аркушами книги в Microsoft Excel
- •Використання шаблону для формування книги
- •Формування таблиці
- •6. Форматування чарунок
- •Види довідкових систем
- •Інші засоби підтримки користувача
- •2.Формати довідників
- •3.Створення довідки у форматі html Help
- •4.Створення контекстної довідки
- •5.Інтеграція довідкового файлу в додаток
- •Перелік шаблонів, що породжують
- •Перелік структурних шаблонів
- •Перелік шаблонів поведінки
- •Призначення патерну Singleton
- •Реалізація патерну Singleton
- •Результати застосування патерну Singleton
- •Призначення патерна Observer
- •Постановка проблеми, що вирішується за допомогою патерна
- •Структура патерна Observer
- •Приклад патерна Observer
- •Реалізація патерна Observer
- •Реалізація патерну Observer: до та після
- •Призначення патерну Strategy
- •Опис патерну Strategy
- •Реалізація патерну Strategy
- •Призначення патерна Factory Method
- •Опис патерну Factory Method
- •Реалізація патерна Factory Method
Визначення кількості викликів
Як ми тільки що показали, визначення кількості викликів профілюємої крапки необхідно вже хоча б для того, щоб мі могли переконатися у вірогідності змін. До того ж, оцінювати температуру крапки можна не тільки за годиною її виконання, алеі й частоті виклику.
Наприклад, нехай у нас є дві "гарячі" крапки, у яких процесор проводити однаковий година, алеі перша з їх викликається сто разів, а друга — сто тисяч разів. Неважко догадатися, що, оптимізувавши останню хоча б на 1%, мі одержиме колосальний виграш у продуктивності, у ті година як, скоротивши година виконання першої з їх удвічі, мі прискоримо нашу програму всього лише на чверть.
Таким чином, часто викликувані функції в більшості випадків має сенс "инлайнить" (від англійського in-line), тобто безпосередньо вставити їхній код у тіло викликуваних функцій, що заощадить якась кількість години.
Визначати кількість викликів уміють практично всі профіліровники, і отут немає ніяких проблем, що заслуговують нашої уваги.
Визначення ступеня покриття
Визначення ступеня покриття не має ніякого відношення до оптимізації додатків і це побічна функція профіліровщиков. Алі, оскільки вона все-таки є, мораль зобов'язує нас розглянути її, хоч і коротко.
Отже, покриття — це відсоток реально виконаного коду програми в процесі його профілювання. Кому потрібна така інформація? Ну, у першу чергу, тестерам — повинні ж смороду переконатися, що весь код додатка протестований цілком і в ньому не залишилося ніяких "темних" місць.
З іншого боку, оптимізуючи програму, дуже важливо знаті, які саме її частини були профільовані, а які ні. У противному випадку багатьох "гарячих" крапок можна просто не помітити тільки тому, що відповідні їм гілки програми взагалі жодного разу не одержали керування!
Розглянемо, наприклад, як може виглядати протокол покриття функцій, сгенерований 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), споконвічно спрямованих на рішення саме цього завдання й зі своєю роботою смороду справляються набагато краще будь-якого профіліровщика.