อะไรคือความแตกต่างระหว่างการทดสอบการรวมและการทดสอบการทำงาน? [ปิด]


132

การทดสอบการทำงานและการทดสอบการรวมระบบเหมือนกันหรือไม่

คุณเริ่มการทดสอบของคุณผ่านการทดสอบหน่วยจากนั้นหลังจากเสร็จสิ้นการทดสอบหน่วยคุณไปทำการทดสอบการรวมที่คุณทดสอบระบบโดยรวม การทดสอบฟังก์ชันเหมือนกับการทดสอบการรวมหรือไม่ คุณยังคงใช้ระบบโดยรวมและทดสอบความสอดคล้องของฟังก์ชันการทำงาน


1
เป็นไปได้ที่จะซ้ำกันของ [The Agile Way: Integration Testing vs Functional Testing หรือทั้งสองอย่าง? ] ( stackoverflow.com/questions/555899/… )
Pascal Thivent

14
ฉันขอแนะนำให้คุณยอมรับคำตอบจากคำถามในอดีตที่คุณเคยถามได้หรือไม่
Stefano Borini

ดูคำตอบของฉันที่นี่: stackoverflow.com/questions/2741832/…
Andrejs

6
ฉันต้องบอกว่าคำถามนี้แสดงถึงสิ่งที่ผิดปกติกับไซต์นี้ คำถามนี้มีอะไรผิดปกติ มันกว้างเกินไปได้อย่างไร? กำลังถามบางสิ่งที่เฉพาะเจาะจงมากที่เกี่ยวข้องกับการเขียนโปรแกรม อะไรคือความแตกต่างระหว่างบางสิ่งบางอย่างที่สามารถแสดงในทางคณิตศาสตร์ได้ดูเหมือนว่ามีคำถามที่สำคัญและเกี่ยวข้องจริงๆจำนวนมากซึ่งปิดตัวลงด้วยเหตุผลที่อธิบายไม่ได้ ฉันรู้ว่าคุณจริงจังดังนั้นคนทั่วไปจะบอกฉันว่าฉันผิด แต่ความจริงแล้วคำพูดเหล่านี้ถูกทำลายไปยังเว็บไซต์เช่น Quara.com พิสูจน์ว่าฉันพูดถูก [โดยทั่วไปแล้ว SO จะสละส่วนแบ่งการตลาด]
Jim Maguire

1
ฉันเห็นด้วยกับ @JimMaguire: คำถามที่ถามคือคำถาม "ใช่ / ไม่ใช่" (พร้อมคำอธิบายว่าทำไมใช่หรือไม่ใช่) ฉันไม่เห็นว่าทำไมถึงถูกมองว่าไม่เน้น
บ็อบ

คำตอบ:


101

การทดสอบการรวมคือเมื่อคุณทดสอบองค์ประกอบมากกว่าหนึ่งองค์ประกอบและวิธีการทำงานร่วมกัน ตัวอย่างเช่นวิธีที่ระบบอื่นโต้ตอบกับระบบของคุณหรือฐานข้อมูลโต้ตอบกับชั้นนามธรรมข้อมูลของคุณ โดยปกติสิ่งนี้ต้องใช้ระบบที่ติดตั้งอย่างสมบูรณ์แม้ว่าจะไม่ได้ใช้ในรูปแบบที่บริสุทธิ์ที่สุดก็ตาม

การทดสอบการทำงานคือเมื่อคุณทดสอบระบบกับข้อกำหนดการทำงานของผลิตภัณฑ์ การจัดการผลิตภัณฑ์ / โครงการมักจะเขียนสิ่งเหล่านี้ขึ้นมาและ QA จะกำหนดกระบวนการของสิ่งที่ผู้ใช้ควรเห็นและสัมผัสอย่างเป็นทางการและผลลัพธ์สุดท้ายของกระบวนการเหล่านั้นควรเป็นอย่างไร ขึ้นอยู่กับผลิตภัณฑ์นี้สามารถเป็นอัตโนมัติหรือไม่


