
- •1. Мета викладання курсу
- •2. Завдання вивчення курсу
- •3. Дисципліни, засвоєння яких необхідне при вивченні курсу
- •4. Характеристика курсу
- •1. Термінологія індустрії ПЗ
- •3. Про предмет
- •5. Виникнення Технології розробки ПЗ
- •6. Огляд технологій програмування
- •1. Програмна інженерія, основні поняття
- •2. Цілі програмних інженерів
- •3. Забезпечення надійності розробки ПЗ
- •4. Складність програмної системи
- •5. Моделі якості процесів конструювання
- •Лекція 3. Організація технологічного процесу розробки ПЗ
- •1. Процес створення програмного забезпечення
- •2. Життєвий цикл та моделі процесу розробки ПЗ
- •3. “Важкі” і “полегшені” процеси
- •3.1. ХР-процесс
- •1. Процес управління проектом
- •2. Планування проектних завдань
- •Лекція 5. Проектування програмних систем
- •1. Особливості процесу синтезу програмних систем
- •2. Особливості етапу проектування
- •3. Структуризація системи
- •4. Моделювання управління
- •5. Декомпозиція підсистем на модулі
- •6. Модульність
- •7. Інформаційна закритість
- •8. Зв'язність модуля
- •9. Зчеплення модулів
- •10. Складність програмної системи
- •11. Характеристики ієрархічної структури програмної системи
- •1. Поняття архітектури програмного засобу.
- •Лекція 7. Розробка Програми, Модульне Програмування
- •1. Поняття модульного програмування
- •2. Розроблення програмних модулів
- •2.1.1. Контроль програмного модуля.
- •1. Основні поняття тестування і відлагодження
- •2. Основні підходи і принципи відлагодження.
- •3. Організація процесу тестування ПЗ
- •4. Види Тестування

