ВСТУП

 

Сьогодні у багатьох навчальних закладах введено дисципліну «Інженерія програмного забезпечення» (Software Engineering). Це наука побудови комп’ютерних програмних систем (ПС), що містить у собі теоретичні концепції, методи і засоби програмування, технологію програмування, системи та інструменти їхньої підтримки, сучасні стандарти, зокрема, процеси життєвого циклу (ЖЦ), вимірювання і оцінювання якості розробки ПС. Головне призначення програмної інженерії – побудова ПС, починаючи з аналізу предметної області (ПрО) і закінчуючи виготовленням вихідного коду для виконання на комп’ютері. Фундаментальну основу побудови ПС становлять: теорія алгоритмів, математична логіка, теорія обчислень, теорія керування та ін.

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

Ціль даного конспекту лекцій – представити методи і засоби інженерії програмного забезпечення (програмної інженерії) в структурованому і систематизованому вигляді для теоретичного й практичного навчання процесам проектування, тестування і оцінювання якості ПС. У конспекті лекцій відображено зміст інженерії програмного забезпечення з урахуванням базового ядра знань SWEBOK (http://www.swebok.org) та програми навчання Computing Curricula – 2001, 2004, що застосовується на факультетах інформатики в міжнародних навчальних закладах понад 20 років. Навчання інженерії програмного забезпечення є запорукою успішного освоєння накопичених міжнародною спільнотою знань з інженерії побудови програмних продуктів.

Студенти отримають теоретичні й інженерні знання з процесів розробки ПС, практики подання програм для їхнього опрацювання у середовищі сучасних інструментальних систем провідних фірм: Microsoft, IBM, Rational тощо. Крім того, вони навчаться методам верифікації, валідації та тестування програм, метричного аналізу, виміру, оцінки показників якості та продуктивності продукту, а також перенесення його на інші платформи.

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

Інженерія програмного забезпечення (ІПЗ) містить у собі методи і засоби керування програмними проектами (планування робіт і регулювання ресурсів), експертне оцінювання проміжних результатів розробки під час процесів ЖЦ, оцінювання ризику побудови програмної системи і досягнутої для неї якості. Ця дисципліна використовує стандарти (наприклад, ISO/IEC 12207, ДСТУ 9126), що регламентують процеси ЖЦ, інженерію вимог, тестування і забезпечення якості шляхом перевірки показників на процесах ЖЦ і кінцевого продукту для їхнього оцінювання. Інакше кажучи, в програмної інженерії подані питання теоретичної і практичної побудови різних програмних систем для виконання задач з оброблення інформації на комп’ютерах з метою отримання корисних даних.

Проектування в ІПЗ – це конструювання комп’ютерних систем методами та засобами програмування за такими загальними кроками:

– опис вимог;

– опис специфікацій системи;

– розробка системи;

– тестування, оцінка надійності і якості системи.

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

Інженерна діяльність у програмуванні на теперішній час за своєю сутністю дуже близька до інженерної конвеєрної діяльності в промисловості, тільки тут готовими «деталями» виступають поки ще не достатньо при промисловому використанні багаторазових програм і систем. На сучасному етапі розвитку базисом інженерії проектування програмних систем стали компоненти повторного використання (reuse), яких достатньо створено у різних областях, і вони подібні до готових деталей в промисловості. Це є фундаментальним для становлення конвеєрного виробництва програмних продуктів, як продуктів промислово-технічного призначення.

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

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

І тому залучення нових категорій спеціалістів зробить представлення віртуальної архітектури програмної системи у кібернетичному вимірі більш якісним і продуктивним. Продуктами виробництва можуть бути: системи обробки даних, системи підтримки прийняття рішень, АСУ, інформаційні системи й ін.

Значну роль у становленні інженерії програмного забезпечення відіграла систематизація накопичених знань у програмуванні, виконана комітетом спеціалістів у галузі інформатики під егідою відомих комп’ютерних організацій IEEE Computer Society і ACM (Association for Computer Machinery). Цей комітет створив (1999 р. – перший варіант, 2001 р. – другий) ядро знань SWEBOK, де наведено визначення предмету інженерії програмного забезпечення і її тематичних областей (knowledge areas). Одночасно були розроблені стандарти з програмної інженерії, головні серед яких ISO/IEC 12207 – життєвий цикл ПЗ і ДСТУ 9126 – якість програмного продукту тощо.

Ядро знань SWEBOK і регламентовані процеси стандарту ISO/IEC 12207 узгоджені між собою. Вони утворюють практичний базис інженерії виробництва програмного продукту. Питання керування програмним проектом розглянуті в іншому ядрі знань – РМВОК та відповідному стандарті IEEE Std.1490 «IEEE A Guide to the Project Management Body of Knowledge». Стандарти визначають порядок діяльності в сфері технології розробки, а знання, те що необхідно фахівцям для виконання всіх видів діяльності з проектування і реалізації задач проекту, визначені в ядрі знань SWEBOK.

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

Таким чином, між ядрами знань SWEBOK, РМВОК і основними стандартами існує зв’язок і взаємовплив один на одного, тим більш, що в їхній розробці одночасно беруть участь висококваліфіковані фахівці в галузі програмування й інформатики. Загальні ідеї, методи та інструменти програмування, що склалися в 90-х роках минулого сторіччя, проникли в усі напрями і вплинули на стандартизацію процесів і їхній склад. У ядрі знань SWEBOK викладено концептуальні знання й інженерні підходи до керування проектування програмного продукту, а в стандартах – загальні правила і регламентовані процеси послідовного його розробки. Але індустріальне виробництво різних видів програмних систем і сімейств систем потребує структуризації програмної інженерії, пов’язаної не тільки з процесами ЖЦ і відповідними змістовними методами проектування з SWEBOK, а й з теоретичними і прикладними методами забезпечення виробництва.

Отже головною особливістю даного конспекту лекцій є нова структуризація і систематизація змісту інженерії програмного забезпечення за дисциплінами. Сутність кожної з дисциплін така:

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

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

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

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

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