- •Лекція 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. Тестування продуктивності
Лекція 6. Побудова архітектури та структури ПЗ.
архітектура |
повторного їх використання, завдяки ретельно пропрацьованим |
|
інтерфейсам. |
9. Сервіс-орієнтована |
Описує застосування, що надають і споживаючі функціональність у |
архітектура (SOA) |
вигляді сервісів за допомогою контрактів і повідомлень. |
5. Поєднання архітектурних стилів
Архітектура програмної системи практично ніколи не обмежена лише одним архітектурним стилем, часто вона є поєднанням архітектурних стилів, створюючих повну систему. Наприклад, може існувати SOA-дизайн, що складається з сервісів, при розробці яких використовувалася багатошарова архітектура і об'єктно-орієнтований архітектурний стиль.
Поєднання архітектурних стилів також корисно при побудові Інтернет Веб-застосувань, де можна досягти ефективного розділення функціональності за рахунок застосування багатошарового архітектурного стилю. Таким чином можна відокремити логіку уявлення від бизнес-логики і логіків доступу до даним. Вимоги безпеки організації можуть обумовлювати або 3-рівневе розгортання застосування, або розгортання з більш ніж трьома рівнями. Рівень уявлення може розгортатися в прикордонній мережі, розташованій між внутрішньою мережею організації і зовнішньою мережею. Як модель взаємодії на рівні уявлення може застосовуватися шаблон уявлення з відділенням (різновид багатошарового стилю), така як Model-View-Controller (MVC)5. Також можна вибрати архітектурний стиль SOA і реалізувати зв'язок між Веб -сервером-сервером і сервером застосувань за допомогою обміну повідомленнями.
Створюючи настільне застосування, можна реалізувати клієнт, який відправлятиме запити до програми на сервері. В цьому випадку розгортання клієнта і сервера можна виконати за допомогою архітектурного стилю клієнт/сервер і використовувати компонентну архітектуру для подальшого розкладання дизайну на незалежні компоненти, що надають відповідні інтерфейси. Застосування об'єктно-орієнтованого підходу до цих компонентів підвищить можливості повторного використання, тестування і гнучкість.
6.Основні класи архітектур ПП
6.1.Цілісна програма
Таку архітектуру вибирають зазвичай у тому випадку, коли ПП повинен виконувати одну яскраво виражену функцію і її реалізація не представляється дуже складною. Така архітектура не вимагає якого-небудь опису (окрім фіксації класу архітектури), оскільки відображення зовнішніх функцій на цю програму є тривіальним, а визначати спосіб взаємодії не потрібно (через відсутність якої-небудь зовнішньої взаємодії програми, окрім як взаємодії її з користувачем, а останнє описується в документації до ПП).
6.2.Архітектура ППП
Складається з деякого набору незалежних програм, таких, що:
•будь-яка з цих програм може бути активізована (запущена) користувачем;
•при виконанні активізованої програми інші програми цього набору не можуть бути активізовані до тих пір, поки не закінчить виконання активізована програма;
•всі програми цього набору стосуються одного і того ж інформаційного середовища.
Таким чином, програми цього набору по управлінню ніяк не взаємодіють - взаємодія між ними здійснюється тільки через загальне інформаційне середовище.
6.3.Архітектура, заснована на шині повідомлень
Архітектура на шині повідомлень описує принцип використання ПП, який може приймати і відправляти повідомлення поодинці або більш каналам зв'язку, забезпечуючи, таким чином,
61
Лекція 6. Побудова архітектури та структури ПЗ.
застосуванням можливість взаємодії без необхідності знання конкретних деталей один про одного. Це стиль проектування, в якому взаємодії між окремими ПЗ здійснюються шляхом передачі (зазвичай асинхронною) повідомлень через загальну шину по загальних схемах і інфраструктурі.
Шина повідомлень забезпечує можливість обробляти:
Взаємодія, заснована на повідомленнях. Вся взаємодія між застосуваннями грунтується на повідомленнях, що використовують відомі схеми.
Складну логіку обробки. Складні операції можуть виконуватися як частина багатокрокового процесу шляхом поєднання ряду менших операцій, кожна з яких підтримує певні завдання.
Зміни логіки обробки. Взаємодія з шиною реалізується по загальних схемах і із застосуванням звичайних команд, що забезпечує можливість вставки або видалення застосувань на шині для зміни використовуваної для обробки повідомлень логіки.
Інтеграцію з різними інфраструктурами. Використання моделі зв'язку за допомогою повідомлень, заснованого на загальних стандартах, дозволяє взаємодіяти із застосуваннями, розробленими для різних інфраструктур, таких як Microsoft .NET і Java.
Шини повідомлень використовуються для забезпечення складних правил обробки вже протягом багатьох років. Такий дизайн забезпечує архітектуру, що підключається, яка дозволяє вводити застосування в процес або покращувати масштабованість, підключаючи до шини декілька екземплярів одного і того ж застосування.
Основні переваги архітектури шини повідомлень:
Розширюваність. Можливість додавати або видаляти застосування з шини без впливу на існуючі застосування.
Невисока складність. Застосування спрощуються, тому що кожному з них необхідно знати лише, як обмінюватися даними з шиною.
Гнучкість. Приведення набору застосувань, складових складний процес, або схем зв'язку між застосуваннями у відповідність бизнес-требованиям, що змінюється, або вимогам користувача просто шляхом внесення змін до конфігурації або параметрів, керівники маршрутизацією.
Слабке скріплення. Окрім інтерфейсу, що надається застосуванням, для зв'язку з шиною повідомлень, немає ніяких інших залежностей з самим застосуванням, що забезпечує можливість зміни, оновлення і заміни його іншим застосуванням, що надає такий же інтерфейс.
Масштабованість. Можливість підключення до шини безлічі екземплярів одного застосування для забезпечення одночасної обробки безлічі запитів.
Простота застосування. Не дивлячись на те, що реалізація шини повідомлень ускладнює інфраструктуру, кожному застосуванню доводиться підтримувати лише одне підключення до шини повідомлень, а не безліч підключень до інших застосувань.
Простим різновидом такої архітектури є конвеєр, засоби для організації якого є в операційній системі UNIX [6.3]. Конвеєром є послідовність програм, в якій стандартне виведення кожної програми, окрім найостаннішої, пов'язане із стандартним введенням наступної програми цієї послідовності (див. мал. 6.2). Конвеєр обробляє деякий потік повідомлень. Кожне повідомлення цього потоку поступає на введення першій програмі, яка обробивши його передає перероблене повідомлення наступної програми, а сама починає обробку чергового повідомлення потоку. Таким же чином діє кожна програма конвеєра: отримавши повідомлення від попередньої програми і обробивши його, вона передає перероблене повідомлення наступної програми, а остання програма конвеєра виводить результат роботи всього конвеєра (результуюче повідомлення). Таким чином, в конвеєрі, що складається з n програм, може одночасно знаходитися в обробці до n повідомлень. Звичайно, внаслідок того, що різні програми конвеєра можуть витратити на обробку чергових повідомлень різні відрізки часу, необхідно забезпечити яким-небудь чином синхронізацію цих процесів (деякі процеси можуть знаходитися у стадії очікування або можливості передати перероблене повідомлення, або можливості отримати чергове повідомлення).
Рис. 6.2. Конвеєр програм, що діють паралельно .
62
Лекція 6. Побудова архітектури та структури ПЗ.
6.4.Архітектура клієнт/сервер
Клієнт/серверная архітектура описує розподілені системи, що складаються з окремого клієнта і сервера і мережі, що сполучає їх. Проста форма системи клієнт/сервер, звана 2-рівневою архітектурою – це серверне застосування, до якого безпосередньо звертаються безліч клієнтів.
Історично архітектура клієнт/сервер є настільним застосуванням з графічним UI, що обмінюється даними з сервером бази даних, на якому у формі процедур, що зберігаються, розташовується основна частина бизнес-логики, або з виділеним файловим сервером. Якщо розглядати більш узагальнено, архітектурний стиль клієнт/сервер описує відносини між клієнтом і одним або більш серверами, де клієнт ініціює один або більш за запити (можливо, з використанням графічного UI), чекає відповіді і обробляє їх при отриманні. Зазвичай сервер авторизує користувача і потім проводить обробку, необхідну для отримання результату. Для зв'язку з клієнтом сервер може використовувати широкий діапазон протоколів і форматів даних.
Прикладами архітектури клієнт/сервер можуть служити Веб-сервера-застосування, що виконуються в Інтернеті або внутрішніх мережах організацій; настільні застосування для операційної системи Microsoft Windows®, що виконують доступ до мережевих сервісів даних; застосування, що виконують доступ до видалених сховищ даних (такі як програми читання електронної пошти, FTPклиенты і засоби доступу до баз даних); інструменти і утиліти для роботи з видаленими системами (такі як засоби управління системою і засобу моніторингу мережі).
Основні переваги архітектурного стилю клієнт/сервер:
Велика безпека. Всі дані зберігаються на сервері, який зазвичай забезпечує більший контроль безпеки, чим клієнтські комп'ютери.
Централізований доступ до даних. Оскільки дані зберігаються тільки на сервері, адміністрування доступу до даних набагато простіше, ніж в інших архітектурах.
Простота обслуговування. Ролі і відповідальність обчислювальної системи розподілені між декількома серверами, що взаємодіють один з одним по мережі. Завдяки цьому клієнт гарантовано залишається неінформованим і не схильним до впливу подій, що відбуваються з сервером (ремонт, оновлення або переміщення).
Розглянете можливість застосування архітектури клієнт/сервер, якщо створюване застосування повинне розміщуватися на сервері і не повинно підтримувати безліч клієнтів; якщо створюються Веб- сервера-застосування, що надаються через Веб-сервер-браузер; якщо реалізуються бизнес-процессы, які використовуватимуться в рамках організації; або якщо створюються сервіси для використання іншими застосуваннями. Архітектура клієнт/сервер добре підходить для централізації сховища даних, функції резервного копіювання і управління, або якщо ПП повинен підтримувати різні типи клієнтів і різні пристрої.
Традиційна 2-рівнева архітектура клієнт/сервер має багато недоліків:
1.тенденція тісного звязування даних і бізнес-логіки серверної частини ПЗ, що може мати негативний вплив на розширюваність і масштабованість системи вцілому
2.залежність від центрального сервера, що негативно позначається на надійності системи.
Для вирішення цих проблем архітектурний стиль клієнт/сервер був розвинений в більш універсальний 3-рівневий (або N-рівневий), в якому усунено деякі недоліки, властиві 2-рівневій архітектурі клієнт/сервер, і забезпечуються додаткові переваги.
63
Лекція 6. Побудова архітектури та структури ПЗ.
6.5.Архітектура N-рівневої системи
ППскладається з деякої впорядкованої сукупності програмних підсистем, названих рівнями (шарами), такий, що:
на кожному рівні (шарі) нічого не відомо про властивості (і навіть існуванні) подальших (вищих) шарів;
кожен рівень (шар) може взаємодіяти по управлінню (звертатися до компонентів) з безпосередньо попереднім (нижчим) шаром через заздалегідь певний інтерфейс, нічого не знаючи про внутрішню будову всіх попередніх шарів;
кожен рівень (шар) має в своєму розпорядженні певні ресурси, які він або приховує від інших шарів, або надає безпосередньо подальшому шару (через вказаний інтерфейс) деякі їх абстракції.
В n-рівневій програмній системі кожен рівень може реалізувати деяку абстракцію даних. Зв'язки між рівнями обмежені передачею значень параметрів звернення кожного рівня до суміжного нижнього рівня і видачею результатів цього звернення від нижнього до верхнього. Тут неприпустимо використання глобальних даних між рівнями.
Як приклад розглянемо використання такої архітектури для побудови операційної системи. Таку архітектуру застосував Дейкстра при побудові операційної системи THE [6.2]. Ця операційна система складається з чотирьох шарів (див. мал. 6.1). На нульовому шарі проводиться обробка всіх переривань і виділення центрального процесора програмам (процесам) в пакетному режимі. Тільки цей рівень обізнаний про мультипрограмні аспекти системи. На першому шарі здійснюється управління сторінковою організацією пам'яті. Всім вищестоящим шарам надається віртуальна безперервна (не сторінкова) пам'ять. На другому шарі здійснюється зв'язок з консоллю (пультом управління) оператора. Тільки цей шар знає технічні характеристики консолі. На третьому шарі здійснюється буферизація вхідних і вихідних потоків даних і реалізуються так звані абстрактні канали введення і виводу, так що прикладні програми не знають технічних характеристик пристроїв введення і виводу.
Прикладні програми
3: Управління вхідними і вихідними потоками
даних
2: Забезпечення зв'язку з консоллю оператора
1: Управління пам'яттю
0: Диспетчеризація і синхронізація процесів
Комп'ютер
Рис. 6.1. Архітектура операційної системи THE.
6.6.Багатошарова архітектура
Терміни шар (layer) і рівень(tier) часто змішують. Однак -
•шар позначає логічне розділення функціональності,
•рівень позначає фізичне розгортання на різних системах.
Багаторівнева архітектура забезпечує угрупування зв'язаної функціональності застосування в різних шарах, що вибудовуються вертикально, поверх один одного. Функціональність кожного шару об'єднана загальною роллю або відповідальністю. Шари слабо зв'язані, і між ними здійснюється явний обмін даними. Правильне розділення застосування на шари допомагає підтримувати строге розділення функціональності, що у свою чергу, забезпечує гнучкість, а також зручність і простоту обслуговування.
Багатошарова архітектура описана як перевернута піраміда повторного використання, в якій кожен шар агрегує відповідальності і абстракції рівня, розташованого безпосередньо під ним. При
64
Лекція 6. Побудова архітектури та структури ПЗ.
строгому розділенні на шари компоненти одного шару можуть взаємодіяти тільки з компонентами того ж шару або компонентами шаруючи, розташованого прямо під даним шаром. Вільніше розділення на шари дозволяє компонентам шари взаємодіяти з компонентами того ж і всіх шарів, що пролягають нижче.
Шари застосування можуть розміщуватися фізично на одному комп'ютері (на одному рівні) або бути розподілені по різних комп'ютерах (n-уровней), і зв'язок між компонентами різних рівнів здійснюється через строго певні інтерфейси. Наприклад, типове Веб-сервер-застосування складається з шару уявлення (функціональність, пов'язана з UI), бизнес-слоя (обробка бизнес-правил) і шаруючи даних (функціональність, пов'язана з доступом до даним, часто практично повністю реалізовується за допомогою високорівневих інфраструктур доступу до даним).
Загальні принципи проектування з використанням багатошарової архітектури:
Абстракція. Багатошарова архітектура представляє систему як єдине ціле, забезпечуючи при цьому достатньо деталей для розуміння ролей і ответственностей окремих шарів і відносин між ними.
Інкапсуляція. Під час проектування немає необхідності робити які-небудь припущення про типи даних, методи і властивості або реалізацію, оскільки всі ці деталі приховані в рамках шару.
Чітко певні функціональні шари. Розділення функціональності між шарами дуже чітка. Верхні шари, такі як шар уявлення, посилають команди нижнім шарам, таким як бізнес-шар і шар даних, і можуть реагувати на події, що виникають в цих шарах, забезпечуючи можливість передачі даних між шарами вгору і вниз.
Висока зв'язність. Чітко певні межі відповідальності для кожного шару і гарантоване включення в шар тільки функціональності, безпосередньо пов'язаній з його завданнями, допоможе забезпечити максимальну зв'язність в рамках шару.
Можливість повторного використання. Відсутність залежностей між нижніми і верхніми шарами забезпечує потенційну можливість їх повторного використання в інших сценаріях.
Слабке скріплення. Для забезпечення слабкого скріплення між шарами зв'язок між ними грунтується на абстракції і подіях.
Прикладами багатошарових застосувань можуть служити бизнес-приложения (line-of-business, LOB), такі як системи бухгалтерського обліку і управління замовниками; Веб-сервера-застосування і Веб-сайти підприємств; настольные або смарт-клиенты підприємств з централізованими серверами застосувань для розміщення бизнес-логики.
Багатошарова архітектура підтримується поряд шаблонів проектування. Наприклад, під назвою Separated Presentation (Відділення уявлення) об'єднується ряд шаблонів, що розділяють взаємодію користувача з UI, уявлення, бізнес-логіку і дані застосування, з якими працює користувач. Відділення уявлення дозволяє створювати UI в графічних дизайнерах, тоді як розробники пишуть код, що управляє. Таке розділення функціональності на ролі підвищує можливість тестування поведінки окремих ролей.
Можливість застосування багатошарової архітектури необхідно розглянути, якщо у вашому розпорядженні є вже готові рівні, відповідні для повторного використання в інших застосування; якщо є застосування, що надають відповідні бизнес-процессы через інтерфейси сервісів; або якщо створюється складне застосування і попереднє проектування вимагає розділення, щоб групи могли зосередитися на різних ділянках функціональності. Багатошарова архітектура також буде доречна, якщо застосування повинне підтримувати різні типи клієнтів і різні пристрої, або якщо потрібно реалізувати складні і/або бизнес-правила, що настроюються, і процеси.
6.7.N-рівнева / 3-рівнева архітектура
N-рівнева і 3-рівнева архітектура є стилями розгортання, що описують розділення ПП на сегменти, багато в чому аналогічно багатошаровій архітектурі, але в даному випадку ці сегменти можуть фізично розміщуватися на різних комп'ютерах, тому їх називають рівнями. Дані архітектурні стилі були створені на базі компонентно-орієнтованого підходу і, як правило, для зв'язку використовують методи платформи, а не повідомлення.
65
