Яка різниця між налагодженням і тестуванням?


11

Вступ до тестування програмного забезпечення (Ammann & Offutt) на с.32 згадує 5-рівневу модель зрілості тестування:

Рівень 0 Немає різниці між тестуванням та налагодженням.

Рівень 1 Мета тестування - показати, що програмне забезпечення працює.

Рівень 2 Мета тестування - показати, що програмне забезпечення не працює.

Рівень 3 Метою тестування є не доведення нічого конкретного, а зниження ризику використання програмного забезпечення.

Тестування рівня 4 - це розумова дисципліна, яка допомагає всім ІТ-фахівцям розробити більш якісне програмне забезпечення.

Хоча вони не вникають у більш детальні подробиці. Які відмінності між налагодженням і тестуванням?


1
Яка частина сторінки Вікіпедії на налагодженні вас збентежила? en.wikipedia.org/wiki/Debugging Будь ласка, публікуйте конкретні фрази чи цитати, які ви визнали заплутаними.
С.Лотт

4
Середній час, який програміст проводить на тестування: 10 хвилин. Середній час програміста витрачає на налагодження те, що він повинен був перевірити: 2,5 години.
Крейдж

1
Чи справді потрібно формалізувати тестування, коли 80% всіх магазинів взагалі не мають запущених тестів?
Робота

@Craige: Тестування зазвичай займає набагато більше 10 хвилин. Це може зайняти навіть більше часу, ніж загальний витрачений час на налагодження. Однак час, витрачений на тестування, є проактивним (досягнення всебічного висвітлення, навіть якщо лише кілька відсотків тестів виявить дефекти), тоді як час, витрачений на налагодження, є реактивним (дефект стрибає програміст у найзручніший час, ставлячи один під тиском, щоб позбутися помилки, і закінчуючи введенням додаткових помилок як частину виправлення.)
rwong

Відповіді:


21

Тестування покликане знайти дефекти в коді або з іншого кута, щоб довести до відповідного рівня (він ніколи не може бути 100%), що програма робить те, що належить робити. Він може бути ручним або автоматизованим, і він має багато різних видів, таких як блок, інтеграція, система / приймання, стрес, навантаження, замочування тощо.

Налагодження - це процес пошуку та видалення конкретної помилки з програми. Це завжди ручний, разовий процес, оскільки всі помилки різні.

Моя здогадка полягає в тому, що автор означає, що на рівні 0 проводяться лише ручні тести, спеціально, без тестового плану чи нічого, щоб переконатися, що тестувальник дійсно ретельно перевірив тестувану функцію та що тести можуть бути надійно повторюється.


Зауважте, що в цьому контексті помилка - це різниця між тим, що програма мала на меті робити, і тим, що вона насправді робить.

1
Це "Тестування" - це моє розуміння одиничного тесту. Налагодження, особливо якщо це ваш власний код, - це лише проба та помилка.
ott--

4

Налагодження - це ручний покроковий процес, який бере участь, неструктурований і ненадійний. Тестуючи за допомогою налагодження, ви створюєте сценарії, які не повторюються, тому марні для тесту регресії. Усі моменти, окрім 0 (у вашому прикладі), виключають налагодження в моєму огляді саме з цієї причини.


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

Якщо ви налагодження "неструктуровані, ненадійні та ручні", ви робите це не правильно! Або ясно, що ми просто використовуємо ці два слова, щоб означати різні речі.
MemeDeveloper

3

Налагодження - це спроба виправити відомі та невідомі проблеми шляхом методичного переходу коду. Під час налагодження ви, як правило, не зосереджені на коді в цілому, і ви майже завжди працюєте в бекенде, у фактичному коді.

Тестування - це спроба створити проблему за допомогою різних способів використання коду, який потім може бути налагоджений. Це майже завжди робиться в просторі користувачів, де ви запускаєте код, як кінцевий користувач запускає його, і намагається збити його.


