logo
ТППС / Магистры / ТППС-лаб

Лабораторна робота № 1

Тема: Процес створення програмного забезпечення

Ціль- представити основні ідеїякі лежать в основі процесу створення програмної забезпечення.

Короткі теоретичні відомості:

Процес створення програмного забезпечення ‒ це безліч взаємозалежних процесів і результатів їх виконання, які ведуть до створення програмного продукту. Процес створення ПЗ може починатися з розробки програмної системи “з нуля”, але частіше нове ПЗ розробляється на основі існуючих програмних систем шляхом їхньої модифікації.

Процес створення ПЗ, як і будь-яка інша інтелектуальна діяльність, заснований на людських судженнях і умовиводах, тобто є творчим. Внаслідок цього всі спроби автоматизувати процес створення ПЗ мають лише обмежений успіх. САSЕ-засоби можуть допомогти в реалізації деяких етапів процесу розробки ПЗ, але принаймні в найближчі кілька років не варто очікувати від них істотного просування в автоматизації тих етапів створення ПЗ, де суттєвий фактор творчого підходу до розробки ПЗ.

Одна із причин обмеженого застосування автоматизованих засобів до процесу створення ПЗ ‒ величезне різноманіття видів діяльності, пов'язаних з розробкою програмних продуктів. Крім того, організації - розробники використовують різні підходи до розробки ПЗ. Також різняться характеристики і можливості створюваних систем, що вимагає особливої уваги до певних сторін процесу розробки. Тому навіть в одній організації при створенні різних програмних систем можуть використовуватися різні підходи і технології.

Незважаючи на те що спостерігається величезне різноманіття підходів, методів і технологій створення ПЗ, існують фундаментальні базові процеси, без реалізації яких не може обійтися жодна технологія розробки програмних продуктів. Перелічимо ці процеси.

  1. Розробка специфікації ПЗ. Це фундаменти будь-якої програмної системи. Специфікація визначає всі функції і дії, які буде виконувати розроблювальна система.

  2. Проектування і реалізація (виробництво) ПЗ. Це процес безпосереднього створення ПЗ на основі специфікації.

  3. Атестація ПЗ. Розроблене програмне забезпечення повинне бути атестоване на відповідність вимогам замовника.

  4. Еволюція ПЗ. Будь-які програмні системи повинні модифікуватися відповідно до змін вимог замовника.

Хоча не існує “ідеального” процесу створення ПЗ, у багатьох організаціях-розробниках намагаються його вдосконалити, оскільки він може опиратися на застарілі технології і не включати кращих методів сучасної інженерії програмного забезпечення. Крім того, багато організацій постійно використовують ті самі технології (колись раніше добре себе зарекомендували) і їм також необхідні методи сучасної інженерії ПЗ.

Удосконалювати процес створення програмних систем можна різними шляхами. Наприклад, шляхом стандартизації, яка зменшить різнорідність використовуваних у даній організації технологій. Це, у свою чергу, приведе до вдосконалювання внутрішніх комунікацій у організації, зменшенню часу навчання персоналу і зробить економічно вигідним процес автоматизації розробок. Стандартизація зазвичай є першим кроком до впровадження нових методів і технологій інженерії ПЗ.

  1. Моделі процесу створення ПЗ

Модель процесу створення програмного забезпечення ‒ це загальне абстрактне представлення даного процесу. Кожна така модель представляє процес створення ПЗ в якомусь своєму “розрізу”, використовуючи тільки певну частину всієї інформації про процес. Тут представлені узагальнені моделі, засновані на архітектурному підході. У цьому випадку можна побачити всю структуру процесу створення ПЗ, абстрагуючись від приватних деталей окремих складових його етапів.

Ці узагальнені моделі не містять точного опису всіх стадій процесу створення ПЗ. Напроти, вони є корисними абстракціями, що допомагають “прикласти” різні підходи і технології до процесу розробки. Крім того, мабуть, що процес створення великих систем не є єдиним, а складається з безлічі різних процесів, що ведуть до створення окремих частин великої системи.

