К. М. Лавріщева програмна інженерія підручник Київ, 2008
Скачать 5.23 Mb.
|
1.1. Загальне визначення дисциплін програмної інженерії Термін програмна інженерія вперше було використано у 1968 р. З того часу протягом 40 років зміст цього поняття поступово змінювався, що обумовлене постійним розвитком програмування, спочатку як мистецтва одинаків, потім як теоретичної та прикладної науки, і, з часом, як інженерної діяльності. Завдяки багаторічній праці всесвітнього програмістського загалу накопичилася велика кількість знань та досвід побудови різноманітних комп’ютерних програм. Вони знайшли відображення у конкретних програмних продуктах широкого застосування та у множині теоретичних і прикладних методів і засобів, принципів і правил, а також цілісних процесів виробництва комп’ютерних систем колективами програмістів і інженерів (включаючи інженерів-оцінювачів програмних продуктів та процесів, тестувальників тощо). У рамках багатогранної діяльності теоретиків та практиків у галузі програмування сформувалися формальні методи доведення, верифікації і тестування програм, математичні моделі надійності, методи оцінювання показників якості програмних продуктів тощо. Все це обумовило необхідність систематизувати набуті знання і визначити їх у вигляді самостійної дисципліни (предмету) з метою формування загального бачення проблеми тими, хто займається комп’ютерною діяльністю, або фахівцями-теоретиками у даній галузі. Спеціально створений комітет фахівців з інформатики при ACM і IEEE Computer Society сформував базове ядро знань SWEBOK (Software Engineering body of Knowledge – 2001р.), у якому в концентрованому вигляді подав концептуальний зміст десятьох базових областей (knowledge areas) та дефініції програмної інженерії (ПІ), зокрема [1-3]. У ядрі знань SWEBOK наведене таке визначення програмної інженерії (воно відповідає глосарію IEEE): Розділ 1 15 Визначення 1.1. Програмна інженерія(SE) – це 1) застосування систематичного, дисциплінованого та вимірюваного підходу до розроблення, експлуатації і супроводження програмного забезпечення (ПЗ) із застосуванням інженерних методів до розроблення ПЗ, 2) навчальна дисципліна, що вивчає вказані вище підходи. Ця дефініція обмежує суть не лише поняття предмета ПІ, а й об’єкта, розглядаючи як такий лише програмне забезпечення, а не програмні проекти, процеси та методи розробки програмних продуктів тощо. Тому необхідно визначити ПІ і її об’єкти у більш широкому розумінні, доповнюючи аспектами, що характеризують ПІ як наукову й інженерну дисципліни. Відомо, що будь-яка наука – це система перевірених практикою знань, які відображають загальні питання, поняття і закономірності їх розвитку. Вона встановлює зв’язки з іншими науками і впливає на їх розвиток. Так, програмна інженерія інтегрує в собі принципи математики та головні положення фундаментальних наук, а саме, теорії алгоритмів, математичної логіки, теорії керування, теорії множин, доведення тощо (рис.1.1). Рис. 1.1. Теоретичний фундамент програмної інженерії Ці науки створюють теоретичний базис програмної інженерії, необхідний для побудови абстракцій програм за їх базовими поняттями та принципами, що перелічені нижче за кожною з фундаментальних наук базису: – у теорії алгоритмів – нормальні алгоритми, обчислювальні функції, машина Тюрінга, алгоритмічні алгебри, граф-схеми, моделі алгоритмів і програм тощо; – у математичній логіці – логічні числення і логіко-алгебраїчний апарат специфікації програм; – у теорії керування – принципи, методи та загальні закони планування і керування процесами отримання й оброблення інформації в кібернетичних і управлінських системах; – у теорії доведення – математичне доведення за аксіомами і твердженнями програм, вивід теорем, обґрунтування суперечності й алгоритмічно невирішених проблем, а також теорія верифікації програм, теорія надійності ПЗ; 16 Розділ 1 – у теорії множин – квантори загальності, існування, операції над множинами, що застосовуються для формального подання різних сукупностей програмних об’єктів і аксіом. Крім цих засад, система знань програмної інженерії містить у собі [4–9]: – формальні методи програмування – специфікація програм, їхній доказ, верифікація і тестування, а також математичні моделі надійності, ризику тощо; – прикладні методи, а саме, прийоми, принципи, правила, окремі дії й цілісні процеси життєвого циклу (ЖЦ) виробництва комп’ютерних систем, які є інструментами колективної розробки, що застосовуються виконавцями великих програмних проектів; – методи керування колективами, а саме, планування за мережними графіками, контролювання робіт у процесах ЖЦ, вимірювання і оцінювання якості проміжних результатів виробництва, прогнозування і регулювання строків і вартості виготовлення продукту, а також його сертифікації. Інакше кажучи, програмна інженерія як спадкоємиця науки програмування використовує для свого розвитку всі теоретичні і прикладні досягнення, набуті за період її існування. Таким чином, вона склалася, як науково-інженерна дисципліна, яка входить до складу комп’ютерної науки (Сomputer science). Отже, наведемо нове визначення програмної інженерії як наукової і інженерної дисципліни у більш широкому сенсі. Визначення 1.2. Програмна інженерія – розділ комп’ютерної науки, який вивчає методи і засоби побудови комп’ютерних програм; відображає закономірності розвитку та узагальнює накопичений досвід програмування; оперує об’єктами (модулями, компонентами, програмними аспектами тощо) та визначає автоматизовані операції щодо їх виробництва; виробляє правила і порядок інженерної діяльності і керування технологічним процесом побудови з простих об’єктів нових, більш складних, об’єктів (програмного забезпечення, програмних систем (ПС), сімейств систем, програмних проектів тощо), а також методи виміру й оцінки готового продукту. У цьому визначенні береться до уваги теорія програмування та інженерія виробництва програмних продуктів, що сформувалася шляхом адаптації загальних методів керування (наприклад, методу критичного шляху, PERT, за операціями), яким властивий розподіл робіт між різними виконавцями проекту та оцінка трудомісткості праці, вартості виготовлення продукту та його якості. Таким чином, програмна інженерія – це наукова і інженерна дисципліни виробництва програмних продуктів (рис.1.2). Наукова дисципліна Інженерна дисципліна Рис.1.2. Наукова і інженерна дисципліни програмної інженерії Розділ 1 17 На перетині областей визначення ПІ (овалів на рис.1.2) – теорія та практика побудови складних програмних об’єктів. Теорія побудови – це теорія їхнього програмування за абстрактними специфікаціями (графовими і структурними схемами, функціями і композиціями, дескрипторами і номінативними даними, сценаріями (use case діаграми), а також формальна перевірка відповідності об’єктів специфікаціям за методами доведення, верифікації, інспекції тощо. Практика побудови – це застосування теоретичних і практичних методів інженерії програмування за допомогою використання засобів перевірки (верифікації, валідації, тестування) специфікацій об’єктів, інструментів їх послідовного трансформування до результуючого коду та інженерія оцінки і сертифікації різних показників якості (надійності, продуктивності, ефективності тощо) виготовленого програмного продукту. 1.1.1. Програмна інженерія як наукова дисципліна На відміну від математичної або інших фундаментальних наук, метою яких є отримання нових знань для розв’язання відповідних задач, метою програмної інженерії є застосування знань для розроблення складних програмних об’єктів, де знання – це уособлення загальної теорії побудови програм для комп’ютерів, орієнтованої на виготовлення продукту, впровадження якого буде корисним для споживача. Програмна інженерія як наукова дисципліна охоплює теоретичні, формальні методи та відповідні засоби побудови складних програмних об’єктів. Побудова має на меті аналіз предметної області, що автоматизується, і продукування результуючого коду для виконання на комп'ютері. Інтегровані в програмну інженерію фундаментальні науки, згадані вище (на рис.1.1), а також наука програмування, становлять її загальну теоретичну основу, яка надає базові поняття, об’єкти і формальні механізми, необхідні для надання програмним продуктам загальних властивостей та специфічних рис відповідно до встановлених до них вимог. ПІ як наука містить у собі: 1) основні поняття і об'єкти; 2) теорію програмування і методи керування виготовленням продукту; 3) засоби і інструменти процесів розроблення продукту. 1. Основні поняття програмної інженерії – це дані і їх структури (прості і складні), функції і композиції, базові об’єкти (модуль, компонент, каркас, контейнер, компонент повторного використання (КПВ) тощо) і цільові об’єкти (програмне забезпечення, програмна система, сімейство систем, програмний проект, складні програмні застосування тощо). Розроблення простих об’єктів – це елементарні дії з їх формального опису, а розроблення цільових об’єктів – застосування інженерних методів, включаючи керування строками і вартістю виробництва. Надамо загальне визначення цільових об’єктів у ПІ. Визначення 1.3. Програмна (прикладна) система (Application) – комплекс інтегрованих програм і засобів, що реалізують набір взаємопов’язаних функцій деякої предметної області в заданому середовищі. У комплекс можуть входити: прикладні системи (наприклад, програми розрахунку зарплати, обліку матеріалів на складі тощо), загальносистемні програмні засоби (наприклад, транслятор, редактор, СКБД тощо), спеціалізовані програмні засоби для реалізації функцій захисту 18 Розділ 1 інформації, забезпечення безпеки функціонування та ін. Спосіб виготовлення – інженерія ПС (або application engineering), що містить у собі процеси ЖЦ, методи розробки і процедури керування, а також методи і засоби оцінки продуктів і процесів з метою їх удосконалення. Визначення 1.4. Програмне забезпечення– сукупність програмних засобів, які реалізують функції комп’ютерної системи (або функції технічної апаратно- програмної системи), включаючи загальносистемні засоби (наприклад, ОС, СКБД, вбудовані підсистеми контролю показників технологічних процесів, оброблення сигналів тощо) та прикладні програмні системи. Так, функціями деякої ОС є керування задачами, програмами, даними і т.п. Спосіб виготовлення– інженерія розробки цільових програм для задач з ПЗ. Визначення 1.5. Сімейство систем (Systems family) – сукупність програмних систем із загальним (незмінним для всіх членів сімейства) і керованим (змінним) набором характеристик, що задовольняють визначені потреби прикладної області (домену). Спосіб виготовлення – інженерія домену (Domain Engineering) або конвеєрне виробництво однотипних ПП за єдиною схемою на основі спеціально розроблених базових членів сімейства й інших готових програмних ресурсів (assets) за допомогою базового процесу або автоматизованої лінійки продукту (Product line). Визначення 1.6. Програмний проект – унікальний і інтегрований комплекс взаємозалежних заходів, орієнтованих на досягнення цілей і задач об’єкта розробки за визначеними вимогами до строків, бюджету та характеристик очікуваних результатів діяльності від нього. Спосіб виготовлення – інженерія процесу розроблення і менеджменту проекту. Визначення 1.7. Складні програмні об'єкти – сукупність взаємопов’язаних цільових об'єктів різних типів, які виконують необхідні функції в складній системі, подані як самостійно розроблені прості та цільові об’єкти або вибрані з репозитарію готових ресурсів. 2. Теорія програмування – сукупність методів, мов і засобів опису та проектування цільових об’єктів, а також методів їхнього доведення, верифікації і тестування [6–8]. Разом об’єкти теорії програмування в програмній інженерії використовують формальні методи керування проектом (персоналом, матеріальними та фінансовими ресурсами) і його окремими характеристиками. Відповідно до проведеної нами класифікації методів теорії програмування у програмній інженерії застосовуються такі (рис.1.3): Рис.1.3. Сукупність методів програмної інженерії Розділ 1 19 *– методи програмування: теоретичні (алгебраїчний, алгоритмічний, експлікативний, алгоритмічний, концепторний, VDM, RAISE тощо) і прикладні (об’єктний, компонентний, аспектний, генерувальний тощо), призначені для проектування різних типів цільових об’єктів; – методи перевірки правильності за формальними процедурами (твердження, вивід, доказ); – методи оцінки результатів послідовного проектування (проміжних робочих продуктів) і кінцевого продукту відносно встановлених показників (надійність, якість, точність, продуктивність тощо); – методи керування (менеджменту) і контролю розробки проміжних результатів під час виконання процесів проекту, а також допоміжні розрахункові методи (трудомісткість праці кожного розробника, вартості робіт тощо). 1.1.2. Програмна інженерія як інженерна дисципліна Програмна інженерія як інженерна дисципліна (або власне інженерія) – це сукупність прийомів виконання діяльності, пов’язаної з виготовленням програмного продукту для різних видів цільових об’єктів із застосуванням методів, засобів і інструментів наукової складової програмної інженерії [8–10]. Основу інженерії становлять наступні базові елементи процесу виготовлення програмного продукту (рис. 1.4): Рис.1.4. Базові складові інженерної дисципліни 1) ядро знань SWEBOK, як набір теоретичних концепцій і формальних визначень методів і засобів розробки та керування програмними проектами, які можуть застосовуватися в інженерії програмування; 2) базовий процес ПІ, як стрижень процесної діяльності в організації- розробнику програмного продукту; 3) стандарти, як набір регламентованих правил конструювання проміжних артефактів у процесах ЖЦ; 4) інфраструктура – умови середовища та методичне забезпечення базового процесу ПІ і підтримка дій його виконавців, що займаються виробництвом програмного продукту; 5) менеджмент проекту (РМВОК) – ядро знань з керування промисловими проектами – набір стандартних процесів, а також принципів і методів планування і контролювання роботами у проекті [11]; 6) засоби та інструменти розробки програмних продуктів. З інженерної точки зору в програмній інженерії розв’язуються задачі виготовлення ПП, подані як технологічні процеси формування вимог, проектування 20 Розділ 1 і супроводу продукту, а також перевірки операцій базового процесу щодо правильності виконання різних функціональних задач та виконання робіт за проектом у заданий замовником строк. Програмну інженерію будемо розглядати з двох точок зору: – як інженерну діяльність, у якій інженери різних категорій виконують роботи в рамках проекту, використовуючи відповідні теоретичні методи і засоби ПІ, що рекомендовані у ядрі знань SWEBOK, а також стандарти процесів проектування цільових об’єктів за вибраними методами; – як систему керування проектом, якістю і ризиками з використанням правил і положень стандартів ЖЦ, якості та менеджменту проекту. Інженерна діяльність обов’язково планується та ґрунтується на розподілі робіт у проекті між різними категоріями виконавців. Менеджер проекту – це головна діюча особа проекту, відповідальна за проектування і контроль виконання робіт спеціальними службами інфраструктури проекту в організації, зокрема служби верифікації, тестування, якості тощо. Продукт колективного виготовлення передається замовнику для супроводу. В ньому можуть бути виявлені різні помилки і недоліки, які усувають розробники. Ця діяльність у програмній інженерії практично вже відпрацьована і за своєю суттю близька до інженерної діяльності у промисловості, де інженерія – це спосіб застосування наукових результатів для виготовлення технічних виробів на основі технологічних правил і процедур, методик виміру, оцінки і сертифікації з метою отримання користі від виготовленого продукту або товару. Далі (у пп. 1–5) наведено загальну характеристику базових елементів інженерної дисципліни виготовлення програмного продукту, показаних на рис.1.4. 1.Ядро знань SWEBOK – стислий опис концептуальних основ програмної інженерії. Структурно ділиться на 10 розділів (knowledge areas), які умовно можна розкласти за двома категоріями: проектування продукту і інженерна діяльність. Перша категорія – це методи і засоби розробки (формування вимог, проектування, конструювання, тестування, супровід), друга категорія – методи керування проектом, конфігурацією і якістю та базовим процесом організації-розробника (детальніше див. у п.1.2). Методи ядра знань програмної інженерії менеджер проекту зіставляє з відповідними стандартними процесами ЖЦ, виконання яких забезпечує послідовне розроблення програмного продукту через наповлення базового процесу програмної інженерії методами з ядра знань SWEBOK, а також задачами і діями стандартного ЖЦ, що обумовлює його застосовність до потреб конкретної організації- розробника щодо певної регламентованої послідовності розробки і супроводу програмного продукту. Все це створює технологічний базис інженерії виготовлення конкретного продукту (або низки однотипних продуктів) в організації. На початкових стадіях розробки виконуються процеси визначення вимог до продукту, вироблення проектних рішень і каркасу (абстрактної архітектури) майбутнього продукту. На основі вимог і каркасу розробляються або вибираються готові прості об’єкти для « наповлення» цього каркасу змістом для подальшого його доведення до стану готового продукту. 2. Базовий процес (БП) – є метарівнем для забезпечення «процесного продукування» продукту. Він містить у собі опис понять щодо оснастки, Розділ 1 21 організаційної структури колективу розробників та методології оцінки, вимірювання, керування змінами та вдосконалення самого процесу. В цілому базовий процес складається з множини логічно пов’язаних видів інженерної діяльності організації-розробника та набору засобів і інструментів щодо виготовлення програмного продукту. |