9
Thanx ... ใช่ แต่ในการทดสอบการทำงานยังเมื่อเราทดสอบระบบกับข้อกำหนดการทำงานในขณะนั้นเราก็ใช้มันเป็นระบบรวม .. และในขณะที่ทำการ tetsing ฟังก์ชันเราจะพบว่าหน่วยที่แตกต่างกันทำงานอย่างไร เข้าด้วยกันจึงสามารถใช้เป็นการทดสอบการบูรณาการได้ ...
มิชธี

3
โดยเฉพาะอย่างยิ่งในสภาพแวดล้อมของเราเรามักจะถือว่าการทดสอบหน่วยเป็นการทดสอบแม่ชีที่เขียนเทียบกับคลาสเดียวการทดสอบการรวมเป็นการทดสอบแม่ชีหรือการทดสอบสคริปต์ sql ที่ต้องการมากกว่าคลาสหรือฐานข้อมูลหรือระบบอื่น (โดยปกติจะต้องติดตั้งแบบเต็ม) และการทดสอบการทำงานคือการทดสอบที่ QA รันหรือการทดสอบ UI อัตโนมัติ
aceinthehole

1
นอกจากนี้ฉันจะบอกว่าหากคุณยังไม่ได้ทำการทดสอบการผสานรวมก่อนการทดสอบการทำงานแสดงว่าคุณกำลังทำทั้งสองอย่างพร้อมกันและคุณจะพบข้อผิดพลาดในส่วนการรวมในขณะที่คุณกำลังทดสอบข้อกำหนดการทำงาน
aceinthehole

1
นี่ไม่ใช่คำตอบที่ยอมรับได้อย่างไร!?
tftd

@tftd เนื่องจากผู้สร้าง quesiton นี้ไม่ได้ใช้งานตั้งแต่ปี 2010 ...
t3chb0t

20

การทดสอบการทำงาน :

ใช่เรากำลังทดสอบผลิตภัณฑ์หรือซอฟต์แวร์โดยรวมว่าทำงานได้ดีหรือไม่ (ปุ่มทดสอบลิงก์ ฯลฯ )

ตัวอย่างเช่น: หน้าเข้าสู่ระบบ

คุณระบุชื่อผู้ใช้และรหัสผ่านคุณทดสอบว่ากำลังพาคุณไปที่โฮมเพจหรือไม่

การทดสอบการรวมระบบ :

ใช่คุณทดสอบซอฟต์แวร์รวมเท่านั้น แต่คุณทดสอบว่ากระแสข้อมูลเกิดขึ้นที่ใดและมีการเปลี่ยนแปลงเกิดขึ้นในฐานข้อมูลหรือไม่

ตัวอย่างเช่น: การส่งอีเมล

คุณส่งเมลหนึ่งฉบับถึงใครบางคนมีการไหลของข้อมูลและยังมีการเปลี่ยนแปลงในฐานข้อมูล (ตารางที่ส่งจะเพิ่มค่าขึ้น 1)


ข้อควรจำ - การคลิกลิงก์และรูปภาพไม่ใช่การทดสอบการผสานรวม หวังว่าคุณจะเข้าใจว่าทำไมเนื่องจากไม่มีการเปลี่ยนแปลงในฐานข้อมูลเพียงแค่คลิกที่ลิงค์

หวังว่านี่จะช่วยคุณได้


3
ฐานข้อมูลเป็นรายละเอียดการใช้งานของสถานะโปรแกรม การคลิกที่ลิงค์ยังสามารถเปลี่ยนสถานะโปรแกรมได้
alehro

@ jsborn17 คือการทดสอบการรวมที่ใช้ได้กับแอปพลิเคชันฟรอนต์เอนด์ที่สื่อสารกับ API แม้ว่าเราจะไม่สามารถเรียกใช้ API ได้
Wancieho

8