Розглянемо наступні моделі створення програмного забезпечення.

  1. Каскадна модель. Основні базові види діяльності, виконувані в процесі створення ПЗ (такі, як розробка специфікації, проектування і виробництво, атестація і модернізація ПЗ), представляються як окремі етапи цього процесу.

  2. Еволюційна модель розробки ПЗ. Тут послідовно перемежовуються етапи формування вимог, розробки ПЗ і його атестації. Первісна програмна система швидко розробляється на основі деяких абстрактних загальних вимог. Потім вони уточнюються і деталізуються відповідно до вимог замовника. Далі система допрацьовується і атестується відповідно до нових уточнених вимог.

  3. Модель формальної розробки систем. Заснована на розробці формальної математичної специфікації програмної системи і перетворенні цієї специфікації за допомогою спеціальних математичних методів у програми, що виконуються. Перевірка відповідностей специфікації і системних компонентів також виконується математичними методами.

  4. Модель розробки ПЗ на основі раніше створених компонентів. Передбачає, що окремі складові частини програмної системи вже існують, тобто створені раніше. У цьому випадку технологічний процес створення ПЗ основну увагу приділяє інтеграції окремих компонентів у загальне ціле, а не їхньому створенню.

Каскадна і еволюційна моделі розробки широко використовуються на практиці. Модель формальної розробки систем успішно застосовувалася в багатьох проектах, але кількість організацій-розробників, що постійно використовують цей метод, невелика. Використання готових системних компонентів практикується повсюдно, але більшість організацій не дотримуються в точності моделі розробки ПЗ на основі раніше створених компонентів. Разом з тим цей метод повинен одержати широке поширення в XXI сторіччі, оскільки складання систем з готових або раніше використаних компонентів значно прискорює розробку ПЗ.

Каскадна модель

Це перша модель процесу створення ПЗ, породжена моделями інших інженерних процесів. Вона показана на рис. 1.1. Цю модель також іноді називають моделлю життєвого циклу програмного забезпечення (Життєвий цикл програмного забезпечення - це сукупність процесів, що протікають у період від моменту ухвалення рішення про створення ПЗ до його повного виводу з експлуатації. Таким чином, “життєвий цикл ПЗ є більш, широким поняттям, чим модель процесу створення ПЗ. Разом з тим каскадну модель можна розглядати як одну з моделей життєвого циклу ПЗ).

Основні принципові етапи (стадії) цієї моделі відображають усі базові види діяльності, необхідні для створення ПЗ.

  1. Аналіз і формування вимог. Шляхом консультацій із замовником ПЗ визначаються функціональні можливості, обмеження і мети створюваної програмної системи.

  2. Проектування системи і програмного забезпечення. Процес проектування системи розбиває системні вимоги на вимоги, що пред'являються до апаратних засобів, і вимоги до програмного забезпечення системи. Розробляється загальна архітектура системи. Проектування ПЗ передбачає визначення і опис основних програмних компонентів і їх взаємозв'язків.

  3. Кодування і тестування програмних модулів. На цій стадії архітектура ПЗ реалізується у вигляді безлічі програм або програмних модулів. Тестування кожного модуля включає перевірку його відповідності вимогам до даного модуля.

  4. Складання і тестування системи. Окремі програми і програмні модулі інтегруються і тестуються у вигляді цілісної системи. Перевіряється, чи відповідає система своєї специфікації.

  5. Експлуатація і супровід системи. Зазвичай (хоча і не завжди) це сама тривала фаза життєвого циклу ПЗ. Система інсталюється, і починається період її експлуатації. Супровід системи включає виправлення помилок, які не були виявлені на більш ранніх етапах життєвого циклу, вдосконалювання системних компонентів і “підгонку” функціональних можливостей системи до нових вимог.

Рис. 1.1. Життєвий цикл програмного забезпечення

