- •4. Інженерія систем і програмного забезпечення
- •4.1. Складні та великі системи
- •4.1.1. Властивості систем: емерджентність, адитивність, еквіфінальність
- •4.1.2. Відкриті та закриті системи; класифікація за призначенням, походженням, видом елементів, способом організації
- •4.1.3. Спільне та відмінності складних і великих систем
- •4.2. Моделі систем
- •4.2.1. Склад і структура системи; моделі типу чорної та білої скриньки.
- •4.2.2. Концептуальні, математичні і комп’ютерні моделі
- •4.2.3. Зв’язок між системою та моделлю. Ізо- та гомоморфізм
- •Гомоморфізм
- •Гомоморфізм Гомоморфізм Ізоморфізм
- •4.3. Інформаційні системи
- •4.3.1. Поняття, цілі, значення, класифікація за функціональністю, масштабом, сферою застосування
- •4.3.2. Забезпечення інформаційних систем: організаційне, інформаційне, математичне, програмне, технічне, лінгвістичне, методичне, правове.
- •4.4. Аналіз вимог
- •4.4.1. Класифікація вимог до програмного забезпечення. Джерела та методи збирання вимог
- •4.4.2. Вимоги користувача (варіанти використання та історії користувачів).
- •4.4.3. Функціональні та нефункціональні вимоги, обмеження, структуризація функціональних вимог.
- •4.5. Проєктування програмного забезпечення
- •4.5.1. Види проєктування: структурне, обєктно-орієнтоване, архітектурне, інтерфейсне
- •4.5.2. Парадигми проєктування: функціональна декомпозиція згори вниз, архітектура, орієнтована на дані, об'єктно-орієнтований аналіз та проєктування, подієво-керована архітектура
- •4.5.3. Ідентифікація класів предметної області. Uml-діаграми ієрархії класів: моделювання підсистем, класів та зв’язків між ними
- •4.5.4. Проєктування сценаріїв реалізації варіантів використання на основі uml-діаграм послідовностей та комунікації
- •4.5.5. Основні патерни проєктування mvc, Abstract Factory, Facade, Decorator, Flyweight, Visitor, Observer, Proxy, Strategy, Chain of Responsibility
- •4.6. Реалізація програмного забезпечення
- •4.6.1. Вимоги до оформлення коду: стиль, розбиття на структуровані одиниці, найменування змінних, класів, об’єктів.
- •4.6.2. Засоби автоматичної ґенерації програмного коду
- •4.6.3. Налагодження: Точки зупинки (Breakpoints), Спостереження за змінними (Variable Watch), Виведення на консоль (Console Output), Налагоджувач (Debugger), Аналізатори коду (Code Analyzers)
- •4.6.4. Керування конфігурацією програмного забезпечення та контроль версій
- •4.6.5. Постійна інтеграція/постійне впровадження (Continuous Integration/Continuous Delivery)
- •4.7. Забезпечення якості: спільне та відмінності процесів тестування, верифікації, валідації
- •4.7.1. Тестування методами білої та чорної скрині
- •4.7.2. Рівні тестування: модульний, інтеграційний, системний, валідаційний.
- •4.7.3. Розробка через тестування (Test-driven development)
- •2. Види тестування зручности використання:
- •3. Проведення ефективного тестування зручности використання
- •4. Вирішення крайніх випадків в тестуванні зручности використання
- •4.8. Командна робота, підходи до розробки програмного забезпечення (пз)
- •4.8.1. Класичні моделі розробки пз: каскадна (водопадна), ітераційна, інкрементна
- •4.8.2. Промислові технології розробки. Rup, msf, Agile, Scrum, Extreme Programming (xp), Kamban.
- •4.8.3. Ролі та обов'язки у команді проекту, переваги командної роботи, ризики та складність такої співпраці
- •3. Ролі членів групи в моделі процесу розробки
- •4.8.4. Основні етапи планування і виконання іт проекту. Життєвий цикл іт проекту.
4.6.5. Постійна інтеграція/постійне впровадження (Continuous Integration/Continuous Delivery)
Неперервна інтеграція (англ. Continuous Integration) — практика розробки програмного забезпечення, яка полягає у виконанні частих автоматизованих складань проєкту для якнайшвидшого виявлення та розв'язання інтеграційних проблем. У звичайному проєкті, де над різними частинами системи розробники працюють незалежно, стадія інтеграції є завершальною. Вона може непередбачувано затримати закінчення робіт. Перехід до неперервної (постійної) інтеграції дозволяє знизити трудомісткість інтеграції та зробити її передбачуванішою завдяки найранішому виявленню та усуненню помилок і суперечностей. Вимоги до проєкту:
Початковий код і все, що необхідно для побудови та тестування проєкту, зберігається в репозиторії системи керування версіями;
Операції копіювання з репозиторію, складання та тестування всього проєкту автоматизовані і легко викликаються із зовнішньої програми.
Організація. На виділеному сервері організовується служба, до завдань якої входять:
Отримання початкового коду з репозиторію;
Складання проєкту;
Виконання тестів;
Розгортання готового проєкту;
Відправлення звітів.
Локальне складання може здійснюватися:
За зовнішнім запитом,
За розкладом,
За фактом оновлення репозиторію і за іншими критеріями.
Побудова за розкладом. У разі складання за розкладом, вони, як правило, проводяться кожної ночі в автоматичному режимі - нічні складання (щоб до початку робочого дня були готові результати тестування). Для розрізнення додатково вводиться система нумерації складань — зазвичай, кожне складання нумерується натуральним числом, яке збільшується з кожним новим складанням. Початковий код та інші вихідні дані при взятті їх з репозиторію системи контролю версій позначаються номером складання. Завдяки цьому, точно таке ж складання може бути точно відтворене в майбутньому — досить взяти вихідні дані по потрібній мітці і знову запустити процес. Це дає можливість повторно випускати навіть дуже старі версії програми з невеликими виправленнями.
Переваги:
Проблеми інтеграції виявляються і виправляються швидше, що виявляється дешевше
Негайний прогін модульних тестів для свіжих змін
Постійна наявність поточної стабільної версії разом з продуктами складань — для тестування, демонстрації, тощо
Негайний ефект від неповного або непрацюючого коду привчає розробників до роботи в ітеративному режимі з коротшим циклом.
Недоліки:
Витрати на підтримку роботи безперервної інтеграції
Потенційна необхідність у виділеному сервері під потреби безперервної інтеграції
Негайний ефект від неповного або непрацюючого коду відучує розробників від виконання періодичних резервних включень коду в репозиторій.
У разі використання системи управління версіями початкового коду з підтримкою розгалуження, ця проблема може вирішуватися створенням окремої «гілки» проєкту (англ. branch) для внесення великих змін (код, розробка якого до працездатного варіанту займе кілька днів, але бажано частіше резервне копіювання в репозиторій). Після закінчення розробки та індивідуального тестування такої гілки, вона може бути об'єднана (англ. merge) з основним кодом або «стовбуром» (англ. trunk) проєкту.
Перелік засобів: Bamboo (IT), Buddy (Buddy.Works), BuildBot (IT), Buildkite, CircleCI, Codefresh (IT), Codeship (IT), Concourse CI, CruiseControl (IT), Drone.io CD, Go CD (Snap CI tranforms to Go CD), Hydra, Jenkins (стара назва: Hudson), Nevercode, ProductionMap (N/A), Predix CI (стара назва: Solano CI), TeamCity (IT), Travis CI, Scrutinizer (IT), Semaphore (IT) (стара назва: Semaphoreapp), Apache Gump, AWS CodeBuild, Azure DevOps (стара назва: Visual Studio Team Services). Для мобільних розробок (Android, iOS): CIsimple, Hosted-CI, +Appthwack (appthwack.com) / + bitbar (old testdroid).
Безперервна доставка (англ. Continuous delivery (CD)) — підхід у програмній інженерії, суть якого полягає в тому, що команди розроблюють програмне забезпечення протягом коротких періодів часу, забезпечуючи надійний випуск версії у будь-який час. Його метою є створення, тестування та випуск програмного забезпечення швидше та частіше. Підхід допомагає зменшити вартість, час та ризик доставки змін, дозволяючи додаткові поповнення додатків у виробництві. Простий та повторюваний процес розгортання має важливе значення для безперервної доставки.
Порівняння з DevOps. Безперервна доставка і DevOps схожі за своїм значенням (і часто поєднуються), але вони являють собою дві різні концепції: DevOps застосовується в більш широких аспектах.
Безперервна доставка — це підхід до автоматизації доставки програмного забезпечення, який фокусується на: об'єднання різних процесів; виконання їх швидше та частіше.
Вони мають загальні кінцеві цілі і часто використовуються разом для їх досягнення. DevOps і безперервна доставка використовують гнучкі методи: невеликі і швидкі зміни з цілеспрямованим результатом для кінцевого клієнта.
Інструменти. Безперервна доставка здійснює автоматизацію від системи керування версіями до використання реальними користувачами на виробничих пристроях. Існує достатньо інструментів, які допомагають виконати всю або частину роботи. Типу інструментів включають: неперервну інтеграцію, автоматизацію випуску застосунку, автоматизацію складання.
