Transcript Document
Вступ до програмної інженерії
Модуль 1 Програмна інженерія: Призначення основні
принципи та поняття
Лекції 2-5 Загальний обсяг 8 год.
_____________________________________________________
Питання
Передумови
виникнення та історія
Програмна
інженерія: Основні поняття
Професійні
та етичні вимоги до фахівців в ПІ
№ 2 из NN
Передумови виникнення та історія
Перша
криза в програмуванні
Дублювання програмного
– Модульне програмування
коду
Зростання складності програм
– Структурне програмування
Модифікація
програм
– Об’єктно-орієнтоване програмування
Продовження
кризи в програмуванні
№ 3 из NN
Дублювання програмного коду
Проблема
зростання вартості
– Використання однакових фрагментів коду в
різних програмах
Модульне програмування
– Виділення фрагментів в модулі
– Повторне використання модулів
– Створення бібліотек модулів
№ 4 из NN
Зростання складності програм
Проблеми зростання вартості
– Необхідність розробки складних програмних комплексів:
великі об'єми коду; кількість зв'язків; кількість розробників;
кількість користувачів
– Поява життєвих циклів з високою вартістю впровадження
та супроводу.
Структурне програмування
– «Правильне» проектування та кодування за принципами:
• Функціональне програмування на основі декомпозиції
• Застосування спеціальних мов проектування
• Висока дисципліна проектування та розробки:
– Планування та документування проекту
– Забезпечення відповідності коду проектній документації, включаючи
процес внесення змін.
• Структурне кодування (лінійні блоки, If-then-else, цикли)
№ 5 из NN
Модифікація програм
Проблема зростання вартості
(проблема замовника, який не
знає чого він хоче)
– зміни в проекті і в програмі без
зміни попередньо
сформованого коду
Об’єктно-орієнтоване
програмування
– Клас – модуль зі своїми
властивостями, поведінкою,
обов'язками
– Парадигми ООП:
• Інкапсуляція
• Унаслідування
• Поліморфізм
Зарплата
Відділ 1
Відділ 2
Відділ 3
Зарплата
Зарплата 1
Відділ 1
Відділ 2
Відділ 3
№ 6 из NN
Продовження кризи в програмуванні
Криза
програмування полягає в суттєвому
знижені ефекту від виконання проектів
Данні по проектах США
Невдалі
2000
1998
23%
28%
1995
1994
Успішні
49%
28%
46%
40%
31%
Проблемні
26%
33%
53%
27%
16%
№ 7 из NN
Підсумки
Головна
мета програмної інженерії – зниження
вартості ПЗ
Сформувалися
основні принципи та методи
проектування ПЗ:
– Життєвий цикл ПЗ
– Модульне програмування
– Структурне проектування та програмування
– Об’єктно-орієнтоване проектування та
програмування
№ 8 из NN
Питання
Передумови
виникнення та історія
Програмна
інженерія: Основні поняття
Професійні
та етичні вимоги до фахівців в ПІ
№ 9 из NN
Визначення програмної інженерії
Вперше термін появився в жовтні 1968р. на конференції
підкомітету НАТО (Німеччина)
Програмна інженерія – це
– встановлення та використання обґрунтованих інженерних принципів та
методів для економного отримання надійного ПЗ, яке функціонує на
реальних машинах [Bauer 1972].
– форма інженерії, яка застосовує принципи комп'ютерних наук та
математики для рентабельного розв'язку проблем ПЗ. [CMU/SEI-90-TR003]
– застосування систематичного дисциплінованого, вимірного підходу до
розробки, використання та супроводу ПЗ [IEEE 1990].
– дисципліна, метою якої є створення високоякісного ПЗ, створення
якого закінчується вчасно без перевищення бюджетних коштів і
задовольняє висунутим вимогам [Schach, 99].
№ 10 из NN
Основні питання
Що
таке програмне забезпечення (software)?
Що
означає «програмна інженерія»?
Чим
програмна інженерія відрізняється від
комп'ютерних наук?
Чим
програмна інженерія відрізняється від
інших інженерій?
Які
складові вартості ПЗ?
№ 11 из NN
Програмне забезпечення?
ПЗ - комп'ютерні програми і пов'язана із ними
документація та данні (ISO/IEC 12207)
Програмні продукти можуть розроблятися для
конкретного замовника та для узагальненого ринку
ПЗ
Програмні продукти можуть бути
– “Коробковими” (generic products, shrink-wrapped
software), тобто для продажу багатьом замовникам
– На замовлення (bespoke, custom), тобто розробленими
для одного покупця за його специфікаціями
№ 12 из NN
Програмна інженерія?
Інженерна дисципліна, яка пов'язана зі всіма аспектами
виробництва ПЗ від початкових стадій створення
специфікації до підтримки системи після введення в
експлуатацію (Соммервіл)
Інженерна дисципліна
– Орієнтується на практичний результат
– Застосування теорій, методів та способів для досягнення
результату
– Враховує найкращий практичний досвід (best practices)
– Враховує обмежений ресурс часу, бюджету, обладнання, людський
ресурс.
Усі аспекти виробництва ПЗ
– Управління програмними проектами
– Розробка засобів, методів та теорій.
№ 13 из NN
Чим програмна інженерія відрізняється від
комп'ютерних наук?
Комп'ютерні
науки вивчають теорію та методи
обчислювальних та програмних систем
Програмна
інженерія вивчає практичні
проблеми створення ПЗ
Комп'ютерні
науки є теоретичним
фундаментом програмної інженерії
– Не завжди достатнім
– Не єдиним (фінанси, управління проектами,
робота із замовником, тощо)
№ 14 из NN
Чим програмна інженерія відрізняється від інших
інженерій?
Питання:
– Чому така велика доля невдалих проектів?
– Чи можна застосовувати досвід інших інженерій?
Етапи життєвого циклу продукту інженерії:
– Проектування, створення зразку, випробовування,
виробництво, експлуатація
Програма – не матеріальний об’єкт:
– Етапи виробництва та виготовлення зразка відсутні
– Вартість програми – це вартість проектування
– В «коробкових» продуктів вартість розподіляється по
копіях
– У замовних продуктів вартість залишається високою.
№ 15 из NN
Інші відмінності від інженерій
Програма
– штучний об'єкт
– Відсутні об'єктивні закони контролю проекту
– Тестування – єдиний спосіб перевірки
Програмна
інженерія – молода дисципліна
Детально
– Коні Бюрер «Від ремесла до науки: пошук
основних принципів розробки ПЗ»
№ 16 из NN
Які складові вартості ПЗ?
Залежно від типу ПЗ, методології розробки та методу
оцінки
Типовий розподіл:
–
–
–
–
15% - специфікація
25% - проектування
20% - розробка
40% - інтеграція та тестування
«Коробкове» ПЗ
– Зростання частки тестування за рахунок специфікації
Замовне ПЗ
– Зростання частки тестування за рахунок проектування та
розробки
№ 17 из NN
Наступні питання
Що
таке програмний процес?
Що
таке модель програмного процесу?
Що
таке методи програмної інженерії?
Що
таке CASE (Computer-Aided Software
Engineering)?
Які
властивості «хорошої» програми?
Які
труднощі програмної інженерії?
№ 18 из NN
Програмний процес?
Життєвий цикл програмного процесу неперервний
процес з моменту прийняття рішення про створення
ПЗ до вилучення його з експлуатації.
Процес – сукупність дій та задач націлених на
досягнення значущого результату.
Основні процеси та етапи ЖЦ:
–
–
–
–
–
–
Специфікація вимог
Розробка проекту програми
Кодування
Тестування
Документування
Супровід
№ 19 из NN
Програмний процес?
Додаткові
(не функціональні) процеси:
– Створення інфраструктури, керування
конфігурацією, керування якістю, навчання,
усунення протиріч, тощо.
Встановлення
процесу:
– Опис процесу
– Навчання процесу
– Введення метрик
– Контроль виконання
– Удосконалення
№ 20 из NN
Модель програмного процесу?
Модель програмного процесу — це спрощений опис
програмного процесу, представлений з деякої точки
зору.
Моделі життєвого циклу:
–
–
–
–
–
Водоспадна (каскадна) модель
Спіральна (циклічна) модель
Компонентна модель
Формальна модель
Комбіновані моделі
Моделі організації робіт:
– Модель потоку робіт (workflow model)
– Модель потоків даних (data flow model)
– Рольова модель
№ 21 из NN
Методи програмної інженерії?
Метод
програмної інженерії — це структурний
підхід до створення ПЗ:
– Як високоякісного продукту
– Економічно ефективним способом.
Найбільш
відомі методи:
– Структурного аналізу та проектування Том Де
Марко (1978),
– Сутність - зв'язок проектування КІС Чен (1976)
– Об'єктно - орієнтованого аналізу та
проектування Буч (1994), Рамбо (1991).
№ 22 из NN
Методи програмної інженерії?
Мета - створення та поетапне перетворення моделей
ПЗ (приклади моделей)
Методи повинні включати такі компоненти:
–
–
–
–
–
Опис моделей системи та нотації
Правила та обмеження
Рекомендації
Керівництво для застосування методу
Не існує ідеальних методів, не існує абсолютних
методів
№ 23 из NN
Що таке CASE?
Визначення
Классифікація засобів CASE:
– За рівнем застосування:
• Upper CASE –засоби аналізу вимог
• Middle CASE – засоби проектування
• Low CASE - засоби разробки доповнень
– Спеціалізовані
• Засоби проектування БД
• Засоби реінжинирінгу
– Допоміжні
• Планування та управління проектом
• Конфігураційного управління
• Тестування
Інтегровані CASE
Головне правило: спочатку метод – потім CASE
№ 28 из NN
Визначення CASE
Використання компютерів для підтримки процесу
створення програм. Може включати
інструментальні програмні засоби для
проектування ПЗ, формування вимог, кодування,
тестування, документування та інших дій по
створенню ПЗ.
Еволюція CASE
–
–
–
–
–
–
–
Ассемблери, компілятори, інтерпретатори
Трасувальники, символічні відлагожувачі
Текстові редактори, системи анализу вихідних текстів
Засоби для аналізу вимог та проектування
Засоби візуального програмування
Засоби генерування вихідних кодів
Засоби підтримки повного життєвого циклу ПЗ
№ 29 из NN
Властивості «хорошої» програми?
Задовільняє функціональним вимогам
Нефункціональні вимоги:
– Супровідність (maintainability)
• Можливість подальшого розвитку.
– Надійність (dependability)
• Відмовостійкість, безпека, захищеність.
– Ефективність (efficiency)
• Пам’ять, процесорний час, канали зв’язку.
– Зручність у користуванні (usability)
• Зрозумілість користувачу
№ 30 из NN
Основні труднощі?
Головна проблема: пошук універсального методу та
процесу придатних для створення ПЗ будь якого типу
та за змінних умов.
Головні труднощі:
– Унаслідковування раніше створеного ПЗ (legacy
systems).
• Супровід – підтримка та розвиток старого ПЗ.
– Різнорідність програмних систем.
• Разподілені мережі, різнорідне обладнання, різні середовища,
різні ОС
– Скорочення часу на розробку.
• Скоротити час розробки ПЗ без зниження його якості.
Труднощі часто взаємопов’язані між собою
№ 31 из NN
Питання
Передумови
виникнення та історія
Програмна
інженерія: Основні поняття
Професійні
та етичні вимоги до фахівців в ПІ
№ 32 из NN
Професійні та етичні вимоги
Розвиток
IT індустрії все більше впливає на
суспільство
– Internet, телекомунікації, IP телефонія, комп’ютерні
ігри …
IT
специалісти працюють в правовому та
соціальному оточені, під дією міжнародних,
національних та місцевих законодавств.
№ 33 из NN
Професійні та етичні вимоги
Більш жорсткі професійні обов’язки:
– Конфіденційність
• Нерозголошення відомостей про своїх працедавців чи замовників
не залежно чи підписувалася ними відповідна угода.
– Компетентність
• не повинен завищувати свій рівень компетентності та братися за
роботу, яка не відповідає його рівню
– Захист інтелектуальної власності
• Дотримуватися законодавства при використанні чужої
інтелектуальної власності
• захищати інтеллектуальну власність працедавця та клієнта
– Зловживання комп’ютером
• від комп’ютерних ігр на робочому місці до розповсюдження вірусів і
т.п.
№ 34 из NN
Кодекс етики IEEE-CS/ACM
ACM, IEEE и British Computer Society
– IEEE-CS/ACM Software Engineering Code of Ethics and
Professional Practices – Кодекс етики і професійної
практики програмної інженерії.
Члени цих організацій приймают на себя цей кодекс
Кодекс включає вісім принципів, пов’язаних із
поведінкою та рішеннями, які приймають професійні
програмісти
Кодекс поширюється також на студентів, які вивчають
та здобувають дану професію
Кодекс має коротку та повну версії
№ 35 из NN
Кодекс етики - Преамбула
Коротка версія кодекса
– узагальнює напрямленість кодекса на високому рівні
абстракції.
– Повна версія показує як та напрямленість відбивається на
діяльності професійних програмістів.
– без вищих принципів деталі кодекса стануть
казуїстичними та нудними;
– без деталей наміри залишаться високими, але пустими;
– разом вони утворюють цілісний кодекс.
Програмні інженери повинні докладати зусиль, щоб
аналіз, специфікація, проектування, розробка, тестування
та супровід програмного забезпечення стали корисною та
поважною професією. Відповідно з їх переконаннями
щодо безпеки та благополуччя суспільства програмні
інженери будуть керуватися такими восьми принципами
№ 36 из NN
Кодекс етики: 8 принципів
1. СУСПІЛЬСТВО
– Програмні інженери
суспільних інтересів.
будуть
діяти
відповідно
до
2. КЛІЄНТ ТА ПРАЦЕДАВЕЦЬ
– Програмні інженери будут працювати задля інтересів
клієнтів та своїх працедавців, відповідно до суспільних
інтересів.
3. ПРОДУКТ
– Програмні інженери будут докладати зусиль, щоб
вироблені ними продукти та їхні модифікації
відповідали найвищим професійним стандартам.
№ 37 из NN
Кодекс этики: 8 принципов
4. СУДЖЕННЯ
– Програмні інженери будуть прагнути чесності та
незалежності в своїх професійних судженнях. уждениях
5. МЕНЕДЖМЕНТ
– Менеджери та лідери програмних інженерів будут
керуватися етичним підходом до керівництва, розробки
та супроводу ПЗ, а також будуть просувати та
розвивати цей підхід
6. ПРОФЕСІЯ
– Програмні інженери будут покращувати цілісність та
репутацію своєї професії відповідно до інтересів
суспільства
№ 38 из NN
Кодекс этики: 8 принципов
4. КОЛЕГИ
– Програмні інженери будут честними у відношеннях зі
своїми колегами та будуть всіляко їх підтримувати.
8. ОСОБИСТІСТЬ
– Програмні інженери протягом свого життя будуть
навчатися практиці своєї професії та будуть просувати
етичний підхід до практики своєї професії.
Повна версія кодексу: IEEE-CS/ACM Software
Engineering Ethics and Professional Practices.
http://www.computer.org/tab/seprof/code.htm#Public
№ 39 из NN
Питання
В чому відмінність між програмою та програмним продуктом?
За що відповідає фахівець з програмної інженерії?
Що означає best practices і яка їх роль в програмній інженерії?
У чому специфіка ПІ як інженерної діяльності?
Основні методи в ПІ та їх особливості.
Назвіть три основних групи процесів ЖЦ
Назвіть основні етапи розробки ПЗ?
Що таке ЖЦ розробки ПЗ?
Який вид мають продукти ПІ?
Основні властивості якісного програмного продукту.
Типові моделі в ПІ
Основні ресурси ПІ, які визначають ефективність розробок ПЗ.
Назвіть вісім принципів етики програмних інженерів.
Основні рівні CASE.
В чому суть еволюції CASE.
№ 40 из NN