У принципі результат кожного етапу повинен затверджуватися документально (це як би сигнал про закінчення етапу). Тоді наступний етап не може початися до завершення попереднього. Однак на практиці етапи можуть перекриватися з постійним перетіканням інформації від одного етапу до іншого. Наприклад, на етапі проектування може виникнути необхідність уточнити системні вимоги або на етапі кодування можуть виявитися проблеми, які можна розв'язати лише на етапі проектування, і т.д.

Процес створення ПЗ не можна описати простою лінійною моделлю, тому що він неминуче містить послідовність повторюваних процесів.

Оскільки на кожному етапі проводяться певні роботи і оформляється супутня документація, повторення етапів приводить до повторних робіт і значним витратам. Тому після невеликого числа повторень зазвичай “заморожується” частина етапів створення ПЗ, наприклад етап визначення вимог, але триває виконання наступних етапів. Виникаючі проблеми, рішення яких вимагає повернення до “заморожених” етапів, ігноруються або робляться спроби розв'язати їх програмно. “Заморожування” етапу визначення вимог може привести до того, що розроблена система не буде задовольняти всім вимогам замовника. Це також може привести до появи погано структурованої системи, якщо упущення етапу проектування виправляються тільки за допомогою програмістських хитрощів.

Останній етап життєвого циклу ПЗ (експлуатація і супровід) ‒ це “повноцінне” використання програмної системи. На цьому етапі можуть виявитися помилки, допущені, наприклад, на першому етапі формування вимог. Можуть також виявитися помилки проектування і кодування, що може вимагати визначення нових функціональних можливостей системи. З іншого боку, система постійно повинна залишатися працездатною. Внесення необхідних змін у програмну систему може вимагати повторення деяких або навіть усіх етапів процесу створення ПЗ.

До недоліків каскадної моделі можна віднести негнучку розбивку процесу створення ПЗ на окремі фіксовані етапи. У цій моделі визначаючи систему рішення приймаються на ранніх етапах і потім їх важко скасувати або змінити , особливо це відноситься до формування системних вимог. Тому каскадна модель застосовується тоді, коли вимоги формалізовані досить чітко і коректно. Разом з тим каскадна модель добре відбиває практику створення ПЗ. Технології створення ПЗ, засновані на даній моделі, використовуються повсюдно, зокрема для розробки систем, що входять до складу великих інженерних проектів.

Еволюційна модель розробки

Ця модель заснована на наступній ідеї: розробляється первісна версія програмного продукту, яка передається на випробування користувачам, потім вона допрацьовується з урахуванням думки користувачів, виходить проміжна версія продукту, яка також проходить “випробування користувачем”, знову допрацьовується і так кілька раз, поки не буде отриманий необхідний програмний продукт (рис. 1.2). Відмітною рисою даної моделі є те, що процеси специфікування розробки і атестації ПЗ виконуються паралельно при постійному обміну інформацією між ними.

Розрізняють два підходи до реалізації еволюційного методу розробки.

  1. Підхід пробних розробок. Тут велику роль відіграє постійна робота із замовником (або користувачами) для того, щоб визначити повну систему вимог до ПЗ, необхідну для розробки кінцевої версії продукту. У рамках цього підходу спочатку розробляються ті частини системи, які очевидні або добре специфіковані. Система еволюціонує (допрацьовується) шляхом додавання нових засобів у міру їх пропозиції замовником.

  2. Прототипування. Тут метою процесу еволюційної розробки ПЗ є поетапне уточнення вимог замовника і, отже, одержання закінченої специфікації, що визначає розроблювальну систему. Прототип (Під прототипом зазвичай розуміється діючий програмний модуль, що реалізує окремі функції створюваного ПЗ) зазвичай будується для експериментування з тою частиною вимог замовника, які сформовані нечітко або із внутрішніми протиріччями.

Рис. 1.2. Еволюційна модель розробки