นี่เป็นความแตกต่างที่สำคัญ แต่น่าเสียดายที่คุณจะไม่พบข้อตกลง ปัญหาคือนักพัฒนาส่วนใหญ่กำหนดสิ่งเหล่านี้จากมุมมองของพวกเขาเอง คล้ายกับการถกเถียงเรื่องดาวพลูโต (ถ้ามันอยู่ใกล้ดวงอาทิตย์มากขึ้นมันจะเป็นดาวเคราะห์หรือไม่)

การทดสอบหน่วยเป็นเรื่องง่ายที่จะกำหนด มันทดสอบ CUT ( Code Under Test ) และไม่มีอะไรอื่น (ให้น้อยที่สุดเท่าที่จะทำได้) นั่นหมายถึงการล้อเลียนการปลอมและการติดตั้ง

ในตอนท้าย ๆ ของสเปกตรัมมีสิ่งที่หลายคนเรียกการทดสอบการรวมระบบ นั่นเป็นการทดสอบให้มากที่สุด แต่ยังคงมองหาจุดบกพร่องในการตัดของคุณเอง

แต่สิ่งที่กว้างใหญ่ระหว่าง?

  • ตัวอย่างเช่นถ้าคุณทดสอบมากกว่า CUT เพียงเล็กน้อยล่ะ? จะเกิดอะไรขึ้นถ้าคุณรวมฟังก์ชัน Fibonacci แทนที่จะใช้ฟิกซ์เจอร์ที่คุณฉีดเข้าไป? ฉันจะเรียกสิ่งนั้นว่าการทดสอบการทำงานแต่โลกไม่เห็นด้วยกับฉัน
  • ถ้าคุณรวมtime()หรือrand()? หรือยังไงถ้าโทรมาhttp://google.com? ฉันจะเรียกว่าการทดสอบระบบแต่อีกครั้งฉันอยู่คนเดียว

ทำไมเรื่องนี้? เนื่องจากการทดสอบระบบไม่น่าเชื่อถือ สิ่งเหล่านี้มีความจำเป็น แต่บางครั้งอาจล้มเหลวด้วยเหตุผลที่อยู่นอกเหนือการควบคุมของคุณ ในทางกลับกันการทดสอบการทำงานควรผ่านเสมอไม่ล้มเหลวแบบสุ่ม หากรวดเร็วก็อาจใช้ตั้งแต่เริ่มต้นเพื่อใช้ Test-Driven Development โดยไม่ต้องเขียนแบบทดสอบมากเกินไปสำหรับการใช้งานภายในของคุณ ในคำอื่น ๆ ผมคิดว่าการทดสอบหน่วยสามารถเป็นปัญหามากขึ้นกว่าที่พวกเขามีความคุ้มค่าและฉันมีบริษัท ที่ดี

ฉันทำการทดสอบใน 3 แกนโดยมีศูนย์ทั้งหมดที่การทดสอบหน่วย :

  1. การทดสอบการใช้งาน: ใช้โค้ดจริงที่ลึกลงไปและลึกลงไปใน call-stack ของคุณ
  2. การทดสอบการรวมระบบ: สูงขึ้นและสูงขึ้นใน call-stack ของคุณ กล่าวอีกนัยหนึ่งคือทดสอบ CUT ของคุณโดยเรียกใช้โค้ดที่จะใช้
  3. การทดสอบระบบ: การดำเนินการที่ไม่สามารถตอบสนองได้มากขึ้นเรื่อย ๆ (ตัวกำหนดตารางเวลา O / S นาฬิกาเครือข่ายฯลฯ )

การทดสอบสามารถเป็นได้ทั้ง 3 แบบไปจนถึงองศาที่แตกต่างกัน


การทดสอบการทำงานมักจะผ่านไหม หรือคุณหมายถึงการทดสอบการทำงานควร ผ่านเสมอ?
aceinthehole

