พีระมิดหรือปู ค้นหากลยุทธ์การทดสอบที่เหมาะสม

ดูวิธีรวมการทดสอบประเภทต่างๆ เข้าเป็นกลยุทธ์ที่สมเหตุสมผลซึ่งเหมาะกับโปรเจ็กต์ของคุณ

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

ตู้ที่มีลิ้นชัก 2 อันซึ่งคุณเปิดพร้อมกันได้

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

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

ขนาดแอปพลิเคชัน องค์ประกอบของทีม การพึ่งพาการทดสอบด้วยตนเอง กลยุทธ์การทดสอบ
เล็ก นักพัฒนาแอปเท่านั้น สูง Testing Ice Cone
Testing Crab
เล็ก นักพัฒนาซอฟต์แวร์และวิศวกร QA สูง Testing Ice Cone
Testing Crab
เล็ก นักพัฒนาแอปเท่านั้น ต่ำ พีระมิดการทดสอบ
ใหญ่ นักพัฒนาแอปเท่านั้น สูง ถ้วยรางวัลการทดสอบ
เพชรการทดสอบ
ใหญ่ นักพัฒนาซอฟต์แวร์และวิศวกร QA สูง ถ้วยรางวัลการทดสอบ
ปูการทดสอบ
ใหญ่ นักพัฒนาแอปเท่านั้น ต่ำ ถ้วยรางวัลการทดสอบ
Honeycomb การทดสอบ

มาดูรายละเอียดกลยุทธ์และเรียนรู้ความหมายเบื้องหลังชื่อกลยุทธ์กัน

กำหนดเป้าหมายการทดสอบ: คุณต้องการบรรลุเป้าหมายใดด้วยการทดสอบเหล่านี้

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

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

ในฐานะนักพัฒนาแอป คุณยังใช้แอปพลิเคชันและอุปกรณ์อื่นๆ อีกมากมายด้วย ในแง่นี้ คุณคือผู้ใช้ที่พึ่งพาระบบทั้งหมดเหล่านี้เพื่อให้ "ทำงานได้" ในทางกลับกัน คุณต้องพึ่งพานักพัฒนาซอฟต์แวร์จำนวนนับไม่ถ้วนที่พยายามอย่างเต็มที่เพื่อให้แอปพลิเคชันและอุปกรณ์ทำงานได้ ในทางกลับกัน ในฐานะนักพัฒนาแอป คุณก็พยายามที่จะรักษาความไว้วางใจนี้ไว้เช่นกัน ดังนั้น เป้าหมายแรกของคุณควรเป็นการจัดส่งซอฟต์แวร์ที่ใช้งานได้และให้บริการผู้ใช้เสมอ ซึ่งรวมถึงการทดสอบที่คุณเขียนขึ้นเพื่อรับรองคุณภาพของแอปพลิเคชันด้วย Kent C. Dodds ได้สรุปไว้อย่างดีในโพสต์ Static vs Unit vs Integration vs E2E Testing for Frontend Apps ดังนี้

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

โดย Kent C. Dodds

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

การกำหนดกลยุทธ์การทดสอบ: วิธีเลือกกลยุทธ์การทดสอบ

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

รูปทรงต่างๆ เช่น พีระมิด เพชร โคนไอศกรีม รังผึ้ง และถ้วยรางวัล ซึ่งแสดงถึงกลยุทธ์การทดสอบ

แบบคลาสสิก: พีระมิดการทดสอบ

ทันทีที่คุณเริ่มมองหากลยุทธ์การทดสอบ คุณอาจพบปิรามิดการทดสอบอัตโนมัติเป็นการเปรียบเทียบแรก Mike Cohn ได้แนะนำแนวคิดนี้ไว้ในหนังสือ "Succeeding with Agile" ต่อมา Martin Fowler ได้ขยายแนวคิดนี้ในบทความ Practical Test Pyramid คุณสามารถแสดงภาพปิรามิดได้ดังนี้

พีระมิดการทดสอบ

ดังที่แสดงในภาพวาดนี้ พีระมิดการทดสอบประกอบด้วย 3 ชั้น ได้แก่

  1. หน่วย คุณจะเห็นการทดสอบเหล่านี้ที่ชั้นฐานของพีระมิดเนื่องจากดำเนินการได้รวดเร็วและดูแลรักษาได้ง่าย การทดสอบนี้จะแยกต่างหากและกำหนดเป้าหมายเป็นหน่วยทดสอบที่เล็กที่สุด ตัวอย่างเช่น ดู Unit Test ทั่วไปสำหรับผลิตภัณฑ์ขนาดเล็กมาก

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

  3. การทดสอบ E2E (หรือที่เรียกว่าการทดสอบ UI) การทดสอบเหล่านี้จะจำลองผู้ใช้จริงและการโต้ตอบของผู้ใช้ การทดสอบดังกล่าวต้องใช้เวลาในการดำเนินการนานกว่าจึงมีค่าใช้จ่ายสูงกว่า ซึ่งอยู่ด้านบนสุดของพีระมิด

ความเชื่อมั่นเทียบกับทรัพยากร

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

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

ปิรามิดการทดสอบที่มีลูกศรแสดงทิศทางของความเชื่อมั่นและทรัพยากรที่จำเป็นสำหรับการทดสอบประเภทต่างๆ

ปิรามิดพยายามแก้ปัญหานี้โดยทำให้คุณมุ่งเน้นไปที่ Unit Test มากขึ้น และจัดลำดับความสำคัญของเคสที่ครอบคลุมโดยการทดสอบ E2E อย่างเคร่งครัด เช่น เส้นทางของผู้ใช้ที่สำคัญที่สุดหรือจุดที่เสี่ยงต่อข้อบกพร่องมากที่สุด ตามที่ Martin Fowler เน้นย้ำ ประเด็นสำคัญที่สุด 2 ประการในพีระมิดของ Cohn มีดังนี้

  1. เขียนการทดสอบที่มีรายละเอียดแตกต่างกัน
  2. ยิ่งคุณอยู่ในระดับสูงเท่าใด คุณก็ควรมีการทดสอบน้อยลงเท่านั้น

Pyramid พัฒนาแล้ว การปรับใช้พีระมิดการทดสอบ

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

เขียนการทดสอบ ไม่มากเกินไป ส่วนใหญ่เป็นการผสานรวม

โดย Guillermo Rauch

นี่เป็นหนึ่งในคำพูดที่มักถูกอ้างถึงบ่อยที่สุดในหัวข้อนี้ ดังนั้นเรามาแยกย่อยกันดีกว่า

  • "เขียนการทดสอบ" ไม่เพียงเพราะช่วยสร้างความไว้วางใจ แต่ยังช่วยประหยัดเวลาในการบำรุงรักษาด้วย
  • "ไม่มากนัก" ความครอบคลุม 100% ไม่ได้ดีเสมอไป เพราะการทดสอบของคุณจะไม่ได้รับการจัดลำดับความสำคัญและจะมีการบำรุงรักษาจำนวนมาก
  • "การผสานรวมเป็นส่วนใหญ่" ในกรณีนี้ เราจะเน้นที่การทดสอบการผสานรวมอีกครั้ง เนื่องจากมีคุณค่าทางธุรกิจมากที่สุดโดยให้ความเชื่อมั่นในระดับสูงทุกวัน ขณะเดียวกันก็รักษาเวลาในการดำเนินการที่สมเหตุสมผลไว้ได้

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

เพชรทดสอบ

การปรับเปลี่ยนครั้งแรกจะลดการเน้นการทำ Unit Test มากเกินไป ดังที่เห็นในพีระมิดการทดสอบ ลองนึกภาพว่าคุณได้ทำการทดสอบ Unit Test ครอบคลุม 100% แล้ว อย่างไรก็ตาม ในครั้งถัดไปที่คุณเปลี่ยนโครงสร้างภายในโค้ด คุณจะต้องอัปเดต Unit Test เหล่านี้จำนวนมาก และคุณอาจอยากข้ามการทดสอบเหล่านี้ไป จึงเกิดการกัดเซาะ

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

เพชรทดสอบ

พีระมิดเปลี่ยนเป็นเพชร คุณจะเห็น 3 เลเยอร์ก่อนหน้า แต่มีขนาดต่างกัน และเลเยอร์หน่วยถูกตัดออกไป

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

กำลังทดสอบรังผึ้ง

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

รังผึ้งสำหรับทดสอบ

