Основи програмної інженерії

Вид материалаДокументы

Содержание


1.2. Програмна інженерія як дисципліна.
1.3. SWEBOK: Керівництво до зводу знань з програмної інженерії.
1.4. Структура і зміст SWEBOK.
1.4.1. Інженерія вимог
Виявлення вимог
Аналіз вимог
Специфікація вимог до ПЗ
Валідація вимог
Верифікація вимог
Керування вимогами
1.4.2. Проектування програмного забезпечення
Базова концепція проектування ПЗ
Ключові питання проектування
Проектування архітектури ПЗ
Аналіз і оцінка якості проектування ПЗ
Нотації проектування
Стратегія і методи проектування ПЗ.
1.4.3. Конструювання програмного забезпечення
Попередження відхилень від стилю.
Структуризація перевірок
...
Полное содержание
Подобный материал:
  1   2   3   4   5   6   7   8   9   ...   15



Навчальне електронне видання


Основи програмної інженерії.

посібник

для студентів напряму «Програмна інженерія»


ЗМІСТ


Вступ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

1. Основи програмної інженерії . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

1.1. Програмна інженерія в історичному аспекті . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

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

6

1.3. SWEBOK: Керівництво до зводу знань з програмної інженерії. . . . . . . . . . . .

9

1.4. Структура і зміст SWEBOK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

2. Характеристика життєвого циклу стандарта ISO/IEC 12207 . . . . . . . . . . . . . . . . . .

38

3. Формування прикладних моделей життєвого циклу . . . . . . . . . . . . . . . . . . . . . . . . .

43

4. Вимоги до програмних систем . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

47

5. Методи програмування . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

56

6. Оптимізація програм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

99

7. Навчально-методичні рекомендації до вивчення дисцілини «Основи програмної інженерії.». . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


116

Лiтература. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

131

Додаток 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

137

додаток 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

143



Вступ


Програмна Інженерія (Software Engineer ing) - наука побудови комп'ютерних програмних систем, що містить у собі теоретичні концепції, методи і засоби програмування, технологію програмування, системи та інструменти їхньої підтримки, сучасні стандарти, зокрема, процеси життєвого циклу, вимірювання, оцінювання якості розробки ПС. Головне призначення програмної інженерії - побудова ПС, починаючи з аналізу предметної області і закінчуючи виготовленням вихідного коду для виконання на комп'ютері. Фундаментальну основу побудови ПС становлять: теорія алгоритмів, математична логіка, теорія обчислень, теорія керування й ін.

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

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


1. Основи програмної інженерії.


1.1. Програмна інженерія в історичному аспекті.


Наприкінці 90-х р. минулого століття знання і досвід, що були накопичені в індустрії програмного забезпечення за попередні 30-35 років, а також більш ніж 15-літніх спроб застосування різних моделей розробки, усе це, нарешті, оформилося в те, що прийнято називати дисципліною програмної інженерії – Software Engineering. Якоюсь мірою, таке формування дисципліни на основі широко розповсюдженого практичного досвіду нагадує ті процеси, що відбувалися в управлінні проектами. Виникали і розвивалися професійні асоціації, спеціалізовані інститути, комітети зі стандартизації й інші утворення, що, зрештою, прийшли до спільної думки про необхідність зведення професійних знань по відповідним областях і стандартизації відповідних програм навчання.

У 1958 р. всесвітньо відомий статистик Джон Тьюкей (John Tukey)уперше ввів термін software - програмне забезпечення. У 1972 р. IEEE (Computer Society of the Institute for Electrical and Electronic Engineers, IEEE Computer Society – IEEE--CS (Комп'ютерне Суспільство) чи просто IEEE. ссылка скрыта) випустив перший номер Transactions on Software Engineering – Праці з програмної інженерії. Перший цілісний погляд на цю область професійної діяльності з'явився 1979 р., коли Комп'ютерне Суспільство IEEE підготувало стандарт IEEE Std 730 щодо якості програмного забезпечення. Після 7 років напружених робіт, у 1986 р. IEEE випустило IEEE Std 1002 ”Taxonomy of Software Engineering Standards”.

У 1990 р. почалося планування всеосяжних міжнародних стандартів, в основу яких лягли концепції і погляди стандарту IEEE Std 1074 і результатів роботи утвореної в 1987 р. спільної комісії ISO/IEC JTC 1(International Organization for Standardization; IEC – International Electrotechnical Commission; JTC 1 – Joint Technical Committee 1, Information technology).

У 1995 р. група цієї комісії SC7 “Software Engineering ” випустила першу версію міжнародного стандарту ISO//IEC 12207 “Software Lifecycle Processes ”. Цей стандарт став першим досвідом створення єдиного загального погляду на програмну інженерію. Відповідний національний стандарт Росії – ГОСТ Р ИСО/МЭК 12207-99 [ГОСТ 12207,1999 ] містить повний автентичний переклад тексту міжнародного стандарту ISO/IEC 12207-95 (1995 р.).

У свою чергу, IEEE і ACM (Association of Computer Machinery).,почавши спільні роботи ще в 1993 р. з кодексу етики і професійної практики в даній галузі (ACM/IEEE-CS Code of Ethics and Professional Practice), до 2004 р. сформулювали два ключових описи того, що сьогодні ми і називаємо основами програмної інженерії –Software Engineering:
  1. Guide to the Software Engineering Body of Knowledge (SWEBOK),IEEE 2004 Version - Керівництво до Зводу Знань з Програмної Інженерії, надалі просто “SWEBOK ” [SWEBOK,2004 ];
  2. Software Engineering 2004.Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering - Навчальний План для Викладання Програмної Інженерії у Вузах (дана назва представлено у вільному перекладі) [SE,2004 ] .

Обидва стандарти стали результатом консенсусу провідних представників індустрії і визнаних авторитетів в галузі програмної інженерії - за аналогією з тим, як був створений PMI PMBOK. Так ми прийшли до сьогоднішнього стану Software Engineering як дисципліни.


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


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

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

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

- опис вимог;

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

- розроблення системи;

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

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

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

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

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

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

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

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

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

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

Сутність кожної з дисциплін, які єскладовими програмної інженерії, наступні:

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

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

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

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

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