3 ІНЖЕНЕРІЯ ВИМОГ
3.1 Інженерія вимог як процес
Кожна система — це певний перетворювач, чию поведінку і властивості якої ми будуємо в процесі створення програмної системи, і цю поведінку та властивості ми обираємо так, щоб вирішити нашу проблему.
Програмна система — це певна машина, котра вводиться у світ для того, щоб впливати на нього. Частини світу, які впливають на машину або піддаються її впливу, становлять так званий домен предметної галузі (data domain) або домен застосування(application domain). Опис цього впливу дає відповідь на запитання: "Що робить система?" і визначає вимоги до системи у формі угод між замовником і виконавцем. Як вона це робить, визначає опис машини.
Будемо називати вимогами до програмної системи властивості, які мають бути в системи, якщо вона адекватно виконує свої функції. Прикладами таких функцій можуть бути: автоматизація притаманних персоналу обов’язків, забезпечення керівництва інформацією, потрібною для ухвалення рішень, керування фізичними пристроями виробничого процесу тощо. Тобто, програмна система може моделювати досить складну діяльність людей та організацій, їхньої взаємодії з фізичними пристроями тощо. Відповідно до цього, вимоги до програмної системи мають відображати всі труднощі такої діяльності.
В сучасних інформаційних технологіях фаза життєвого циклу, на якій фіксуються вимоги на розробку програмного забезпечення, є визначальною для його якості, термінів та вартості робіт. Саме на цій фазі мають бути зафіксовані реальні потреби користувачів, що стосуються функціональних, операційних та сервісних можливостей, які береться реалізувати розробник. Таким чином, на цій фазі домовляються замовник і виконавець, що визначає подальші дії виконавця.
Ціна помилок та нечітких неоднозначних формулювань на цій фазі дуже висока, бо час і засоби витрачаються на непотрібну замовникові програму, оскільки він мав на увазі зовсім інше, але не зумів сформулювати свої потреби. Внесення необхідних коректив при цьому може вимагати значних переробок, а інколи й повного перепроектування і, відповідно, перепрограмування. Тим часом статистика показує, що відсоток помилок у постановці завдань перевищує відсоток помилок кодування, і це є наслідком суб’єктивного характеру процесу формулювання вимог та майже повної відсутності засобів його формалізації. Так, згідно зі статистикою, в Америці витрачається щорічно до 82 млрд. доларів на проекти, визнані після реалізації такими, що не відповідають вимогам замовника, інакше кажучи, непотрібними.
Діючими особами процесу формулювання вимог є:
- носії інтересів замовників (досить часто замовника репрезентують кілька професійних груп, потреби яких можуть мати не лише відмінності, а й навіть суперечності);
- оператори, котрі здійснюють обслуговування під час функціонування системи;
- розробники системи.
До процесу формулювання вимог входять кілька підпроцесів.
Складання вимог. Джерелами відомостей про вимоги можуть бути:
- мета та завдання системи, які формулює замовник. Слід зазначити, що при безумовній пріоритетності думки замовника треба мати на увазі небезпеку неоднозначного розуміння цих формулювань замовником і розробником, а також властивість людини замовчувати багато визначальних подробиць, що є не ознакою злої волі, а лише наслідком або забудькуватості, або впевненості, що це "загальновідомо". Тому формулювання замовника підлягають глибокому осмисленню з боку виконавця;
- діюча система або колектив, який виконує її функції. Досить часто система, котру замовляють, має замінити собою попередню систему, що вже не задовольняє замовника, або певні функції діючого персоналу. Вивчення й фіксація наявних функціональних можливостей створює базу, розширення якої дозволить сформулювати вимоги до потрібної системи, в яких урахується набутий досвід замовника. Для цього джерела також є певна небезпека перенесення вад організації попередньої системи в нову. Наприклад, розподіл обов’язків серед персоналу певного відділу склався історично впродовж послідовного розширення кадрів і є недоцільним відносно функцій відділу. Тому, вивчаючи діючу систему, треба вміло відокремити потреби проблеми, яку розв’язує система, від закладених у стару систему невдалих організаційних рішень. З огляду на це, процес урахування діючої системи під час складання вимог до нової доцільно провести за три кроки:
а) за першим кроком вивчаємо фізичну структуру діючої системи (незалежно від того, автоматизована вона чи "людська");
б) за другим кроком робимо логічне узагальнення виявлених на першому етапі функцій та особливостей, виділяючи ті, що відображають
поставлену перед розробкою проблему, на відміну від закладених у стару систему окремих шляхів розв’язання проблеми (інколи не зовсім вдалих);
в) за третім кроком визначаємо логічне розширення функцій, виявлених на другому кроці, яке відповідає потребам нової системи як розвитку існуючої в заданому напрямі; визначені функції формулюємо як вимоги до нової системи;
- загальні знання щодо проблемної галузі замовника. Він формулює і розуміє свої проблеми в термінах понять певної проблемної галузі і, як згадувалося вище, замовчує подробиці, котрі належать саме до загальновідомих знань (але, на жаль, тільки серед професіоналів відповідної галузі);
- відомчі стандарти замовника, котрі стосуються організаційних вимог, середовища функціонування майбутньої системи, її виконавських та ресурсних можливостей.
Методами складання вимог найчастіше є:
- інтерв’ю з носіями інтересів замовника та операторами;
- спостереження за роботою діючої системи з метою відокремлення її органічних властивостей від тих, що зумовлені структурою кадрів;
- фіксація сценаріїв усіх можливих випадків використання системи, виконуваних при цьому системою функцій, ролей осіб, котрі запускають ці сценарії або взаємодіють з системою під час її функціонування.
Продуктом процесу складання вимог є неформалізований опис цих вимог. Такий опис є фактичним контрактом на розробку між замовником і виконавцем. Обидві зазначені сторони мають розуміти його зміст, оскільки це розуміння гарантує, що система, в розробку якої буде вкладено працю виконавця, задовольнить замовника. Тому нотацію згаданого вище опису має бути орієнтовано на людину. Водночас цей опис є входом для наступного процесу інженерії вимог - аналізу вимог. Виконавцем цього процесу є розробник, а завданням є подальше уточнення й формалізація вимог та їхнє документування в нотації, що є однозначно зрозумілою колективу розробників для подальшого проектування, реалізації, тестування, документування програмного продукту та інших необхідних процесів життєвого циклу розробки (див. п. 2).
Аналіз вимог. Першим кроком аналізу має бути класифікація вимог. Множину зібраних вимог можна розподілити між двома головними категоріями:
- ті, що відображають можливості, які повинна забезпечити система, назвали функціональними вимогами (functional requirement);
- ті, що відображають обмеження, пов’язані з функціонуванням системи, назвали нефункціональними вимогами (notfunctional requirement).
Перша з наведених категорій дає відповідь на запитання: "Що робить система?", а друга визначає характеристики її роботи, наприклад, що ймовірність збою системи протягом години не може перевищувати однієї мільйонної.
Нефункціональні вимоги можуть виступати як окремий чисельний показник, наприклад, час чекання відповіді абонента не може перевищувати півсекунди. Інколи вони можуть мати комплексний характер і потребувати для свого втілення сукупності деталізованих властивостей, наприклад, "підвищити кількість обслуговуваних клієнтів удвічі".
Є кілька класів нефункціональних вимог, суттєвих для більшості програмних систем, які виражають обмеження, актуальні для багатьох проблемних галузей. Серед них назвемо такі:
- вимоги конфіденціальності;
- відмовостійкість;
- число клієнтів, котрі одночасно мають доступ до системи;
- вимоги безпеки;
- час чекання відповіді на звернення до системи;
- виконавські якості системи (обмеження щодо ресурсів пам’яті, швидкість реакції на звернення до системи тощо).
Для більшості названих класів може бути зафіксовано спектр характерних понять, які позначаються терміном дескриптор і які застосовуються для розкриття їхньої суті. Склад дескрипторів закріплено у відповідних міжнародних та відомчих стандартах, що дозволяє уникнути неоднозначності тлумачення зібраних вимог.
Функціональні вимоги пов’язані із семантичними особливостями проблемної галузі, в межах якої планується розробка. Проблема термінологічних розбіжностей для них є досить впливовим фактором ускладнення. На жаль, робляться спроби розв’язання її шляхом стандартизації термінології лише для кількох проблемних галузей, для яких властивий інтенсивний розвиток комп’ютерних систем, наприклад, для авіоніки та медицини. Але можна засвідчити наявність стійкої тенденції до створення стандартизованого понятійного базису більшості проблемних галузей, які набувають певного досвіду комп’ютеризації.
Наступним кроком аналізу вимог є встановлення їхньої пріоритетності, бо, як було вказано вище, вимоги, висунуті різними носіями інтересів у системі, можуть конфліктувати між собою. Крім того, кожна з вимог потребує для свого втілення певних ресурсів, надання яких може залежати також від визначеного для неї пріоритету.
Визначення впливу вимог на потреби в ресурсах є також кроком процесу аналізу вимог.
Ще одним із важливих завдань аналізу є передбачення можливих змін у зібраних вимогах і забезпечення можливостей внесення перед- бачуваних змін без суттєвого перегляду всієї системи. Такі можливості мають забезпечити живучість системи та її здатність до адаптації.
Нарешті, в процесі аналізу вимог має бути перевірено правдивість та відповідність їх інтересам замовника, висловленим усіма носіями інтересів цього замовника.
Продуктом процесу аналізу є побудована модель проблеми, орієнтована на її розуміння, якого має досягнути виконавець до початку проектування системи.
Вінницький національний технічний університет