1
Я погоджуюсь, і я хотів би наголосити на вашій думці щодо "запуску коду як кінцевий користувач запускає його" лише для того, щоб виділити надмірний акцент, який люди, як правило, ставлять на автоматизоване тестування та TDD. Особливо для веб-додатків - що більш інформативне, код тестування коду чи люди, які тестують веб-сторінки?
MemeDeveloper

2

Простіше кажучи, "помилка" виникла, коли ваша програма під час виконання не веде себе так, як слід. Тобто це не дає очікуваного результату чи результатів. Будь-яка спроба знайти джерело цієї помилки, знайти способи виправити поведінку та внести зміни в код або конфігурацію для виправлення проблеми, можна назвати налагодженням.

Тестування полягає в тому, що ви переконайтеся, що програма або код працює правильно і надійно в різних умовах: ви "тестуєте" свій код, надаючи входи, стандартні правильні входи, навмисно неправильні входи, граничні значення, змінюючи середовище (ОС, конфігураційний файл) . По суті, можна сказати, що ви намагаєтеся виявити помилки і врешті-решт "налагодити" їх у процесі тестування. Сподіваюся, що це допомагає.


1

Їх немає. Якщо ви зробите це правильно:

Удари їх високо, удари їх низько :

Регресійне тестування та видавлювання шафу

Кент Бек, Інститут трьох річок

Анотація: Щоб ефективно ізолювати дефект, починайте з тесту на системному рівні та поступово встромляйте та підрізайте, поки у вас є найменший можливий тест, який демонструє дефект.


Наприклад, у деяких системах - Smalltalk - взагалі немає різниці, оскільки ви можете виконати цикл запису-тесту / запуску-тесту / запису-коду цілком у межах налагоджувача.
Френк Ширар

@FrankShearar: Напевно, не випадково, що вищезгаданий документ був написаний старим Smalltalker. Цикл TDD (який, звичайно, також Кент Бек) - це в основному опис того, як був написаний код Smalltalk з зорі часу: напишіть якийсь прикладний код у робочу область, нехай налагоджувач вловлює не виключення методу, натисніть на створення метод , введіть код, відновіть виконання (так, для відновлення винятків!), повторіть.
Йорг W Міттаг

1

Тестування - це привілей, якою ви користуєтесь, перш ніж випускати клієнта.

Помилки - це кошмар, який ви переживаєте після того, як відпустите клієнта.


ха-ха. Найбільш реалістична / практична відповідь ... якби я зміг проголосувати х 100.
MemeDeveloper

1

Інші згадали, які відмінності між тестуванням та налагодженням.

Я хотів би наголосити на загальній частині. Коли тестер виявить дефект, його необхідно ізолювати. Налагодження - це один із методів виділення проблеми та пошуку першопричин, аналізуючи стан програми та його код під час виконання. Фактично, налагодження визначається Оксфордськими словниками як "процес виявлення та видалення помилок з комп'ютерного обладнання або програмного забезпечення".

Хто виділить (або налагодить зокрема) дефект, буде це тестер чи розробник, питання є другорядним.


0

Модель тестувальної зрілості, яку ви перерахували, - це описи менталітету команди розробників.

З цього списку випливає, не кажучи прямо, - як зміна менталітету впливає на те, як проводиться тестування.

По мірі того, як команда розробників переходить на наступний рівень, розширення сфери тестування.

На рівні 0 тестування не проводиться, оскільки команда вважає, що це не потрібно.

На рівні 1 проводиться тестування для забезпечення номінального покриття основних функціональних можливостей.

На рівні 2 тестування розширюється, щоб включити все до рівня 1, і додає до руйнівного тестування (спеціальна тестова команда, яка має доступ до всієї інформації, до якої мають доступ розробники, включаючи вихідний код та бінарні файли, і намагається знайти помилки, які можуть бути запускається від ролі користувача)

На рівні 3, окрім всього рівня 1–2, додається тестування на основі нефункціональності тестування / тестування на основі некоректності (наприклад, характеристики продуктивності).

