ความแตกต่างระหว่างการทดสอบหน่วยและการทดสอบการทำงานคืออะไร? การทดสอบหน่วยสามารถทดสอบฟังก์ชั่นได้หรือไม่?
ความแตกต่างระหว่างการทดสอบหน่วยและการทดสอบการทำงานคืออะไร? การทดสอบหน่วยสามารถทดสอบฟังก์ชั่นได้หรือไม่?
คำตอบ:
การทดสอบหน่วย - ทดสอบแต่ละหน่วยเช่นวิธีการ (ฟังก์ชัน) ในชั้นเรียนโดยมีการอ้างอิงทั้งหมด
ทดสอบการทำงาน - การทดสอบการรวม AKA ทดสอบการใช้งานในระบบ วิธีนี้จะทดสอบวิธีการมากมายและอาจโต้ตอบกับการพึ่งพาเช่นฐานข้อมูลหรือบริการบนเว็บ
การทดสอบหน่วยบอกนักพัฒนาว่ารหัสกำลังทำสิ่งที่ถูกต้อง ทดสอบการใช้งานบอกนักพัฒนาว่ารหัสจะทำสิ่งที่ถูกต้อง
คุณสามารถอ่านเพิ่มเติมได้ที่การทดสอบหน่วยกับการทดสอบการใช้งาน
คำอธิบายที่คล้ายคลึงกันในชีวิตจริงของการทดสอบหน่วยและการทดสอบการใช้งานสามารถอธิบายได้ดังนี้
หลายครั้งที่การพัฒนาระบบเปรียบเสมือนกับการสร้างบ้าน แม้ว่าการเปรียบเทียบนี้จะไม่ถูกต้อง แต่เราสามารถขยายเพื่อความเข้าใจในความแตกต่างระหว่างหน่วยและการทดสอบการใช้งาน
การทดสอบหน่วยคล้ายคลึงกับผู้ตรวจสอบอาคารที่เยี่ยมชมสถานที่ก่อสร้างบ้าน เขามุ่งเน้นไปที่ระบบภายในต่างๆของบ้านรากฐานการวางกรอบระบบไฟฟ้าระบบประปาและอื่น ๆ เขารับรอง (ทดสอบ) ว่าส่วนต่าง ๆ ของบ้านจะทำงานอย่างถูกต้องและปลอดภัยนั่นคือตรงตามรหัสอาคาร
การทดสอบการใช้งานในสถานการณ์นี้คล้ายคลึงกับเจ้าของบ้านที่ไปที่ไซต์ก่อสร้างเดียวกันนี้ เขาสันนิษฐานว่าระบบภายในจะทำงานได้อย่างเหมาะสมว่าผู้ตรวจการอาคารกำลังทำงานของเขาอยู่ เจ้าของบ้านมุ่งเน้นไปที่สิ่งที่มันจะชอบอยู่ในบ้านนี้ เขากังวลกับลักษณะของบ้านเป็นห้องต่าง ๆ ที่มีขนาดที่สะดวกสบายบ้านเหมาะกับความต้องการของครอบครัวเป็นหน้าต่างในจุดที่ดีที่จะชมพระอาทิตย์ยามเช้า
เจ้าของบ้านกำลังทำการทดสอบการใช้งานในบ้าน เขามีมุมมองของผู้ใช้
ผู้ตรวจสอบอาคารกำลังทำการทดสอบหน่วยในบ้าน เขามีมุมมองของผู้สร้าง
โดยสรุป
การทดสอบหน่วยถูกเขียนขึ้นจากมุมมองของโปรแกรมเมอร์ พวกเขาทำเพื่อให้แน่ใจว่าวิธีการเฉพาะ (หรือหน่วย ) ของชั้นเรียนดำเนินการชุดของงานที่เฉพาะเจาะจง
การทดสอบการใช้งานเขียนจากมุมมองของผู้ใช้ พวกเขามั่นใจว่าระบบทำงานตามที่ผู้ใช้คาดหวัง
การทดสอบหน่วยทดสอบหน่วยพฤติกรรมอิสระ หน่วยของพฤติกรรมคืออะไร? มันเป็นชิ้นส่วนที่เล็กที่สุดของระบบที่สามารถทดสอบได้อย่างอิสระ (คำจำกัดความนี้จริง ๆ แล้วเป็นวงกลมฉันไม่ได้นิยามอะไรเลยแต่ดูเหมือนว่าจะใช้งานได้ดีในทางปฏิบัติเพราะคุณสามารถเข้าใจมันได้โดยสัญชาตญาณ)
การทดสอบการใช้งานเป็นการทดสอบการใช้งานที่เป็นอิสระ
หน่วยของพฤติกรรมมีขนาดเล็กมาก: ในขณะที่ฉันไม่ชอบมนต์นี้อย่างใดอย่างหนึ่ง "การทดสอบหนึ่งหน่วยต่อวิธี" มนต์จากมุมมองขนาดมันเป็นเรื่องที่ถูกต้อง หน่วยของพฤติกรรมคือบางสิ่งระหว่างส่วนหนึ่งของวิธีการและอาจเป็นสองวิธี มากที่สุดวัตถุ แต่ไม่เกินหนึ่ง
ชิ้นส่วนของฟังก์ชั่นมักจะประกอบด้วยวิธีการมากมายและตัดผ่านหลายวัตถุและมักจะผ่านชั้นสถาปัตยกรรมหลาย
การทดสอบหน่วยจะเป็นสิ่งที่ชอบ: เมื่อผมเรียกว่าvalidate_country_code()
ฟังก์ชั่นและผ่านมันรหัสประเทศควรกลับ'ZZ'
false
การทดสอบการใช้งานคือเมื่อฉันกรอกแบบฟอร์มการจัดส่งพร้อมรหัสประเทศZZ
แล้วฉันควรจะถูกนำไปยังหน้าความช่วยเหลือที่ช่วยให้ฉันสามารถเลือกรหัสประเทศของฉันได้จากเมนู
การทดสอบหน่วยถูกเขียนโดยนักพัฒนาสำหรับนักพัฒนาจากมุมมองของนักพัฒนา
การทดสอบเชิงหน้าที่อาจต้องเผชิญกับผู้ใช้ซึ่งในกรณีนี้พวกเขาถูกเขียนโดยนักพัฒนาพร้อมกับผู้ใช้ (หรืออาจใช้เครื่องมือที่เหมาะสมและผู้ใช้ที่เหมาะสมแม้โดยผู้ใช้เอง) สำหรับผู้ใช้จากมุมมองของผู้ใช้ หรือพวกเขาอาจต้องเผชิญกับนักพัฒนาซอฟต์แวร์ (เช่นเมื่อพวกเขาอธิบายบางส่วนของฟังก์ชั่นภายในที่ผู้ใช้ไม่สนใจ) ซึ่งในกรณีนี้พวกเขาถูกเขียนโดยนักพัฒนาสำหรับนักพัฒนา แต่ก็ยังอยู่ในมุมมองของผู้ใช้
ในกรณีก่อนหน้านี้การทดสอบการทำงานอาจทำหน้าที่เป็นการทดสอบการยอมรับและเป็นการเข้ารหัสความต้องการใช้งานหรือข้อกำหนดคุณสมบัติการทำงานในกรณีหลังพวกเขาอาจทำหน้าที่เป็นการทดสอบการรวมเข้าด้วยกัน
การทดสอบหน่วยเปลี่ยนแปลงบ่อยครั้งการทดสอบการใช้งานไม่ควรเปลี่ยนแปลงภายในการเปิดตัวครั้งใหญ่
TLDR:
ในการตอบคำถาม: การทดสอบหน่วยเป็นประเภทย่อยของการทดสอบการทำงาน
มีสองกลุ่มใหญ่: การทดสอบการใช้งานและการไม่ทำงาน ภาพประกอบที่ดีที่สุดที่ฉันพบคือภาพนี้ (แหล่งที่มา: www.inflectra.com ):
(1) การทดสอบหน่วย:การทดสอบตัวอย่างโค้ดขนาดเล็ก (ฟังก์ชัน / วิธีการ) มันอาจจะถือเป็นการทดสอบการทำงาน (กล่องสีขาว)
เมื่อมีการรวมฟังก์ชั่นต่าง ๆ คุณจะสร้าง module = ชิ้นส่วนแบบแยกส่วนซึ่งอาจจะมีส่วนต่อประสานกับผู้ใช้ที่สามารถทดสอบได้ (การทดสอบโมดูล) เมื่อคุณมีโมดูลแยกจากกันอย่างน้อยสองโมดูลจากนั้นคุณจะติดกาวเข้าด้วยกันแล้วจึงมา:
(2) การทดสอบการรวมระบบ:เมื่อคุณรวมโมดูล (sub) สองโมดูลขึ้นไปหรือระบบ (ย่อย) เข้าด้วยกันและดูว่าพวกเขาเล่นด้วยกันหรือไม่
จากนั้นคุณรวมโมดูลที่ 3 จากนั้นที่ 4 และ 5 ตามลำดับที่คุณหรือทีมของคุณเห็นว่าเหมาะสมและเมื่อชิ้นส่วนจิ๊กซอว์ทั้งหมดเข้าด้วยกัน
(3) การทดสอบระบบ:ทดสอบ SW โดยรวม นี่คือ "การทดสอบบูรณาการของทุกชิ้นเข้าด้วยกัน"
ถ้าตกลงแล้วมา
(4) การทดสอบการยอมรับ:เราสร้างสิ่งที่ลูกค้าร้องขอจริงหรือไม่? แน่นอนว่าควรทำการทดสอบการยอมรับตลอดวงจรชีวิตไม่ใช่แค่ในขั้นตอนสุดท้ายซึ่งคุณรู้ว่าลูกค้าต้องการรถสปอร์ตและคุณสร้างรถตู้
Functional Test
ไม่ใช่คำที่เป็นมาตรฐานและมีความหมายแตกต่างกันไปสำหรับคนอื่น
"การทดสอบการใช้งาน" ไม่ได้หมายความว่าคุณกำลังทดสอบฟังก์ชั่น (วิธีการ) ในรหัสของคุณ หมายความว่าโดยทั่วไปแล้วคุณกำลังทดสอบการทำงานของระบบ - เมื่อฉันรันfoo file.txt
ที่บรรทัดคำสั่งบรรทัดfile.txt
อาจจะกลับด้าน ในทางตรงกันข้ามการทดสอบหน่วยเดียวโดยทั่วไปครอบคลุมกรณีเดียวของวิธีการเดียว - length("hello")
ควรกลับ 5 และlength("hi")
ควรกลับ 2
ดูเพิ่มเติมของไอบีเอ็มใช้เวลาในเส้นแบ่งระหว่างการทดสอบหน่วยและการทดสอบการทำงาน
ความแตกต่างพื้นฐานคือว่าการทดสอบการทำงานทดสอบแอปพลิเคชันจากภายนอกจากมุมมองของผู้ใช้ การทดสอบหน่วยทดสอบแอปพลิเคชันจากด้านในจากมุมมองของโปรแกรมเมอร์ การทดสอบการใช้งานควรช่วยคุณสร้างแอปพลิเคชั่นที่มีฟังก์ชั่นการใช้งานที่ถูกต้องและรับประกันว่าคุณจะไม่ทำลายมันโดยไม่ตั้งใจ การทดสอบหน่วยจะช่วยให้คุณเขียนโค้ดที่สะอาดและไม่มีข้อบกพร่อง
นำมาจากหนังสือ "Python TDD" โดย Harry Percival
ตาม ISTQB ทั้งสองไม่ได้เปรียบ การทดสอบการทำงานไม่ใช่การทดสอบการรวม
การทดสอบหน่วยเป็นหนึ่งในการทดสอบระดับและการทดสอบการทำงานเป็นประเภทของการทดสอบ
โดยทั่วไป:
ฟังก์ชั่นของระบบ (หรือส่วนประกอบ) คือ 'สิ่งที่มันทำ' โดยทั่วไปจะอธิบายไว้ในข้อกำหนดคุณสมบัติข้อกำหนดคุณสมบัติการใช้งานหรือในกรณีใช้งาน
ในขณะที่
การทดสอบส่วนประกอบที่เรียกว่าการทดสอบหน่วยโมดูลและโปรแกรมค้นหาข้อบกพร่องและตรวจสอบการทำงานของซอฟต์แวร์ (เช่นโมดูลโปรแกรมวัตถุคลาส ฯลฯ ) ที่สามารถทดสอบแยกได้
ตามการทดสอบส่วนประกอบ / หน่วย ISTQB สามารถทำงานได้หรือไม่ทำงาน:
การทดสอบส่วนประกอบอาจรวมถึงการทดสอบการใช้งานและคุณลักษณะที่ไม่ใช่หน้าที่เฉพาะเช่นการทำงานของทรัพยากร (เช่นการรั่วไหลของหน่วยความจำ) การทดสอบประสิทธิภาพหรือความทนทานรวมถึงการทดสอบโครงสร้าง (เช่นการครอบคลุมการตัดสินใจ)
คำพูดจากพื้นฐานของการทดสอบซอฟต์แวร์ - การรับรอง ISTQB
ใน Rails โฟลเดอร์หน่วยนั้นมีไว้เพื่อทำการทดสอบสำหรับแบบจำลองของคุณโฟลเดอร์ที่ใช้งานนั้นมีไว้เพื่อทำการทดสอบสำหรับตัวควบคุมของคุณและโฟลเดอร์การรวมนั้นมีไว้เพื่อทำการทดสอบที่เกี่ยวข้องกับตัวควบคุมจำนวนเท่าใดก็ได้ การแข่งขันเป็นวิธีหนึ่งในการจัดระเบียบข้อมูลทดสอบ พวกเขาอาศัยอยู่ในโฟลเดอร์การแข่งขัน ไฟล์ test_helper.rb เก็บการกำหนดค่าเริ่มต้นสำหรับการทดสอบของคุณ คุณสามารถเยี่ยมชมสิ่งนี้ได้
วิธีที่ฉันคิดว่ามันเป็นเช่นนี้: การทดสอบหน่วยกำหนดว่าโค้ดทำในสิ่งที่คุณตั้งใจให้โค้ดทำ (เช่นคุณต้องการเพิ่มพารามิเตอร์ a และ b ในความเป็นจริงคุณเพิ่มพวกเขาและไม่ลบ) การทดสอบการทำงานทดสอบว่ารหัสทั้งหมดทำงานร่วมกันเพื่อให้ได้ผลลัพธ์ที่ถูกต้องดังนั้นสิ่งที่คุณต้องการให้รหัสจริง ๆ แล้วจะได้ผลลัพธ์ที่ถูกต้องในระบบ
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 เพื่อตรวจสอบว่ามีข้อผิดพลาดปรากฏขึ้นในการป้อนข้อมูลที่ไม่ถูกต้อง เราไม่ต้องการทดสอบว่าอินพุตที่ไม่ดีทั้งหมดถูกปฏิเสธหรือไม่ นั่นคืองานของการทดสอบหน่วย
หน่วยการทดสอบ
การทดสอบหน่วยรวมถึงการทดสอบหน่วยของรหัสที่เล็กที่สุดซึ่งมักจะเป็นฟังก์ชั่นหรือวิธีการ การทดสอบหน่วยส่วนใหญ่ทำโดยผู้พัฒนาหน่วย / วิธี / ฟังก์ชั่นเพราะพวกเขาเข้าใจหลักของฟังก์ชั่น เป้าหมายหลักของนักพัฒนาคือการครอบคลุมรหัสโดยการทดสอบหน่วย
มีข้อ จำกัด ว่าบางฟังก์ชั่นไม่สามารถทดสอบผ่านการทดสอบหน่วย แม้หลังจากสำเร็จการทดสอบหน่วยทั้งหมดแล้ว ไม่รับประกันการใช้งานที่ถูกต้องของผลิตภัณฑ์ สามารถใช้ฟังก์ชั่นเดียวกันนี้ได้ในบางส่วนของระบบในขณะที่การทดสอบหน่วยถูกเขียนขึ้นสำหรับการใช้งานครั้งเดียวเท่านั้น
การทดสอบฟังก์ชั่น
เป็นการทดสอบประเภทกล่องดำที่จะทำการทดสอบด้านการใช้งานของผลิตภัณฑ์โดยไม่ต้องดูรหัส การทดสอบการใช้งานส่วนใหญ่ทำโดยผู้ทดสอบซอฟต์แวร์เฉพาะ ซึ่งจะรวมถึงเทคนิคบวกลบและ BVA โดยใช้ข้อมูลที่ไม่ได้มาตรฐานสำหรับการทดสอบการทำงานของผลิตภัณฑ์ที่ระบุ ครอบคลุมการทดสอบจะดำเนินการในลักษณะที่ดีขึ้นโดยการทดสอบการทำงานกว่าโดยการทดสอบหน่วย มันใช้แอพพลิเคชั่น GUI สำหรับการทดสอบดังนั้นจึงง่ายต่อการตรวจสอบว่าส่วนที่เฉพาะเจาะจงของอินเทอร์เฟซมีหน้าที่รับผิดชอบอะไรบ้าง
อย่างง่าย ๆ เราสามารถพูดได้:
การทดสอบหน่วย : - การทดสอบหน่วยใช้สำหรับทดสอบส่วนประกอบผลิตภัณฑ์ตามส่วนประกอบพิเศษโดยเฉพาะขณะที่ผลิตภัณฑ์กำลังอยู่ระหว่างการพัฒนา เครื่องมือประเภท Junit และ Nunit จะช่วยให้คุณทดสอบผลิตภัณฑ์ตามหน่วย ** แทนที่จะแก้ปัญหาหลังจากการรวมมันสะดวกสบายเสมอที่จะได้รับการแก้ไขในช่วงต้นของการพัฒนา
การทดสอบเชิงหน้าที่: - สำหรับการทดสอบนั้นมีสองประเภทหลักคือ 1. การทดสอบการทำงาน 2. การทดสอบแบบไม่ทำงาน
การทดสอบที่ไม่ใช้งานได้เป็นการทดสอบที่ผู้ทดสอบจะทดสอบว่าผลิตภัณฑ์จะดำเนินการตามคุณสมบัติคุณภาพทั้งหมดที่ลูกค้าไม่ได้กล่าวถึง แต่ต้องมีคุณลักษณะด้านคุณภาพเหล่านั้น ไลค์: - ประสิทธิภาพการใช้งานความปลอดภัยโหลดความเครียด ฯลฯ แต่ในการทดสอบการใช้งาน : - ลูกค้ามีอยู่แล้วตามความต้องการของเขาและได้รับการบันทึกไว้อย่างเหมาะสมแล้วงานทดสอบคือการตรวจสอบข้ามว่า ระบบที่เสนอหรือไม่ สำหรับวัตถุประสงค์นั้นผู้ทดสอบควรทดสอบการใช้งานกับระบบที่นำเสนอ
การทดสอบหน่วยมักจะทำโดยนักพัฒนา วัตถุประสงค์ของการทำเช่นเดียวกันคือเพื่อให้แน่ใจว่ารหัสทำงานอย่างถูกต้อง กฎทั่วไปของหัวแม่มือคือการครอบคลุมเส้นทางทั้งหมดในรหัสโดยใช้การทดสอบหน่วย
การทดสอบหน้าที่ : นี่เป็นการอ้างอิงที่ดี คำอธิบายการทดสอบการทำงาน