ความแตกต่างระหว่างหน่วยการทดสอบการใช้งานการยอมรับและการรวมเข้าด้วยกันคืออะไร [ปิด]


799

อะไรคือความแตกต่างระหว่างการทดสอบหน่วยการใช้งานการยอมรับและการรวมระบบ (และการทดสอบประเภทอื่น ๆ ที่ฉันไม่ได้พูดถึง)


1
ดูเพิ่มเติมsqa.stackexchange.com/a/23396/8992
Michael Durrant

1
ฉันคิดว่าคุณลืมที่จะรวมการทดสอบโหลด!
พูดคุยราคาถูกแสดงรหัส

คำตอบ:


1350

คุณจะได้รับคำตอบที่แตกต่างกันเล็กน้อยขึ้นอยู่กับที่คุณมอง ฉันอ่านเรื่องนี้เยอะและนี่คือการกลั่นของฉัน อีกครั้งเหล่านี้มีขนเล็กน้อยและอื่น ๆ อาจไม่เห็นด้วย

ทดสอบหน่วย

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

  • โทรออกไปยังผู้ทำงานร่วมกัน (ไม่สำคัญ)
  • เข้าถึงเครือข่าย
  • ตีฐานข้อมูล
  • ใช้ระบบไฟล์
  • หมุนด้าย
  • เป็นต้น

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

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

การทดสอบบูรณาการ

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

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

ข้อได้เปรียบหลักคือพวกเขาจะพบข้อบกพร่องที่การทดสอบหน่วยไม่สามารถเช่นการเดินสายบั๊ก (เช่นอินสแตนซ์ของคลาส A โดยไม่คาดคิดได้รับอินสแตนซ์ที่ว่างของ B) และข้อผิดพลาดของสภาพแวดล้อม เครื่องหลัก 4 ของเพื่อนร่วมงานไม่สามารถผ่านการทดสอบ) ข้อเสียเปรียบหลักคือการทดสอบการรวมแตะรหัสมากขึ้นมีความน่าเชื่อถือน้อยลงความล้มเหลวยากต่อการวินิจฉัยและการทดสอบนั้นยากที่จะรักษา

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

การทดสอบการใช้งาน

การทดสอบการทำงานตรวจสอบคุณสมบัติเฉพาะสำหรับความถูกต้องโดยเปรียบเทียบผลลัพธ์สำหรับอินพุตที่กำหนดเทียบกับข้อมูลจำเพาะ การทดสอบตามหน้าที่ไม่เกี่ยวข้องกับผลกลางหรือผลข้างเคียงเพียงผล (พวกเขาไม่สนใจว่าหลังจากทำ x วัตถุ y มีสถานะ z) พวกมันถูกเขียนขึ้นเพื่อทดสอบส่วนหนึ่งของสเปคเช่น "การเรียกฟังก์ชัน Square (x) พร้อมอาร์กิวเมนต์ของ 2 คืน 4"

การทดสอบการยอมรับ

การทดสอบการยอมรับดูเหมือนจะแบ่งออกเป็นสองประเภท:

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

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

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

ข้อสรุป

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


19
+1 @ Mark Simpson การทดสอบการใช้งานและการยอมรับสามารถสรุปได้ว่าเป็น "การทดสอบระบบ" หรือไม่? การทดสอบแบบ end-to-end จะพอดีกับที่ใด? (คำศัพท์ที่แตกต่างกันมากเกินไปสำหรับรสนิยมของฉัน)
Torsten Engelbrecht

3
@Franz ฉันพูดถึงความสามารถและความสะดวกในการที่คุณสามารถลดความเสี่ยงโดยการแยกหน่วยของรหัสและทดสอบพวกเขา คุณพูดถูกภาษาที่ใช้ค่อนข้างหลวมเนื่องจากการทดสอบไม่สามารถพิสูจน์ได้ว่ารหัสนั้นไม่มีข้อบกพร่อง
Mark Simpson