На рівні 4 цілі тестування програмного забезпечення добре усвідомлюються кожною людиною, включаючи ІТ-співробітників, орієнтованих на клієнтів. Таким чином, ІТ-персонал зможе надати зворотній зв'язок щодо сценаріїв тестування, покращуючи покриття ризику рівня 4.

(Відмова: Я не маю доступу до підручника, тому моя термінологія може бути неправильною.)


0

Помилки - це видимі помилки. Налагодження - це процес, розпочатий після розробки тестового випадку. Це складніше завдання, ніж тестування, оскільки в процесі налагодження нам потрібно з’ясувати джерело помилки та видалити її, тому інколи налагодження шкодить користувачеві.


0

Якщо говорити в повсякденному, практичному плані, я думаю, що це повністю залежить від контексту .

У великій середній команді, яка працює на високих / дуже високих стандартах (думаю, банківська справа, військові, великі масштаби, високий бюджет чи критичні для бізнесу системи), то я думаю, що чітка "налагодження" повинна бути "результатом тестування" , і вони чітко дуже різні речі . В ідеалі тестування призводить до налагодження (у режимі постановки), і у виробництві нам потрібно майже нуль.

Тестування є широким за обсягом, регулярним і дуже формалізованим - тоді як налагодження - це особливий процес, який трапляється періодично, коли виникає потреба виправити певний збій - що не очевидно і вимагає більш глибокого дослідження функціонування системи та результатів її отримання.

Тут, на мій погляд, тестування є чимось істотним, тоді як налагодження - це специфічний інструмент, необхідний лише тоді, коли дозвіл на помилку непрозорий.

Я цілком розумію очевидну корисність TDD для великих команд і / або систем, ніж просто не можу дозволити собі бути "баггі". Це також очевидно має багато сенсу для складних (часто "бек-енд") систем або якщо в коді висока частка складності порівняно з вихідною. Тоді "тестування" має реалістичний шанс повідомити, коли і чому трапляються збої. Системи, які виконують багато складних робіт і призводять до чітко вимірних результатів, як правило, легко перевіряються, тому тестування відрізняється від налагодження. У цих випадках тестування рішуче має на увазі процедуру, формалізовану методику підтвердження або не підтвердження відповідності очікувань та фактичного результату. Тестування відбувається постійно і час від часу інформує нас про необхідність налагодження.

Було б чудово, якби це була всюдисуща істина, я б хотів, якби мої графіки циклів розмежували чітко визначеним бінарним висновком (червоним, зеленим), але ...

У моєму випадку (що, правда, є особливим - працюючи на 98% соло на невеликих середніх розмірах, на основі недостатнього фінансування, на корпоративних адміністраторах, орієнтованих на дані), я просто не можу зрозуміти, як TDD могло мені допомогти. А точніше "налагодження" та "тестування" практично однакові.

В основному, хоча використання терміна "тестування" передбачає / тісно пов'язане з методологією TDD.

Я знаю, що це абсолютно, абсолютно un-Zeitgeist "ухиляюся від невіруючого, шунь, шун", відчайдушно нехолодно сказати. Але, думаючи про мій контекст, з практичним капелюхом я просто навіть не розпливчасто, в моїй найсміливішій уяві бачу, як TDD міг би допомогти мені отримати більше співвідношення ціни та якості для моїх клієнтів.

А точніше, я категорично не згоден із загальним припущенням, що "тестування" є формальним кодовим процесом.

Моє основне заперечення (застосовне в моєму конкретному * контексті *) полягає в тому, що ...

Якщо я не можу написати код, який працює надійно - то, як, на пекло, я повинен писати код, який надійно працює для тестування зазначеного імовірно субстандартного коду.