1
พวกเขาไม่ควรล้มเหลวแบบสุ่ม เมื่อล้มเหลวก็ควรล้มเหลวทุกครั้ง เช่นไม่ควรรวมการโทรไปยังโฮสต์อื่น ๆ บางทีพวกเขาควรจะเรียกว่าBehavioral Tests ? ฉันไม่รู้จักคำศัพท์ที่ดีที่สุด ฉันเพิ่งรู้ว่าพวกเขาเป็นการทดสอบที่สำคัญที่สุดและโดยทั่วไปแล้วพวกเขาจะถูกมองข้ามในช่องว่างที่กว้างระหว่างการทดสอบหน่วยที่บริสุทธิ์และจำลองอย่างสมบูรณ์และการทดสอบการรวมระบบระดับสูงการทดสอบระบบบูรณาการ
cdunn2001

"พวกเขาไม่ควรล้มเหลวแบบสุ่ม" - อาจมีคำว่า "กำหนด"
kleaver

7

การทดสอบการทำงาน: เป็นกระบวนการทดสอบที่ทดสอบส่วนประกอบแต่ละส่วนของโมดูล เช่น: หากหน้าเว็บมีช่องข้อความปุ่มวิทยุปุ่มและส่วนประกอบแบบหล่นลงอื่น ๆ ที่จำเป็นต้องตรวจสอบ

การทดสอบการรวม: ประมวลผลที่กระแสข้อมูลระหว่าง 2 โมดูลถูกตรวจสอบ


4

ฉันจะบอกว่าทั้งสองเชื่อมโยงกันอย่างแน่นหนาและยากมากที่จะแยกแยะความแตกต่างระหว่างพวกเขา ในมุมมองของฉันการทดสอบการรวมเป็นส่วนหนึ่งของการทดสอบการทำงาน

การทดสอบการทำงานเป็นไปตามข้อกำหนดเบื้องต้นที่คุณได้รับ คุณจะทดสอบพฤติกรรมการใช้งานเป็นไปตามที่คาดไว้กับข้อกำหนด

เมื่อพูดถึงการทดสอบการรวมมันคือปฏิสัมพันธ์ระหว่างโมดูล หากโมดูลส่งอินพุตโมดูล B สามารถประมวลผลได้หรือไม่


+1 สำหรับ "การทดสอบการผสานรวมเป็นส่วนหนึ่งของการทดสอบการทำงาน" - ประสบการณ์ของฉันยังแสดงให้เห็นว่าวิธีการทดสอบดังกล่าวมีความหมายมากที่สุดหากคุณมุ่งหวังให้ได้ผลลัพธ์ที่รวดเร็ว ตัวอย่างเช่นในรหัสทดสอบของฉันฉันมักจะถือว่าระบบเป็นหน่วยรวมเดียว - ฉันตั้งค่าฐานข้อมูลในหน่วยความจำจากนั้นป้อนตัวควบคุม MVC ของแอปของฉันด้วยข้อมูลทดสอบและตรวจสอบการตอบสนองของพวกเขาและตรวจสอบข้อมูลในฐานข้อมูลด้วย ตรวจสอบให้แน่ใจว่าการตรวจสอบข้อมูลทั้งหมดทำงานตามที่คาดไว้เพื่อหลีกเลี่ยงข้อบกพร่องเมื่อตัวควบคุม MVC ส่งคืนการตอบสนองที่ถูกต้อง แต่ไม่ได้ส่งผ่านไปยังชั้นฐานข้อมูลอย่างถูกต้อง
JustAMartin

4

การทดสอบการบูรณาการ - การทดสอบการรวมเป็นเพียงการทดสอบโมดูลต่างๆ คุณต้องทดสอบความสัมพันธ์ระหว่างโมดูล เช่นคุณเปิด facebook แล้วคุณจะเห็นหน้าเข้าสู่ระบบหลังจากป้อนรหัสเข้าสู่ระบบและรหัสผ่านคุณจะเห็นหน้าแรกของ Facebook ดังนั้นหน้าเข้าสู่ระบบจึงเป็นโมดูลเดียวและหน้าแรกเป็นอีกโมดูลหนึ่ง คุณต้องตรวจสอบเฉพาะความสัมพันธ์ระหว่างกันหมายความว่าเมื่อคุณเข้าสู่ระบบแล้วต้องเปิดหน้าแรกเท่านั้นไม่ใช่กล่องข้อความหรือสิ่งอื่นใด มี 2 ​​ประเภทหลักของการทดสอบการรวมเข้าด้วยกันวิธีการบนลงล่างและวิธีการด้านล่าง

