Методи проектування надійного програмного забезпечення можна розбити на наступні групи:
· Попередження помилок, методи дозволяють мінімізувати або виключити появу помилки.
· Виявлення помилок, методи направлені на розробку додаткових функцій програмного забезпечення, що допомагають виявити помилки.
· Стійкість до помилок, додаткові функції програмного забезпечення, призначені для виправлення помилок і їх наслідків і системи, що забезпечують функціонування, за наявності помилок.
Методи попередження помилок концентруються на окремих етапах процесу проектування програмного забезпечення і включають:
ü Методи, системи, що дозволяють справитися з складністю.
ü Методи досягнення більшої точності при перекладі інформації.
ü Методи поліпшення обміну інформацією.
ü Методи негайного виявлення і усунення помилок на кожному кроці (етапі) проектування, не відкладаючи їх на етап тестування програми.
Складність системи є однією з головних причин низької надійності програмного забезпечення. У загальному випадку, складність об'єкту є функцією взаємодії (кількості зв'язків) між його компонентами. У боротьбі з складністю ПО використовуються дві концепції:
v Ієрархічна структура. Ієрархія дозволяє розбити систему по рівнях розуміння (абстракції, управління). Концепція рівнів дозволяє аналізувати систему, приховуючи неістотні для даного рівня деталі реалізації інших рівнів. Ієрархія дозволяє розуміти, проектувати і описувати складні системи.
v Незалежність. Відповідно до цієї концепції, для мінімізації складності, необхідно максимально підсилити незалежність елементів системи.
Це означає таку декомпозицію системи, щоб її високочастотна динаміка була поміщена в окремих компонентах, а міжкомпонентні взаємодії (зв'язки) описували тільки низькочастотну динаміку системи. Методи виявлення помилок базуються на введенні в програмне забезпечення системи різних видів надмірності:
Тимчасова надмірність. Використання частини продуктивності ЕОМ для контролю виконання і відновлення працездатності ПО після збою.
Інформаційна надмірність. Дублювання частини даних інформаційної системи для забезпечення надійності і контролю достовірності даних.
Програмна надмірність включає: взаємне недовір'я - компоненти системи проектуються, виходячи з припущення, що інші компоненти і початкові дані містять помилки, і повинні намагатися їх виявити; негайне виявлення і реєстрацію помилок; виконання однакових функцій різними модулями системи і зіставлення результатів обробки; контроль і відновлення даних з використанням інших видів надмірності.
Методи забезпечення стійкості до помилок направлені на мінімізацію збитку, викликаного появою помилок, і включають:
o обробку збоїв апаратури;
o повторне виконання операцій;
o динамічна зміна конфігурації;
o скорочене обслуговування у разі відмови окремих функцій системи;
o копіювання і відновлення даних;
o ізоляцію помилок.
Важливим етапом життєвого циклу програмного забезпечення, що визначає якість і надійність системи, є тестування. Тестування - процес виконання програм з наміром знайти помилки. Етапи тестування:
Автономне тестування, контроль окремого програмного модуля окремо від інших модулів системи.
v Тестування сполучень, контроль сполучень (зв'язків) між частинами системи (модулями, компонентами, підсистемами).
v Тестування функцій, контроль виконання системою функцій, що автоматизуються.
v Комплексне тестування, перевірка відповідності системи вимогам користувачів.
v Тестування повноти і коректності документації, виконання програми в строгій відповідності з інструкціями.
v Тестування конфігурацій, перевірка кожного конкретного варіанту постачання (установки) системи.
Існують дві стратегії при проектуванні тестів: тестування по відношенню до специфікацій (документація), не піклуючись про текст програми, і тестування по відношенню до тексту програми, не піклуючись про специфікації. Розумний компроміс лежить десь посередині, зміщуючись в ту або іншу сторону залежно від функцій, що виконуються конкретним модулем, комплексом або підсистемою.
Якість підготовки початкових даних для проведення тестування серйозно впливає на ефективність процесу в цілому і включає:
· технічне завдання;
· опис системи;
· керівництво користувача;
· початковий текст;
· правила побудови (стандарти) програм і інтерфейсів;
· критерії якості тестування;
· еталонні значення початкових і результуючих даних;
· виділені ресурси, визначувані доступними фінансовими коштами.
Проте, вичерпне тестування всіх віток алгоритму будь-якої серйозної програми для всіх варіантів вхідних даних практично нездійсненно. Отже, тривалість етапу тестування є питанням чисто економічним. Враховуючи, що реальні ресурси будь-якого проекту обмежені бюджетом і графіком, можна стверджувати, що мистецтво тестування полягає у відборі тестів з максимальною віддачею.
Помилки в програмах і даних можуть виявитися на будь-якій стадії тестування, а також в період експлуатації системи. Зареєстровані і оброблені відомості повинні використовуватися для виявлення відхилень від вимог замовника або технічного завдання. Для вирішення цього завдання використовується система конфігураційного управління версіями програмних компонент, база документування тестів, результатів тестування і виконаних коректувань програм. Засоби накопичення повідомлень про відмови, помилки, пропозиції на зміни, виконані коректування і характеристики версій є основними для управління розвитком і супроводом комплексу ПО і складаються з журналів:
o пропонованих змін;
o знайдених дефектів;
o затверджених коректувань;
o реалізованих змін;
o призначених для користувача версій.
Попередження помилок - кращий шлях підвищення надійності програмного забезпечення. Для його реалізації була розроблена методика проектування систем управління підприємствами, відповідна спіральній моделі життєвого циклу ПО. Методика передбачає послідовне пониження складності на всіх етапах аналізу об'єкту.