Для мене ніколи не бачив ні одного прикладу , ні аргумент , що (в моєму конкретному контексті) Захопленим мені досить , щоб навіть потрудилися думати про написання одного тесту , я міг би писати деякий сміховинно несуттєвий код тестування прямо зараз, може бути , «робить моє сховище повернення користувача сутність з ім'ям == X, коли я запитую це саме - і тільки - це? ", але, мабуть, більше корисності в мені написання цього потоку, можливо, Інтернет-це справді-просто-просто-чисто-нерозумно-мовний самовдоволення-дико-недостатньо поінформоване-кров кипляче-чорно-марно-марнотратне, але я просто відчуваю потребу тут зіграти захисника чорта. (Добре сподіваюся, що хтось покаже мені світло і перетворить мене, можливо, це в кінцевому підсумку дасть моїм клієнтам кращі співвідношення ціни і якості?).

Можливо, "налагодження" іноді те саме, що "тестування". Під цим я справді маю на увазі, що в своєму щоденному робочому житті я приділяю принаймні третину свого часу, граючи з локальною версією моєї системи в різних браузерах, відчайдушно пробуючи різні різні нерозумні речі, намагаючись зламати свою роботу, а потім розслідувати причини, чому це не вдалося, і виправити їх.

Я на 100% погоджуюся з очевидною корисністю в мантрі TDD "червоний / зелений / рефактор", але для мене (працюючи з низьким середнім бюджетом, соло-земля RIA Land) я б дуже полюбив когось, будь ласка, покажіть мені, як я міг можливо , логічно і життєво реалістично отримують будь-яку додаткову цінність від написання більше (так само, як потенційно недосконалий код тестування), ніж я фактично взаємодію з повним (і по суті єдиним) результатом моїх зусиль, які по суті пов'язані з реальною взаємодією людини.

Для мене, коли розробники говорять про "тестування", це, як правило, має на увазі TDD.

Я намагаюся кодувати так, ніби були тести, я думаю, що всі закономірності / практики та тенденції, на які заохочувала все це тестування, орієнтоване на тестування, є фантастичними і красивими, але для мене в моєму маленькому світі "тестування" - це не писати більше коду, його насправді тестування реального світу виводить його наближаючи реалістично, і це практично те саме, що налагодження, а точніше, активна зміна тут - це "налагодження", що є прямим результатом людського, вихідного орієнтованого не автоматизованого "тестування". Це на відміну від загальновизнаного погляду на "тестування" як на щось автоматизоване та формальне, а на "налагодження" - як на щось людське та спеціальне чи неструктуроване.

Якщо мета справді ціна / гроші, і ви робите веб-інтерактивні програми, то результат цього проекту - це веб-сторінки, і, по суті, те, як вони реагують на людський внесок - тому "тестування" найкраще досягається тестуванням ці веб-сторінки, через реальну взаємодію людини. Коли ця взаємодія призводить до несподіваних або небажаних результатів, тоді відбувається "налагодження". Налагодження також тісно пов'язане з ідеєю перевірки стану програми в режимі реального часу. Тестування, як правило, пов'язане з автоматизацією, яка, на мою думку, часто є прикрою асоціацією.

Якщо мета справді цінна для зусиль, а автоматизоване тестування є ефективним та дуже вигідним, а налагодження - це лише результат цього тестування, або погана заміна автоматизованого тестування, то чому це другий найбільш відвідуваний веб-сайт у світі (Facebook ) настільки часто пронизані сліпо очевидними (для користувачів, але явно не тестувальною командою та кодом тестування) помилками?

Можливо, це тому, що вони зосереджуються на заспокійливих зелених вогнях і забувають реально використовувати результати своєї роботи?

Чи занадто багато розробників думають, що тестування - це те, що ви робите з кодом, а налагодження - це те, що ви робите періодично з IDE, оскільки піктограма стає червоною, і ви не можете зрозуміти чому? Я думаю, що ці слова мають з ними сумнівні судження, які загалом затьмарюють практичну реальність того, на що слід зосередити увагу, щоб закрити прогалини між очікуванням та результатами.


-3

Просто,

Тестування засобів, пошук вхідних даних, які призводять до відмови програмного забезпечення під час налагодження, - це процес пошуку вини даної несправності.


це , здається, не пропонує нічого істотного по точкам зроблених і пояснено в попередніх 10 відповідей
комар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.