Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тестування прог продукт.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
412.16 Кб
Скачать

II. Основна частина.

  1. Філософія тестування

Тестування програмного забезпечення охоплює цілий ряд видів діяльності, вельми аналогічний послідовності про­цесів розробки програмного забезпечення. Сюди входять поста­новка завдання для тесту, проектування, написання тестів, тестування тестів і, нарешті, виконання тестів і вивчення результа­тів тестування. Вирішальну роль грає проектування тесту. Можливий цілий спектр підходів до вироблення філософії, або стратегії проектування тестів, змальований на рис.2. Аби орієнтуватися в стратегіях проектування тестів, варто розглянути два крайні підходи, що знаходяться на кордонах спек­тра. Слід зазначити також, що багато хто з тих, хто працює в цій області, часто кидається в одну або іншу крайність.

Прибічник (або прихильниця) підходу, відповідного лівому кордону спектру, проектує свої тести, досліджуючи зовнішні спе­цифікації або специфікації сполучення програми або модуля, які він тестує. Програму він розглядає як чорний ящик. Позиція його така: «Мене не цікавить, як виглядає ця програма і чи виконав я всі команди або всі дороги. Я буду задоволений, якщо програма поводитиметься так, як вказано в специфікаціях». Його ідеал — перевірити все можливі комбіна­ції і значення на вході.

Прибічник підходу, відповідного іншому кінцю спект­ра, проектує свої тести, вивчаючи логіку програми. Він починає з того, що прагне підготувати достатнє число тестів для того, щоб кожна команда була виконана принаймні один раз. Якщо він трохи більш досвідчений, то проектує тести так, щоб кожна команда умовного переходу виконувалася в кожному напрямі хоч би разів. Його ідеал — перевірити кожну дорогу, кожну гілку алгоритму. При цьому його зовсім (або майже со­всем) не цікавлять специфікації.

Жодна з цих крайнощів не є хорошою стратегією. Читач, проте, вже, ймовірно, відмітив, що перша з них, а саме та, відповідно до якої програма розглядається як чорний ящик, предпочтительней. На жаль, вона страждає тим недоліком, що абсолютно нездійснена. Розглянемо спробу тестування тривіальної програми, одержуючої на вході три числа і що обчислює їх середнє арифметичне. Тестування цієї програми для всіх значень вхідних даних неможливо. Навіть для машини з відносно низькою точністю обчислень кількість тестів обчислювалася б мільярдами. Навіть май ми обчислювальну потужність, достатню для виконання всіх тес­тів в розумний час, ми витратили б на декілька порядків більше часу для того, щоб ці тести підготувати, а потім перевірити. Такі програми, як системи реального часу, операційні системи і програми управління даними, які зберігають «пам'ять» про попередні вхідні дані, ще гірше. Нам потрібно було б тестувати програму не лише для кожного вхідного значення, але і для кожної послідовності, кожної комбінації вхідних даних. Тому вичерпне тестування для всіх вхідних даних будь-якої розумної програми нездійсненно.

Ці міркування наводять до другого фундаментального прин­ципу тестування: тестування — проблема в значній сте­пени економічна. Оскільки вичерпне тестування не­возможно, ми повинні обмежитися чимось меншим. Кожен тест повинен давати максимальну віддачу в порівнянні з нашими затра­тами. Ця віддача вимірюється вірогідністю тією, що тест виявить не виявлену раніше помилку. Витрати вимірюються часом і вартістю підготовки, виконання і перевірки результатів тесту. Вважаючи, що витрати обмежені бюджетом і графіком, можна ут­верждать, що мистецтво тестування, по суті, є мистецтвом відбору тестів з максимальною віддачею. Більш того, кожен тест має бути представником деякого класу вход­ных значень, так аби його правильне виконання створювало у нас деяку переконаність в тому, що для певного класу вхідних даних програма виконуватиметься правильно. Це зазвичай вимагає деякого знання алгоритму і структури програм­мы, і ми, таким чином, зміщуємося до правого кінця спектру.