แบบทดสอบหน่วย? การทดสอบบูรณาการ? การทดสอบการถดถอย? การทดสอบการยอมรับ?


103

มีใครบ้างที่สามารถกำหนดระดับการทดสอบเหล่านี้ได้อย่างชัดเจนเนื่องจากฉันพบว่ามันยากที่จะแยกความแตกต่างเมื่อทำการทดสอบ TDD หรือหน่วย โปรดหากใครสามารถอธิบายได้อย่างละเอียดว่าจะใช้สิ่งเหล่านี้ได้อย่างไร?



คำตอบ:


134

สั้น ๆ :

การทดสอบหน่วย - คุณทดสอบหน่วยแต่ละส่วนของรหัส คิดว่าแต่ละไฟล์หรือคลาส

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

การทดสอบการถดถอย - หลังจากรวม (และอาจแก้ไข) คุณควรเรียกใช้การทดสอบหน่วยของคุณอีกครั้ง นี่คือการทดสอบการถดถอยเพื่อให้แน่ใจว่าการเปลี่ยนแปลงเพิ่มเติมไม่ได้ทำลายหน่วยใด ๆ ที่ทดสอบไปแล้ว การทดสอบหน่วยที่คุณทำไปแล้วได้สร้างการทดสอบหน่วยที่สามารถรันซ้ำแล้วซ้ำอีกสำหรับการทดสอบการถดถอย

การทดสอบการยอมรับ - เมื่อผู้ใช้ / ลูกค้า / ธุรกิจได้รับฟังก์ชันพวกเขา (หรือแผนกทดสอบของคุณ) จะทำการทดสอบการยอมรับเพื่อให้แน่ใจว่าฟังก์ชันตรงตามข้อกำหนด

คุณอาจต้องการตรวจสอบการทดสอบกล่องขาวและกล่องดำ นอกจากนี้ยังมีการทดสอบประสิทธิภาพและโหลดและการทดสอบ "'ilities" ที่ต้องพิจารณา


FYI ในการทดสอบหน่วยหน่วยที่กำลังทดสอบอาจมีหลายขนาด คุณสามารถทดสอบหน่วยตัวอย่างเช่นกลุ่มของคลาสวิธีเดียวหรือแม้แต่วิธีเดียวก็ได้ ที่มา: BlueJ บทที่ 9.3 "การทดสอบหน่วยภายใน BlueJ"
Sebastian Nielsen

ดังนั้นเราจึงไม่เขียน Regression Tests แต่เป็นการรวมกันของการเรียกใช้ Unit Tests และ Integration Tests หลังจากทำการเปลี่ยนแปลง (คุณสมบัติใหม่หรือแก้ไขข้อบกพร่อง) เพื่อตรวจสอบว่าระบบยังคงทำงานตามที่ตั้งใจไว้หรือไม่? ฉันได้ใช้การแก้ไขข้อบกพร่องเมื่อเร็ว ๆ นี้ (ด้วยตรรกะอื่นที่แตกต่างจากที่ใช้งาน) แต่การทดสอบหน่วยหลายครั้งก็ล้มเหลว สามารถปรับการทดสอบให้เข้ากับตรรกะใหม่ได้หรือไม่หรือตรรกะต้อง apdapt กับการทดสอบ (นำไปใช้เท่าที่การทดสอบดำเนินไปอย่างประสบความสำเร็จ)
ความเร็ว

120

การทดสอบหน่วย: เมื่อล้มเหลวจะบอกคุณว่าส่วนใดของรหัสของคุณที่ต้องแก้ไข

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

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

การทดสอบการถดถอย: เมื่อล้มเหลวจะบอกคุณว่าแอปพลิเคชันไม่ทำงานเหมือนที่เคยทำอีกต่อไป


19

นี่คือคำอธิบายง่ายๆสำหรับการทดสอบที่กล่าวถึงแต่ละข้อและเมื่อมีผลบังคับใช้:

การทดสอบ หน่วยการทดสอบหน่วยจะดำเนินการกับหน่วยที่มีอยู่ในตัว (โดยปกติจะเป็นคลาสหรือวิธีการ) และควรดำเนินการเมื่อใดก็ตามที่มีการใช้งานหน่วยหรือการอัปเดตหน่วยเสร็จสิ้น

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

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

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

