айно, якщо є причини вважати даний набір тестів здатним з великою ймовірністю виявити всі можливі помилки, то можна говорити про деяке рівні впевненості у правильності програми, що встановлюється цими тестами.
Більшість людей, поставивши мету (наприклад, показати, що помилок немає), орієнтується у своїй діяльності на досягнення цієї мети. Тестувальник підсвідомо не дозволить собі діяти проти мети, т. Е. Підготувати тест, який виявив би одну з решти в програмі помилок. Оскільки ми всі визнаємо, що досконалість у проектуванні та кодуванні будь-якої програми недосяжно і тому кожна програма містить деяку кількість помилок, найбільш плідним застосуванням тестування буде знайти деякі з них. Якщо ми хочемо добитися цього і уникнути психологічного бар'єру, що заважає нам діяти проти поставленої мети, наша мета повинна полягати в тому, щоб знайти якомога більше помилок.
Поява персональних комп'ютерів сприяло стандартизації цієї галузі, оскільки програми стали спочатку створюватися для роботи із загальною операційною системою. Впровадження персональних комп'ютерів відкрило нову еру і призвело до швидкого і бурхливому зростанню комерційних розробок. Комерційні програми жорстко боролися за першість і виживання. Користувачі комп'ютерів брали вижило програмне забезпечення як стандарти defacto. Пакетна обробка замінялася системами, що працюють в реальному часі.
Тестування систем реального часу зажадало іншого підходу до проектування тестування через те, що робочі потоки могли викликатися в будь-якому порядку. Ця особливість призвела до появи величезної кількості процедур тестування, здатних підтримати нескінченне число перестановок і сполучень.
Сформулюємо основоположний висновок:
· Якщо ваша мета - показати відсутність помилок, то ви їх знайдете не надто багато.
· Якщо ж ваша мета - показати наявність помилок, ви знайдете значну їх частину.
Причиною багатьох нещасть розробників є програмні помилки, через які на їх багатостраждальні голови звалюються і давно прострочені проекти, і безсонні ночі. Помилки можуть зробити життя розробників дійсно нещасною, бо, досить кільком помилкам украстися в їх програми, як замовники припиняють цими програмами користуватися, а самі вони можуть втратити роботу.
Надійність неможливо внести в програму в результаті тестування, вона визначається правильністю етапів проектування. Найкраще рішення проблеми надійності - з самого початку не допускати помилок у програмі.
Однак імовірність того, що вдасться бездоганно спроектувати велику програму, нескінченно мала. Роль тестування полягає якраз в тому, щоб визначити місцезнаходження нечисленних помилок, що залишилися в добре спроектованої програмі. Спроби за допомогою тестування досягти надійності погано спроектованої програми абсолютно безплідні.
Довгий час помилки розглядали як прості неприємності. Ніщо не може бути далі від істини. Всім програмістам відомі компанії, які закрилися тільки тому, що випускали програмні продукти, абсолютно непридатні до використання через велику кількість помилок. У зв'язку із загальною комп'ютеризацією, все ширше і ширше захоплюючої такі важливі області, як управління системами життєзабезпечення, медичні прилади та наддорогу комп'ютерну апаратуру, над помилками більше не можна просто сміятися або розглядати їх як щось має значення тільки на етапах розробки.
Тестування виявляється досить незвичайним процесом (ось чому воно і вважається важким), так як цей процес руйнівний. Адже мета перевіряючого (тестувальника) - змусити програму збитися. Він задоволений, якщо це йому вдається; якщо ж програма на його тесті не збивається, він не
задоволений.
Ще одна причина, по якій важко говорити про тестування - це той факт, що про нього відомо дуже небагато. Якщо сьогодні ми розташовуємо 5% тих знанні про проектування і власне програмуванні (кодуванні), які будуть у нас до 2000 р, то про тестування нам відомо менше 1%.
1.2 Основні визначення
Хоча в тестуванні можна виділити кілька різних процесів, такі терміни, як тестування, налагодження, доказ, контроль та випробування, часто використовуються як синоніми і, на жаль, для різних людей мають різний зміст. Хоча стандартних, загальноприйнятих визначень цих термінів немає, спроба сформулювати їх була зроблена на симпозіумі з тестування програм. Класифікацію різних форм тестування я почну з того, що дам ці визначення, злегка доповнивши і розширивши їх список.
Тестування (testing), як ми вже з'ясували, -процес виконання програми (або частини програми) з наміром (або метою) знайти помилки.
Доказ (proof) - спроба зна...