
- •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. Введення у технологію програмування.
Причина 1. Нереалістичні тимчасові рамки.
Правильно оцінити час, необхідний для виконання проекту, - складне завдання, вирішення якого часто не під силу навіть досвідченим менеджерам. Існують спеціальні критерії, які допомагають ухвалювати правильні рішення, такі як облік часу в людино-годинах і так далі. Проте, завдання залишається складним, колосальне значення в ній має грамотний облік ризиків (далі ми поговоримо про це докладніше).
Причина 2. Недолік кількості виконавців.
Іноді менеджер вирішує заощадити, іноді переоцінює можливості своїх співробітників, іноді в ході розробки з'ясовується, що завдання складніше, ніж здавалося насправді, - проблема недоліку робочих рук, так або інакше, виникає достатньо часто.
Причина 3. Розмиті межі проекту.
Одна з найбільш серйозних причин невдачі проекту - нечітко сформульовані цілі, неодноразово змінні в ході розробки. Повірте, багатоповерхові будинки і дачні будиночки будуються на основі застосування різних технологій і матеріалів. Якщо вам доведеться управляти проектом - зробіть все, щоб чітко сформулювати вимоги до системи відповідно до побажань користувача. Ми поговоримо про це докладніше в підрозділі "Управління вимогами".
Причина 4. Недостатність засобів.
Відомо дві крайнощі при плануванні бюджету: надмірне роздування (підхід песиміста) і надмірне зменшення (підхід оптиміста). Використання першого підходу найчастіше (якщо тільки ваш замовник не зовсім дилетант) приводить до того, що ваша команда втрачає проект. "Дуже дорого, сер. Ми йдемо до Ваших конкурентів". Другий підхід часто застосовується не тільки через оптимізм менеджменту, але і в рекламних цілях, щоб за всяку ціну виграти проект. "Ми зараз напишемо менше всіх, а там видно буде". На жаль, надалі доводиться розплачуватися за демпінгові заходи. Якісно реалізувати проект за виділені гроші виявляється просто неможливим. Представляється розумним оцінювати бюджет реально з деякою перестраховкою на випадок непередбачених ситуацій (захворів ключовий співробітник, вийшло з ладу дороге устаткування...). Не виграємо цей проект - виграємо інший. Гірше, якщо виграємо, але провалимо. У нашу спроможність більше можуть і не повірити.
Причина 5. Недостатність кваліфікованих кадрів.
Брак кваліфікованих фахівців - одна з істотних проблем галузі. Технології розвиваються з такою швидкістю, що професіонали вимушені весь час оновлювати свої знання. Відносна новизна самої області IT, з одного боку, впровадження інформаційних технологій, що стає повсюдним, у всі сфери людської діяльності, з іншою, а, означає, все зростаючий попит на фахівців ведуть до істотного браку кваліфікованих кадрів. Звичайно, всі хочуть прийняти на роботу кращих. Але досвід показує, що їх не так багато, і на всіх не хапає. Уміння з потоку кандидатів вибрати тих, хто вам потрібний, дуже важлива якість фахівців з кадрів. Часто до підбору співробітників рекомендують привертати всіх членів команди. Тому, як новачок впишеться в колектив – питання зовсім не риторичне.
5.Виникнення Технології розробки ПЗ
Технологія – це сукупність методів і засобів виробничих процесів у певній галузі виробництва, а також науковий опис способів виробництва.
Вже в 60-х-70-х роках XX людям було ясно, що зважаючи на зростання складності вирішуваних за допомогою комп'ютера завдань неймовірно зростає вартість розробки програм. Причому, якщо вартість апаратури росте помірними темпами, а іноді і зовсім падає, то з вартістю розробки програм нічого поробити не вдається. Саме тоді питання про те, як оптимізувати процес розробки, вийшло на перший план.
Створення будь-якої програмної системи виконується по деякій схемі. Дана схема є послідовністю стандартних етапів (дуже приблизно ця схема може виглядати так: аналіз, проектування, розробка, тестування, модифікація). Саме на цих етапах і виникають істотні фінансові витрати. Для їх оптимізації необхідно було зрозуміти, що програмування є звичайний технологічний процес, по характеру виникаючих проблем мало чим що відрізняється від, скажімо, будівництва будинку або корабля.
Для скорочення витрат необхідно було конкретизувати схему, упорядкувати дії, що виконуються на кожному етапі, розробити методи вирішення проблем, що виникають на різних
8
Лекція 1. Введення у технологію програмування.
етапах. У довершенні до всього, схема має на увазі повернення назад (цикли), в тих випадках, коли виявляється помилка попереднього етапу.
В результаті копіткої роботи великої кількості фахівців на кожному етапі і підетапі виникли і продовжують з'являтися і удосконалюватися спеціальні технології, що дозволяють вирішувати завдання в задані терміни із заданою якістю.
•Коротка історія програмування
У50-і роки потужність комп'ютерів була невелика (комп'ютери першого покоління), а програмування для них велося, в основному, в машинному коді. Вирішувалися в головним чином науково-технічні завдання (рахунок по формулах), завдання на програмування вже містило, як правило, достатньо точну постановку завдання. Використовувалася інтуїтивна технологія програмування: майже відразу приступали до складання програми за завданням, при цьому часто завдання кілька разів змінювалося (що сильно збільшувало час і без того ітераційного процесу складання програми), мінімальна документація оформлялася вже після того, як програма починала працювати. Проте саме в цей період народилася фундаментальна для технології програмування концепція модульного програмування [1.10] (для подолання труднощів програмування в машинному коді). З'явилися перші мови програмування високого рівня, з яких тільки ФОРТРАН пробився для використання в наступні десятиліття.
У60-і роки можна було спостерігати бурхливий розвиток і широке використання мов програмування високого рівня, роль яких в технології програмування явно перебільшувалася. Надія на те, що ці мови вирішать всі проблеми при розробки великих програм, не виправдалася. В результаті підвищення потужності комп'ютерів і накопичення досвіду програмування на мовах високого рівня швидко росла складність вирішуваних на комп'ютерах завдань, внаслідок чого виявилася обмеженість мов, що проігнорували модульну організацію програм. І лише ФОРТРАН, що дбайливо зберіг можливість модульного програмування, гордо пройшов в наступні десятиліття (все його лаяли, але його користувачі відмовитися від його послуг не могли із-за грандіозного накопичення фонду програмних модулів, які з успіхом використовувалися в нових програмах). Крім того, зрозуміло, що важливе не тільки те, на якій мові ми програмуємо, але і те, як ми програмуємо [1.4]. Це було вже початком серйозних роздумів над методологією і технологією програмування. Поява в комп'ютерах 2-го покоління переривань привела до розвитку мультипрограмування і створення великих програмних систем. Останнє стало можливим з використання колективної розробки, яка поставила ряд серйозних технологічних проблем [1.11].
У70-і роки набули широкого поширення інформаційні системи і бази даних. Цьому сприяла дуже важлива подія, що відбулася в середині 70-х років: вартість зберігання одного біта інформації на комп'ютерних носіях стала менша, ніж на традиційних. Інтенсивно розвивалася технологія програмування [1.2, 1.8, 1.12-1.14]: обгрунтування і широке впровадження низхідної розробки і структурного програмування, розвиток абстрактних типів даних і модульного програмування (зокрема, виникнення ідеї розділення специфікації і реалізації модулів і використання модулів, що приховують структури даних), дослідження проблем забезпечення надійності і мобільності ПЗ, створення методики управління колективною розробкою ПЗ, поява інструментальних програмних засобів (програмних інструментів) підтримки технології програмування.
80-і роки характеризуються широким впровадженням персональних комп'ютерів у всі сфери людської діяльності і тим самим створенням обширного і різноманітного контингенту користувачів ПЗ. Це привело до бурхливого розвитку призначених для користувача інтерфейсів і створення чіткої концепції якості ПЗ [1.5, 1.15-1.18]. З'являються мови програмування (наприклад, Ада), що враховують вимоги технології програмування [1.19]. Розвиваються методи і мови специфікації ПЗ [1.20-1.21]. Виходить на передові позиції об'єктний підхід до розробки ПЗ [1.9]. Створюються різні інструментальні середовища розробки і супроводу ПЗ [1.3]. Розвивається концепція комп'ютерних мереж.
90-і роки знаменні широким обхватом всього людського суспільства міжнародною комп'ютерною мережею, персональні комп'ютери почали підключатися до неї як термінали. Це поставило ряд проблем регулювання доступу до комп'ютерно-мережевої інформації (як технологічного, так і юридичного і етичного характеру). Гостро встала проблема захисту комп'ютерної інформації і передаваних по мережі повідомлень. Стали бурхливо розвиватися комп'ютерна технологія (CASE-технологія) розробки ПЗ і пов'язані з нею формальні методи
9
Лекція 1. Введення у технологію програмування.
специфікації програм. Почався вирішальний етап повної інформатизації і комп'ютеризації суспільства.
2000-ні роки характеризуються подальшим вдосконаленням мережних систем і програмних продуктув, розвитком GRID технологій...
2010-ті роки спостерігається бурхливий розвиток гаджетів та хмарних технологій для сервісів
іобчислень...
•Терміни “Технологія”, “Методологія” і “Програмна інженерія”
Відповідно до звичайного значення, під “технологією програмування” розумітимемо
сукупність виробничих процесів (методів, прийомів і засобів), що приводить до створення необхідного ПЗ, а також опис цієї сукупності процесів.
Ін. словами, технологію програмування ми розумітимемо тут в широкому сенсі як технологію розробки програмних засобів, включаючи в неї всі процеси, починаючи з моменту зародження ідеї цього засобу, і, зокрема, пов'язані із створенням необхідної програмної документації. Кожен процес цієї сукупності базується на використанні яких-небудь методів і засобів. У літературі є й інші, відмінні визначення технології програмування.
У будь-якій серйозній компанії, що займається розробкою ПЗ, на кожному етапі процесу розробки застосовується велика кількість різних технологій. Над створенням програмного продукту працюють представники таких спеціальностей як: аналітики, управлінці (менеджери), тестери, кодувальники, (програмісти), технічні письменники, системні адміністратори, фахівці з повторного використання, дизайнери, фахівці з ергономіки і ін.
В літературі використовується і близьке до технології програмування поняття “програмної
інженерії” (Software Engineering) - систематичний підхід до розробки, експлуатації супроводу і вилученню із звернення програмних засобів. Головна відмінність між цими дисциплінами
(технологією програмування і програмною інженерією) полягає в способі розгляду і систематизації матеріалу:
1.• У технології програмування акцент робиться на вивченні процесів розробки ПЗ (технологічних процесів) і порядку їх проходження - методи і інструментальні засоби розробки ПЗ використовуються в цих процесах (їх застосування і утворюють технологічні процеси).
2.• У програмній інженерії вивчають, перш за все, методи і інструментальні засоби розробки ПЗ з погляду досягнення певної мети - вони можуть використовуватися в різних технологічних процесах (і в різних технологіях програмування); як ці методи і засоби утворюють технологічні процеси - тут питання другорядне.
a.Не слід також плутати технологію програмування з “методологією програмування”. Хоча в обох випадках вивчаються методи, але:
3.• В технології програмування методи розглядаються "зверху" - з погляду організації технологічних процесів,
4.• В методології програмування методи розглядаються "знизу" - з погляду основ їх побудови
методологія програмування визначається як сукупність механізмів, вживаних в процесі розробки програмного забезпечення і об'єднаних одним загальним філософським підходом.
a.Зважаючи на те, що надійність є невід'ємним атрибутом ПЗ, ми обговорюватимемо технологію програмування як технологію розробки надійних ПЗ. Це означає,
1)по-перше, що ми обговорюватимемо всі процеси розробки ПЗ, починаючи з моменту виникнення задуму ПЗ,
2)по-друге, нас цікавитимуть не тільки питання побудови програмних конструкцій, але і питання опису функцій і ухвалюваних рішень з погляду їх людського (неформального) сприйняття,
3) і, нарешті, як продукт технології ми прийматимемо надійне (а не правильне) ПЗ. Все це істотно впливатиме на вибір методів і інструментальних засобів в процесах розробки ПЗ.
10