конспект лекцій (ТСПП). Конспект лекцій з дисципліни 07 технологія створення програмних продуктів напряму 050101 Компютерні науки
Скачать 14.87 Mb.
|
12.3. Аксіоми (принципи) тестування.Сформулюємо основні принципи тестування, використовуючи головну передумову справжньої глави про ті, що найбільш важливими в тестуванні програм є питання психології. Ці принципи цікаві тим, що в основному смороду інтуїтивно ясні, але в тій же година на них часто не звертають належної уваги. Хороший тій тест, для якого висока вірогідність виявити помилку. Ця аксіома є фундаментальним принципом тестування. Оскільки неможливо показати, що програма не має помилок і, означати, усі такі спроби безплідні, процес тестування має бути спробами виявити в програмі раніше не знайдені помилки. Одна з найскладніших проблем при тестуванні - вирішити, коли треба його закінчити. Як вже говорилося, вичерпне тестування (т. е. випробування усіх вхідних значень) неможливе. Таким чином, при тестуванні мі стикаємося з економічною проблемою: як вибрати кінцеве число тестів, яку дає максимальну віддачу (вірогідність виявлення помилок) для цих витрат. Відомі надто багато випадків, коли написані тесті мали украй малу вірогідність виявлення нових помилок, тоді як досить очевидні хороші тесті залишалися непоміченими. Тестування, як майже усяк інша діяльність, повинне починатися з постановки цілей. Як вже говорилося, цикл тестування подібний до повного циклу розробки програмного забезпечення. Тесті мають бути спроектовані, реалізовані, перевірені і, нарешті, виконані. Тому завдання тестування мають бути сформульовані на шкірному його етапі, наприклад, для шкірного конкретного типу тестування мають бути визначені орієнтири (число пройдених шляхів, перевірених умовних переходів і т. п.) і доля помилок, які мають бути виявлені на цьому етапі. Приведемо ще разів три найбільш важливих принципу тестування. Тестування - це процес виконання програм з метою виявлення помилок. Хорошим вважається тест, який має високу вірогідність виявлення ще не виявленої помилки. Вдалим вважається тест, який виявляє ще не виявлену помилку. 12.4. Філософія тестування.Тестування програмного забезпечення охоплює ряд видів діяльності, аналогічний послідовності процесів розробки програмного забезпечення. Сюди входять постановка завдання для тесту, проектування, написання тестів, тестування тестів, виконання тестів і вивчення результатів тестування. Вирішальну роль грає проектування тесту. Можливий цілий спектр підходів до вироблення філософії, або стратегії проектування. Щоб орієнтуватися в стратегіях проектування тестів, варто розглянути два крайні підходи, що знаходяться на межах спектру. Слід зазначити також, що багато хто з тих, хто працює в цій області, часто кидається в одну або іншу крайність. Прибічник підходу, відповідного лівій межі спектру (мал. 5.2), проектує свої тести, досліджуючи зовнішні специфікації або специфікації сполучення програми або модуля, які він тестує. Програму він розглядає як "чорний ящик". Позиція його така: "Мене не цікавить, як виглядає ця програма і чи виконав я усі команди або усі шляхи. Мал. 5.2. Схема спектру підходів до проектування тестів Я буду задоволений, якщо програма поводитиметься так, як вказано в специфікаціях". Його ідеал - перевірити усі можливі комбінації і значення на вході. Прибічник підходу, відповідного іншому кінцю спектру, проектує свої тести, вивчаючи логіку програми. Він починає з того, що прагне підготувати достатнє число тестів для того, щоб кожна команда була виконана принаймні один раз. Якщо він трохи більше досвідчений, то проектує тести так, щоб кожна команда умовного переходу виконувалася в кожному напрямі хоч би разів. Його ідеал - перевірити кожен шлях, кожну гілку алгоритму. При цьому його зовсім (чи майже зовсім) не цікавлять специфікації. Жодна з цих крайнощів не є хорошою стратегією. Перша з них, а саме та, відповідно до якої програма розглядається як "чорний ящик", прийнятніше. На жаль, вона страждає тим недоліком, що абсолютно неосуществима. Розглянемо спробу тестування тривіальної програми, одержуючої на вході три числа і що обчислює їх середнє арифметичне. Тестування цієї програми для усіх значень вхідних даних неможливе. Навіть для машини з відносно низькою точністю обчислень кількість тестів обчислювалася б мільярдами. Навіть маючи обчислювальну потужність, достатню для виконання усіх тестів в розумний час, ми витратили б на декілька порядків більше часу для того, щоб ці тести підготувати, а потім перевірити. Такі програми, як системи реального часу, операційні системи і програми управління даними, які зберігають "пам'ять" про попередні вхідні дані, ще гірше. Нам потрібно було б тестувати програму не лише для кожного вхідного значення, але і для кожної послідовності, кожної комбінації вхідних даних. Тому вичерпне тестування для усіх вхідних даних будь-якої програми нездійсненно. Ці міркування призводять до другого фундаментального принципу тестування : тестування - проблема значною мірою економічна. Оскільки вичерпне тестування неможливе, ми повинні обмежитися чимось меншим. Кожен тест повинен давати максимальну віддачу в порівнянні з нашими витратами. Ця віддача вимірюється вірогідністю того, що тест виявить не виявлену раніше помилку. Витрати вимірюються часом і вартістю підготовки, виконання і перевірки результатів тесту. Вважаючи, що витрати обмежені бюджетом і графіком, можна стверджувати, що мистецтво тестування, по суті, є мистецтвом відбору тестів з максимальною віддачею. Кожен тест має бути представником деякого класу вхідних значень, так щоб його правильне виконання створювало у нас деяку переконаність в тому, що для певного класу вхідних даних програма виконуватиметься правильно. Це зазвичай вимагає деякого знання алгоритму і структури програми, і ми, таким чином, зміщуємося до правого кінця спектру. |