การทดสอบหน่วยเทียบกับการทดสอบการใช้งาน


407

ความแตกต่างระหว่างการทดสอบหน่วยและการทดสอบการทำงานคืออะไร? การทดสอบหน่วยสามารถทดสอบฟังก์ชั่นได้หรือไม่?


2
ดูเพิ่มเติมที่: stackoverflow.com/questions/927857/ …และstackoverflow.com/questions/2230286/…

คำตอบ:


254

การทดสอบหน่วย - ทดสอบแต่ละหน่วยเช่นวิธีการ (ฟังก์ชัน) ในชั้นเรียนโดยมีการอ้างอิงทั้งหมด

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


170
ฉันไม่เห็นด้วยกับ "การทดสอบบูรณาการ AKA" การทดสอบการรวมตรวจสอบการรวมระบบ 2 ระบบขึ้นไปในระบบของคุณ ตัวอย่างการตรวจสอบแบบสอบถาม SQL ผ่าน ORM ตรวจสอบว่า ORM และฐานข้อมูลทำงานร่วมกันได้ดี การทดสอบการใช้งาน AKA จบเพื่อจบ IMHO
graffic

7
ฉันเห็นด้วยกับ @graffic Functional Test! = Integration Test คุณต้องสับสน "การบูรณาการ" ของส่วนประกอบย่อยของระบบภายในกันและกันเช่นสถานะที่ยังคงอยู่เป็นต้น แต่โดยทั่วไปแล้วการทดสอบการรวมเข้าด้วยกันมีขอบเขตที่กว้างกว่ามาก
nabster

4
ไม่ไม่สับสนอะไรเลย
bpapa

3
การทดสอบการรวมระบบ IS-A การทดสอบการใช้งาน แต่ไม่ใช่ในทางกลับกัน Google "ทดสอบการทำงานและไม่ทำงาน" และตรวจสอบ "ภาพ"
Andrejs

4
คำตอบนี้เป็นเพียงความผิด! การทดสอบการทำงานไม่ได้ใกล้เคียงกับการทดสอบการรวม ..
sotn

517

การทดสอบหน่วยบอกนักพัฒนาว่ารหัสกำลังทำสิ่งที่ถูกต้อง ทดสอบการใช้งานบอกนักพัฒนาว่ารหัสจะทำสิ่งที่ถูกต้อง

คุณสามารถอ่านเพิ่มเติมได้ที่การทดสอบหน่วยกับการทดสอบการใช้งาน


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

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

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

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

เจ้าของบ้านกำลังทำการทดสอบการใช้งานในบ้าน เขามีมุมมองของผู้ใช้

ผู้ตรวจสอบอาคารกำลังทำการทดสอบหน่วยในบ้าน เขามีมุมมองของผู้สร้าง


โดยสรุป

การทดสอบหน่วยถูกเขียนขึ้นจากมุมมองของโปรแกรมเมอร์ พวกเขาทำเพื่อให้แน่ใจว่าวิธีการเฉพาะ (หรือหน่วย ) ของชั้นเรียนดำเนินการชุดของงานที่เฉพาะเจาะจง

การทดสอบการใช้งานเขียนจากมุมมองของผู้ใช้ พวกเขามั่นใจว่าระบบทำงานตามที่ผู้ใช้คาดหวัง


18
คำพูดค่อนข้างคลุมเครือสำหรับบางคนที่เพิ่งรู้จักกับแนวคิดนี้

2
@ fig-gnuton ฉันพยายามที่จะทำอย่างละเอียดเพื่อหวังว่าจะไม่ทำให้คำอธิบายที่คลุมเครือ ภายในลิงก์ที่ให้เป็นตัวอย่างที่ดีฉันสามารถอัปเดตคำตอบด้วยเครื่องหมายคำพูดหากคุณคิดว่าอาจช่วย OP ได้
Anthony Forloney

