Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тема1_1-3.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
186.88 Кб
Скачать

Тема 1. (продовження)

План

1.1. Загальне визначення дисциплін програмної інженерії 2

1.1.1. Програмна інженерія як наукова дисципліна 4

1.1.2. Програмна інженерія як інженерна дисципліна 6

1.1.3. Програмна інженерія як виробнича дисципліна 11

Тема 1. Дисципіни програмної інженерії і області ядра знань – swebok

У першій темі формально визначено запропоновані дисципліни програмної інженерії. Наведено структуру, зміст та їхнє призначення. Подано дефініцію програмної інженерії у вузькому розумінні, запропонованому у ядрі знань SWEBOK, і широкому – продиктованому прикладними досягненнями щодо сформульованих видів програмного забезпечення, так званих цільових об’єктів (програмних проектів, доменів, сімейств програм і систем). Визначені теоретичні і прикладні ознаки, атрибути і об’єкти програмної інженерії. Наведена класифікація її базових понять і цільових об’єктів, а також методів і засобів їх побудови з використанням сучасної теорії програмування і новітніх інструментальних засобів.

Вперше подано зміст і набір головних елементів інженерії програмування, а саме, базового процесу, ядра знань РМВОК, стандартів життєвого циклу та якості програмного продукту і визначено призначення кожного окремого елементу та ядра знань SWEBOK, яке містить у собі 10 областей, що умовно поділені на головні області (вимоги, проектування, конструювання, тестування), та організаційні (керування конфігурацією, проектом, якістю та базовим процесом). Опису цих областей і присвячено другий підрозділ даного розділу.

1.1. Загальне визначення дисциплін програмної інженерії

Термін програмна інженерія вперше було використано у 1968 р. З того часу протягом 40 років зміст цього поняття поступово змінювався, що обумовлене постійним розвитком програмування, спочатку як мистецтва одинаків, потім як теоретичної та прикладної науки, і, з часом, як інженерної діяльності.

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

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

Спеціально створений комітет фахівців з інформатики при ACM і IEEE Computer Society сформував базове ядро знань SWEBOK (Software Engineering body of Knowledge – 2001р.), у якому в концентрованому вигляді подав концептуальний зміст десятьох базових областей (knowledge areas) та дефініції програмної інженерії (ПІ), зокрема [1-3]. У ядрі знань SWEBOK наведене таке визначення програмної інженерії (воно відповідає глосарію IEEE):

Визначення 1.1. Програмна інженерія (SE) це 1) застосування систематичного, дисциплінованого та вимірюваного підходу до розроблення, експлуатації і супроводження програмного забезпечення (ПЗ) із застосуванням інженерних методів до розроблення ПЗ, 2) навчальна дисципліна, що вивчає вказані вище підходи.

Ця дефініція обмежує суть не лише поняття предмета ПІ, а й об’єкта, розглядаючи як такий лише програмне забезпечення, а не програмні проекти, процеси та методи розробки програмних продуктів тощо. Тому необхідно визначити ПІ і її об’єкти у більш широкому розумінні, доповнюючи аспектами, що характеризують ПІ як наукову й інженерну дисципліни.

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

Рис. 1.1. Теоретичний фундамент програмної інженерії

Ці науки створюють теоретичний базис програмної інженерії, необхідний для побудови абстракцій програм за їх базовими поняттями та принципами, що перелічені нижче за кожною з фундаментальних наук базису:

– у теорії алгоритмів – нормальні алгоритми, обчислювальні функції, машина Тюрінга, алгоритмічні алгебри, граф-схеми, моделі алгоритмів і програм тощо;

– у математичній логіці – логічні числення і логіко-алгебраїчний апарат специфікації програм;

– у теорії керування – принципи, методи та загальні закони планування і керування процесами отримання й оброблення інформації в кібернетичних і управлінських системах;

– у теорії доведення – математичне доведення за аксіомами і твердженнями програм, вивід теорем, обґрунтування суперечності й алгоритмічно невирішених проблем, а також теорія верифікації програм, теорія надійності ПЗ;

– у теорії множин – квантори загальності, існування, операції над множинами, що застосовуються для формального подання різних сукупностей програмних об’єктів і аксіом.

Крім цих засад, система знань програмної інженерії містить у собі [4–9]:

– формальні методи програмування – специфікація програм, їхній доказ, верифікація і тестування, а також математичні моделі надійності, ризику тощо;

– прикладні методи, а саме, прийоми, принципи, правила, окремі дії й цілісні процеси життєвого циклу (ЖЦ) виробництва комп’ютерних систем, які є інструментами колективної розробки, що застосовуються виконавцями великих програмних проектів;

– методи керування колективами, а саме, планування за мережними графіками, контролювання робіт у процесах ЖЦ, вимірювання і оцінювання якості проміжних результатів виробництва, прогнозування і регулювання строків і вартості виготовлення продукту, а також його сертифікації.

Інакше кажучи, програмна інженерія як спадкоємиця науки програмування використовує для свого розвитку всі теоретичні і прикладні досягнення, набуті за період її існування. Таким чином, вона склалася, як науково-інженерна дисципліна, яка входить до складу комп’ютерної науки (Сomputer science).

Отже, наведемо нове визначення програмної інженерії як наукової і інженерної дисципліни у більш широкому сенсі.

Визначення 1.2. Програмна інженерія розділ комп’ютерної науки, який вивчає методи і засоби побудови комп’ютерних програм; відображає закономірності розвитку та узагальнює накопичений досвід програмування; оперує об’єктами (модулями, компонентами, програмними аспектами тощо) та визначає автоматизовані операції щодо їх виробництва; виробляє правила і порядок інженерної діяльності і керування технологічним процесом побудови з простих об’єктів нових, більш складних, об’єктів (програмного забезпечення, програмних систем (ПС), сімейств систем, програмних проектів тощо), а також методи виміру й оцінки готового продукту.

У цьому визначенні береться до уваги теорія програмування та інженерія виробництва програмних продуктів, що сформувалася шляхом адаптації загальних методів керування (наприклад, методу критичного шляху, PERT, за операціями), яким властивий розподіл робіт між різними виконавцями проекту та оцінка трудомісткості праці, вартості виготовлення продукту та його якості.

Т аким чином, програмна інженерія – це наукова і інженерна дисципліни виробництва програмних продуктів (рис.1.2).

Рис.1.2. Наукова і інженерна дисципліни програмної інженерії

На перетині областей визначення ПІ (овалів на рис.1.2) – теорія та практика побудови складних програмних об’єктів. Теорія побудови – це теорія їхнього програмування за абстрактними специфікаціями (графовими і структурними схемами, функціями і композиціями, дескрипторами і номінативними даними, сценаріями (use case діаграми), а також формальна перевірка відповідності об’єктів специфікаціям за методами доведення, верифікації, інспекції тощо. Практика побудови – це застосування теоретичних і практичних методів інженерії програмування за допомогою використання засобів перевірки (верифікації, валідації, тестування) специфікацій об’єктів, інструментів їх послідовного трансформування до результуючого коду та інженерія оцінки і сертифікації різних показників якості (надійності, продуктивності, ефективності тощо) виготовленого програмного продукту.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]