15
แม้จะมีคะแนนโหวตสูง แต่ก็ผิดทั้งหมด การทดสอบหน่วยไม่ได้ทดสอบแม้แต่ผู้ทำงานร่วมกันที่ "เล็กน้อย" การพึ่งพาการฉีดใด ๆ จะต้องถูกเยาะเย้ย การทดสอบตามหน้าที่ไม่ได้ทดสอบว่า "พฤติกรรม"; พวกเขาทดสอบเฉพาะ "ฟังก์ชั่น" คือ "f (A) ส่งคืน B" หากผลข้างเคียงมีความสำคัญก็คือ "พฤติกรรม" หากสิ่งเหล่านี้รวมถึงการเรียกระบบพวกเขาก็จะทำการทดสอบ "ระบบ" เช่นเดียวกับใน "การทดสอบระบบพฤติกรรม" (ดูที่ testerab @ ด้านล่าง) การทดสอบ "การยอมรับ" เป็นส่วนย่อยของ "การทดสอบระบบพฤติกรรม" ซึ่งครอบคลุมทั้งสแต็ก "บูรณาการ" ทดสอบสูงขึ้นจำลองการใช้งานจริง มันทดสอบว่าการพึ่งพาทั้งหมดสามารถบูรณาการในทางปฏิบัติ
cdunn2001

7
@ cdunn2001: ไม่ต้องกังวลคำวิจารณ์เชิงสร้างสรรค์อยู่เสมอดี :) ความคิดเห็นของคุณสอนฉันบางสิ่งที่ฉันไม่รู้จักและทำความสะอาดคำศัพท์ของฉันบ้าง ฉันมักจะกระตือรือร้นที่จะเรียนรู้สิ่งใหม่จากนักพัฒนาที่มีความกระตือรือร้นในการทดสอบ ฉันจำได้ครั้งแรกที่ฉันค้นพบบล็อกของMiško Hevery - มันเหมือนกับขุมทรัพย์ :)
Mark Simpson

11
@ MarkSimpson แม้ว่าคำตอบของคุณดีมากฉันต้องการรายละเอียดเพิ่มเติมเล็กน้อยเกี่ยวกับการทดสอบการใช้งาน ฉันหมายถึงคำตอบของคุณสำหรับฉันยากที่จะแยกแยะระหว่างการทดสอบการใช้งานและการทดสอบหน่วย ฉันหวังว่าคุณจะมีเวลาสำหรับเรื่องนี้ติดตามการทำงานที่ยอดเยี่ยม!
Andrei Sandulescu

90

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

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

http://googletesting.blogspot.com/2010/12/test-sizes.html

ฉันนึกภาพความแตกต่างระหว่างขนาดเล็กขนาดกลางและขนาดใหญ่สำหรับสถานที่ทำงานปัจจุบันของคุณอาจแตกต่างจากของ Google

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


6
+1 สำหรับการตั้งชื่อสิ่งทดสอบ Google เนื่องจากช่วยให้มุมมองเล็กน้อยว่าทำไมองค์กร / คนต่าง ๆ มีคำจำกัดความที่แตกต่างกันสำหรับการทดสอบ
Mark Simpson

นี่เป็นบทความที่ดีมากที่อธิบายว่าทำไมคุณถึงใช้การทดสอบในระดับที่แตกต่างกันและสิ่งที่คุณได้รับจากพวกเขา: kentcdodds.com/blog/unit-vs-integration-vs-e2e-tests
testab

63

http://martinfowler.com/articles/microservice-testing/

โพสต์บล็อกของ Martin Fowler พูดเกี่ยวกับกลยุทธ์ในการทดสอบโค้ด (โดยเฉพาะในสถาปัตยกรรมบริการไมโคร) แต่ส่วนใหญ่จะใช้กับแอปพลิเคชันใด ๆ

ฉันจะอ้างอิงจากสไลด์สรุปของเขา:

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