147
อาจเป็นอีกวิธีหนึ่งในการพูดว่า "การทดสอบหน่วยตรวจสอบให้แน่ใจว่าโค้ดทำสิ่งที่โปรแกรมเมอร์ต้องการการทดสอบการใช้งานทำให้แน่ใจว่าโปรแกรมเมอร์กำลังทำสิ่งที่ลูกค้าต้องการ"?
JS

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

2
โปรแกรมเมอร์ไม่ต้องการยึดสิ่งที่ผู้ใช้ต้องการหรือไม่ ทำไมจึงต้องทำการทดสอบที่ไม่ตอบสนองสิ่งที่ลูกค้าคาดหวัง
O.Badr

140
  • การทดสอบหน่วยทดสอบหน่วยพฤติกรรมอิสระ หน่วยของพฤติกรรมคืออะไร? มันเป็นชิ้นส่วนที่เล็กที่สุดของระบบที่สามารถทดสอบได้อย่างอิสระ (คำจำกัดความนี้จริง ๆ แล้วเป็นวงกลมฉันไม่ได้นิยามอะไรเลยแต่ดูเหมือนว่าจะใช้งานได้ดีในทางปฏิบัติเพราะคุณสามารถเข้าใจมันได้โดยสัญชาตญาณ)

  • การทดสอบการใช้งานเป็นการทดสอบการใช้งานที่เป็นอิสระ


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

  • ชิ้นส่วนของฟังก์ชั่นมักจะประกอบด้วยวิธีการมากมายและตัดผ่านหลายวัตถุและมักจะผ่านชั้นสถาปัตยกรรมหลาย


  • การทดสอบหน่วยจะเป็นสิ่งที่ชอบ: เมื่อผมเรียกว่าvalidate_country_code()ฟังก์ชั่นและผ่านมันรหัสประเทศควรกลับ'ZZ'false

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


  • การทดสอบหน่วยถูกเขียนโดยนักพัฒนาสำหรับนักพัฒนาจากมุมมองของนักพัฒนา

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


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

  • การทดสอบหน่วยเปลี่ยนแปลงบ่อยครั้งการทดสอบการใช้งานไม่ควรเปลี่ยนแปลงภายในการเปิดตัวครั้งใหญ่



คำตอบที่ยอดเยี่ยม! สิ่งหนึ่ง - "การทดสอบการใช้งานไม่ควรเปลี่ยนแปลงภายในรุ่นใหญ่" ทำไมถึงเป็นเช่นนั้น
Lazer

5
@Lazer, @cdeszaq: ในหลายโครงการมีการเปลี่ยนแปลงในจำนวนรุ่นใหญ่ถูกนำมาใช้เพื่อบ่งชี้ไปข้างหลังเข้ากันไม่ได้และ OTOH ถ้ารุ่นใหญ่ที่ไม่ได้เปลี่ยนแปลงไปข้างหลังความเข้ากันได้จะรับประกัน "ความเข้ากันได้ย้อนหลัง" หมายถึงอะไร หมายความว่า "ไม่เปลี่ยนพฤติกรรมที่ผู้ใช้มองเห็นได้" และการทดสอบการใช้งานนั้นเป็นการเข้ารหัสที่สามารถสั่งการได้ของสเปคของพฤติกรรมที่ผู้ใช้มองเห็นได้ ดังนั้นถ้าจำนวนที่สำคัญไม่เปลี่ยนแล้วทดสอบการใช้งานไม่ได้รับอนุญาตมีการเปลี่ยนแปลงอย่างใดอย่างหนึ่งและตรงกันข้ามถ้า TETS ทำงานทำการเปลี่ยนแปลงแล้วจำนวนที่สำคัญจะต้องมีการเปลี่ยนแปลงเช่นกัน
Jörg W Mittag

