Яка різниця між інтеграційним тестуванням та функціональним тестуванням? [зачинено]


132

Чи однакове тестування функціонального тестування та інтеграції?

Ви починаєте тестування через тестування одиниць, після закінчення тестування одиниці ви переходите до тестування інтеграції, де ви протестуєте систему в цілому. Чи функціональне тестування збігається з тестуванням інтеграції? Ви все ще приймаєте систему в цілому і випробовуєте її на відповідність функціональності.


1
можливий дублікат [Agile Way: Integration Testing vs Functional Testing або те і інше? ] ( Stackoverflow.com/questions/555899 / ... )
Паскаль Thivent

14
Я можу запропонувати вам прийняти відповіді з попередніх питань, які ви задали?
Стефано Борині

Дивіться мою відповідь тут: stackoverflow.com/questions/2741832/…
Андрейс

6
Треба сказати, що це питання означає, що з цим сайтом не так. Що не так у цьому питанні? Як воно занадто широке? Це запитує щось ДУЖЕ специфічне, пов'язане з програмуванням. Яка різниця між чимось може бути представлена ​​навіть математично. Просто здається, існує величезна кількість справді важливих, дійсно актуальних питань, які закриваються з незрозумілих причин. Я знаю, що ви серйозні, так що люди мені скажуть, що я помиляюся, але факт, коли ці каусти розбиваються на сайти, такі як Quara.com, підтверджує, що я правий. [В основному ТАК відміняє частку ринку].
Jim Maguire

1
Я погоджуюся з @JimMaguire: запитане запитання - це питання "так / ні" (плюс пояснення, чому так чи ні). Я не бачу, чому це вважається не зосередженим.
боб

Відповіді:


101

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

Функціональне тестування - це тестування системи на функціональні вимоги продукту. Управління продуктами / проектами зазвичай записує це, і QA формалізує процес того, що повинен бачити і переживати користувач, і яким повинен бути кінцевий результат цих процесів. Залежно від продукту це може бути автоматизовано чи ні.


9
Спасибі ... так, але у функціональному тестуванні також, коли ми тестуємо систему на предмет функціональної вимоги, що час також ми сприймаємо її як інтегровану систему .. І під час виконання функціональних налаштувань ми також з’ясуємо, що працюють різні підрозділи разом, щоб це можна було зробити як інтеграційне тестування ...
Mishthi

3
Спеціально в нашому середовищі ми завжди вважали тест на nunit, написаний проти одного класу, тести інтеграції - це тести nunit або тести скриптів sql, для яких потрібен більше класу, бази даних або іншої системи (зазвичай вимагає повної інсталяції) і функціональні тести - це тест, який проводиться QA або автоматизоване тестування інтерфейсу користувача.
aceinthehole

1
Крім того, я б сказав, що якщо ви ще не робили тестування інтеграції до функціонального тестування, ви робите обидва одночасно, і ви просто збираєтесь виявляти помилки в частинах інтеграції під час тестування функціональних вимог.
aceinthehole

1
як це не прийнята відповідь !?
tftd

@tftd, оскільки автор цього питання був неактивним з 2010 року ...
t3chb0t

20

Функціональне тестування :

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

Наприклад: сторінка входу.

ви надаєте ім’я користувача та пароль, ви перевіряєте, переходить він на домашню сторінку чи ні.

Інтеграційне тестування :

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

Наприклад: Надсилання електронної пошти

Ви відправляєте одну пошту комусь, відбувається потік даних, а також змінюється база даних (надіслана таблиця збільшує значення на 1)


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

Сподіваюся, це вам допомогло.


3
База даних - це детальна інформація про стан програми. Натиснувши на посилання, також можна змінити стан програми.
alehro

@ jsborn17 - це інтеграційне тестування, застосовне до додаткового інтерфейсу, що спілкується з API, тому що ми не в змозі запустити API?
Вансієхо

8

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

Тестування одиниць легко визначити. Він тестує CUT ( Code Under Test ) і більше нічого. (Ну, як мінімум іншого.) Це означає глузування, підробки та світильники.

На іншому кінці спектру є те, що багато хто називає тестуванням системної інтеграції . Це тестування, наскільки це можливо, але все ж шукає помилок у власній CUT.