รูปร่างนี้ทำให้เรานึกถึงรังผึ้ง จึงเป็นที่มาของชื่อ โดยมีเลเยอร์ต่อไปนี้

  • การทดสอบแบบผสานรวม บทความของ Spotify ใช้คำพูดจาก J. ข. Rainsberger เพื่อกำหนดเลเยอร์นี้ว่า "การทดสอบที่จะผ่านหรือไม่ผ่านโดยขึ้นอยู่กับความถูกต้องของระบบอื่น" การทดสอบดังกล่าวมีการขึ้นต่อกันภายนอกที่คุณต้องพิจารณา และในทางกลับกัน ระบบของคุณอาจเป็นทรัพยากร Dependency ที่ทำให้ระบบอื่นๆ เสียหาย เช่นเดียวกับการทดสอบ E2E ในการเปรียบเทียบอื่นๆ ให้ใช้การทดสอบเหล่านี้อย่างระมัดระวัง เฉพาะในกรณีที่จำเป็นที่สุดเท่านั้น
  • การทดสอบการผสานรวม คุณควรให้ความสำคัญกับเลเยอร์นี้เช่นเดียวกับการปรับเปลี่ยนอื่นๆ ซึ่งประกอบด้วยการทดสอบที่ยืนยันความถูกต้องของบริการในลักษณะที่แยกต่างหากมากขึ้น แต่ยังคงใช้ร่วมกับบริการอื่นๆ ซึ่งหมายความว่าการทดสอบจะรวมระบบอื่นๆ ด้วย และมุ่งเน้นที่จุดโต้ตอบ เช่น ผ่านการทดสอบ API
  • การทดสอบรายละเอียดการติดตั้งใช้งาน การทดสอบเหล่านี้คล้ายกับ Unit Test ซึ่งเป็นการทดสอบที่มุ่งเน้นส่วนของโค้ดที่แยกออกมาต่างหากโดยธรรมชาติ จึงมีความซับซ้อนภายในของตัวเอง

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับกลยุทธ์การทดสอบนี้ โปรดดูโพสต์ที่เปรียบเทียบพีระมิดการทดสอบกับรังผึ้งโดย Martin Fowler และบทความต้นฉบับจาก Spotify

ถ้วยรางวัลการทดสอบ

คุณจะเห็นการมุ่งเน้นที่การทดสอบการผสานรวมซ้ำๆ อยู่แล้ว อย่างไรก็ตาม การทดสอบอีกประเภทหนึ่งที่คุณพบในบทความก่อนหน้านี้ไม่ใช่การทดสอบในทางทฤษฎี แต่ก็ยังคงเป็นแง่มุมสําคัญที่คุณควรพิจารณาในกลยุทธ์การทดสอบ การวิเคราะห์แบบคงที่หายไปจากพีระมิดการทดสอบและในการปรับเปลี่ยนส่วนใหญ่ที่คุณเห็นจนถึงตอนนี้ มีการปรับใช้ถ้วยรางวัลการทดสอบที่พิจารณาการวิเคราะห์แบบคงที่ไปพร้อมกับมุ่งเน้นที่การทดสอบการผสานรวม ถ้วยรางวัลการทดสอบมีที่มาจากคำพูดก่อนหน้านี้ของ Guillermo Rauch และพัฒนาโดย Kent C. Dodds:

ถ้วยรางวัลการทดสอบ

ถ้วยรางวัลการทดสอบเป็นการเปรียบเทียบที่แสดงรายละเอียดของการทดสอบในลักษณะที่แตกต่างออกไปเล็กน้อย โดยมี 4 ชั้นดังนี้

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

หากต้องการอ่านข้อมูลเพิ่มเติมเกี่ยวกับถ้วยรางวัลการทดสอบ โปรดดูบล็อกโพสต์โดย Kent C. Dodds เกี่ยวกับเรื่องนี้

แนวทางที่เน้น UI เพิ่มเติม

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

ทดสอบไอศกรีมโคนและทดสอบปู

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

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

ไอศกรีมโคนสำหรับทดสอบ

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

Test Crab คล้ายกับ Test Ice Cone แต่เน้นที่การทดสอบ E2E และการทดสอบภาพมากกว่า

ปูทดสอบ

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

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

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

คำแนะนำที่นำไปใช้ได้จริง: มาวางกลยุทธ์กัน

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

แล้วแต่กรณี

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

บ่อยครั้งที่การทดสอบในชีวิตจริงเป็นเรื่องยากที่จะแยกและกำหนดเป็นรายบุคคล แม้แต่ Martin Fowler เองก็ยังเน้นย้ำถึงแง่บวกของคำจำกัดความที่แตกต่างกัน เช่น ในกรณีของ Unit Test ดังที่ Justin Searls กล่าวไว้อย่างถูกต้องในทวีตของเขาว่า

[…] เขียนการทดสอบที่สื่อความหมายซึ่งกำหนดขอบเขตที่ชัดเจน ทำงานได้อย่างรวดเร็วและเชื่อถือได้ และไม่ผ่านด้วยเหตุผลที่เป็นประโยชน์เท่านั้น

โดย Justin Searls

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

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