- •Лекція 0. Вступ. Цілі, завдання і місце курсу
- •1. Мета викладання курсу
- •2. Завдання вивчення курсу
- •3. Дисципліни, засвоєння яких необхідне при вивченні курсу
- •4. Характеристика курсу
- •5.1. Література
- •5.2. Інформаційні ресурси мережі Інтернет
- •Лекція 1. Введення у технологію програмування
- •1. Термінологія індустрії ПЗ
- •1.1. Програмування
- •1.2. IT-проекти
- •1.3. Програми і програмне забезпечення (програмні продукти)
- •2. Бізнес і IT-проекти. Ринок ПЗ.
- •3. Про предмет
- •5. Виникнення Технології розробки ПЗ
- •5.1. Коротка історія програмування
- •5.2. Терміни “Технологія”, “Методологія” і “Програмна інженерія”
- •5.3. Стратегії розробки ПЗ
- •6. Огляд технологій програмування
- •6.1. Структурне програмування
- •6.2. Модульне програмування
- •6.4. Компонентне програмування
- •6.5. Висновки з лекції
- •Лекція 2. Елементи програмної інженерії
- •1. Програмна інженерія, основні поняття
- •1.1. Інженери і програмні інженери
- •1.2. Програмна інженерія як інженерна дисципліна
- •1.3. Область дії програмної інженерії
- •2. Цілі програмних інженерів
- •2.1. Поняття “якості” програмного продукту
- •2.2. Створення ПЗ повинно вкладатися до бюджету
- •2.3. Створення ПЗ повинно вкладатися в терміни
- •3. Забезпечення надійності розробки ПЗ
- •3.1. Забезпечення точності інтерпретації
- •3.2. Подолання бар'єру між користувачем і розробником
- •3.3. Контроль ухвалюваних рішень
- •3.4. Програмні інженери і наукове середовище
- •4. Складність програмної системи
- •4.1. Методи боротьби зі складністю
- •5. Моделі якості процесів розроблення ПЗ
- •Лекція 3. Організація технологічного процесу розробки ПЗ
- •1. Процес створення програмного забезпечення
- •1.1. Основні стадії типового процесу створення ПП
- •2. Життєвий цикл та моделі процесу розробки ПЗ
- •2.1. Каскадна модель (Waterfall model)
- •2.2. Макетування (прототипіювання)
- •2.3. Інкрементна модель
- •2.4. Модель Швидкої Розробки (RAD)
- •2.5. Спіральна модель
- •3. “Важкі” і “полегшені” процеси
- •4. ХР-процесс
- •Лекція 4. Оцінка програмного проекту по СОСОМО
- •1. Процес управління проектом
- •1.1. Початок проекту
- •1.2. Оцінювання, заходи і метрики
- •1.3. Процес оцінки
- •1.4. Аналіз ризиків
- •1.5. Планування
- •1.6. Трасування і контроль
- •2. Планування проектних завдань
- •3. Розмірно-орієнтовані метрики
- •4. Функціонально-орієнтовані метрики
- •5. Оцінка проекту на основі LOC- і FP-метрик
- •Лекція 5. Проектування програмних систем
- •1. Особливості процесу синтезу програмних систем
- •2. Особливості етапу проектування
- •3. Структуризація системи
- •4. Моделювання управління
- •5. Декомпозиція підсистем на модулі
- •6. Модульність
- •7. Інформаційна закритість
- •8. Зв'язність модуля
- •8.1. Функціональна зв'язність
- •8.2. Інформаційна зв'язність
- •8.3. Комунікативна зв'язність
- •8.4. Процедурна зв'язність
- •8.5. Часова зв'язність
- •8.7. Випадкова Зв'язність
- •8.8. Визначення зв'язності модуля
- •9. Зчеплення модулів
- •10. Складність програмної системи
- •11. Характеристики ієрархічної структури програмної системи
- •Лекція 6. ПОБУДОВА АРХІТЕКТУРИ ПП
- •1. Поняття архітектури програмного засобу.
- •2. Основні принципи проектування архітектури
- •3. Основні питання архітектора ПП
- •4. Архітектурні стилі (шаблони) ПП
- •5. Поєднання архітектурних стилів
- •6. Основні класи архітектур ПП
- •6.1. Цілісна програма
- •6.2. Архітектура ППП
- •6.3. Архітектура, заснована на шині повідомлень
- •6.4. Архітектура клієнт/сервер
- •6.6. Багатошарова архітектура
- •6.8. Компонентна архітектура
- •6.10. Сервісно-орієнтована архітектура
- •7. 4. Контроль архітектури ПП
- •Лекція 7. Розробка Програм, Модульне Програмування
- •1. Поняття модульного програмування
- •1.1. Основні характеристики програмного модуля.
- •1.2. Методи розробки структури програми.
- •1.3. Контроль структури програми.
- •2. Розроблення програмних модулів
- •2.1. Порядок розробки програмного модуля
- •2.2. Структурне програмування модуля
- •2.3. Покрокова деталізація і поняття про псевдокод.
- •Лекція 8. Тестування і відлагодження ПЗ
- •1. Основні поняття тестування і відлагодження
- •2. Основні підходи і принципи відлагодження.
- •2.1. Заповіді відлагодження.
- •2.2. Автономна відладка модулів
- •2.3. Проміжна відладка програмного засобу
- •2.4. Комплексна відладка програмного засобу.
- •3. Організація процесу тестування ПЗ
- •3.1. Тестування елементів
- •3.2. Інтегральне Тестування ПП
- •3.3. Низхідне тестування інтеграції
- •3.4. Висхідне тестування інтеграції
- •3.5. Порівняння низхідного і висхідного тестування інтеграції
- •4. Види Тестування
- •4.1. Тестування правильності
- •4.2. Системне тестування
- •4.3. Тестування відновлення
- •4.4. Тестування безпеки
- •4.5. Стресове тестування
- •4.6. Тестування продуктивності
Лекція 1. Введення у технологію програмування.
системні вимоги, а частина програмування, що залишилася, виконується у вигляді послідовності версій. Перша версія реалізує частину запланованих можливостей, наступна версія реалізує додаткові можливості і т.д., поки не буде отримана повна система;
Еволюційна стратегія. Система також будується у вигляді послідовності версій, але на початку процесу визначені не всі вимоги. Вимоги уточнюються в результаті розробки версій.
Характеристики стратегій конструювання ПО відповідно до вимог стандарту IEEE/EIA 12207.2 приведені в табл. 1.1.
Таблиця 1.1. Характеристики стратегій програмування
Стратегія |
На початку процесу |
Множина циклів |
Проміжний ПЗ |
|
визначені всі вимоги? |
програмування? |
розповсюджується? |
Водопадна |
Так |
Немає |
Немає |
Інкрементна |
Так |
Так |
Можливо |
|
|
|
|
Еволюційна |
Немає |
Так |
Так |
6.Огляд технологій програмування
6.1.Структурне програмування
Виникнення концепції структурного програмування зв'язується з ім'ям відомого голландського ученого Е. Дейкстри - в 60-х роках минулого століття він сформулював основні її положення.
Принцип, на якому базується технологія структурного програмування - фундаментальна наукова і технічна ідея про виділення безлічі базисних елементів, за допомогою яких можна виразити (з яких можна зібрати) будь-який об'єкт з деякого широкого набору.
Отже, основний принцип технології структурного програмування свідчить: для будь-якої простої програми можна побудувати функціонально еквівалентну їй структурну програму, тобто програму, сформовану на основі фіксованої базисної множини, що включає структуру послідовної дії, структуру вибору одного з двох дій і структуру циклу, тобто багатократного повторення деякої дії з перевіркою умови зупинки повторення.
Рис. 1.3. Блок-схеми базисних алгоритмічних конструкцій
На рис. 1.3 представлено зображення алгоритмічних конструкцій у вигляді блок-схем. Тут прямокутник позначає узагальнена дія, ромб - перевірку умови, стрілки - перехід від однієї дії до іншого.
Під простою програмою в даному випадку розуміється програма, що має рівно один вхід і один вихід по управлінню, така, що через всі її функціональні блоки проходить шлях від входу до виходу. Викладений принцип є теоремою про структуризацію. Її точне формулювання і доказ представлені в монографії Е.Дейкстри.
Базисні алгоритмічні конструкції володіють важливою властивістю - вони в точності задовольняють визначенню простій програми, тобто мають один вхід і один вихід, що забезпечує можливість здійснювати їх суперпозицію. Будь-яка з трьох структур може бути підставлена в
11
Лекція 1. Введення у технологію програмування.
останніх або в саму себе.
Таким чином, центральний технологічний принцип структурного програмування полягає в тому, що формулювання алгоритму і його запис у вигляді програми рекомендується виконувати на основі базису з трьох алгоритмічних конструкцій, застосовуючи при необхідності їх суперпозицію. Результатом послідовного застосування цього принципу буде ясніша структура програми (особливо, якщо використовувати виділення структурних рівнів за допомогою відступів), що, поза сумнівом, полегшить пошук в ній помилок і спростить її модифікацію.
6.2.Модульне програмування
Технологія модульного програмування - що оформилася на початку 70-х років XX століття ідея розробки великих програмних систем. Це фундаментальна концепція, що є основою всіх сучасних підходів до проектування і реалізації. В той же час суть її проста і відображає широко відомі наукові і технічні методи, що полягають в пошуку і реалізації деякого базового набору елементів, комбінації яких дають вирішення всіх завдань з певного круга.
Якщо концепція структурного програмування пропонує деякий універсальний алгоритмічний базис, то модульне програмування полягає в розробці під конкретне завдання або круг завдань (наочну область) власного базису у вигляді набору модулів, що дозволяє найефективніше по цілому ряду критеріїв побудувати програмний комплекс. Модулі, що входять в базис, це цілі програми (на відміну від примітивів структурного програмування), вирішальні деякі підзадачі основних завдань.
Із застосуванням модульного програмування з'являються можливості колективної розробки програм як набору "незалежних" частин, послідовного зменшення складності методом розбиття складного завдання на простіші підзадачі, нарешті, можливості повторного використання створеної раніше коди.
6.3.Об'єктно-орієнтоване програмування
Розвиток апаратної бази привів до можливості рішення при її допомозі все більш або складніших завдань, а, означає, розробки все більш і більш складних програм. Програми стали великими (навіть дуже великими), а розробка - колективною. Об'єм роботи збільшився, колективи розрослися, код "розбухнув", і з'явилися нові проблеми, яких не було раніше. Несподівано з'ясувалося, що можливості структурного і модульного програмування обмежені і часто вже не дозволяють добиватися бажаного результату (або нічого не працює, або проект не укладається в терміни, або до бюджету, або через рік після написання програми з'ясовується, що її неможливо модифікувати і так далі).
Об'єктно-орієнтована технологія в деякій мірі вирішила більшість описаних проблем. На відміну від розглянутих раніше технологій, об'єктно-орієнтована технологія працює на стадіях аналізу, проектування і програмування. В основі об'єктно-орієнтованої технології лежать об'єктна модель і об'єктна декомпозиція.
До основних принципів об'єктної моделі часто відносять наступні:
•абстракція;
•інкапсуляція;
•ієрархія (спадкоємство, агрегація);
•поліморфізм;
•модульність.
Суть об'єктної декомпозиції полягає у виділенні в наочній області класів і об'єктів, а також зв'язків між ними, і лише потім даних і алгоритмів, якими характеризується кожен клас. Таким чином, саме класи стають основним "будівельним блоком" в ООП, тоді як раніше такими блоками були алгоритми.
6.4.Компонентне програмування
Компонентне програмування - є розвиток об'єктно-орієнтованої технології. На відміну від ООП введений наступний рівень абстракції - класи об'єднуються в компоненти.
12
Лекція 1. Введення у технологію програмування. Компонент це:
•• програмний код у вигляді самостійного модуля;
•• може бути використаний в незмінному вигляді;
•• може допускати настройку;
•• володіє поведінкою (функціональністю).
Основний принцип компонентного програмування: збірка застосування з готових компонент, в загальному випадку написаних на різних мовах.
Компонент ізольований від зовнішнього світу своїм інтерфейсом - набором методів (їх сигнатурами). Компонентна програма - набір незалежних компонент, зв'язаних один з одним за допомогою інтерфейсів.
6.5.Висновки з лекції
Отже, лекція була присвячена знайомству з термінологією і вступу в предмет. Сформулюємо стисло деякі висновки:
•Програмування (Computer science) - молода область, що активно розвивається, за півстоліттям свого розвитку що подолала величезний шлях. Будучи як мистецтвом, так і наукою, у наш час термін програмування придбав якісно нове забарвлення, ставши однією з галузей бізнесу.
•Під IT-проектами можна розуміти будь-які проекти в області інформаційних технологій. Ми далі розглядатимемо лише ті IT-проекты, метою яких є розробка програмного забезпечення.
•Програмне забезпечення (Software) - набір комп'ютерних програм, процедур і пов'язаної з ними документації і даних. Таким чином, програмне забезпечення - це не просто програма. Це ще і документація і керівництво користувача. Замість терміну програмне забезпечення часто використовують термін програмний продукт.
•Для того, щоб бізнес, пов'язаний з розробкою ПЗ, був успішним, необхідно випускати якісне ПЗ, цікаве потенційним користувачам, робити це у виділені терміни, укладатися до наявного бюджету. На жаль, частка провалених проектів як і раніше катастрофічно висока.
•Аналіз ринку ПЗ в світі показує великі темпи зростання. У галузь вкладаються величезні гроші. Зараз у галузі IT спостерігається бум. Утішний факт - зміцнення національних IT-компаний.
•Основними причинами невдачі IT-проектов є:
Причина 1. Нереалістичні часові рамки. Причина 2. Недостатня кількості виконавців. Причина 3. Розмиті межі проекту.
Причина 4. Недостатня кількість засобів. Причина 5. Відсутність кваліфікованих кадрів.
• Технології програмування - шлях до успіху в розробці ПЗ. Використання різних технологій дозволяє долати складність вирішуваних завдань і, відповідно, складність створення якісного ПЗ. Серед основних технологій можна виділити наступні: структурне програмування, модульне програмування, об'єктно-орієнтоване програмування, компонентне програмування.
13