Лекція 1. Введення у технологію програмування.
•Стратегії розробки ПЗ
Існує 3 основних стратегії розробки ПЗ:
Послідовна стратегія. Інший термін - стратегія водопаду, тобто класична лінійна послідовність етапів програмування;
Інкрементна стратегія. На початку процесу визначаються всі призначені для користувача системні вимоги, а частина програмування, що залишилася, виконується у вигляді послідовності версій. Перша версія реалізує частину запланованих можливостей, наступна версія реалізує додаткові можливості і т.д., поки не буде отримана повна система;
Еволюційна стратегія. Система також будується у вигляді послідовності версій, але на початку процесу визначені не всі вимоги. Вимоги уточнюються в результаті розробки версій.
Характеристики стратегій конструювання ПО відповідно до вимог стандарту IEEE/EIA 12207.2 приведені в табл. 1.1.
Таблиця 1.1. Характеристики стратегій програмування
Стратегія |
На початку процесу |
Множина циклів |
Проміжний ПЗ |
|
визначені всі вимоги? |
програмування? |
розповсюджується? |
Водопадна |
Так |
Немає |
Немає |
Інкрементна |
Так |
Так |
Можливо |
|
|
|
|
Еволюційна |
Немає |
Так |
Так |
6.Огляд технологій програмування
•Структурне програмування
Виникнення концепції структурного програмування зв'язується з ім'ям відомого голландського ученого Е. Дейкстри - в 60-х роках минулого століття він сформулював основні її положення.
Принцип, на якому базується технологія структурного програмування - фундаментальна наукова і технічна ідея про виділення безлічі базисних елементів, за допомогою яких можна виразити (з яких можна зібрати) будь-який об'єкт з деякого широкого набору.
Отже, основний принцип технології структурного програмування свідчить: для будь-якої простої програми можна побудувати функціонально еквівалентну їй структурну програму, тобто програму, сформовану на основі фіксованої базисної множини, що включає структуру послідовної дії, структуру вибору одного з двох дій і структуру циклу, тобто багатократного повторення деякої дії з перевіркою умови зупинки повторення.
Рис. 1.3. Блок-схеми базисних алгоритмічних конструкцій
11
Лекція 1. Введення у технологію програмування.
На рис. 1.3 представлено зображення алгоритмічних конструкцій у вигляді блок-схем. Тут прямокутник позначає узагальнена дія, ромб - перевірку умови, стрілки - перехід від однієї дії до іншого.
Під простою програмою в даному випадку розуміється програма, що має рівно один вхід і один вихід по управлінню, така, що через всі її функціональні блоки проходить шлях від входу до виходу. Викладений принцип є теоремою про структуризацію. Її точне формулювання і доказ представлені в монографії Е.Дейкстри.
Базисні алгоритмічні конструкції володіють важливою властивістю - вони в точності задовольняють визначенню простій програми, тобто мають один вхід і один вихід, що забезпечує можливість здійснювати їх суперпозицію. Будь-яка з трьох структур може бути підставлена в останніх або в саму себе.
Таким чином, центральний технологічний принцип структурного програмування полягає в тому, що формулювання алгоритму і його запис у вигляді програми рекомендується виконувати на основі базису з трьох алгоритмічних конструкцій, застосовуючи при необхідності їх суперпозицію. Результатом послідовного застосування цього принципу буде ясніша структура програми (особливо, якщо використовувати виділення структурних рівнів за допомогою відступів), що, поза сумнівом, полегшить пошук в ній помилок і спростить її модифікацію.
•Модульне програмування
Технологія модульного програмування - що оформилася на початку 70-х років XX століття ідея розробки великих програмних систем. Це фундаментальна концепція, що є основою всіх сучасних підходів до проектування і реалізації. В той же час суть її проста і відображає широко відомі наукові і технічні методи, що полягають в пошуку і реалізації деякого базового набору елементів, комбінації яких дають вирішення всіх завдань з певного круга.
Якщо концепція структурного програмування пропонує деякий універсальний алгоритмічний базис, то модульне програмування полягає в розробці під конкретне завдання або круг завдань (наочну область) власного базису у вигляді набору модулів, що дозволяє найефективніше по цілому ряду критеріїв побудувати програмний комплекс. Модулі, що входять в базис, це цілі програми (на відміну від примітивів структурного програмування), вирішальні деякі підзадачі основних завдань.
Із застосуванням модульного програмування з'являються можливості колективної розробки програм як набору "незалежних" частин, послідовного зменшення складності методом розбиття складного завдання на простіші підзадачі, нарешті, можливості повторного використання створеної раніше коди.
•Об'єктно-орієнтоване програмування
Розвиток апаратної бази привів до можливості рішення при її допомозі все більш або складніших завдань, а, означає, розробки все більш і більш складних програм. Програми стали великими (навіть дуже великими), а розробка - колективною. Об'єм роботи збільшився, колективи розрослися, код "розбухнув", і з'явилися нові проблеми, яких не було раніше. Несподівано з'ясувалося, що можливості структурного і модульного програмування обмежені і часто вже не дозволяють добиватися бажаного результату (або нічого не працює, або проект не укладається в терміни, або до бюджету, або через рік після написання програми з'ясовується, що її неможливо модифікувати і так далі).
Об'єктно-орієнтована технологія в деякій мірі вирішила більшість описаних проблем. На відміну від розглянутих раніше технологій, об'єктно-орієнтована технологія працює на стадіях аналізу, проектування і програмування. В основі об'єктно-орієнтованої технології лежать об'єктна модель і об'єктна декомпозиція.
До основних принципів об'єктної моделі часто відносять наступні:
•абстракція;
•інкапсуляція;
12
Лекція 1. Введення у технологію програмування.
•ієрархія (спадкоємство, агрегація);
•поліморфізм;
•модульність.
Суть об'єктної декомпозиції полягає у виділенні в наочній області класів і об'єктів, а також зв'язків між ними, і лише потім даних і алгоритмів, якими характеризується кожен клас. Таким чином, саме класи стають основним "будівельним блоком" в ООП, тоді як раніше такими блоками були алгоритми.
•Компонентне програмування
Компонентне програмування - є розвиток об'єктно-орієнтованої технології. На відміну від ООП введений наступний рівень абстракції - класи об'єднуються в компоненти.
Компонент це:
•програмний код у вигляді самостійного модуля;
•може бути використаний в незмінному вигляді;
•може допускати настройку;
•володіє поведінкою (функціональністю).
Основний принцип компонентного програмування: збірка застосування з готових компонент, в загальному випадку написаних на різних мовах.
Компонент ізольований від зовнішнього світу своїм інтерфейсом - набором методів (їх сигнатурами). Компонентна програма - набір незалежних компонент, зв'язаних один з одним за допомогою інтерфейсів.
•Висновки з лекції
Отже, лекція була присвячена знайомству з термінологією і вступу в предмет. Сформулюємо стисло деякі висновки:
•Програмування (Computer science) - молода область, що активно розвивається, за півстоліттям свого розвитку що подолала величезний шлях. Будучи як мистецтвом, так і наукою, у наш час термін програмування придбав якісно нове забарвлення, ставши однією з галузей бізнесу.
•Під IT-проектами можна розуміти будь-які проекти в області інформаційних технологій. Ми далі розглядатимемо лише ті IT-проекты, метою яких є розробка програмного забезпечення.
•Програмне забезпечення (Software) - набір комп'ютерних програм, процедур і пов'язаної з ними документації і даних. Таким чином, програмне забезпечення - це не просто програма. Це ще і документація і керівництво користувача. Замість терміну програмне забезпечення часто використовують термін програмний продукт.
•Для того, щоб бізнес, пов'язаний з розробкою ПЗ, був успішним, необхідно випускати якісне ПЗ, цікаве потенційним користувачам, робити це у виділені терміни, укладатися до наявного бюджету. На жаль, частка провалених проектів як і раніше катастрофічно висока.
•Аналіз ринку ПЗ в світі показує великі темпи зростання. У галузь вкладаються величезні гроші. Зараз у галузі IT спостерігається бум. Утішний факт - зміцнення національних IT-компаний.
•Основними причинами невдачі IT-проектов є:
Причина 1. Нереалістичні тимчасові рамки. Причина 2. Недостатня кількості виконавців. Причина 3. Розмиті межі проекту.
Причина 4. Недостатня кількість засобів. Причина 5. Відсутність кваліфікованих кадрів.
• Технології програмування - шлях до успіху в розробці ПЗ. Використання різних технологій дозволяє долати складність вирішуваних завдань і, відповідно, складність створення якісного ПЗ. Серед основних технологій можна виділити наступні: структурне програмування, модульне програмування, об'єктно-орієнтоване програмування, компонентне програмування.
13