А як щодо величезних просторів між?

  • Наприклад, що робити, якщо ви протестуєте трохи більше ніж CUT? Що робити, якщо ви включите функцію Фібоначчі, замість того, щоб використовувати кріплення, які ви вводили? Я б назвав це функціональним тестуванням , але світ зі мною не погоджується.
  • Що робити, якщо ви включите time()або rand()? Або що робити, якщо ви телефонуєте http://google.com? Я б назвав це тестування системи , але знову ж таки, я один.

Чому це має значення? Тому що тести на систему недостовірні. Вони необхідні, але іноді вони можуть виходити з ладу з незалежних від вас причин. З іншого боку, функціональні тести завжди повинні проходити, а не провалюватися випадковим чином; якщо вони швидкі, вони також можуть бути використані з самого початку для використання тестово керованої розробки без написання занадто багато тестів для вашої внутрішньої реалізації. Іншими словами, я думаю, що одиничні тести можуть бути більшими проблемами, ніж вони варті, і в мене хороша компанія .

Я поставив тести на 3 осі з усіма їх нулями при одиничному тестуванні :

  1. Функціональне тестування: використання реального коду все глибше і глибше стека викликів.
  2. Інтеграція тестування: всі вище і вище вгору ваш виклик в стек; Іншими словами, тестуючи свій CUT, запустивши код, який би його використовував.
  3. Тестування системи: все більше і більше повторюваних операцій (планувальник O / S, годинник, мережа тощо )

Тест може легко пройти всі 3, в різній мірі.


функціональні тести завжди проходять? чи ти маєш на увазі, що функціональні тести завжди повинні проходити?
aceinthehole

1
Вони не повинні провалюватися випадковим чином. Коли вони зазнають невдачі, вони повинні провалюватися кожного разу. Наприклад, вони не повинні включати дзвінки до інших хостів. Можливо, їх слід назвати тестами на поведінку ? Я не знаю найкращого терміна. Я просто знаю, що вони є найважливішими тестами, і їх, як правило, не помічають у великому розриві між чистими, повністю знущаються одиничними тестами та тестами системної інтеграції високого рівня .
cdunn2001

"Вони не повинні провалюватися випадковим чином". - Термін може бути таким, що вони "детерміновані"
kleaver

7

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

Інтеграційне тестування: обробка, де перевіряється потік даних між двома модулями.


4

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

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

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


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

4

Інтеграційне тестування - Інтеграційне тестування - це не що інше, як тестування різних модулів. Ви повинні перевірити взаємозв'язок між модулями. Коли ви відкриваєте facebook, ви бачите сторінку входу після введення ідентифікатора та пароля входу, ви бачите домашню сторінку facebook, отже, сторінка входу - це один модуль, а домашня сторінка - інший модуль. Ви маєте перевіряти лише взаємозв'язок між ними, це означає, що коли Ви ввійшли в систему, тоді відкриватиметься лише домашня сторінка, а не поле повідомлень чи щось інше. Існує 2 основні типи інтеграційного тестування підходу TOP-DOWN та BOTTOM UP.

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


2

У тестуванні функціонального тестування зосереджується лише функціональність та підфункціональність застосування. Функціональність програми повинна працювати належним чином чи ні.

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


2

Інтеграційний тест: - Коли тестування підрозділу завершено і проблеми вирішені пов'язаними компонентами, тоді всі необхідні компоненти потрібно інтегрувати в одну систему, щоб вона могла виконувати операцію. Після поєднання компонентів системи, Щоб перевірити, чи працює система належним чином чи ні, такий вид тестування називається інтеграційним тестуванням.

Функціональне тестування: - Тестування в основному поділяється на дві категорії як 1.Функціональне тестування 2.Нефункціональне тестування ** Функціональне тестування: - Перевірити, чи працює програмне забезпечення відповідно до вимог користувача чи ні. ** Нефункціональне тестування: - перевірити, чи відповідає програмне забезпечення таким критеріям якості, як Стрес тест, Тест безпеки тощо.

Зазвичай, Клієнт надає вимоги лише до функціонального тесту та для нефункціонального тесту, вимоги не слід згадувати, але додаток обов'язково виконує цю діяльність.


2

Інтеграційне тестування

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

    Функціональне тестування

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


  • 1

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


    0

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

    Наприклад: більшість розробників Rails розглядають одиничні тести як тести моделей, функціональні тести як тести контролерів та інтеграційні тести, як ті, що використовують щось на зразок Capybara для дослідження програми з точки зору кінцевого користувача - тобто навігації по створеному HTML-коду сторінки за допомогою DOM перевірити очікування.

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

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

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