2
หมายเหตุ: ฉันไม่ได้พูดอะไรเกี่ยวกับการเพิ่มการทดสอบการใช้งาน! ไม่ว่าจะเป็นการเพิ่มฟังก์ชันการทำงานที่ไม่เคยมีมาก่อนก่อให้เกิดการเปลี่ยนแปลงด้านหลังที่เข้ากันไม่ได้หรือไม่นั้นขึ้นอยู่กับโครงการ สำหรับซอฟต์แวร์สำหรับผู้ใช้อาจไม่ใช่ แต่สำหรับภาษาโปรแกรม? อาจจะ: แนะนำคำหลักใหม่เช่นทำให้ปัจจุบันโปรแกรมทำงานที่ใช้คำหลักนั้นเป็นชื่อตัวแปรไม่ถูกต้องและทำให้เป็นการเปลี่ยนแปลงที่เข้ากันไม่ได้ย้อนหลัง
Jörg W Mittag

3
@ JörgWMittagชอบความคิดนั้น: 'การทดสอบการใช้งานเป็นการเข้ารหัสที่สามารถใช้งานได้กับสเปคของพฤติกรรมที่ผู้ใช้มองเห็นได้' ... ไม่ว่าผู้เชี่ยวชาญระดับสูงคนอื่นจะเห็นด้วยหรือไม่ก็ตามจริง ๆ แล้วมันช่วยฉันด้วยคำถามเดิม 'em "
ไมค์หนู

1
"การทดสอบการใช้งานคือ: เมื่อฉันกรอกแบบฟอร์มการจัดส่งด้วยรหัสประเทศของ ZZ ฉันควรจะถูกนำไปยังหน้าช่วยเหลือซึ่งช่วยให้ฉันเลือกรหัสประเทศของฉันออกจากเมนู" นี่เป็นประเภทจู้จี้จุกจิก แต่ฉันจะเรียกว่า "การทดสอบการยอมรับ" การทดสอบการทำงานจะทดสอบว่าการป้อน ZZ บนแบบฟอร์มการจัดส่งจะส่งต่อผู้ใช้ไปยัง URL ที่ถูกต้องหรือส่งข้อยกเว้นหรือข้อผิดพลาดเฉพาะ
Bob Ray

98

TLDR:

ในการตอบคำถาม: การทดสอบหน่วยเป็นประเภทย่อยของการทดสอบการทำงาน


มีสองกลุ่มใหญ่: การทดสอบการใช้งานและการไม่ทำงาน ภาพประกอบที่ดีที่สุดที่ฉันพบคือภาพนี้ (แหล่งที่มา: www.inflectra.com ):

ป้อนคำอธิบายรูปภาพที่นี่

(1) การทดสอบหน่วย:การทดสอบตัวอย่างโค้ดขนาดเล็ก (ฟังก์ชัน / วิธีการ) มันอาจจะถือเป็นการทดสอบการทำงาน (กล่องสีขาว)

เมื่อมีการรวมฟังก์ชั่นต่าง ๆ คุณจะสร้าง module = ชิ้นส่วนแบบแยกส่วนซึ่งอาจจะมีส่วนต่อประสานกับผู้ใช้ที่สามารถทดสอบได้ (การทดสอบโมดูล) เมื่อคุณมีโมดูลแยกจากกันอย่างน้อยสองโมดูลจากนั้นคุณจะติดกาวเข้าด้วยกันแล้วจึงมา:

(2) การทดสอบการรวมระบบ:เมื่อคุณรวมโมดูล (sub) สองโมดูลขึ้นไปหรือระบบ (ย่อย) เข้าด้วยกันและดูว่าพวกเขาเล่นด้วยกันหรือไม่

จากนั้นคุณรวมโมดูลที่ 3 จากนั้นที่ 4 และ 5 ตามลำดับที่คุณหรือทีมของคุณเห็นว่าเหมาะสมและเมื่อชิ้นส่วนจิ๊กซอว์ทั้งหมดเข้าด้วยกัน

(3) การทดสอบระบบ:ทดสอบ SW โดยรวม นี่คือ "การทดสอบบูรณาการของทุกชิ้นเข้าด้วยกัน"

ถ้าตกลงแล้วมา

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

