Я написав більшість тестування програмного забезпечення понад 25 років тому. З тих пір я вказував на кілька частин книги, які вважаю застарілими або просто неправильними. Див. Http://www.kaner.com/pdfs/TheOngoingRevolution.pdf
Ви можете побачити більше (поточні перегляди, але без явних покажчиків назад до TCS) на моєму сайті Курсу тестування програмного забезпечення Black Box (відео та слайди доступні безкоштовно), www.testingeducation.org/BBST
Культура тестування тоді була багато в чому підтверджуючою.
У сучасних тестуваннях підхід до тестування одиниць значною мірою підтверджує - ми пишемо великі колекції автоматизованих тестів, які просто підтверджують, що програмне забезпечення продовжує працювати за призначенням. Тести служать сповіщувачами змін - якщо щось в інших частинах коду і в цій частині зараз є проблеми, або якщо значення даних, які раніше були неможливі в реальному світі, зараз доходять до програми, то детектори змін спрацьовують, попереджаючи про програміст до проблеми обслуговування.
Я думаю, що підтверджуючий спосіб мислення підходить для тестування одиниць, але уявіть собі світ, у якому все тестування системи було підтверджуючим (для людей, які роблять розрізнення, будь ласка, інтерпретуйте "тестування системної інтеграції" та "тестування прийняття", як це включено до моїх коментарів до системи тестування.) Тест тестування полягав у тому, щоб підтвердити, що програма відповідала своїм специфікаціям, і домінуючим підходом було побудувати регресійні тести на рівні на мільйон (або, принаймні, кілька сотень) системного рівня, які відобразили частини специфікації на поведінку програми. (Я думаю, що підтвердження специфічної поведінки є корисним, але я думаю, що це невелика частина більшої мети.)
Є ще тестові групи, які діють таким чином, але це вже не є домінуючим поглядом. Тоді це було. Я наполегливо писав і малював різкі контрасти, щоб вказувати людям, які постійно навчалися в цьому режимі мислення. Сьогодні деякі різкі контрасти (включаючи наведене тут) застаріли. Вони неправильно трактуються як напади на неправильні погляди.
Як я бачу, тестування програмного забезпечення - це емпіричний процес для вивчення інформації про програмний продукт чи послугу, що стосується якості.
Тест повинен бути розроблений для виявлення корисної інформації.
Тоді, до речі, ніхто не говорив про тестування як про метод виявлення "інформації". Тоді тестування було або для (деякої версії ...) пошуку помилок, або для (деякої версії ...) перевірки (перевірки) програми на предмет специфікацій. Я не думаю, що твердження про тестування для виявлення корисної інформації потрапило до словника тестування до цього століття.
Уявіть рейтингові тести з огляду на їхню інформаційну цінність. Тест, який, ймовірно, навчить нас чомусь, чого ми не знаємо про програмне забезпечення, мав би дуже високу інформаційну цінність. Тест, який, ймовірно, підтвердить те, що ми вже очікуємо і що вже було демонструвано багато разів раніше, мало б інформаційне значення. Один із способів розставити пріоритети тестів - це запустити вищі тести інформаційного значення перед тестами нижчої інформації.
Якби я спростив цю пріоритетність, щоб вона привернула увагу програміста, менеджера проектів чи менеджера процесів, який не знає тестування програмного забезпечення, я б сказав: "ТЕСТ, ЩО НЕ ЗАдуманий ВІДКРИТТЯ БУГА - ВІДХОДИ ЧАСУ" . " Це не ідеальний переклад, але для читачів, які не можуть чи не зрозуміють будь-якої тонкості чи кваліфікації, це настільки ж близько, як це дістанеться.
Тоді, і я знову бачу це тут, деякі люди, які не розуміють тестування, відповіли б, що тест, призначений для пошуку кутових випадків, є марною тратою часу порівняно з тестом на основне використання основної функції. Вони не розуміють двох речей. По-перше, коли тестери часу знаходять час для перевірки граничних значень, основні функції основних функцій вже були здійснені кілька разів. (Так, є винятки, і більшість тестових груп уважно звертають увагу на ці винятки.) По-друге, причина тестування з екстремальними значеннями полягає в тому, що програма, швидше за все, виходить з ладу з крайніми значеннями. Якщо це не виходить з ладу, ви протестуєте щось інше. Це ефективне правило. З іншого боку, якщо воно не спрацьовує при надзвичайному значенні, тестер може зупинитися і повідомити про помилку, або тестер може усунути неполадки, щоб перевірити, чи не виходить програма таким же чином при більш нормальних значеннях. Хто займається усуненням несправностей (тестер або програміст) - це питання корпоративної культури. Деякі компанії сплачують час тестера на це, деякі бюджетують програмісти, а деякі очікують, що програмісти виправлять неполадки у кутових випадках, будь то узагальнюючі чи ні, щоб усунення несправностей не було актуальним. Поширене непорозуміння - тестувальники витрачають час (а не максимізують ефективність) шляхом тестування екстремальних значень - ще одна причина того, що "Тест, який не призначений для виявлення помилок, є марною витратою часу", є відповідним повідомленням для тестувальників. Це контрапункт для заохочення з боку деяких програмістів ніколи (за фактом) не запускати тести, які можуть кинути виклик програмі. Повідомлення спрощене, але вся дискусія спрощена.
До речі, "інформаційна цінність" не може бути єдиною системою пріоритетності. Це не моє правило, коли я розробляю тестові набори. Це не моє правило, коли я розробляю тести перевірки побудови (він же перевіряє здоровість). В обох цих випадках мене більше цікавлять типи покриття, ніж сила окремих тестів. Є й інші випадки (наприклад, автоматизовані тести великих обсягів, які дешево встановлювати, запускати та контролювати), коли потужність окремих тестів для моєї конструкції просто не має значення. Я впевнений, що ви можете придумати додаткові приклади.
Але як правило, якби я міг зазначити лише одне правило (наприклад, розмова керівника, голова якого вибухає, якщо він намагається обробити більше одного речення), було б тест на низьку інформаційну цінність, як правило, марна трата часу.