Еволюційний підхід часто більш ефективний, чим підхід, побудований на основі каскадної моделі, особливо якщо вимоги замовника можуть мінятися в процесі розробки системи. Перевагою процесу створення ПЗ, побудованого на основі еволюційного підходу, є те, що тут специфікація може розроблятися поступово, у міру того як замовник (або користувачі) усвідомлює і сформулює ті завдання, які повинні вирішувати програмне забезпечення. Разом з тим даний підхід має і деякі недоліки.

  1. Багато етапів процесу створення ПЗ не документовані. Менеджерам проекту створення ПЗ необхідно регулярно документально відслідковувати виконання робіт. Але якщо система розробляється швидко, то економічно не вигідно документувати кожну версію системи.

  2. Система часто виходить погано структурованою. Постійні зміни у вимогах приводять до помилок і недоглядам у структурі ПЗ. Згодом внесення змін у систему стає усе більш складним і витратним.

  3. Часто потрібні спеціальні засоби і технології розробки ПЗ. Це викликано необхідністю швидкої розробки версій програмного продукту. Але, з іншого боку, це може привести до несумісності деяких застосовуваних засобів і технологій, що, у свою чергу, вимагає наявності в команді розробників фахівців високого рівня.

Еволюційний підхід найбільш прийнятний для розробки невеликих програмних систем (до 100 000 рядків коду) і систем середнього розміру (до 500 000 рядків коду) з відносно коротким строком життя. На більших довгоіснуючих системах занадто помітно проявляються недоліки цього підходу. Для таких систем рекомендується змішаний підхід до створення ПЗ, який увібрав би в себе кращі риси каскадної і еволюційної моделей розробки.

При такому змішаному підході для прояснення “темних місць” у системній специфікації можна використовувати прототипування. Частина системних компонентів, для яких повністю визначені вимоги, може створюватися на основі каскадної моделі. Інші системні компоненти, які важко піддаються специфікуванню, наприклад користувацький інтерфейс, можуть розроблятися з використанням прототипування.

Формальна розробка систем

Цей підхід до створення ПЗ має багато рис, схожих з каскадною моделлю, але побудований на основі формальних математичних перетворень системної специфікації в програму, що виконується. Процес створення програмного забезпечення відповідно до цього підходу показаний на рис. 1.3. Тут для спрощення не зазначені зворотні зв'язки між етапами процесу.

Рис. 1.3. Модель формальної розробки ПЗ

Між даним підходом і каскадною моделлю існують наступні кардинальні відмінності.

  1. Тут специфікація системних вимог має вигляд деталізованої формальної специфікації, записаної за допомогою спеціальної математичної нотації.

  2. Процеси проектування, написання програмного коду і тестування системних модулів заміняються процесом, у якому формальна специфікація шляхом послідовних формальних перетворень трансформується в програму, що виконується. Цей процес показаний на рис. 1.4.

Рис. 1.4. Процес формальних перетворень

У процесі перетворення формальне математичне представлення системи послідовно і математично коректно трансформується в програмний код, поступово усе більш деталізований. Ці перетворення виконуються доти, поки всі позиції формальної специфікації не будуть трансформовані в еквівалентну програму. Перетворення виконуються математично коректно ‒ тут не існує проблеми перевірки відповідності специфікації і програми.

Перевага методу формальних перетворень, яка полягає в точній відповідності кінцевої програми специфікації, забезпечується тим, що дистанція між послідовними перетвореннями значно менше дистанції між специфікацією і програмою. Доказ коректності програмного коду для більших масштабованих систем зазвичай дуже довгостроковий, а часто просто не здійсненний. Щодо цього метод формальних перетворень, що полягає з послідовності невеликих формальних кроків, досить привабливий. Однак вибір для застосування відповідних формальних перетворень складний і неочевидний.

Найбільш відомим прикладом методу формальних перетворень є метод “чистої кімнати” (Cleanroom), розроблений компанією IBM. Цей метод передбачає покрокову розробку ПЗ, коли на кожному кроку застосовується формальні перетворення. Це дозволяє відмовитися від тестування окремих програмних модулів, а тестування всієї системи відбувається після її складання.