นั่นเป็นบทความที่ยอดเยี่ยม อย่างไรก็ตามฉันไม่เข้าใจการทดสอบสัญญาอย่างสมบูรณ์ พวกเขาไม่ซ้ำซ้อนในแง่ของการทดสอบส่วนประกอบและการรวม?
wheleph

ในบางภาษา (ที่ Mr Fowler ใช้) คุณสามารถใช้อินเทอร์เฟซที่ไม่เปิดเผยเมื่อใช้คำจำกัดความมาตรฐานของคลาสเช่นโมฆะ IMyInterface.MyMethod () ซึ่งในทางกลับกันจะมีเหตุผลการทดสอบของตัวเอง แม้ว่าในตอนนั้นคุณกำลังมุ่งหน้ากลับไปที่ BDD .. สิ่งที่แดกดันนาย Fowler ได้มีการคว้าที่ดินเช่นกัน
Skarsnik

2
ไม่ใช่บทความ fowler btw เพิ่งโพสต์ที่นั่น การทดสอบตามสัญญาคือการทดสอบที่เกิดขึ้นหลังจากที่ลูกค้าเริ่มใช้บริการของคุณจากนั้นคุณจะเขียนการทดสอบที่ตรวจสอบว่าคุณไม่ได้ทำอะไรบางอย่างกับลูกค้ารายนั้นหรือไม่เช่นเปลี่ยนบริการ API
RafałŁużyński

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

31

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

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

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

การทดสอบบูรณาการ - โมดูลส่วนบุคคลที่อยู่ภายใต้การทดสอบหน่วยแล้วรวมเข้าด้วยกัน โดยทั่วไปแล้วทั้งสองแนวทางมีดังนี้:

1) จากบนลงล่าง
2) จากล่างขึ้นบน


คุณหมายถึงอะไรจากการจากบนลงล่างและจากล่างขึ้นบน? การรวมการทดสอบเหมือนกับการทดสอบแบบครบวงจรหรือไม่
tamj0rd2

18

ง่ายมาก

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

  2. การทดสอบตามหน้าที่: การทดสอบนี้ดำเนินการในขั้นตอนการทดสอบ (QA) และเป็นส่วนหนึ่งของการทดสอบกล่องดำ การดำเนินการจริงของกรณีทดสอบที่เขียนไว้ก่อนหน้านี้ การทดสอบนี้ทำจริงโดยผู้ทดสอบพวกเขาค้นหาผลลัพธ์ที่แท้จริงของการทำงานใด ๆ ในเว็บไซต์และเปรียบเทียบผลลัพธ์นี้กับผลลัพธ์ที่คาดหวัง หากพวกเขาพบความแตกต่างใด ๆ นี่เป็นข้อผิดพลาด

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

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


1
@OlegTsyba คำตอบมา 4 ปีหลังจากตอบคำถาม
bentesha

1
เราไม่ควรเริ่มคำตอบด้วย "นี่ง่ายมาก" โดยเฉพาะถ้าเป็นหัวข้อที่ซับซ้อนเช่นนี้
milosmns

6

ฉันยังใหม่กับรหัสการทดสอบ การทดสอบหน่วยดูเหมือนจะเสียเวลาเป็นส่วนใหญ่ ฉันคิดว่าฉันกำลังทำการทดสอบหน่วย แต่ฉันกำลังทำการทดสอบการรวมและจากนั้นฉันอ่านเกี่ยวกับการทดสอบหน่วยและดูเหมือนโง่บางทีสำหรับคนที่มีประสบการณ์น้อยมาก? มีโอกาสฉันพลาดประเด็นไปบ้าง
PixMach