ป้อนคำอธิบายรูปภาพที่นี่


2
ฉันเห็นภาพมากมายเช่นนั้นใน google ซึ่งอธิบาย "การทดสอบหน่วย" เป็น "การทดสอบตามหน้าที่" แต่ทำไมคำตอบอื่น ๆ ที่นี่อธิบายแนวคิดที่แตกต่างกันอย่างสิ้นเชิง: "การทดสอบฟังก์ชั่น" ค่อนข้างทดสอบแบบ end-to-end และการทดสอบหน่วยไม่ใช่การทดสอบการทำงาน ฉันสับสน. มี "ศาสนา" สองแบบที่แตกต่างกันซึ่งนิยามคำว่า "การทดสอบตามหน้าที่" แตกต่างกันหรืออะไร?
Ruslan Stelmachenko

คำตอบ (แม้แต่ผู้ที่ได้รับการโหวตสูง) ก็สามารถผิดได้เช่นกัน)
Andrejs

1
ฉันชอบรูปภาพ แต่สำหรับการทดสอบการรวมระบบปริศนาควรจะปรากฏว่า "สมบูรณ์" โดยไม่ต้องมีสถานที่อื่น ๆ สำหรับการเชื่อมต่อ
Jonathon Reinhart

4
@ JonathonReinhart - ไม่จำเป็น ขอบเปิดสามารถแสดงความสามารถในการขยายระบบได้ง่ายด้วยคุณสมบัติใหม่ซึ่งมีประโยชน์อย่างยิ่งหากใช้วิธีการพัฒนาเช่น Agile
Myles

จากคำตอบที่ขัดแย้งกันหลายข้อด้านบนเห็นได้ชัดว่าFunctional Testไม่ใช่คำที่เป็นมาตรฐานและมีความหมายแตกต่างกันไปสำหรับคนอื่น
Penghe Geng

12

"การทดสอบการใช้งาน" ไม่ได้หมายความว่าคุณกำลังทดสอบฟังก์ชั่น (วิธีการ) ในรหัสของคุณ หมายความว่าโดยทั่วไปแล้วคุณกำลังทดสอบการทำงานของระบบ - เมื่อฉันรันfoo file.txtที่บรรทัดคำสั่งบรรทัดfile.txtอาจจะกลับด้าน ในทางตรงกันข้ามการทดสอบหน่วยเดียวโดยทั่วไปครอบคลุมกรณีเดียวของวิธีการเดียว - length("hello")ควรกลับ 5 และlength("hi")ควรกลับ 2

ดูเพิ่มเติมของไอบีเอ็มใช้เวลาในเส้นแบ่งระหว่างการทดสอบหน่วยและการทดสอบการทำงาน


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

8

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

นำมาจากหนังสือ "Python TDD" โดย Harry Percival


8

ตาม ISTQB ทั้งสองไม่ได้เปรียบ การทดสอบการทำงานไม่ใช่การทดสอบการรวม

การทดสอบหน่วยเป็นหนึ่งในการทดสอบระดับและการทดสอบการทำงานเป็นประเภทของการทดสอบ

โดยทั่วไป:

ฟังก์ชั่นของระบบ (หรือส่วนประกอบ) คือ 'สิ่งที่มันทำ' โดยทั่วไปจะอธิบายไว้ในข้อกำหนดคุณสมบัติข้อกำหนดคุณสมบัติการใช้งานหรือในกรณีใช้งาน

ในขณะที่

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

ตามการทดสอบส่วนประกอบ / หน่วย ISTQB สามารถทำงานได้หรือไม่ทำงาน:

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

คำพูดจากพื้นฐานของการทดสอบซอฟต์แวร์ - การรับรอง ISTQB


ฉันเห็นด้วยเกี่ยวกับปุยมากเกินไป แต่อย่างไรก็ตามพวกเขาเป็นผู้เล่นที่ยิ่งใหญ่ที่สุดในนั้นและคำถามนี้เกี่ยวกับทฤษฎีดังนั้นฉันคิดว่า ISTQB น่าจะดีพอ
Dominik

