Лекція на тему Програмна інженерiя, НУДПСУ
« Назад Програмна iнженерiя - система методiв та засобiв розробки, експлуатацiї та супроводження програмного забезпечення, придатна до масового вiдтворення. Інженерна діяльність - це застосування наукових результатiв, яке дозволяє отримувати користь вiд властивостей матерiалiв та джерел енергiї; дiяльнiсть по створенню машин задля надання корисних послуг. На вiдмiну вiд науки, метою якої є отримання знань, для iнженерiї знання - лише засiб досягнення корисного результату. Термін "програмна інженерія" (Software Engineering) вперше вжито в 1968 році, коли створення програмного забезпечення досягло такого ступеня розвитку, коли можна застосовувати інженерні технології. З того часу програмне забезпечення проникло в усі сфери людського буття, а його розробка стала справді масовою діяльністю. БАЗОВI ПОНЯТТЯ ПРОГРАМНОЇ IНЖЕНЕРIЇ. Кожна програмна система протягом свого iснування проходить певну послiдовнiсть фаз: вiд задуму до його втiлення у програмний продукт, експлуатацiї та вилучення. Така послiдовнiсть фаз має назву життєвого циклу розробки. На кожнiй фазi вiдбувається певна сукупнiсть процесiв. Усi процеси життєвого циклу розробки подiляють на головнi, допомiжнi та органiзацiйнi. Головні процеси: - придбання, що iнiцiює життєвий цикл системи та визначає органiзацiю-покупця; - розробка, що означає дiї органiзацiї-розробника програмного продукту та складається з iнженерiї вимог до системи, проектування, кодування та тестування; - постачання, що визначає дiї пiд час передачi розробленого продукту покупцю; - експлуатацiя, що означає дiї по обслуговуванню системи пiд час її використання - консультацiї користувачiв, вивчення їхнiх побажань тощо; - супроводження, що означає дiї по керуванню модифiкацiями, пiдтримцi актуального стану та функцiональної придатностi, iнсталяцiю та вилучення версiй програмних систем у користувача. У процесах розробки програмного забезпечення видiляють характерні роботи: Визначення вимог. Збiр та аналiз вимог замовника виконавцем та представлення їх у нотацiї, яка є зрозумiлою як замовнику, так i виконавцю. Проектування. Перетворення вимог до розробки у послiдовнiсть проектних рiшень щодо способiв реалiзацiї вимог: формування загальної архiтектури програмної системи та принципiв її прив'язки до конкретного середовища функцiонування; визначення детального складу модулiв кожної з архiтектурних компонент. Реалiзацiя. Перетворення проектних рiшень у програмну систему, що реалiзує означенi рiшення. Тестування. Перевірка кожного з модулiв та способiв їхньої iнтеграцiї; тестування програмного продукту в цiлому (так звана верифiкацiя); тестування вiдповiдностi функцiй працюючої програмної системи вимогам, що були до неї поставленi замовником (так звана валiдацiя). Експлуатацiя та супроводження готової програмної системи. IНЖЕНЕРIЯ ВИМОГКожна програмна система - це певний перетворювач, поведiнку i властивостi якого будують в процесi його створення системи так, щоб вирiшити певну проблему. Вимоги до програмної системи - властивостi, які має система, що адекватно виконує свої функцiї. Приклади таких функцiй: автоматизацiя обов'язкiв персоналу, забезпечення керiвництва потрiбною для прийняття рiшень iнформацiєю, керування фiзичними пристроями виробничого процесу тощо. В сучасних ІТ фаза життєвого циклу, на якiй фiксуються вимоги на розробку ПЗ, є визначальною для його якостi, термiнiв та вартостi робiт. Цiна помилок та нечiтких неоднозначних формулювань на цiй фазi дуже висока, бо час та засоби витрачаються на непотрiбну замовникові програму. Внесення необхiдних коректив при цьому може вимагати серйозних переробок, а iнколи й повного перепроектування i, вiдповiдно, перепрограмування. Статистика твердить, що вiдсоток помилок в постановцi задач перевищує вiдсоток помилок кодування, i це є наслiдком суб'єктивного характеру процесу формулювання вимог та майже повної вiдсутностi засобiв його формалiзацiї. Так, в Америцi витрачається щорiчно до 82 млрд доларiв на проекти, які пiсля реалiзацiї визнають не вiдповiдними вимогам замовника. Дiючими особами процесу формулювання вимог є такi: - носiї iнтересiв замовникiв (досить часто замовника репрезентують кiлька професiйних груп, які можуть мати не тiльки вiдмiнні, але навiть суперчні потреби); - оператори, що обслуговують функцiонування системи; - розробники системи. Процес формулювання вимог складається з декiлькох пiдпроцесiв. Збирання вимог. Джерелами вiдомостей про вимоги можуть бути такi: - мета та завдання системи, як їх формулює замовник. - дiюча система або колектив, що виконує її функцiї. - загальнi знання щодо проблемної галузi замовника. - вiдомчi стандарти замовника, що стосуються органiзацiйних вимог, середовища функцiонування майбутньої системи, її виконавських та ресурсних можливостей. Методи збирання вимог: - iнтерв'ю з носiями iнтересiв замовника та операторами; - спостереження за роботою дiючої системи; - фiксацiя сценарiїв усiх можливих випадкiв використання системи, виконуваних при цьому системою функцiй, ролей осiб, що запускають цi сценарiї або взаємодiють з системою пiд час її функцiонування. Аналiз вимог. Множина зiбраних вимог подiляється на дві категорiї: - функцiональні – вiдображають можливостi, які повинна забезпечити система; -нефункцiональні – вiдображають обмеження, пов'язанi з функцiонуванням системи. Є кiлька класiв нефункцiональних вимог, суттєвих для бiльшостi програмних систем, якi виражають обмеження, актуальнi для багатьох проблемних галузей: - вимоги конфiденцiальностi; - вiдмовостiйкiсть; - кiлькiсть клiєнтiв, що одночасно мають доступ до системи; - вимоги безпеки; - час очікування вiдповiдi на звернення до системи; - виконавськi якостi системи (обмеження щодо ресурсiв пам'ятi, швидкiсть реакцiї на звернення до системи тощо). Наступним кроком аналiзу вимог є встановлення їхньої пріоритетностi, бо вимоги, висунутi рiзними носiями iнтересiв у системi, можуть конфлiктувати мiж собою. Крiм того, кожна з вимог потребує для свого втiлення певних ресурсiв, надання яких може залежати також вiд визначеного для неї пріоритету. Ще однiєю з важливих задач аналiзу є передбачення здатності адаптацiї до можливих змiн у вимогах та забезпечення можливостей внесення змiн без суттєвого перегляду всiєї системи. В процесi аналiзу вимог мають бути перевiренi їх правдивiсть та вiдповiднiсть iнтересам замовника. Проектування програмних системПроектування програмних систем - це етап життєвого циклу розробки програмних систем, наступний після інженерії вимог. Завданням цього етапу є перетворення побажань замовників системи у проектні рішення, що забезпечать здійснення згаданих побажань у формі відповідної системи програмування. При цьому можна виділити процеси, котрі можна вважати відносно незалежними одне від одного і виконувати як послідовно, так і паралельно, окремими командами виконавців: • концептуальне проектування полягає в уточненні розуміння й узгодження деталей вимог; • архітектурне проектування полягає у визначенні головних структурних особливостей системи, яку будують; • технічне проектування полягає у відображенні вимог середовища функціонування і розробки системи та у визначенні всіх конструкцій як композицій компонент; • детальне проектування полягає у визначенні подробиць функціонування та зв'язків для всіх компонент системи. В основі проектування будь-якого продукту лежить парадигма подолання складності загального завдання шляхом декомпозиції цільового продукту на окремі його складові або компоненти. Це твердження діє і для програмних систем як продуктів програмної інженерії. Технічне проектуванняТехнічне проектування полягає у відображенні вимог середовища функціонування і розробки системи та визначенні всіх конструкцій як композицій компонентів. На цьому етапі відбувається прив'язка проекту до технічних особливостей платформи реалізації, СУБД, організації комунікацій, наявності фактора реального часу, виконавських вимог, таких, як швидкість реагування системи на зовнішні стимули тощо. Об'єкти моделі аналізу вимог погоджуються з урахуванням перелічених вище особливостей, формалізуються всі стимули, які посилає чи отримує об’єкт, і всі операції, що є відповіддю на зазначені стимули. Надійність функціонування системи можна значно підвищити, якщо передбачити виняткові ситуації під час роботи системи. Тестування системи дозволяє переконатися, що реалізація системи відповідає висунутим до неї вимогам. Але вимоги здебільшого обумовлюють, що має робити система, тоді як важливо також обумовити, чого вона не повинна робити. Одним із шляхів для цього є явна фіксація ситуацій, які унеможливлять правильну роботу системи (так звані виняткові ситуації). Причинами виникнення виняткових ситуацій можуть бути: помилки користувача при зверненні до системи чи під час підготовки даних; непередбачені збіги обставин функціонування системи (невиявлені під час тестування помилки проектування); випадкові збої обладнання тощо. При цьому система може реагувати по-різному: відмовитися виконувати певну послугу, виконати її помилково або зруйнувати якісь дані. Вочевидь, для другої і третьої з перелічених реакцій неможливо передбачити наслідки, тоді як для першої можна докласти певних зусиль, щоб відновити працездатність системи, наприклад виконати один з наведених нижче варіантів робіт: 1) відновити попередній стан системи (що передував винятковій ситуації) і спробувати застосувати іншу стратегію виконання послуги; 2) відновити попередній стан системи, внести необхідні корективи і повторити виконання послуги із старою стратегією; 3) відновити попередній стан системи, сформувати повідомлення про помилку й зупинити систему в очікуванні реакції користувача. Забезпечення надійності системи вимагає для кожної її послуги передбачення виняткових ситуацій, аналізу їх причин та наслідків, побудови механізму відтворення попереднього стану та виправлення ситуації. Для забезпечення таких дій застосовуються типові засоби: • подвійне обчислення й порівняння результатів або їх контрольних сум, у тому числі виконаних на різних процесорах; • таймери, що визначають часові інтервали фіксації поточного стану; • додаткові перевірки коректності даних, які передають зовнішні системи або окремі компоненти однієї системи. Усі зазначені вище дії втілюються в додаткових компонентах проекту і призводять до додаткових витрат на певні надмірні перестороги, які є ціною за надійність функціонування системи. Доцільність таких витрат визначається виключно специфікою систем. Якщо наслідки помилок незворотні, наприклад, як у систем підвищеного ризику (космічні та ядерні системи, моніторинг хворих, керування реальними об*єктами), доводиться йти на дублювання процесів і додаткові перевірки. Іноді навіть використовують паралельну роботу кількох команд або взаємну перевірку комп'ютерів, що працюють паралельно, коли один з них здійснює моніторинг іншого. Так, кажуть, що для керування системою ШАТЛ сім комп*ютерів дублюють один одного. Переносність системи. Під таким терміном розуміють можливість змінювати певні використовувані сервісні системи (операційні системи, системи комунікацій у мережах, СУБД тощо) шляхом локального настроювання відповідних модулів. Зазвичай йдеться про переносність щодо конкретного типу сервісних систем, наприклад, переносність щодо СУБД, переносність щодо системи файлів тощо. Для реалізації таких властивостей визначаються об'єкти, які взаємодіють з типом сервісних систем, щодо якого декларується переносність. Кожний з визначених у такий спосіб об'єктів замінюється на такий, що взаємодіє не безпосередньо із сервісною системою, а з якимсь абстрактним об'єктом-посередником, котрий здійснює трансформацію абстрактного інтерфейсу в інтерфейс конкретної сервісної системи. Об'єкт-посередник при цьому має властивість настроюватися на конкретну сервісну систему. Трансформація проекту в програмуПроцес трансформації проекту в програму має кілька поширених назв: конструюванню. кодування, програмування, реалізація. Наявність синонімів є наслідком не лише неузгодженості в термінології, а, мабуть, і тісї обставини, що колений з термінів значною мірою відбиває певний аспект того процесу, про який ми ведемо мову в цій главі. Справді, потрібно виконати конструювання, визначивши всі складові системи як програмні модулі; потрібно запрограмувати ці модулі обраною мовою програмування, для чого слід не лшпе перевести нотації проекту в коди обраного засобу програмування, а й пронести тестування та верифікацію отриманих кодів. А в цілому потрібно перетворити проект на пр-іцюючу програмну систему, документовану таким чином, щоб було зрозуміло, як її використовувати, інакше кажучи, реалізувати програмну систему. Для певності далі будемо вживати термін реалізація. Реалізація є першою із стадій життєвого циклу, внаслідок якої артефакти, створені людиною на попередніх стадіях, трансформуються п артефакти, які буде передано компостеру, і тому мають бути для нього однозначно зрозумілими. Така трансформація потребує активного діалогу між особою, котра розуміє проект, і комп'ютером, який мас трактувати відповідну до проекту реалізаіцю. Тестування програм та системТестування - це спосіб семантичного налагодження (перевірки) програми, який полягає в опрацюванні програмою послідовності різноманітних контрольних наборів тестів з відомими результатами. Тестування грунтується на виконанні програми й одержанні результатів опрацювань тестів. Тести підбираються так, щоб вони охопили якнайбільше різноманітних типів ситуацій, які виконуються при роботі елементів програми, тобто щоб програма використовувала всі допустимі шляхи свого графу передач керування. Тестування охоплює такі основні види робіт: - розробку програмного продукту на етапах життєвого циклу та верифікацію результатів на кожному етапі; - упорядкування плану тестування і підготовки тестів для пере-ірки окремих елементів розробленої програми та програми в цілому; - керування виконанням тестів та аналіз результатів тестування; - повторне тестування. Тестування становить від 30 % до 50 % трудомісткості робіт зі створення коду. Історично першим різновидом тестування було налагодження – перевірка програмного об'єкта на наявність у ньому помилок і усунення їх. Валідація – це перевірка відповідності створеного програмного забезпечення потребам та вимогам замовника. Валідація дозволяє підтвердити, що програмне забезпечення є коректною реалізацією початкових умов у системі й провадиться по завершенню кожного етапу розробки цього забезпечення. Класифікація відмов та помилок робиться за міжнародним стандартом АМ5І/ІЕЕЕ-729-83. Помилка - це стан програми, при якому видаються неправильні результати, причиною котрих є недоліки в операторах програми або в технологічному процесі її розробки, що призводить до неправильної інтерпретації вхідної інформації, а отже, і до неправильного розв’язання. Дефект у програмі є наслідком помилок розробника на кожному з етапів розробки і може утримуватися у вхідних або проектних специфікаціях, текстах кодів програм, в експлуатаційній документації тощо. Відмова - це відхилення програми від функціонування або неможливість виконувати функції, визначені вимогами й обмеженнями, і розглядається як подія, що сприяє переходу програми в непрацездатний стан при помилках або відмовах у програмі або в середовищі функціонування. Відмова може бути наслідком таких причин: - помилкова специфікація або пропущена вимога, тобто специфікація точно не відображає припущення користувача; - специфікація може містити вимогу, яку неможливо виконати на даній апаратурі і програмному забезпеченні; - проект програми може мати помилки (наприклад, базу даних спроектовано без захисту від несанкціонованого доступу користувача, а потрібен захист); - проект програми може мати помилки (наприклад, опис компоненти містить алгоритм контролю несанкціонованого доступу, що не управляється коректно); - програма може бути неправильною, тобто вона виконує невластивий алгоритм або його зроблено неповністю. Таким чином, відмови, як правило, є результатами однієї або більше помилок у програмі, а також наявності всіляких дефектів. Помилки та причини появи їх на етапах ЖЦ Є підходи до класифікації помилок у програмному забезпеченні відповідно до їхнього розподілу за етапами життєвого циклу і до джерел Їхнього виникнення: - ненавмисне відхилення розробників від робочих стандартів або планів реалізації; - специфікації функціональних та інтерфейсних вимог виконано без дотримання стандартів розробки і под., що призводить до порушення функціонування програм; - організація процесу розробки є недосконалою або має недостатнє керування з бок.> менеджера проекту ресурсами (людськими, технічними, програмними та іншими) і питаннями тестування й інтеграції елементів проекту. Помилки виникають під час розробки програм на етапах життєвого циклу. Розглянемо їх нижче. Етап аналізу вимог. У визначенні вхідної концепції системи та опису вхідних вимог замовника виникають помилки аналітиків, коли вони формулюють специфікації верхнього рівня і будують концептуальну модель предметної області. Характерними помилками цього етапу є: - неадекватність опису специфікаціями вимог кінцевих користувачів; - некоректність специфікації взаємодії програмного забезпечення із середовищем функціонування або з користувачами; - невідповідність вимог замовника до окремих і загальних властивостей програмного забезпечення; - некоректність опису функціональних характеристик; - незабезпеченість інструментальними засобами підтримки усіх аспектів реалізації вимог замовника тощо. Етап проектування компонент. Помилки під час проектування компонент можуть виникати при описі алгоритмів, логіки керування, структур даних, інтерфейсів, логіки моделювання потоків даних, форматів введення - виведення тощо. В основі цих помилок лежать дефекти специфікацій аналітиків та помилок проектувальників. До них належать помилки: - визначення інтерфейсу користувача із середовищем; - опису функцій (неадекватності формулювань у проекті мети та завдань окремих компонентів, що виявляються при перевірці проекту); - визначення процесу опрацювання інформації або зв'язків між процесами (наслідок некоректного визначення взаємозв'язків компонентів та процесів); - визначення даних і їх структур для окремих компонент та програмного забезпечення, що в цілому некоректно задані; - опису алгоритмів модулів та їхньої логіки, що некоректно визначені в поданому проекті модуля; - визначення умов виникнення можливих помилок у програмі; - з причини порушення прийнятих для проекту стандартів та технологій. Етап кодування і налагодження. На даному етапі виникають помилки, що є результатом дефектів проектування, помилок програмістів та менеджерів процесу розробки і налагодження. Причиною помилок е: - безконтрольність допустимості значень вхідних та вихідних параметрів, індексів масивів, циклів, ділення на О та ін.; - неправильна обробка нерегулярних ситуацій під час аналізу кодів повернення від підпрограм, що викликались. - порушення стандартів кодування (погані коментарі, нераціональне виділення модулів і компонентів тощо); - використання одного імені для позначення кількох об'єктів або кількох імен на позначення одного об'єкта; - неузгоджене внесення змін у програму кількома розробниками тощо. Етап тестування. На цьому етапі помилки допускають тестувачі, а також програмісти” виконуючи технології збирання і тестування, вибору тестових наборів і сценаріїв тестування тощо. Відмови програмного забезпечення, викликані подібними помилками, мають виявлятися і не відбиватися на статистиці помилок та відмов компонентів і програмного забезпечення в цілому. Етап супроводження. При супроводженні програмного забезпечення причиною помилок є дефекти експлуатаційної документації, слабкі показники модифікованості й зрозумілості програмного забезпечення, а також некомпетентність осіб, відповідальних за супровід та/або удосконалення програмного забезпечення. Залежно від сутності внесених змін на цьому етапі можуть виникати практично будь-які помилки, аналогічні раніше переліченим помилкам на попередніх етапах. Усі помилки, що виникають у програмах, прийнято підрозділяти на класи : - логічні і функціональні помилки; - помилки обчислень і часу виконання; - помилки введення-виведення і маніпулювання даними; - помилки інтерфейсів; - помилки обсягу та інші. Тести програм і систем Для перевірки правильності програм спеціально розробляються тести і тестові дані. Під тестом розуміють певну програму, призначену для перевірки працездатності іншої програми і виявлення в ній помилкових ситуацій. Тестову перевірку можна провести також шляхом введення в програму, що перевіряється, додаткових операторів, які будуть сигналізувати про перебіг виконання ЇЇ й одержання результатів. Тестові дані слугують для перевірки роботи системи і готуються по-різному: генератором тестових даних, проектною групою на основі документів або файлів, користувачем із специфікації вимог тощо. Дуже часто розробляються спеціальні форми вхідних документів, в яких відображається процес виконання програми за допомогою тестових даних. Види тестів: • повнота функцій; • узгодженість інтерфейсів; • структура програми; • обчислення і коректність виконання функцій; • правильність функціонування в заданих умовах; • надійність виконання програм; - ефективність захисту від збоїв апаратури і невиявлених помилок; • зручність застосування, супроводження тощо. Багато типів тестів готує сам замовник для перевірки роботи програмної системи. Структура й зміст тестів залежать від виду тестованого елементу, яким може бути: модуль, компонента, група компонент, підсистема або система. Деякі тести залежать від мети й необхідності знати: чи працює система відповідно до її проекту, чи задоволене вимоги і чи бере участь замовник у перевірці роботи тестів. Для проведення тестування створюється спеціальна команда (група) тестувачів. Команда тестувачів За функціональні і виконавчі тести відповідає розробник, а замовник більше впливає на складання випробувальних та інсталяційних тестів. Як правило, команда тестувачів не залежить від штату розробників програмних систем. Деякі члени цієї команди є досвідченими тестувачами або навіть професіоналами в цій галузі. До них належать аналітики, програмісти, інженери-тестувачі, котрі присвячують увесь час проблемам тестування систем. Вони мають справу не лише зі специфікаціями, а й з методами та засобами тестування, організують створення і виконання тестів на машині. Тестувачів включають у процес розробки із самого початку створення проекту для складання тестових наборів та сценаріїв, а також графіків виконання тестів. Тести і тестові сценарії є прямим відзеркаленням вимог та проекту в цілому. Перспективи управління конфігурацією системи визначаються саме цією командою. Помилки, які ще трапляються в програмі, і зміни в системі відображаються в документації, вимогах, проекті, а також в описах вхідних та вихідних даних або в інших розроблюваних артефактах. Внесені зміни в процесі розробки приводять до модифікації тестових сценаріїв або в більшій частині до зміни планів тестування. Фахівці з управління конфігурацією враховують ці зміни і координують упорядкування тестів. До команди тестувачів входять також користувачі. Вони оцінюють отримані результати, зручність використання і людський чинник, а також висловлюють свою думку про принципи роботи системи на початкових етапах проекту. Уповноважені замовника планують роботи для тих, хто буде використовувати і супроводжувати систему. При цьому вони можуть привнести деякі зміни в проект, викликані неповнотою заданих вимог, ї сформулювати системні вимоги для проведення веріфікації системи й ухвалення рішення про її готовність. СУПРОВОДЖЕННЯ ПРОГРАМНИХ СИСТЕМ. Супроводження – будь-які роботи з внесення змін до системи після того, як її було передано користувачеві для експлуатації. На відміну від обладнання, яке з часом потребує ремонту, програмне забезпечення не "зношується", тому процес супроводження націлений на підтримку передусім еволюціонування системи, тобто на зміну її функцій та властивостей. Серед причин, котрі можуть зумовити потребу змін, можна назвати типові, а саме: • виявлення дефектів функціонування системи під час експлуатації, не виявлених на етапі тестування (зміни, за які несе відповідальність розробник); • з'ясування під час експлуатації, зробленої замовником, що він недостатньо або неповно висловив свої вимоги, завдяки чому система не відповідає окремим потребам замовника; • зміна умов діяльності замовника, які тепер не відповідають раніше поставленим вимогам (наприклад, змінилися податкове законодавство або місцева регуляція правил бізнесу, змінилися способи комунікації замовника з бізнес-партнерами або відбувся перерозподіл їхніх ролей у бізнесі тощо). Такі зміни важко передбачити кожній із сторін, котра брала участь у формулюванні вимог, оскільки вони викликані об'єктивною реальністю життя. Як засвідчують експерти, процес внесення змін є достатньо дорогим - оцінки його вартості сягають від 60 % до 80 % від загальної вартості розробки. Серед видів діяльності із здійснення супроводження прийнято розрізняти такі: • коригуюче супроводження. Це внесення коректив для усунення похибок, які було знайдено після передачі системи до експлуатації. • адаптивне супроводження. Це адаптація продукту до змінених обставин використання після передачі системи в експлуатацію • попереджувальне супроводження. Це діяльність із забезпечення адаптивного супроводження на старті розробки,. Найперша з проблем супроводження - це проблема персоналу. Внесення змін можливе тільки за умови розуміння сенсу того продукту, який потребує змін, та в чому полягають зміни. АНАЛІЗ І ДОСЯГНЕННЯ ЯКОСТІ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ. Якість програмного забезпечення – сукупність властивостей, що визначають спроможність забезпечення задовольнити запити замовника, які він висловив як вимоги до розробки. Аналіз якості у програмний інженерії орієнтований на: • досягнення необхідної якості програмного забезпечення відповідно до встановлених критеріїв; • верифікацію і валідацію на етапах життєвого циклу та оцінку якості виробленого програмного продукту • забезпечення надійності як основної характеристики гарантії якості програмного забезпечення . Ці напрями програмної інженерії розглядаються на всіх етапах життєвого циклу, тобто аналіз і забезпечення якості проводиться за всіма видами діяльності у вирішенні завдань планування, розробки і підтримки процесів створення програмного забезпечення. Створення якісного продукту сприяє задоволенню вимог замовника. Основні стандартні положення зі створення якісного продукту й оцінки рівня досягнутої якості зафіксовано в міжнародних та вітчизняних стандартах. Згідно з цими стандартами виділяються два процеси забезпечення якості протягом життєвого” циклу програмного забезпечення: - гарантія (підтвердження ) якості програмного забезпечення, що є результатом певних дій на кожній стадії життєвого циклу з перевірки й підтвердження відповідності програмного забезпечення стандартам та процедурам, орієнтованим на досягнення якості; - інженерія якості як процес надання продуктам програмного забезпечення властивостей надійності, супроводження й інших характеристик якості. Виконання перелічених процесів включають такі дії: - оцінка стандартів і процедур, що виконуються при розробці програм; - ревізія керування, розробки і забезпечення гарантії якості програмного забезпечення, а також всієї проектної документації (звіти, графіки розробки, повідомлення); - контроль проведення формальних інспекцій та оглядів; - аналіз і контроль проведення формального та приймального тестування (випробувань) програмного забезпечення. Функціональність - це сукупність властивостей, які визначають спроможність програмного забезпечення виконувати в заданому середовищі перелік функцій відповідно вимогам до обробки і загальноси-стемним засобам. Під функцією розуміють упорядковану послідовність дій для задоволення споживчих властивостей, замовлених користувачем. Функції бувають цільові (основні й допоміжні), які є основою, що забезпечує споживчі властивості у виконанні програмного забезпечення. Ця характеристика порівняно з іншими є вирішальною. Інші атрибути якості слугують для того, щоб визначити ціну програмного забезпечення і можливості використання. До атрибутів функціональності ПЗ належать: - функцінальна повнота: атрибут, який показує ступінь достатності основних функцій для вирішення спеціальних завдань відповідно до призначення програмного забезпечення; - правильність (точність): атрибут, який показує, як забезпечується досягнення правильних, теоретично правильних та погоджених результатів; - інтероперабельність: атрибути, які вказують на спроможність програмного забезпечення взаємодіяти із спеціальними системами і середовищами, наприклад з мережевими; - захищеність: атрибути, які вказують на можливість запобігати несанкціонованому доступу (випадковому або навмисному) до програм і даних; - узгодженість: атрибут, який вказує на відповідність заданим стандартам, угодам, правилам, законам і розпорядженням. Надійність - це множина атрибутів, котрі вказують на спроможність програмного забезпечення перетворювати вхідні дані на результати за умов, що залежать від періоду часу (зношення й старіння програмного забезпечення не враховуються). Зниження надійності програмного забезпечення відбувається через помилки у вимогах, проектуванні і виконанні. Відмови та помилки залежать від засобу виробництва продукту і з'являються в програмах протягом заданого проміжку часу. До підхарактеристик надійності програмного забезпечення належать: - безвідмовність: атрибути, які визначають відсутність помилок або частоту відмов через наявність помилок у програмному забезпеченні; - стійкість до помилок: атрибути, які вказують на забезпечення спроможності виконувати функції в аномальних умовах (збої апаратури, помилки в даних та інтерфейсах, порушення в діях оператора тощо); - відновлюваність: атрибути, які вказують на спроможність програми до перезапуску для повторного виконання й відновлення даних після відмов; - узгодженість: атрибут, який показує відповідність наявним стандартам, угодам, правилам, законам і розпорядженням. Для багатьох систем (програм, діяльностей та апаратури) надійність е головною цільовою функцією реалізації важливих атрибутів, що може визначатися по-різному. Іноді атрибути надійності виражаються через інші атрибути якості, якщо останні дозволяють досягнення високої якості програмного забезпечення. Деякі типи систем (реального часу, радарні системи, системи безпеки, комунікація, медичне устаткування та інші) містять особливі вимоги до забезпечення високої надійності включно з такими атрибутами, як недопустимість помилок, безпека, захищеність і зручність застосування, а також достовірність як основний критерій надійності. Надійність - єдиний кількісний показник якості, що характеризує властивість програмного забезпечення виявляти помилки, які залишилися в ньому, в процесі експлуатації при заданому наборі вхідних даних. Зручність застосування - це множина атрибутів, котрі вказують на необхідні або сприятливі умови для використання програмного забезпечення визначеним колом користувачів. Під використанням розуміють як діалогове спілкування з користувачем, так І недіалогове функціонування й одержання результатів виконання в різноманітних середовищах, в яких можуть проводитися підготовка й опрацювання результатів. Це одна з характеристик зручності застосування. До підхарактеристик зручності застосування програмного забез' печення належать: - зрозумілість: атрибути, які визначають зусилля, необхідні для розпізнавання логічних концепцій та умов їх застосування, - легкість навчання: атрибути, які визначають зусилля, затрачені, користувачами, щоб вивчити умови використання, наприклад, операційний контроль, впровадження, висновки, діагностику, а також процедури,] правила і документацію для використання програмного забезпечення;' - оперативність: атрибути, які характеризують якість реакції системи на зусилля користувача при виконанні операцій та операційного контролю; - узгодженість: атрибут, який показує відповідність розробки до вимог діючих стандартів, угод, правил, законів і розпоряджень. Ефективність забезпечується множиною атрибутів, які показують взаємозв'язок між рівнем виконання програмного забезпечення і кількістю використовуваних ресурсів у початкових умовах. До ресурсів належать засоби, апаратура, інші використовувані продукти, матеріали (наприклад, папір для друкувального пристрою), послуги штатного обслуговуючого персоналу тощо. До підхарактеристик ефективності програмного забезпечення належать: - час реакції (реактивність) - атрибути, які показують час відгуку, опрацювання і виконання функцій програмного забезпечення; - ефективність ресурсів - атрибути, які показують кількість і тривалість використовуваних ресурсів при виконанні функцій програми в програмному забезпеченні; - узгодженість: атрибут, який показує відповідність даного атрибута заданим стандартам, правилам і розпорядженням. Супроводжуваність - це множина властивостей, які вказують на зусилля, котрі необхідно витратити на проведення таких модифікацій, як коригування, удосконалення й адаптацію ПЗ через зміну середовища, вимог або функціональних специфікацій. Тобто, модифікацією вважаються будь-які зміни, які провадяться з метою поліпшення або додавання деяких особливостей функціонування програмного забезпечення. Підхарактеристики супроводжуваності ПЗ: - аналізованість: показник, який визначає необхідні зусилля для діагностики випадків відмов або ідентифікації частин, що будуть модифікуватися; - змінюваність - показник, який визначає зусилля, що витрачаються на модифікацію, видалення помилок або внесення змін у зв'язку з помилками або новими можливостями середовища функціонування; - стабільність: атрибути, які вказують на ризик модифікації; - тестованість: атрибути, які вказують на зусилля для проведення валідації та верифікації з метою виявлення помилок у програмах і невідповідностей програм вимогам, а також наступної модифікації програмного забезпечення та його атестації; - узгодженість: атрибут, який вказує на відповідність даного атрибута артибутам у стандартах та угодах, правилам і розпорядженням. Переносність - це множина показників, котрі вказують на здатність програмного забезпечення пристосовуватися до роботи при зміні середовища виконання. Середовище може бути організаційним, апаратним і програмним. Тому перенесення програмного забезпечення може бути пов'язаним із сукупністю дій, спрямованих на забезпечення функціонування програмного забезпечення в середовищі, відмінному від того середовища, в якому воно створювалося, з урахуванням нових програмних, організаційних і технічних можливостей. Ппідхарактеристики переносності ПЗ: - адаптивність: атрибут, який характеризує зусилля, необхідні для адаптації до спеціальних середовищ без виконання інших дій або засобів підтримки програмного забезпечення; - настроюваність (простота інсталяції): показники необхідних зусиль для запуску або інсталяції даного програмного забезпечення в певному середовищі; - сумісність: показники, які визначають можливість використання спеціального програмного забезпечення в середовищі чинного програмного забезпечення; - узгодженість: атрибути, які вказують на відповідність стандартам або домовленостям із забезпечення переносності; - інтероперабельність: атрибути, які забезпечують можливість взаємозамінювання при спільній роботі з іншими програмами з необхідною інсталяцією або адаптацією програмного забезпечення. Під оцінюванням якості програмного забезпечення розуміють дії, спрямовані на визначення ступеня задоволення програмного забезпечення потребам відповідно до призначення. Метою оцінювання якості є: • ухвалення рішення про ступінь відповідності досягнутого рівня якості розробленого ПЗ заданому рівню; • опис ознак та властивостей, реалізованих у ПЗ; • атестація й сертифікація програмного продукту. МЕНЕДЖМЕНТ ІНЖЕНЕРІЇ ПРОГРАМНИХ СИСТЕМ. Дослідження проблем планування й керування проектом показали, що в 1998 р. закічилися невдало 26 % з усіх програмних проектів (порівняно з 40 % у 1997 р.), а 40 % значно перевищили кошторис або не функціонують (33 % в 1997 р.). Крім того, як відзначається, число невдалих проектів зменшилося в компаніях, котрі працюють над невеликими за об'ємом, а тому більш легкими для керування проектами. Аналіз проектів, що зазнали краху, дозволив виділити 10 причин провалів: 1) керівники проектів не розуміють вимог замовника; 2) масштаби проекту визначено неправильно; 3) зміни проекту провадяться з великими труднощами; 4) змінам піддають обрану технологію проектування; 5) замовник змінює вимоги; 6) взятий термін виконання проекту нереальний; 7) користувач не ухвалює деяких рішень; 8) інвестиції втрачено; 9) для реалізації проекту не вистачає виконавців; 10) менеджери проекту не застосовують прогресивних методів керівництва. Чинники успішного створення якісного проекту: а) проект починати з правильного кроку; б) підтримувати темпи роботи; в) забезпечити прогрес і правильні рішення; г) провести постаналіз (так званий "посмертний аналіз") завершених проектів. ПОВТОРНЕ ВИКОРИСТАННЯ В ПРОГРАМНІЙ ІНЖЕНЕРІ. ЇОднією з характерних рис інженерної діяльності є використання готових рішень або деталей. Однак усі, хто працює над створенням реальних систем, знають, що промислове використання готових рішень у програмній інженерії ще не стало повсякденною практикою. Якщо у світі працюють майже 8 млн програмістів, то приблизно 80 % з них працюють над створенням програм обліку й організаційного управління на кількох рівнях: окремого підрозділу фірми, окремого аспекту діяльності фірми, фірми в цілому, корпорації, галузі і, нарешті, держави. Це, переважно, задачі розрахунків, статистики, допомоги в прийнятті рішень при управлінні різноманітними ресурсами - кадровими, фінансовими тощо. За оцінками експертів, 75 % цих робіт у світі дублюються - на тисячах підприємств створюються програми складського обліку, нарахування зарплати, розрахунку витрат на виробництво продукції, складання маршрутів деталей на виробничому конвеєрі тощо. Хоча більшість із цих програм типові, але кожного разу знаходяться особливості, що не дозволяють застосувати розроблену раніше програму. Тому нині активно розвивається напрям, водночас науковий та інженерний, який названо повторним використанням або компонентною розробкою програм. Компонентна розробка - це метод побудови програмного забезпечення з конструкцій за каталогом - як композиції готових компонент. Йдеться не лише про порції програмного коду або програмні модулі. Повторне використання (ревикористання) - це використання для нових розробок будь-яких порцій формалізованих знань, здобутих під час реалізації завершених розробок програмних систем. Накопичений досвід розробки систем програмного забезпечення може бути зафіксовано в різноманітних формах, починаючи від конкретних параметризованих програмних модулів і кінчаючи програмними архітектурами та середовищами. Далі будемо називати повторно використовуваними компонентами (ПВК} елементи знань про минулий досвід розробки систем програмування, якщо: 1) їх можуть використовувати не лише їхні розробники; 2) Їх можна адаптувати для створення нових систем. Зауважимо, що при цьому потрібен каталог, з якого можна зрозуміти, які деталі є і як їх можна поєднувати в конструкцію. З повагою ІЦ "KURSOVIKS"! |