หากมีการกำหนดหน่วยในวงกว้างแสดงว่าคุณทดสอบหน่วยอย่างถูกต้อง ฉันไม่เห็นด้วยกับการทดสอบรายละเอียดการใช้งาน คลาสส่วนตัวไม่ควร "ทำการทดสอบหน่วย" อย่างไรก็ตามหากคุณมีคลาสสาธารณะหลายคลาสคุณอาจถูกเยาะเย้ยในขณะที่ทดสอบอีกคลาสหนึ่ง นั่นคือการอภิปรายที่แท้จริง เป็นหน่วย (ก) ห้องสมุดทั้งหมดของคุณหรือไม่ (b) ชั้นเรียนสาธารณะแต่ละแห่งภายในห้องสมุด? หรือ (c) แต่ละวิธีสาธารณะในแต่ละชั้นเรียน? ฉันชอบที่จะทดสอบห้องสมุดที่กำหนดให้เป็นองค์ประกอบแบบบูรณาการ แต่เพื่อเลียนแบบหรืออ้างอิงภายนอกปลอม (เว้นแต่พวกเขาจะรวดเร็วและเชื่อถือได้) ดังนั้นฉันคิดว่าฉันอยู่กับคุณ
cdunn2001

1
@PixMach: จริง ๆ แล้วมันเป็นวิธีอื่น ๆ ไม่มีการทดสอบหน่วย (ดี) ในสถานที่เสียเวลามากถ้าคุณ (หรือคนอื่น) ต้องเปลี่ยนรหัสนั้นในอนาคต หากคุณมีประสบการณ์ในการดูแลรหัสโดยมีและไม่มีการทดสอบหน่วย แนวคิดคือหากการทดสอบหน่วยแตกคุณควรรู้ว่าต้องแก้ไขส่วนใดของรหัส ความล้มเหลวในการทดสอบการยอมรับ / การรวมระบบขนาดใหญ่มักจะบอกคุณเท่านั้น: มันไม่ทำงาน แล้วคุณจะต้องเริ่มการดีบักโรงเรียนเก่า ...
Goodsquirrel

@ Goodsquirrel มันขึ้นอยู่กับสิ่งที่คุณเรียกว่า "หน่วย" นั่นแหละปัญหา. การทดสอบที่ไม่ดีจะถูกลบในระหว่างการเปลี่ยนโครงสร้างใหม่ การทดสอบที่ดีจะยังคงมีประโยชน์ การทดสอบที่ไม่ดีจะไม่เพิ่มคุณค่าใด ๆ และเข้ามาขวางทาง การทดสอบที่ดีคือการจัดทำเอกสารด้วยตนเองและชื่นชมอย่างมาก ขอเจาะจง ฉันมีวิธีส่วนตัวในการคืนค่าถ้าค่าอื่นเป็น True มิฉะนั้นเป็นค่าเริ่มต้น (รหัสดั้งเดิม) ควรทดสอบวิธีการนั้นหรือไม่ ฉันบอกว่าไม่. วิธีส่วนตัวอื่นส่งกลับหมายเลข Fibonacci ที่ n ควรทำการทดสอบไหม? ฉันบอกว่าใช่.
cdunn2001

1
รหัสเปิดเผยที่เล็กที่สุด แตกต่างใหญ่
cdunn2001

5

ฉันจะอธิบายให้คุณทราบด้วยตัวอย่างที่ใช้งานได้จริงและไม่มีทฤษฎี:

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

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

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

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


1
"นักพัฒนาเขียนรหัสยังไม่มีการใช้งาน GUI การทดสอบในระดับนี้จะตรวจสอบว่าฟังก์ชันทำงานอย่างถูกต้องและประเภทข้อมูลนั้นถูกต้องขั้นตอนการทดสอบนี้เรียกว่าการทดสอบหน่วย" นี่ไม่เป็นความจริง GUI เป็นเพียงแค่ "ปลั๊กอิน" คุณสามารถเขียนการทดสอบ E2E ไปยังเอาต์พุต API ได้แล้ว (หรือวัตถุตอบสนองใด ๆ ที่คุณสร้าง)
user3790897

4

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

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

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

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

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