การทดสอบการถดถอย Regression Test จะดำเนินการเมื่อใดก็ตามที่มีการเปลี่ยนแปลงในระบบเพื่อตรวจสอบว่าไม่มีการแนะนำจุดบกพร่องใหม่ ๆ

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

การทดสอบการยอมรับการทดสอบ การยอมรับจะดำเนินการเมื่อใดก็ตามที่เกี่ยวข้องเพื่อตรวจสอบว่าระบบย่อย (อาจเป็นทั้งระบบ) ตรงตามข้อกำหนดทั้งหมด

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

อย่างน้อยก็เป็นวิธีที่ฉันได้เรียนรู้แม้ว่าฉันแน่ใจว่ามีมุมมองที่ไม่เห็นด้วยอื่น ๆ ไม่ว่าจะด้วยวิธีใดฉันหวังว่าจะช่วยได้


ฉันไม่สามารถแยกความแตกต่างระหว่างการทดสอบการถดถอยและการทดสอบหน่วยได้ ฉันหมายถึงหลังจากการเปลี่ยนแปลง / คอมมิตแต่ละครั้งคุณยังคงมีการทดสอบหน่วยของคุณอยู่ ... และพวกเขาสามารถตรวจจับข้อผิดพลาดที่เกิดจากโค้ดใหม่ได้ ขวา?
น้ำผึ้ง

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

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

14

ฉันจะพยายาม:

  1. การทดสอบหน่วย: นักพัฒนาจะเขียนขึ้นเพื่อทดสอบองค์ประกอบหรือคลาสแต่ละรายการ
  2. การทดสอบการรวมระบบ: การทดสอบที่ครอบคลุมมากขึ้นซึ่งจะเกี่ยวข้องกับส่วนประกอบหรือแพ็คเกจต่างๆที่ต้องทำงานร่วมกัน
  3. การทดสอบการถดถอย: การเปลี่ยนแปลงแอปพลิเคชันเพียงครั้งเดียวจะบังคับให้คุณเรียกใช้การทดสอบทั้งหมดอีกครั้งและตรวจสอบฟังก์ชันการทำงานทั้งหมด
  4. การทดสอบการยอมรับ: ผู้ใช้ปลายทางหรือ QA ดำเนินการก่อนที่จะลงชื่อออกเพื่อยอมรับการส่งแอปพลิเคชัน ข้อความระบุว่า "แอปตรงตามข้อกำหนดของฉัน"

14

แบบทดสอบหน่วย:วิธีการเดียวของฉันทำงานถูกต้องหรือไม่? (ไม่มีการอ้างอิงหรือเลียนแบบการอ้างอิง)

การทดสอบการรวม:โมดูลที่พัฒนาแยกกันสองโมดูลของฉันทำงานเป็นหลักเมื่อประกอบเข้าด้วยกันหรือไม่

การทดสอบการถดถอย:ฉันทำอะไรผิดพลาดโดยการเปลี่ยน / เขียนโค้ดใหม่หรือไม่? (การรันการทดสอบหน่วย / การรวมกับทุกคอมมิตเป็นการทดสอบการถดถอย (อัตโนมัติ) ทางเทคนิค) มักใช้ในบริบทของ QA - ด้วยตนเองหรืออัตโนมัติ

การทดสอบการยอมรับ : การทดสอบทำโดยลูกค้าว่าเขา "ยอมรับ" SW ที่ส่งมอบ


0

ไม่สามารถแสดงความคิดเห็นได้ (ชื่อเสียงต่ำ: - |) ดังนั้น ...

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

โดยทั่วไปการทดสอบหน่วยจะรันบนเครื่องของนักพัฒนา (และอาจเป็นในระหว่างการสร้าง CI) โดยมีการจำลองการอ้างอิงกับทรัพยากร / ระบบอื่น ๆ

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

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

นอกจากนี้ "ilities" อื่น ๆ ยังต้องการสภาพแวดล้อมให้ใกล้เคียงกับความเป็นจริงมากที่สุดเพื่อจำลองประสบการณ์ในการผลิตเช่นการทดสอบประสิทธิภาพความปลอดภัย ...

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