
- •7 Лекції
- •1. Основи програмних вимог (Software Requirements Fundamentals)
- •2. Процес роботи з вимогами (Requirements Process)
- •2.1 Модель процесу визначення вимог:
- •2.2 Учасники процесів (Process Actors)
- •2.3 Управління та підтримка процесів (Process Support and Management)
- •2.4 Якість та поліпшення процесів (Process Quality and Improvement)
- •3. Витяг вимог (Requirements Elicitation)
- •3.1 Джерела вимог (Requirement Sources)
- •3.2 Техніки вилучення вимог (Elicitation Techniques)
- •4. Аналіз вимог (Requirements Analysis)
- •4.1 Класифікація вимог (Requirements Classification)
- •4.2 Концептуальне моделювання (Conceptual Modeling)
- •4.3 Архітектурне проектування та розподіл вимог (Architectural Design and Requirements Allocation)
- •5. Специфікація вимог (Requirements Specification)
- •5.1 Визначення системи (System Definition Document)
- •5.2 Специфікація системних вимог (System Requirements Specification)
- •5.3 Специфікація програмних вимог (Software Requirements Specification - srs)
- •6. Перевірка вимог (Requirements Validation)
- •6.1 Огляд вимог (Requirements Review)
- •6.2 Прототипування (Prototyping)
- •6.3 Затвердження моделі (Model Validation)
- •6.4 Приймальні тести (Acceptance Tests)
- •7. Практичні переконання (Practical Considerations)
- •7.1 Ітеративна природа процесу роботи з вимогами (Iterative Nature of the Requirements Process)
- •7.2 Управління змінами (Change Management)
- •7.3 Атрибути вимог (Requirements Attributes)
- •7.4 Трасування вимог (Requirements Tracing)
- •7.5 Вимірювання вимог (Measuring Requirements)
6. Перевірка вимог (Requirements Validation)
Визначення вимог безпосередньо пов'язано з процедурами перевірки (verification) та затвердження (атестації - validation, як це сформульовано в ГОСТ Р і ISO/IEC 12207). Взагалі кажучи, прийнято вважати, що вимоги описані не повністю, якщо для них не задані правила V & V (verification & validation - перевірка та атестація), тобто не визначені способи перевірки і затвердження. Процедури перевірки є відправною точкою для інженерів-тестувальників і фахівців з якості, що безпосередньо відповідають за відповідність отримуваного програмного продукту пропонованим до нього вимогам.
На жаль, як вже коментували вище, часто, у великих організаціях замість повноцінної перевірки суті і змісту документів, все зводитися до так званого "нормоконтролю" - коли перевірка документів вимог полягає у перевірці на дотримання прийнятих стандартів зовнішнього оформлення документа (відступи і розміри поля , підписи таблиць/малюнків і т.п.), але ніяк ні оцінки якості вимог. І абсолютно неправильно вважати такий "нормоконтроль" повноцінною перевіркою вимог.
Якщо стандарти життєвого циклу описують як правильно створювати продукт, то стандарти (в тому числі, внутрішньокорпоративні) відповідають за створення правильного продукту, тобто того продукту, який відповідає очікуванням користувачів та інших зацікавлених осіб.
Для досягнення цієї мети застосовується ряд практик, в тому числі, представлених нижче.
6.1 Огляд вимог (Requirements Review)
Один з поширених методів перевірки вимог - інспекція або огляд вимог. Суть його полягає в тому, що ряд осіб, залучених до проекту (для великих проектів - спеціально виділені фахівці), "вичитують" вимоги в пошуках необгрунтованих припущень, описів вимог, допускають численні інтерпретації, протиріч, неузгодженості, недостатньою мірою деталізації, відхилень від прийнятих стандартів і т.п. Питання огляду вимог, взагалі кажучи, мають безпосереднє відношення до теми якості, тому вони також описуються в галузі знань SWEBOK "Якість програмного забезпечення" (Software Quality) в темі 2.3 "Огляд та аудит" (Review and Audit).
6.2 Прототипування (Prototyping)
У загальному випадку Прототипування увазі перевірку інженерної інтерпретації програмних вимог і витяг нових вимог, невизначених або неясних на ранніх ітераціях збору вимог. Існує безліч підходів до прототипування, як з точки зору деталізації, так і того, чому приділяється увага при прототипуванні. Найбільш часто прототипи створюються для оцінки способу реалізації користувацького інтерфейсу і перевірки архітектурних підходів і рішень.
При всій безумовній корисності прототипування для забезпечення перевірки вимог та рішень, необхідно розуміти, що з прототипуванням пов'язаний ряд проблем, здатних привести до негативних наслідків або, як мінімум, роботит, що вимагає додаткового часу та коштів. Серед можливих негативних наслідків прототипування варто виділити наступні:
• Зміщення уваги з цільових функцій прототипу і, як наслідок, незадоволеність користувачів огріхами прототипу, відсутністю стоїть за ним реальної функціональності (для прототипів користувацького інтерфейсу), помилками в прототипі і т.п.
• Перетворення прототипу в реальну систему за рахунок постійного додавання нових властивостей і функціональності "для перевірки" - часто буває порушена архітектурна цілісність, незабезпеченими необхідна масштабованість і якість одержуваного програмного продукту;
Тут автори хотіли б додати і ще одну типову проблему - переключення уваги зацікавлених осіб на ергономіку і деталі дизайну графічного інтерфейсу, при початковій меті побудови прототипу для виявлення функціональних та інших вимог і навпаки. Проблема не в увазі користувача інтерфейсу, проблема в підміні, якщо так можна висловитися, функціональної складової користувача інтерфейсом (згадайте, як часто ви самі говорили або чули - "я не про" кнопочки "і" віконця ", я про завдання ..." ). Звичайно, ясно, що ці фактори можна перетворити і в позитивні сторони прототипу. Крім того, не варто вважати що прототип це завжди щось, втілене в код. Прототипом для користувача інтерфейсу може бути, наприклад, просто "промальований" на папері або в електронній формі набір переходів між екранами/діалоговими вікнами системи (до речі, це підхід, що часто використовується в Agile-практиках, але аж ніяк не замінює вимог до системи).
Так чи інакше, вибір того чи іншого методу прототипування, та й самого факту такого способу перевірки вимог або технологічних ідей, повинен грунтуватися на тимчасових та інших наявних ресурсах, досвіді в прототипуванні і, звісно, ступеня складності створюваної програмної системи.