การทดสอบการทำงาน - ในการทดสอบการทำงานคุณต้องคิดถึงอินพุตและเอาต์พุตเท่านั้น ในกรณีนี้คุณต้องคิดเหมือนผู้ใช้จริง การทดสอบอินพุตที่คุณให้และเอาต์พุตใดที่คุณได้รับคือการทดสอบฟังก์ชัน คุณต้องสังเกตผลลัพธ์เท่านั้น ในการทดสอบการทำงานคุณไม่จำเป็นต้องทดสอบการเข้ารหัสแอปพลิเคชันหรือซอฟต์แวร์


2

ในเครื่องทดสอบการทดสอบฟังก์ชันมุ่งเน้นเฉพาะฟังก์ชันการทำงานและฟังก์ชันย่อยของแอปพลิเคชันเท่านั้น ฟังก์ชันการทำงานของแอปควรทำงานอย่างถูกต้องหรือไม่

ในการทดสอบการรวมต้องตรวจสอบการพึ่งพาระหว่างโมดูลหรือโมดูลย่อยตัวอย่างสำหรับระเบียนโมดูลควรดึงข้อมูลและแสดงอย่างถูกต้องในโมดูลอื่น


2

การทดสอบการรวม: - เมื่อการทดสอบหน่วยเสร็จสิ้นและปัญหาได้รับการแก้ไขไปยังส่วนประกอบที่เกี่ยวข้องส่วนประกอบที่จำเป็นทั้งหมดจะต้องรวมเข้าด้วยกันภายใต้ระบบเดียวเพื่อให้สามารถดำเนินการได้ หลังจากรวมส่วนประกอบของระบบแล้วเพื่อทดสอบว่าระบบทำงานอย่างถูกต้องหรือไม่การทดสอบประเภทนี้เรียกว่าการทดสอบการรวม

การทดสอบการทำงาน: - การทดสอบส่วนใหญ่แบ่งออกเป็น 2 ประเภทคือ 1.Functional Testing 2.Non-Functional Testing ** Functional Testing: - เพื่อทดสอบว่าซอฟต์แวร์ทำงานตามความต้องการของผู้ใช้หรือไม่ ** Non-Functional Testing: - เพื่อทดสอบว่าซอฟต์แวร์ตรงตามเกณฑ์คุณภาพเช่น Stress Test, Security test เป็นต้นหรือไม่

โดยปกติแล้วลูกค้าจะให้ข้อกำหนดสำหรับการทดสอบการทำงานเท่านั้นและสำหรับการทดสอบที่ไม่ใช่ฟังก์ชันไม่ควรกล่าวถึงข้อกำหนด แต่แอปพลิเคชันจำเป็นต้องดำเนินกิจกรรมเหล่านั้น


2

