Вступ до інженерії програмного забезпечення - Микола Олександрович Сидоров
Рис. 5.6. Методи оберненої інженерії
До цих методів належать такі;
- відновлення проектної інформації;
- реструктуризація;
- редокументування;
- реінженерія.
Поняття реверсивної інженерії стосовно технічних систем використовується для визначення процесів розробки специфікацій системи шляхом дослідження її задля створення безлічі подібних систем.
Стосовно програмного забезпечення основні цілі оберненої Інженерії полягають не в створенні дубліката системи, а в отриманні інформації для кращого розуміння системи, щоб підвищити ефективність супроводу, переробити систему або виділити з неї певні компоненти, що відповідають заданим вимогам.
Відновлення проектної інформації (design recovery) - це метод оберненої інженерії, у якому разом з початковим кодом під час відновлення проектної інформації використовуються всі доступні відомості про систему: проектна документація, досвід розробників і експлуатаційників, знання про домен. Головна мета відновлення проектної інформації - розроблення структур, які допоможуть інженерові програмного забезпечення зрозуміти програму або програмну систему. Отже, кінцевою метою е не специфікація вимог, яка відповідає аналізованому початковому коду, а проектна інформація.
Реструктуризація (restructuring) - це метод трансформації програмного забезпечення на одному рівні його уявлення шляхом використання інформації, котру отримали в процесі виконання реверсивної інженерії. Трансформація не приводить до зміни первинних вимог до програмного забезпечення (наприклад, реструктуризація - це перетворення неструктурної форми коду в структурну).
Редокументування (redocumentaiion) - це метод створення або перегляду семантично еквівалентних уявлень програмного забезпечення в рамках одного і того ж рівня. Прикладом може слугувати створення діаграм управління, описи структури програмного забезпечення у формі зручної для сприйняття людиною. Ключова роль цього методу полягає в тому, щоб забезпечити візуалізацію відношень, що мають місце між програмними компонентами для того, щоб розпізнати їх і управляти ними,
Реінженерія (reengineering) - це метол зміни програмного забезпечення шляхом використання методів прямої інженерії на основі відновленої (за допомогою оберненої інженерії) проектної інформації. До того ж, реінженерія веде до зміни системних і функціональних вимог програмного забезпечення і є методом ного переробки.
5.2.2. Інструменти оберненої інженеріїУсі інструменти оберненої інженерії утворюють інтегроване середовище - Computer Aided Reverse Software Environment (CARSE). Загальну архітектуру середовища зображено на рис. 5.7.
Рис. 5.7. Архітектура інструментів оберненої інженерії
5.3. Емпірична інженерія програмного забезпеченняЕмпіричні методи досліджень відіграють «впливову» роль в інженерії програмного забезпечення і їх застосування складають одну з інженерій - емпіричну інженерію програмного забезпечення.
На відміну від прямої та оберненої інженерії мста емпіричної інженерії - не розробка або переробка програмного забезпечення, а здобуття знань про програмне забезпечення. Тому її основу складають два кола методів та засобів. Перше пов'язане із збиранням інформації щодо властивостей програмного забезпечення. Переважно це робиться шляхом застосування вимірювань. Друге складають методи та засоби обробки нагромадженої інформації і здобуття знань стосовно програмного забезпечення, що досліджується.
5.3.1. Методи емпіричної інженерії програмного забезпеченняГоловним методом досліджень програмного забезпечення є вимірювання. Для контролю процесів, продуктів та ресурсі в життєвого циклу програмного забезпечення слід використовувати величини характеризуючи їх властивості, що називаються метриками.
Величина - це певна властивість предмета, з якою можна зіставити значення. Для синтезу величини варто визначити властивість (семантику величини), систему значень (шкалу) та спосіб зіставлення значень з величиною.
У теорії вимірювання виділяють три основні шкали вимірювань - номінальну, порядкову і кількісну. Номінальна (класифікаційна) шкала включає значення, що проявляє себе лише у відношенні еквівалентності або може бути зіставлена з властивістю предмета (не упорядкованих один стосовно іншого). Наприклад, можна зіставити з вихідним текстом програми величину «мова програмування», значенням якої може бути назва однієї з мов (наприклад, «С», «С++», «Pascal», «Java» тощо). Такий же тип має шкала класифікування призначення модулів програмного забезпечення (наприклад, «Бази даних», «Математичні пакети», «Операційні системи» тощо). До номінальних величин застосовується тільки операція перевірки на еквівалентність. Порядкова (ординальна) шкала спостерігає за упорядкуванням одного значення стосовно іншого, до яких належать операції порівняння. Порядкову пікапу можна задати для більшості експертних оцінок, наприклад, оцінювання читабельності тексту програм - «незадовільно», «задовільно», «добре», «відмінно» або для оцінювання рівня інкапсуляції програмних компонентів - «лексичний», «операторний», «процедурний», «класний», «модульний». Кількісна шкала включає в себе значення, що проявили себе стосовно еквівалентності, порядку і адекватності. Такі величини дають змогу виковувати адекватні і мультиплікативні операції над значеннями (віднімання, множення, ділення). До них належать, наприклад, такі кількість рядків коду, складання коментарю, оцінювання трудозатрат на створення коду.
Очевидно, що велику цінність являють собою кількісні (адитивні) величини, оскільки вони не тільки відображають властивість програмного забезпечення, які можна використовувати для обробки і аналізу, а й мають більш повиний набір операцій над значеннями. Однак для використання величини з більш високою інкалою вимірювань слід мати достатні знання про характер відношень між цими значеннями.
Як правило, значущу шкалу вдається досить просто задати для величин, маючи вузький, добре інтерпретований зміст. Очевидно, що перехід від номінальної шкали до порядкової і від порядкової до кількісної потребує підвищення знань про характер відношень між значеннями величин. Ці знання мають імперичну природу і з'являються шляхом досвідченого виявлення залежно від значення.
Отримане значення величини, виявлене стосовно еквівалентності, зводиться до завдання класифікації стану об'єкта вимірювання, що визначається сукупністю ознак, значення яких дають змогу ідентифікувати кожен стан. Наприклад, під час визначення мови програмування, яку використано для написання програмного модуля («с», «cpp», «h», «pas», «ada», «htm»). Як датчик ознаки має виступати прилад, що виділяє розширення з імені файла. Вирішальний пристрій має реалізувати виявлення значень на основі правил виду: «іf», «розширення» = «.pas» or «.dpr», zen значення = «Pascal». Для тримання значення номінальної величини достатньо, щоб вибрані ознаки також мали властивості еквівалентності.
Для величин, які виявили себе стосовно адитивності, значення дорівнює числовій оцінці сумарної виміряної величини Nxe, що виникла в результаті складання порівнюваних однорідних величин, і має дорівнювати сумі числових оцінок цих порівнюваних, а сума іменованих чисел xNj відображає порівняння, що повинне дорівнювати іменному числу xNe відображаючи сумарну величину: