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

การทดสอบโมดูลคืออะไร?
การทดสอบโมดูล การทดสอบแบบโมดูลเป็นการทดสอบซอฟต์แวร์ประเภทหนึ่งที่ตรวจสอบโปรแกรมย่อย รูทีนย่อย คลาส หรือขั้นตอนการทำงานแต่ละส่วนในโปรแกรม แทนที่จะทดสอบโปรแกรมซอฟต์แวร์ทั้งหมดในคราวเดียว การทดสอบแบบโมดูลแนะนำให้ทดสอบส่วนประกอบย่อยๆ ของโปรแกรม
การทดสอบโมดูลส่วนใหญ่มุ่งเน้นไปที่การทดสอบแบบกล่องขาว (white box testing) วัตถุประสงค์ของการทดสอบโมดูลไม่ใช่เพื่อแสดงให้เห็นว่าโมดูลทำงานได้อย่างถูกต้อง แต่เพื่อแสดงให้เห็นว่ามีข้อผิดพลาดอยู่ในโมดูลนั้น การกลับด้านนี้มีความสำคัญ: การทดสอบที่ไม่พบอะไรเลยนั้นยืนยันอะไรได้น้อยมาก ในขณะที่การทดสอบที่เปิดเผยข้อบกพร่องนั้นได้ทำหน้าที่ของมันแล้ว
การทดสอบในระดับโมดูลยังช่วยให้สามารถนำหลักการทำงานแบบขนานมาใช้ในกระบวนการทดสอบได้ เนื่องจากเป็นการเปิดโอกาสให้ทดสอบหลายโมดูลพร้อมกัน แทนที่จะรอให้การสร้างระบบเสร็จสมบูรณ์
ทำไมต้องทำ Module Test
แนะนำให้ทำการทดสอบโมดูล เนื่องจากจะช่วยเปลี่ยนแปลงต้นทุนในการตรวจหาข้อบกพร่อง
- โอกาสในการระบุข้อผิดพลาดหรือบั๊กในส่วนย่อยๆ ของโปรแกรมจะสูงขึ้น
- สามารถทดสอบหลายโมดูลพร้อมกันได้ ดังนั้นวิธีการนี้จึงสนับสนุนการทดสอบแบบขนาน
- ความซับซ้อนของการทดสอบสามารถจัดการได้ง่าย เนื่องจากแต่ละโมดูลได้รับการพิจารณาแยกกัน
- พบข้อบกพร่องภายในโมดูลหนึ่ง tracสามารถทำงานได้ด้วยโค้ดเพียงเล็กน้อย ทำให้เวลาในการแก้ไขข้อผิดพลาดลดลงอย่างมาก
การทดสอบโมดูลทำอย่างไร?
การออกแบบไฟล์ กรณีทดสอบ การออกแบบกรณีทดสอบสำหรับการทดสอบโมดูลเป็นส่วนสำคัญ ในการออกแบบกรณีทดสอบสำหรับการทดสอบโมดูล ผู้ทดสอบต้องคำนึงถึงสองสิ่งต่อไปนี้
- ข้อกำหนดสำหรับโมดูล
- ซอร์สโค้ดของโมดูล
วิเคราะห์ตรรกะของโมดูลโดยใช้อย่างน้อยหนึ่งวิธีต่อไปนี้ กล่องสีขาว วิธีการต่างๆ จากนั้นเสริมกรณีทดสอบเหล่านี้ด้วยการประยุกต์ใช้ กล่องดำ วิธีการต่างๆ สำหรับข้อกำหนดของโมดูล ค่าที่สมจริงมีความสำคัญพอๆ กับเส้นทางที่เลือก ดังนั้นจงเตรียมการไว้ให้พร้อม ข้อมูลการทดสอบ ควบคู่ไปกับคดีความ ไม่ใช่หลังจากนั้น
เมื่อออกแบบกรณีทดสอบเสร็จแล้ว ขั้นตอนต่อไปคือการรวมโมดูลสำหรับการทดสอบ วิธีที่ใช้คืออย่างใดอย่างหนึ่งต่อไปนี้ ที่เพิ่มขึ้น หรือ ไม่ใช่แบบเพิ่มขึ้นทีละน้อย วิธี
- วิธีการที่ไม่เพิ่มทีละขั้น — โมดูลทั้งหมดจะได้รับการทดสอบแยกกัน โดยจะรวมโมดูลทั้งหมดเข้าด้วยกันก่อน แล้วจึงทดสอบโปรแกรมทั้งหมดอีกครั้ง
- วิธีการเพิ่มทีละขั้น — แต่ละโมดูลจะได้รับการทดสอบก่อน จากนั้นจึงค่อยๆ เพิ่มเข้าไปในชุดทดสอบ โดยจะทำการทดสอบซ้ำทีละขั้นตอน
- ในการทดสอบแบบเพิ่มทีละขั้น มีแนวทางอยู่สองวิธี จากบนลงล่าง และ จากล่างขึ้นบน การทดสอบ
- ในการเรียกใช้โมดูลด้วยข้อมูลที่เลือก จำเป็นต้องมีไดรเวอร์สำหรับป้อนข้อมูลทดสอบ ตรวจสอบการทำงาน และบันทึกผลลัพธ์
การเลือกใช้วิธีใดวิธีหนึ่งระหว่างสองวิธีนี้ เป็นการแลกเปลี่ยนระหว่างความยุ่งยากในการติดตั้งและความสามารถในการวินิจฉัยปัญหา
| แง่มุม | วิธีการเพิ่มทีละขั้น | วิธีการที่ไม่เพิ่มทีละขั้น |
| การผสมผสาน | ทีละโมดูล โดยเพิ่มเข้าไปในชุดสะสมที่ผ่านการทดสอบแล้ว | นำโมดูลทั้งหมดมารวมกัน แล้วทดสอบพร้อมกัน |
| จำเป็นต้องใช้โครงนั่งร้าน | ใบขับขี่และเอกสารต่างๆ ที่เขียนขึ้นตามลำดับ | ใช้ test double น้อยลง เนื่องจากมีโมดูลจริงอยู่แล้ว |
| การแยกตัวไม่เป็นผล | แข็งแรง — จุดบกพร่องอยู่ที่โมดูลที่เพิ่งเพิ่มเข้าไป | อ่อนแอ — ความล้มเหลวอาจเกิดขึ้นได้จากทุกจุด |
| เหมาะที่สุดสำหรับ | โครงสร้างขนาดใหญ่ที่มีโมดูลทำงานร่วมกันจำนวนมาก | โปรแกรมขนาดเล็กที่มีโมดูลน้อยและมีการเชื่อมโยงต่ำ |
ไดรเวอร์และสตับในการทดสอบโมดูล
ไดรเวอร์ที่กล่าวถึงข้างต้นเป็นเพียงครึ่งหนึ่งของคู่ เนื่องจากโมดูลที่กำลังทดสอบนั้นแทบจะไม่เคยอยู่ด้านบนหรือด้านล่างสุดของลำดับการเรียกใช้ฟังก์ชัน ผู้ทดสอบจึงใช้โค้ดจำลองแทนส่วนที่ขาดหายไปทั้งสองด้านของไดรเวอร์
- คนขับรถ — ทำหน้าที่แทนที่โมดูลที่เรียกใช้งานอยู่เหนือโมดูลที่กำลังทดสอบ โดยจะส่งข้อมูลทดสอบ เรียกใช้โมดูล ตรวจสอบการทำงาน และบันทึกผลลัพธ์ การทดสอบแบบจากล่างขึ้นบนขึ้นอยู่กับตัวขับเคลื่อน เนื่องจากโมดูลระดับล่างจะพร้อมใช้งานก่อนโมดูลระดับบน
- ต้นขั้ว — แทนที่โมดูลที่ถูกเรียกซึ่งอยู่ด้านล่างโมดูลที่กำลังทดสอบ โดยจะรับการเรียกและส่งคืนค่าตอบสนองที่กำหนดไว้และทราบแล้ว เพื่อให้โมดูลที่กำลังทดสอบสามารถดำเนินการต่อไปได้ การทดสอบแบบบนลงล่างขึ้นอยู่กับสตับ (stub) เนื่องจากโมดูลระดับสูงกว่าจะพร้อมใช้งานก่อน
ตัวอย่างการใช้งานจริงทำให้การจับคู่มีความชัดเจนยิ่งขึ้น หากโมดูลคำนวณการชำระเงินเสร็จสมบูรณ์แล้ว แต่หน้าจอชำระเงินที่เรียกใช้โมดูลนั้นยังไม่เสร็จ ไดรเวอร์จะป้อนยอดรวมคำสั่งซื้อชุดหนึ่งให้กับโมดูลและบันทึกสิ่งที่ได้รับกลับมา หากบริการค้นหาข้อมูลภาษีที่โมดูลเรียกใช้ยังไม่เสร็จสมบูรณ์เช่นกัน ข้อมูลตัวอย่างจะส่งคืนอัตราภาษีคงที่เพื่อให้การคำนวณยังคงดำเนินต่อไป ชิ้นส่วนทั้งสองนี้ไม่ได้ถูกจัดส่งไปพร้อมกัน แต่จะถูกทิ้งเมื่อโมดูลจริงมาถึง ซึ่งเป็นเหตุผลว่าทำไมความเข้าใจผิดเกี่ยวกับตัวอย่างทดสอบจึงถูกระบุไว้ในภายหลังว่าเป็นความท้าทายที่เกิดขึ้นซ้ำๆ
ตัวอย่างเคล็ดลับสำหรับการทดสอบโมดูล
ต่อไปนี้เป็นคำแนะนำบางประการที่ควรพิจารณาก่อนทำการทดสอบโมดูล
- Revตรวจสอบกรณีทดสอบก่อนใช้งาน
- หลีกเลี่ยงความสับสนเกี่ยวกับที่มาของความคลาดเคลื่อน
- ใช้เครื่องมือทดสอบอัตโนมัติ
- ตรวจสอบตัวแปรที่ควรคงเดิม
- สลับโมดูลระหว่างเครื่องทดสอบเพื่อหลีกเลี่ยงการทดสอบตัวเอง
- นำกรณีทดสอบกลับมาใช้ใหม่
เคล็ดลับข้อที่ห้ามีความสำคัญมากกว่าที่ความยาวของมันบ่งบอก นักพัฒนาที่ทดสอบเฉพาะโมดูลที่เพิ่งเขียนเสร็จจะทำซ้ำสมมติฐานเดิมที่ทำให้เกิดข้อบกพร่อง ดังนั้นการหมุนเวียนโมดูลระหว่างบุคคลจึงเป็นหนึ่งในวิธีเพิ่มคุณภาพที่ประหยัดที่สุดวิธีหนึ่ง
การทดสอบหน่วยเทียบกับการทดสอบโมดูล
ในหลายทีมมักใช้สองคำนี้สลับกันไปมา แต่ผู้เขียนและขอบเขตงานนั้นแตกต่างกัน
| การทดสอบโมดูล | การทดสอบหน่วย |
| การทดสอบโมดูลคือชุดของการทดสอบที่เขียนโดยผู้ทดสอบหลังจากที่นักพัฒนาเขียนโค้ดบางส่วนแล้ว | การทดสอบหน่วย คือชุดของการทดสอบที่เขียนขึ้นโดยนักพัฒนาซอฟต์แวร์ในระหว่างกระบวนการพัฒนาซอฟต์แวร์ |
| การทดสอบโมดูลอาจเกี่ยวข้องกับการรวมการทดสอบหน่วยเข้าด้วยกัน | การทดสอบหน่วยอาจทดสอบหน่วยต่างๆ แยกกัน |
การทดสอบโมดูล เทียบกับ การทดสอบส่วนประกอบ เทียบกับ การทดสอบการบูรณาการ
การทดสอบโมดูลยังอยู่ติดกับอีกสองระดับที่อยู่ใกล้เคียงกัน ซึ่งอาจทำให้สับสนได้ง่าย ตารางนี้แยกความแตกต่างระหว่างสองระดับนี้ตามสิ่งที่ถูกทดสอบและผู้ที่มักทำการทดสอบ
| แง่มุม | การทดสอบโมดูล | การทดสอบส่วนประกอบ | การทดสอบบูรณาการ |
| อยู่ระหว่างการทดสอบ | โปรแกรมย่อย คลาส หรือขั้นตอนหนึ่งรายการ | ส่วนประกอบหนึ่งเดียวที่ทำงานได้ด้วยตัวเอง พร้อมด้วยส่วนประกอบที่เกี่ยวข้องโดยตรง | ส่วนเชื่อมต่อระหว่างโมดูลที่รวมกัน |
| เจ้าของปกติ | ผู้ทดสอบ หลังจากเขียนโค้ดเสร็จแล้ว | Tester | ผู้ทดสอบการบูรณาการ |
| นั่งร้าน | คนขับและใบเสร็จรับเงิน | ส่วนประกอบย่อยสำหรับการพึ่งพาภายนอก | จำนวนคู่ทดสอบที่ลดลงเรื่อยๆ |
| พบข้อบกพร่อง | ข้อผิดพลาดทางตรรกะภายในโมดูล | ข้อผิดพลาดด้านพฤติกรรมในส่วนประกอบ | ข้อผิดพลาดเกี่ยวกับอินเทอร์เฟซและการส่งผ่านข้อมูล |
ในการใช้งานทั่วไป การทดสอบส่วนประกอบ และการทดสอบโมดูลมักถูกมองว่าเป็นกิจกรรมเดียวกัน ในขณะที่ การทดสอบการรวม จะเริ่มต้นก็ต่อเมื่อแต่ละโมดูลผ่านการทดสอบแล้วเท่านั้น
ความท้าทายในการทดสอบโมดูล
นี่คือความท้าทายที่ทีมต่างๆ พบเจอบ่อยที่สุดเมื่อนำการทดสอบโมดูลมาใช้
- การทดสอบแบบไม่เพิ่มขึ้นต้องอาศัยการทำงานมากขึ้น — การรวมทุกอย่างเข้าด้วยกันก่อน หมายความว่าหากเกิดข้อผิดพลาดเพียงครั้งเดียว ผู้ทดสอบอาจต้องกลับไปทำโปรแกรมทั้งหมดใหม่อีกครั้ง
- การทดสอบความเข้าใจผิดทวีคูณ — คำสั่ง stub ที่ให้ค่าที่ไม่สมจริงจะทำให้ได้ผลลัพธ์เป็นสีเขียว ซึ่งไม่ได้พิสูจน์อะไรเลย
- การทดสอบการแก้ไขข้อผิดพลาดมักจะ — โค้ดโครงสร้างพื้นฐานมีข้อบกพร่องในตัวของมันเอง และเวลาที่ใช้ในการแก้ไขไดรเวอร์ก็คือเวลาที่ไม่ได้ใช้ในการทดสอบโมดูล
- จำเป็นต้องเข้าใจโค้ด — การออกแบบแบบกล่องขาวหมายความว่า ผู้ทดสอบที่ไม่สามารถอ่านโมดูลได้ จะไม่สามารถออกแบบกรณีทดสอบที่มีความหมายสำหรับโมดูลนั้นได้