การทดสอบการผสานรวม

  • จะเห็นได้ว่าโมดูลต่างๆของระบบทำงานร่วมกันอย่างไร
  • ส่วนใหญ่เราหมายถึงฟังก์ชันการทำงานแบบบูรณาการของโมดูลต่างๆซึ่งเป็นส่วนประกอบที่แตกต่างกันของระบบ
  • เพื่อให้ระบบหรือผลิตภัณฑ์ซอฟต์แวร์ทำงานได้อย่างมีประสิทธิภาพส่วนประกอบทุกส่วนจะต้องซิงค์กัน
  • เครื่องมือเวลาส่วนใหญ่ที่เราใช้สำหรับการทดสอบการรวมจะถูกเลือกที่เราใช้สำหรับการทดสอบหน่วย
  • ใช้ในสถานการณ์ที่ซับซ้อนเมื่อการทดสอบหน่วยพิสูจน์ได้ว่าไม่เพียงพอที่จะทดสอบระบบ

    การทดสอบการทำงาน

  • สามารถกำหนดเป็นการทดสอบการทำงานของแต่ละโมดูล
  • หมายถึงการทดสอบผลิตภัณฑ์ซอฟต์แวร์ในระดับบุคคลเพื่อตรวจสอบการทำงานของผลิตภัณฑ์
  • กรณีทดสอบได้รับการพัฒนาเพื่อตรวจสอบซอฟต์แวร์สำหรับผลลัพธ์ที่คาดหวังและไม่คาดคิด
  • การทดสอบประเภทนี้ดำเนินการเพิ่มเติมจากมุมมองของผู้ใช้ กล่าวคือจะพิจารณาถึงความคาดหวังของผู้ใช้สำหรับข้อมูลประเภทหนึ่ง
  • เรียกอีกอย่างว่าการทดสอบกล่องดำเช่นเดียวกับการทดสอบแบบปิดกล่อง


  • 1

    การตรวจสอบการทำงานของแอปพลิเคชันโดยทั่วไปเรียกว่าการทดสอบการทำงานโดยที่การทดสอบการรวมคือการตรวจสอบการไหลของข้อมูลจากโมดูลหนึ่งไปยังอีกโมดูลหนึ่ง มาดูตัวอย่างของแอปโอนเงินสมมติว่าเรามีหน้าที่ป้อนข้อมูลประจำตัวทั้งหมดและหากเรากดปุ่มโอนเงินและหลังจากนั้นหากเราประสบความสำเร็จใด ๆ นี่คือการทดสอบการทำงาน แต่ในตัวอย่างเดียวกันหากเราตรวจสอบการโอนเงินแสดงว่าเป็นการทดสอบการรวม


    0

    ผู้เขียนแตกต่างกันมากในเรื่องนี้ ฉันไม่เชื่อว่ามีการตีความที่ถูกต้องสำหรับเรื่องนี้ มันขึ้นอยู่กับ

    ตัวอย่างเช่นนักพัฒนา Rails ส่วนใหญ่ถือว่าการทดสอบหน่วยเป็นการทดสอบแบบจำลองการทดสอบการทำงานเป็นการทดสอบตัวควบคุมและการทดสอบการรวมเช่นเดียวกับการใช้สิ่งต่างๆเช่น Capybara เพื่อสำรวจแอปพลิเคชันจากมุมมองของผู้ใช้ขั้นสุดท้ายนั่นคือการนำทางผ่าน HTML ที่สร้างขึ้นของหน้าโดยใช้ DOM เพื่อตรวจสอบความคาดหวัง

    นอกจากนี้ยังมีการทดสอบการยอมรับซึ่งจะเป็นเอกสาร "สด" ของระบบ (โดยปกติจะใช้ Gherkin เพื่อให้เขียนเป็นภาษาธรรมชาติได้) โดยอธิบายคุณสมบัติทั้งหมดของแอปพลิเคชันผ่านสถานการณ์ต่างๆซึ่งจะเป็นไปโดยอัตโนมัติ โดยนักพัฒนา IMHO เหล่านี้อาจถือได้ว่าเป็นทั้งการทดสอบการทำงานและการทดสอบการรวม

    เมื่อคุณเข้าใจแนวคิดหลักเบื้องหลังแต่ละข้อแล้วคุณจะมีความยืดหยุ่นมากขึ้นเกี่ยวกับสิ่งที่ถูกหรือผิด ดังนั้นอีกครั้ง IMHO การทดสอบการทำงานอาจถือได้ว่าเป็นการทดสอบการรวม สำหรับการทดสอบการบูรณาการขึ้นอยู่กับประเภทของการผสานรวมที่ใช้อยู่อาจไม่จำเป็นต้องคำนึงถึงการทดสอบการทำงาน แต่โดยทั่วไปคุณมีข้อกำหนดบางประการอยู่ในใจเมื่อคุณเขียนการทดสอบการรวมดังนั้นเวลาส่วนใหญ่จึงสามารถพิจารณาได้เช่นกัน การทดสอบการทำงาน

    โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
    Licensed under cc by-sa 3.0 with attribution required.