Equivalence Class Partitioning & Boundary Value Analysis
The Basic, Yet Very Useful Black Box Testing Technique, Every QA Engineer Should Master
The Way It Is
ถึงแม้จะรู้อยู่เต็มอกแล้วว่า Module หรือ Feature ไหนที่มีความเสี่ยงสูงในเรื่องคุณภาพ หลายครั้ง QA Engineer ก็ไม่เข้าใจหลักการหรือ Technique ที่ควรจะใช้ในการออกแบบ Test Case ที่ดีเพียงพอเพื่อทดสอบระบบให้ครอบคลุม
ครั้นแล้วเค้าจึงจัดการทดสอบระบบแบบเดาสุ่มไปตามยัตถากรรม … มันไม่ควรจะเป็นแบบนั้นเลยครับ
The Way It Should Be
อย่างน้อยเราก็ควรจะมีหลักการเบื้องต้นที่จะช่วยให้เราออกแบบ Test Case ได้ดี … วันนี้ขอนำเสนอ Equivalence Class Partitioning และ Boundary Value Analysis ซึ่งเป็น Black Box Testing Technique ที่ใช้กันบ่อยๆ มันมีประโยชน์มากถ้าเราต้องทดสอบ Module หรือ Feature ที่มีความเกี่ยวข้องกับวัตถุ (Object) และเงื่อนไข (Condition) ตามตัวอย่างข้างล่าง
0. Case Study
กรณีตัวอย่างคือระบบจองตั๋วท่องเที่ยวที่ราคาตั๋วขึ้นอยู่กับเงื่อนไขของอายุคนเดินทางตามรูป … จากเงื่อนไขแบบนี้ เราควรจะมี Test Case เท่าไรจึงจะการันตีคุณภาพของระบบเราได้?
1. Equivalence Class Partitioning — กำหนดวัตถุและเงื่อนไข
ขั้นแรกที่เราต้องทำก็การใช้ Equivalence Class Partitioning Technique ในการแบ่งกลุ่มของข้อมูลออกมาก่อน ขั้นตอนแรกคือกำหนดวัตถุ (Object) และเงื่อนไข (Condition) ในกรณีนี้วัตถุคือ “คน” และเงื่อนไขคือ “อายุ” จากนั้นก็ทำการแบ่งกลุ่ม (Class) ของวัตถุจากเงื่อนไขที่มี
ตอนนี้เราได้มา 4 Class … แต่ช้าก่อน มีบางอย่างหายไป
ในกรณีนี้เนื่องจากวัตถุเราคือคน เมื่อพิจารณาถึงคนและอายุแล้วเราจะพบว่าคนเราไม่สามารถจะมีอายุเป็นศูนย์หรือน้อยกว่าศูนย์ได้ ดังนั้นมันจะมีอีก Class หนึ่งโผล่เข้ามา นั่นคือ Invalid Class ตามรูปข้างล่างเลย
2. Equivalence Class Partitioning — กำหนดผลลัพธ์
จากนั้นเราก็กำหนดผลลัพธ์ (Expected Output) ซึ่งก็คือราคาตั๋วลงไปในแต่ละ Class ตามโจทย์ของเราตามรูปข้างล่าง … เสร็จแล้วสำหรับ Equivalence Class Partitioning
3. Boundary Value Analysis — กำหนดจุดที่แท้จริงของผลลัพธ์
หลักการของ Boundary Value Analysis คือการมองหาตัวเลขหรือกลุ่มข้อมูลที่น้อยที่สุดที่สามารถเป็นตัวแทนของข้อมูลทั้งหมดใน Class นั้นได้ เช่น กรณี Class 2 ตัวเลขที่เป็นไปได้ทั้งหมดคือตั้งแต่ตัวเลขที่มากกว่าศูนย์แต่น้อยกว่าหก ในมุมมองของ Software Testing แล้วการทดสอบระบบด้วยอายุ = 2, 3, 4,5 ก็ไม่ต่างกับการเทสที่อายุ 5 เพียงค่าเดียวเลยเพราะระบบเราจะประมวลผลตัวเลขกลุ่มนี้เหมือนกันหมด นั่นคือผลลัพธ์ = Free Ticket
การกำหนดกลุ่มตัวเลขที่เป็นตัวแทนของข้อมูลในแต่ละ Class ทำได้โดย ขั้นแรกกำหนดจุดที่แท้จริงหรือ Exact Point ของเงื่อนไขในแต่ละ Class ก่อน ตามรูป
4. Boundary Value Analysis — กำหนดขอบของข้อมูลในแต่ละ Class
ขั้นที่สองคือเราจะกำหนดข้อมูลที่อยู่สุดขอบ (Extreme Edges) ของจุดที่แท้จริงของผลลัพธ์ (Exact Points) เพื่อสร้างกลุ่มของข้อมูลที่ครอบคลุมในการทดสอบระบบ ตามรูป
ขอบของข้อมูลนั้นขึ้นอยู่กับประเภทของข้อมูลด้วยว่าเป็นตัวเลขจำนวนเต็ม เลขจุดทศนิยม ตัวอักษรหรืออื่นๆ
5. เขียนตาราง Test Case
ขั้นตอนสุดท้ายคือการแปลข้อมูลทั้งหมดมาเป็น Test Case ตามรูปครับ ในกรณีนี้เราต้องการอย่างน้อย 12 Test Cases เพื่อการันตีว่าระบบของเราจะทำงานได้อย่างถูกต้อง
ไม่ยากใช้มั้ยครับ … ลองประยุกต์ใช้กันดู ☺
ผมเขียนบทความนี้เพราะอยากเปลี่ยนแปลงสิ่งที่เป็นอยู่ในอุตสาหกรรมการผลิตซอฟท์แวร์ให้ดีขึ้นตามความเชื่อและประสบการณ์ของผม ถ้าเพื่อนๆเชื่อในแนวทางเดียวกัน เรามาช่วยกันคนละไม้คนละมือทำให้สังคมของเราดีขึ้นครับ จะแชร์บทความนี้ผ่าน Social Network หรือจะแบ่งปันเรื่องราวนี้ให้คนที่นั่งข้างๆฟังบ้างก็ได้
The Future Has Arrived — It’s Just Not Evenly Distributed Yet, William Gibson
อนาคตอยู่ตรงนี้แล้ว เรามีหน้าที่ต้องถ่ายทอดมันออกไปให้คนอื่นได้สัมผัสสิ่งดีๆร่วมกันครับ