Equivalence Class Partitioning & Boundary Value Analysis

The Basic, Yet Very Useful Black Box Testing Technique, Every QA Engineer Should Master

Piyorot
The Way It Should Be
2 min readOct 5, 2014

--

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

อนาคตอยู่ตรงนี้แล้ว เรามีหน้าที่ต้องถ่ายทอดมันออกไปให้คนอื่นได้สัมผัสสิ่งดีๆร่วมกันครับ

--

--

Piyorot
The Way It Should Be

A member of Mutrack and Inthentic. I lead, learn, and build with vision, love and care. https://piyorot.com