Як метод “чистої кімнати”, так і інші методи формальних перетворень ґрунтуються на В-методі. Усі ці методи мають декілька “уроджених” недоліків, а вартість розробки ПЗ за допомогою цих методів не набагато відрізняється від вартості розробок іншими методами. Методи формальних перетворень зазвичай застосовують для розробки систем, які повинні задовольняти строгим вимогам надійності, безвідмовності і безпеки, тому що вони гарантують відповідність створених систем їх специфікаціям.

Крім розробки зазначеного типу систем, методи формальних перетворень не знайшли широкого застосування, оскільки вимагають спеціальних знань і досвіду використання. Крім того, для більшості систем ці методи не дають істотного виграшу у вартості або якості в порівнянні з іншими методами розробки ПЗ. Основна причина полягає в тому, що функціонування більшості систем із труднощами піддається опису методом формальних специфікацій ‒ при створенні більшості програмних систем більша частина зусиль розробників іде саме на створення специфікацій.

Розробка ПЗ на основі раніше створених компонентів

У більшості програмних проектів застосовується повторне використання деяких програмних модулів. Це зазвичай трапляється там, де розробники проекту знають про раніше створені програмні продукти, у складі яких є компоненти, що приблизно задовольняють вимогам розроблювальних компонентів. Ці компоненти модифікуються відповідно до нових вимог і потім включається до складу нової системи. В еволюційній моделі розробки для прискорення процесу створення ПЗ повторне використання раніше створених компонентів застосовується досить часто.

Неформальне рішення про повторне використання раніше створених програмних компонентів зазвичай приймається незалежно від загального процесу створення ПЗ. Разом з тим протягом декількох останніх років усе більш широко застосовується підхід до створення ПЗ, заснований саме на повторному використанню раніше створених програмних модулів.

Цей підхід заснований на наявності великої бази існуючих програмних компонентів, які можна інтегрувати в створювану нову систему. Часто такими компонентами є програмні продукти, що вільно продаються на ринку, які можна використовувати для виконання певних спеціальних функцій, таких як форматування тексту, числові обчислення і т.п. Загальна модель процесу розробки ПЗ з повторним використанням раніше створених компонентів показана на рис. 1.5.

У цьому підході початковий етап специфікування вимог і етап атестації такі ж, як і в інших моделях процесу створення ПЗ. А етапи, розташовані між ними, мають наступний сенс.

  1. Аналіз компонентів. Маючи специфікацію вимог, на цьому етапі здійснюється пошук компонентів, які могли б задовольнити сформульованим вимогам. Зазвичай неможливо точно зіставити функції, реалізовані готовими компонентами, і функції, визначені специфікацією вимог.

  2. Модифікація вимог. На цій стадії аналізуються вимоги з урахуванням інформації про компоненти, отримані на попередньому етапі. Вимоги модифікуються таким чином, щоб максимально використовувати можливості відібраних компонентів. Якщо зміна вимог неможлива, повторно виконується аналіз компонентів для того, щоб знайти який-небудь альтернативне рішення.

  3. Проектування системи. На даному етапі проектується структура системи або модифікується існуюча структура повторно використовуваної системи. Проектування повинне враховувати відібрані програмні компоненти і будувати структуру відповідно до їхніх функціональних можливостей. Якщо деякі готові програмні компоненти недоступні, проектується нове ПЗ.

  4. Розробка і складання системи. Це етап безпосереднього створення системи. У рамках розглянутого підходу складання системи є скоріше частиною розробки системи, чим окремим етапом.

Рис. 1.5. Розробка ПЗ з повторним використанням раніше створених компонентів

Основні переваги описуваної моделі процесу розробки ПЗ з повторним використанням раніше створених компонентів полягають у тому, що скорочується кількість безпосередньо розроблювальних компонентів і зменшується загальна вартість створюваної системи. Разом з тим при використанні цього підходу неминучі компроміси при визначенні вимог; це може привести до того, що закінчена система не буде задовольняти всім вимогам замовника. Крім того, при проведенні модернізації системи (тобто при створенні її нової версії) відсутня можливість впливати на появу нових версій компонентів, використовуваних у системі, що значно ускладнює сам процес модернізації.