6

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


3

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


3

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

1- existing email, wrong password -> login page should show error "wrong password"!
2- non-existing email, any password -> login page should show error "no such email".
3- existing email, right password -> user should be taken to his inbox page.
4- no @symbol in email, right password -> login page should say "errors in form, please fix them!" 

ควรทดสอบการทำงานของเราตรวจสอบว่าเราสามารถเข้าสู่ระบบด้วยการป้อนข้อมูลที่ไม่ถูกต้อง? เช่น. อีเมลไม่มีสัญลักษณ์ @ ชื่อผู้ใช้มีมากกว่าหนึ่งจุด (อนุญาตให้มีจุดเดียวเท่านั้น). com จะปรากฏต่อหน้า @ เป็นต้น? โดยทั่วไปไม่! การทดสอบประเภทนั้นจะเป็นการทดสอบหน่วยของคุณ

คุณสามารถตรวจสอบว่าอินพุตที่ไม่ถูกต้องถูกปฏิเสธในการทดสอบหน่วยตามที่แสดงในการทดสอบด้านล่าง

class LoginInputsValidator
  method validate_inputs_values(email, password)
    1-If email is not like string.string@myapp.com, then throw error.
    2-If email contains abusive words, then throw error.
    3-If password is less than 10 chars, throw error.

ขอให้สังเกตว่าการทดสอบการใช้งานจริงกำลังทำสิ่งที่การทดสอบหน่วยที่ 1 กำลังทำอยู่ บางครั้งการทดสอบการใช้งานสามารถทำซ้ำบางส่วน (ไม่ใช่ทั้งหมด) ของการทดสอบที่ทำโดยการทดสอบหน่วยด้วยเหตุผลที่แตกต่างกัน ในตัวอย่างของเราเราใช้ทดสอบการทำงาน 4 เพื่อตรวจสอบว่ามีข้อผิดพลาดปรากฏขึ้นในการป้อนข้อมูลที่ไม่ถูกต้อง เราไม่ต้องการทดสอบว่าอินพุตที่ไม่ดีทั้งหมดถูกปฏิเสธหรือไม่ นั่นคืองานของการทดสอบหน่วย


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

ตัวอย่างที่ดีของสิ่งที่เป็นและไม่อยู่ในขอบเขตสำหรับการทดสอบการทำงาน
Myles

2

หน่วยการทดสอบ

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

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

การทดสอบฟังก์ชั่น

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


2

อย่างง่าย ๆ เราสามารถพูดได้:

  • กล่องดำ: การทดสอบส่วนต่อประสานผู้ใช้เช่นการทดสอบการทำงาน
  • กล่องสีขาว: การทดสอบรหัสเช่นการทดสอบหน่วย

อ่านรายละเอียดเพิ่มเติมที่นี่


@fafl ฉันขอโทษฉันไม่ดี
Alireza Rahmani Khalili

1

การทดสอบหน่วย : - การทดสอบหน่วยใช้สำหรับทดสอบส่วนประกอบผลิตภัณฑ์ตามส่วนประกอบพิเศษโดยเฉพาะขณะที่ผลิตภัณฑ์กำลังอยู่ระหว่างการพัฒนา เครื่องมือประเภท Junit และ Nunit จะช่วยให้คุณทดสอบผลิตภัณฑ์ตามหน่วย ** แทนที่จะแก้ปัญหาหลังจากการรวมมันสะดวกสบายเสมอที่จะได้รับการแก้ไขในช่วงต้นของการพัฒนา

การทดสอบเชิงหน้าที่: - สำหรับการทดสอบนั้นมีสองประเภทหลักคือ 1. การทดสอบการทำงาน 2. การทดสอบแบบไม่ทำงาน

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


0

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

การทดสอบหน้าที่ : นี่เป็นการอ้างอิงที่ดี คำอธิบายการทดสอบการทำงาน


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