Програм-ма - згідно з ГОСТ 19781-90 - дані, призначені для управління конкретними компонентами системи обробки інформації з метою реалізації певного алгоритму. Отже, по Тейер, програма має властивість надійності в тій мірі, в якій вона здатна задовільно виконувати функції, для яких вона призначена. Надійність програмного забезпечення може бути визначена як властивість програми, яке виражається у виконанні заданих функцій в заданих умовах роботи і на заданій обчислювальній машині.
Що значить програма не виконує свої функції? Що таке помилка в програмі? Справа в тому, що різні люди по-різному розуміють, що таке помилка в програмному забезпеченні.
Система раннього виявлення балістичних снарядів Ballistic Missile Early Warning System повинна спостерігати за об'єктами, що рухаються у напрямку до США, і, якщо об'єкт не пізнаний, почати послідовність захисних заходів - від спроб встановити з об'єктом зв'язок до перехоплення і знищення. Одна з ранніх версій системи помилково приймала піднімається над горизонтом Місяць за снаряд, що летить над Північною півкулею. Чи є це помилкою? З точки зору користувача (Міністерства оборони США) - так. З точки зору розробника системи - можливо, і немає. Розробник може наполягати на тому, що у відповідності зі специфікаціями захисні дії повинні бути початі по відношенню до будь-якого рухомого об'єкту, що з'явився над обрієм і не пізнаному як мирний літальний апарат.
Програмне забезпечення містить помилку, якщо:
· Його поведінка не відповідає специфікаціям.
Недоліки: неявно передбачається, що специфікації коректні. Це якщо і буває справедливим, то рідко; підготовка специфікацій - один з основних джерел помилок. Якщо поведінка програмного продукту не відповідає його специфікаціям, помилка, ймовірно, є. Однак якщо система поводиться відповідно до специфікацій, ми не можемо стверджувати, що вона не містить помилок.
· Його поведінка не відповідає специфікаціям при використанні в встановлених при розробці межах. Це визначення ще гірше першого. Якщо система випадково використовується в непередбачуваної ситуації, її поведінка повинна залишатися розумним. Якщо це не так, вона містить помилку. Наприклад, авіаційна диспетчерська система, відповідно до специфікації, повинна управляти рухом до 200 літаків одночасно. Але одного разу, в районі з'явився 201 літак. Якщо поведінка системи нерозумно - скажімо, вона забуває про одне з літаків або виходить з ладу, система містить помилку, хоча і використовується поза межами, встановлених при проектуванні.
· Програмне забезпечення поводиться не відповідно до офіційної документації та поставленими користувачу публікаціями.
А якщо помилки містяться і в програмі і в публікаціях? Або якщо в руководстве опісана только ожідаемая і планіруемая работа з сістемой. Наприклад, написано: "Щоб отримати те-то, натисніть один раз то-то". Припустимо, що користувач випадково два рази натискає то-то і система виходить з ладу, тому що її розробники не передбачили такої ситуації. Система, очевидно, містить помилку, але поводиться відповідно до публікаціями.
· Система не здатна діяти відповідно до вихідним контрактом та переліком вимог користувача. Це твердження теж не позбавлене недоліків, оскільки письмові вимоги користувача рідко деталізовані настільки, щоб описувати бажане поведінку програмного забезпечення при всіх мислимих обставин.
Остаточне визначення: В програмному забезпеченні є помилка, якщо він не виконує того, що користувачеві розумно від нього очікувати. Відмова програмного забезпечення - це прояв помилки в ньому.
Помилками в ПЗ є всі можливі невідповідності між демонструються характеристиками його якості і приписаних вимог і, іноді, очікуваннями користувачів.
В англомовній літературі використовується кілька термінів, часто переводить як «помилка» на російську мову.
· Defect - саме загальне порушення будь-яких вимог або очікувань, не обов'язково виявляється зовні (до дефектів відносяться і порушення стандартів кодування, недостатня гнучкість системи та ін.)
· Failure - порушення вимог, що виявляється при якомусь реальному сценарії роботи ПО, це скоріше прояв помилки
· Fault - помилка в коді програми, що викликає порушення вимог при роботі (failures), то місце, яке треба виправити. Хоча це поняття використовується досить часто, воно, взагалі кажучи, не цілком чітке, оскільки для усунення порушення можна виправити програму в декількох місцях. Що саме треба виправляти, залежить від додаткових умов, виконання яких ми хочемо при цьому забезпечити.
· Error - використовується в двох сенсах.
Перший - це помилка в ментальній моделі програміста, яка змушує його робити помилки в коді (faults).
Друге значення - це некоректні значення даних (вихідних або внутрішніх), які виникають при помилках в роботі програми.
Програмні, як і технічні відмови виражаються у втраті об'єктом працездатності. Незважаючи на зовнішню схожість прояви відмов апаратури і дефектів ПЗ механізми їх формування мають різну природу. Для програм фундаментальної є ідея проектних дефектів, а теорія надійності техніки враховує відмови через зношування, старіння або інших причин, що змінюють характеристики пристроїв в часі. Відмова програмного забезпечення обумовлений невідповідністю програмного забезпечення поставлених завдань. Невідповідність може виникнути з двох причин: або розробниками програми допущено порушення специфікації - технічних вимог до програми, або специфікація неточна або неповна.