Types of Tests (ประเภทของการทดสอบ)

เช่นเดียวกับที่ปรึกษาหลายๆ คน ผมก็มีความผิดเป็นบางครั้งที่ใช้ quadrant เป็นวิธีจัดหมวดหมู่โลก และผมเริ่มกังวลว่าหนังสือเล่มนี้จะไม่มี quadrant สักอันเลย โชคดีที่ Brian Marick คิดค้นระบบจัดหมวดหมู่เทสต์ที่ยอดเยี่ยมซึ่งเข้ากันได้พอดี Figure 9-1 แสดงรูปแบบหนึ่งของ quadrant ของ Marick จากหนังสือ Agile Testing 1 ของ Lisa Crispin และ Janet Gregory ที่ช่วยจัดหมวดหมู่ประเภทของเทสต์ที่แตกต่างกัน

bms2 0901

Figure 9-1. testing quadrant ของ Brian Marick โดย Lisa Crispin และ Janet Gregory, Agile Testing: A Practical Guide for Testers and Agile Teams , © 2009

ที่ด้านล่างของ quadrant เรามีเทสต์ที่เป็น technology facing นั่นคือ เทสต์ที่ช่วยนักพัฒนาในการสร้างระบบตั้งแต่แรก property test อย่างเช่น performance test และ unit test ขอบเขตเล็กจัดอยู่ในหมวดนี้ และเทสต์เหล่านี้มักจะเป็นแบบอัตโนมัติทั้งหมด ครึ่งบนของ quadrant ประกอบด้วยเทสต์ที่ช่วยให้ผู้มีส่วนได้ส่วนเสียที่ไม่ใช่สายเทคนิคเข้าใจว่าระบบของคุณทำงานอย่างไร ซึ่งเราเรียกว่าเทสต์แบบ business-facing เทสต์เหล่านี้อาจเป็น end-to-end test ขอบเขตใหญ่ ดังที่แสดงใน quadrant ของ Acceptance Testing ที่มุมบนซ้าย หรือการทดสอบแบบ manual (ตามแบบฉบับของ user testing ที่ทำกับระบบ UAT) ดังที่แสดงใน quadrant ของ Exploratory Testing

ณ จุดนี้ ควรชี้ให้เห็นว่าเทสต์ส่วนใหญ่มุ่งเน้นไปที่ preproduction validation โดยเฉพาะ เราใช้เทสต์เหล่านี้เพื่อให้แน่ใจว่าซอฟต์แวร์มีคุณภาพเพียงพอก่อนที่จะถูก deploy เข้าสู่ production environment โดยทั่วไปแล้ว การที่เทสต์เหล่านี้ผ่าน (หรือไม่ผ่าน) จะเป็นเงื่อนไขในการตัดสินใจว่าซอฟต์แวร์ควรถูก deploy หรือไม่

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

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

Manual Exploratory Testing (การทดสอบแบบ Manual Exploratory)

โดยทั่วไปแล้ว การเปลี่ยนจากสถาปัตยกรรมแบบ monolithic ไปเป็นสถาปัตยกรรมแบบ microservice จะมีผลกระทบน้อยมากต่อ exploratory testing นอกเหนือจากการเปลี่ยนแปลงในระดับองค์กรที่กว้างขึ้นซึ่งอาจเกิดขึ้น อย่างที่เราจะสำรวจใน “Toward Stream-Aligned Teams” เราคาดว่า user interface ของ application ก็จะถูกแบ่งตามแนวทีมเช่นกัน ในบริบทแบบนี้ ownership ของการทดสอบแบบ manual ก็อาจเปลี่ยนแปลงไปด้วย

ความสามารถในการ automate งานบางอย่าง เช่น การตรวจสอบว่าสิ่งต่างๆ มีหน้าตาอย่างไร แต่ก่อนถูกจำกัดอยู่แค่ manual exploratory testing เท่านั้น การที่ tooling ที่รองรับ visual assertion เติบโตเต็มที่ขึ้นทำให้เราเริ่ม automate งานที่แต่ก่อนต้องทำด้วยมือได้ อย่างไรก็ตาม คุณไม่ควรมองว่านี่เป็นเหตุผลที่จะไม่ทำ manual testing เลย แต่ควรมองว่ามันเป็นโอกาสที่จะปลดปล่อยเวลาของ tester ให้ไปโฟกัสกับการทดสอบแบบ exploratory ที่ทำซ้ำน้อยกว่าแทน

เมื่อทำอย่างถูกต้อง manual exploratory testing ก็คือเรื่องของการค้นพบเป็นส่วนใหญ่ การจัดสรรเวลาเพื่อสำรวจ application ในฐานะผู้ใช้ปลายทางสามารถเปิดเผยปัญหาที่ไม่เช่นนั้นจะไม่ปรากฏชัดได้ manual testing ยังสำคัญมากในสถานการณ์ที่การเขียน automated test นั้นทำไม่ได้จริง อาจเป็นเพราะต้นทุนในการเขียนเทสต์นั้นสูงเกินไป automation คือเรื่องของการกำจัดงานที่ทำซ้ำๆ เพื่อปลดปล่อยมนุษย์ให้ไปทำกิจกรรมที่สร้างสรรค์และเฉพาะกิจมากขึ้น ดังนั้นให้มองว่า automation เป็นวิธีปลดปล่อยพลังสมองของเราสำหรับสิ่งที่เราทำได้ดีที่สุด

สำหรับจุดประสงค์ของบทนี้ เราจะข้าม manual exploratory testing ไปเป็นส่วนใหญ่ นี่ไม่ได้หมายความว่าการทดสอบประเภทนี้ไม่สำคัญ แต่เพียงแค่ขอบเขตของบทนี้เน้นไปที่การดูว่าการทดสอบ microservices แตกต่างจากการทดสอบ monolithic application ทั่วไปอย่างไร แต่เมื่อพูดถึง automated test เราต้องการเทสต์แต่ละประเภทมากน้อยแค่ไหน โมเดลอีกอันหนึ่งจะช่วยตอบคำถามนี้ และช่วยให้เข้าใจว่าการแลกเปลี่ยนที่แตกต่างกันมีอะไรบ้าง