EP.4 เทคนิคการออกแบบกรณีการทดสอบ (Test Case) และ สถานการณ์การทดสอบ (Test Scenario)
เดินทางมาถึง EP.4 กันแล้ว เป็นยังไงกันบ้างคะ มีใครได้ลองเอาเทคนิคทั้งหมดไปใช้กับการทำงานจริงแล้วบ้าง หากใครยังไม่ค่อยเข้าใจเทคนิคต่าง ๆ หรือยังหยิบเอาแต่ละเทคนิคไปใช้ทำงานจริงไม่ถูก ผู้เขียนขอแนะนำว่าให้ฝึกทำซ้ำ ๆ กันต่อไปเรื่อย ๆ นะคะ อย่าเพิ่งธ๊อ! (สะกดคำนั้นไม่เป็น555) เราจะฝึกทำโจทย์เดิมหรือโจทย์ใหม่ก็ได้ค่ะ เพราะตัวผู้เขียนเองก็ฝึกทำซ้ำ ๆ มาแล้วหลากหลายโจทย์ ทั้งโจทย์ใหม่และโจทย์เก่า กว่าจะเข้าใจก็ใช้เวลามากพอสมควรเลยค่ะ เพราะฉะนั้นในบทความนี้ เราจะมาฝึกทำซ้ำกันต่อกับโจทย์ฝึกเรื่องการถอนเงินสด และโจทย์ฝึกใหม่ที่เกี่ยวกับระบบแต้มสะสม (Points System) ทั้งการได้มาซึ่งแต้ม และการใช้งานแต้มค่ะ
ก่อนจะไปเริ่มออกแบบกัน เราจะขอมาทบทวนส่วนประกอบของกรณีการทดสอบ (Test Case) และ สถานการณ์การทดสอบ (Test Scenario) กันก่อนค่ะ
โครงสร้างกรณีการทดสอบ (Test Case)
กรณีการทดสอบ (Test Case) = สิ่งที่ต้องเตรียมก่อนการทดสอบ (Arrange) + ข้อมูลที่ใช้ในการทดสอบ (Test Data) + เงื่อนไขที่จะถูกทดสอบ (Tested Condition) + ผลลัพธ์ที่คาดหวัง (Expected Result)
โครงสร้างสถานการณ์การทดสอบ (Test Scenario)
สถานการณ์การทดสอบ (Test Scenario) = กรณีการทดสอบ (Test Case) + กรณีการทดสอบ (Test Case) + … + กรณีการทดสอบ (Test Case)
สิ่งที่ต้องเตรียมก่อนการทดสอบ (Arrange)
หมายถึง การเตรียมการก่อนเริ่มทำการทดสอบ เช่น การเตรียมข้อมูลที่จะต้องมีไว้ในระบบ ก่อนเราจะเริ่มต้นทดสอบในแต่ละ Test Scenario
ข้อมูลที่ใช้ในการทดสอบ (Test Data) หรือ ขั้นตอนการทดสอบ (Action)
หมายถึง ข้อมูลที่เราจะ Input เข้าไปในระบบ หรือ ตัวอย่างข้อมูลที่จะใช้ทดสอบแบบของจริง (Real Example) ซึ่งส่วนนี้ก็จะสำคัญมากที่จะต้องใช้ตัวอย่างข้อมูลจริงเท่านั้น เพื่อให้การทดสอบของเราเสมือนจริงมากที่สุด
เงื่อนไขที่จะถูกทดสอบ (Tested Condition)
หมายถึง เงื่อนไขทางธุรกิจ (Business Condition) ที่ได้มาจากเจ้าของความต้องการ แต่เราอาจจะได้มาเป็นเอกสาร หรือข้อความยาว ๆ หรือคำพูดปากเปล่า นั่นคือเราต้องระบุมันออกมาเป็นข้อ ๆ ให้ได้ (Identify Tested Condition)
ผลลัพธ์ที่คาดหวัง (Expected Result)
หมายถึง การบอกถึงสิ่งที่เราคาดหวังว่าระบบจะทำงานอย่างไร หรือ ระบุสิ่งที่เราต้องการจะตรวจรับและตรวจสอบความถูกต้องของการทำงานของระบบ
ตัวอย่างโจทย์ การถอนเงินสดที่ร้านสะดวกซื้อ C-Store
ความต้องการของลูกค้า (Requirements) หรือ เงื่อนไขทางธุรกิจ คือ
1. ถอนได้ครั้งละ 10,000.00 บาท ต่อ คน
2. ถอนได้วันละ 20,000.00 บาท ต่อ คน (รวมทุกสาขาทั้งวัน)
3. ต้องไม่เป็นบัญชีออมทรัพย์ที่ถูกอายัด
4. บัญชีออมทรัพย์แต่ละประเภทจะมีเงื่อนไขการถอนเงินขั้นต่ำ
5. ค่าธรรมเนียมการทำธุรกรรมการถอนเงิน คิดตามช่วงอายุ
5.1 15 ปี — 20 ปี ค่าธรรมเนียม 0.00 บาท
5.2 20 ปี 1 วัน ขึ้นไป ค่าธรรมเนียม 15.00 บาท (เก็บเงินสดที่ C-Store)
5.3 ค่าธรรมเนียมทั้งหมด 15.00 บาท แบ่งรายได้เป็นของ C-Store 10.00 บาท ของ ธนาคาร 5.00 บาท
6. ช่วงเวลาที่อนุญาตให้ทำรายการถอน ได้ 08:00–18:00 น.
R1 ถอนได้ครั้งละ 10,000.00 บาท ต่อ คน
สำหรับเงื่อนไขนี้เราจะใช้เทคนิค BVA สังเกตุจากเป็นค่าของตัวเลข เราจึงแบ่งออกเป็น 3 ช่วงของข้อมูล ดังนี้
R1TC1
เงื่อนไขที่จะถูกทดสอบ: ถอนครั้งละน้อยกว่า 10,000.00 บาท
ข้อมูลที่ใช้ในการทดสอบ: ถอนเงิน 700.00 บาท
ผลลัพธ์ที่คาดหวัง: สามารถถอนเงินได้
R1TC2
เงื่อนไขที่จะถูกทดสอบ: ถอนครั้งละเท่ากันกับ 10,000.00 บาท
ข้อมูลที่ใช้ในการทดสอบ: ถอนเงิน 10,000.00 บาท
ผลลัพธ์ที่คาดหวัง: สามารถถอนเงินได้
R1TC3
เงื่อนไขที่จะถูกทดสอบ: ถอนครั้งละมากกว่า 10,000.00 บาท
ข้อมูลที่ใช้ในการทดสอบ: ถอนเงิน 12,500.00 บาท
ผลลัพธ์ที่คาดหวัง: ไม่สามารถถอนเงินได้
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
R2 ถอนได้วันละ 20,000.00 บาท ต่อ คน (รวมทุกสาขาทั้งวัน)
สำหรับเงื่อนไขนี้เราจะใช้เทคนิค BVA แบ่งออกเป็น 3 ช่วงของข้อมูล ดังนี้
R2TC1
เงื่อนไขที่จะถูกทดสอบ: ถอนวันละน้อยกว่า 20,000.00 บาท
ข้อมูลที่ใช้ในการทดสอบ: ถอนเงินวันละ 13,500.00 บาท
ผลลัพธ์ที่คาดหวัง: สามารถถอนเงินได้
R2TC2
เงื่อนไขที่จะถูกทดสอบ: ถอนวันละเท่ากันกับ 20,000.00 บาท
ข้อมูลที่ใช้ในการทดสอบ: ถอนเงิน 20,000.00 บาท
ผลลัพธ์ที่คาดหวัง: สามารถถอนเงินได้
R2TC3
เงื่อนไขที่จะถูกทดสอบ: ถอนวันละมากกว่า 20,000.00 บาท
ข้อมูลที่ใช้ในการทดสอบ: ถอนเงินวันละ 28,000.00 บาท
ผลลัพธ์ที่คาดหวัง: ไม่สามารถถอนเงินได้
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
R3 ต้องไม่เป็นบัญชีออมทรัพย์ที่ถูกอายัด
สำหรับเงื่อนไขนี้เราจะใช้เทคนิค EP แบ่งออกเป็น 2 ช่วงของข้อมูล ดังนี้
R3TC1
เงื่อนไขที่จะถูกทดสอบ: บัญชีออมทรัพย์ไม่ถูกอายัด
ข้อมูลที่ใช้ในการทดสอบ: บัญชีออมทรัพย์ที่ไม่ถูกอายัด
ผลลัพธ์ที่คาดหวัง: สามารถถอนเงินได้
R3TC2
เงื่อนไขที่จะถูกทดสอบ: บัญชีออมทรัพย์ถูกอายัด
ข้อมูลที่ใช้ในการทดสอบ: บัญชีออมทรัพย์ที่ถูกอายัด
ผลลัพธ์ที่คาดหวัง: ไม่สามารถถอนเงินได้
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
R4 บัญชีออมทรัพย์แต่ละประเภทจะมีเงื่อนไขการถอนเงินขั้นต่ำ
สำหรับเงื่อนไขนี้เราจะต้องกำหนดการถอนเงินขั้นต่ำ ซึ่งในที่นี้เราจะกำหนดขั้นต่ำเท่ากันกับ 100.00 บาท และเราจะใช้เทคนิค BVA แบ่งออกเป็น 3 ช่วงของข้อมูล ดังนี้
R4TC1
เงื่อนไขที่จะถูกทดสอบ: ถอนครั้งละน้อยกว่าขั้นต่ำ 100.00 บาท
ข้อมูลที่ใช้ในการทดสอบ: 50.00 บาท
ผลลัพธ์ที่คาดหวัง: ไม่สามารถถอนเงินได้
R4TC2
เงื่อนไขที่จะถูกทดสอบ: ถอนครั้งละเท่ากันกับขั้นต่ำ 100.00 บาท
ข้อมูลที่ใช้ในการทดสอบ: 100.00 บาท
ผลลัพธ์ที่คาดหวัง: สามารถถอนเงินได้
R4TC3
เงื่อนไขที่จะถูกทดสอบ: ถอนครั้งละมากกว่าขั้นต่ำ 100.00 บาท
ข้อมูลที่ใช้ในการทดสอบ: 500.00 บาท
ผลลัพธ์ที่คาดหวัง: สามารถถอนเงินได้
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
R5 ค่าธรรมเนียมการทำธุรกรรม คิดตามช่วงอายุ
5.1 15 ปี — 20 ปี ค่าธรรมเนียม 0.00 บาท
5.2 20 ปี 1 วัน ขึ้นไป ค่าธรรมเนียม 15.00 บาท (เก็บเงินสดที่ C-Store)
5.3 ค่าธรรมเนียมทั้งหมด 15.00 บาท แบ่งรายได้เป็นของ C-Store 10.00 บาท ของ ธนาคาร 5.00 บาท
สำหรับเงื่อนไขนี้ จะมีขอบเขตของข้อมูล 2 ค่า นั่นก็คือ อายุ 15 ปี และ อายุ 20 ปี เราจะใช้เทคนิค BVA แบ่งออกเป็น 6 ช่วงของข้อมูล ดังนี้
R5TC1
เงื่อนไขที่จะถูกทดสอบ: อายุเจ้าของบัญชี น้อยกว่า 15 ปี
ข้อมูลที่ใช้ในการทดสอบ: เจ้าของบัญชีอายุ 13 ปี
ผลลัพธ์ที่คาดหวัง: -
(สอบถามเจ้าของความต้องการเพิ่มเติมว่าอายุน้อยกว่า 15 ปี ทำธุรกรรมได้หรือไม่)
R5TC2
เงื่อนไขที่จะถูกทดสอบ: อายุเจ้าของบัญชี เท่ากันกับ 15 ปี
ข้อมูลที่ใช้ในการทดสอบ: เจ้าของบัญชีอายุ 15 ปี
ผลลัพธ์ที่คาดหวัง: ค่าธรรมเนียม 0.00 บาท
R5TC3
เงื่อนไขที่จะถูกทดสอบ: อายุเจ้าของบัญชี มากกว่า 15 ปี
ข้อมูลที่ใช้ในการทดสอบ: เจ้าของบัญชีอายุ 17 ปี
ผลลัพธ์ที่คาดหวัง: ค่าธรรมเนียม 0.00 บาท
R5TC4
เงื่อนไขที่จะถูกทดสอบ: อายุเจ้าของบัญชี น้อยกว่า 20 ปี
ข้อมูลที่ใช้ในการทดสอบ: เจ้าของบัญชีอายุ 18 ปี
ผลลัพธ์ที่คาดหวัง: ค่าธรรมเนียม 0.00 บาท
R5TC5
เงื่อนไขที่จะถูกทดสอบ: อายุเจ้าของบัญชี เท่ากันกับ 20 ปี
ข้อมูลที่ใช้ในการทดสอบ: เจ้าของบัญชีอายุ 20 ปี
ผลลัพธ์ที่คาดหวัง: ค่าธรรมเนียม 0.00 บาท
R5TC6
เงื่อนไขที่จะถูกทดสอบ: อายุเจ้าของบัญชี มากกว่า 20 ปี
ข้อมูลที่ใช้ในการทดสอบ: เจ้าของบัญชีอายุ 25 ปี
ผลลัพธ์ที่คาดหวัง: ค่าธรรมเนียม 15.00 บาท แบ่งรายได้เป็นของ C-Store 10.00 บาท ของ ธนาคาร 5.00 บาท
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
R6 ช่วงเวลาที่อนุญาตให้ทำรายการถอน ได้ 08:00–18:00 น.
สำหรับเงื่อนไขนี้ จะมีขอบเขตของข้อมูล 2 ค่า นั่นก็คือ เวลา 08:00 น. และ เวลา 18:00 น. เราจะใช้เทคนิค BVA แบ่งออกเป็น 6 ช่วงของข้อมูล ดังนี้
R6TC1
เงื่อนไขที่จะถูกทดสอบ: เวลาถอนเงิน ก่อน 08:00 น.
ข้อมูลที่ใช้ในการทดสอบ: 07:05 น.
ผลลัพธ์ที่คาดหวัง: ไม่สามารถถอนเงินได้
R6TC2
เงื่อนไขที่จะถูกทดสอบ: เวลาถอนเงิน เท่ากันกับ 08:00 น.
ข้อมูลที่ใช้ในการทดสอบ: 08:00 น.
ผลลัพธ์ที่คาดหวัง: สามารถถอนเงินได้
R6TC3
เงื่อนไขที่จะถูกทดสอบ: เวลาถอนเงิน หลัง 08:00 น.
ข้อมูลที่ใช้ในการทดสอบ: 09:10 น.
ผลลัพธ์ที่คาดหวัง: สามารถถอนเงินได้
R6TC4
เงื่อนไขที่จะถูกทดสอบ: เวลาถอนเงิน ก่อน 18:00 น.
ข้อมูลที่ใช้ในการทดสอบ: 16:30 น.
ผลลัพธ์ที่คาดหวัง: สามารถถอนเงินได้
R6TC5
เงื่อนไขที่จะถูกทดสอบ: เวลาถอนเงิน เท่ากันกับ 18:00 น.
ข้อมูลที่ใช้ในการทดสอบ: 18:00 น.
ผลลัพธ์ที่คาดหวัง: สามารถถอนเงินได้
R6TC6
เงื่อนไขที่จะถูกทดสอบ: เวลาถอนเงิน หลัง 18:00 น.
ข้อมูลที่ใช้ในการทดสอบ: 19:20 น.
ผลลัพธ์ที่คาดหวัง: ไม่สามารถถอนเงินได้
ถัดมาคือการนำกรณีการทดสอบ (Test Case) มารวมกันให้ออกมาเป็น สถานการณ์การทดสอบ (Test Scenario) เราจะเอามาต่อกันทั้งหมด แต่ต้องระวังเงื่อนไขที่เป็น การถอนต่อครั้ง และการถอนขั้นต่ำ จะต้องไม่ขัดแย้งกัน ถ้าเลือกเงื่อนไขถอนครั้งละมากกว่า 10,000.00 บาท ก็จะเลือกเงื่อนไขถอนเท่ากันกับขั้นต่ำ 100.00 บาท ไม่ได้ เพราะจะทำให้ข้อมูลที่จะใช้ทดสอบขัดแย้งกัน
ตัวอย่าง Success Test Scenarios: ถอนเงินสดได้สำเร็จ
ต่อมาเราจะออกแบบทุก Scenario เลยก็สามารถทำได้ แต่ถ้าข้อมูลซ้ำกัน ก็สามารถเลือกตัวแทนออกมาได้ที่คิดว่าครอบคลุมที่สุด ในที่นี้จะต้องปรึกษาเจ้าของความต้องการและทีมพัฒนาของเรา ให้ช่วยตัดสินใจว่าจะเลือกกรณีไหนบ้าง ในที่นี้เราขอเลือกตัวแทนมา 5 Test Scenario ดังนี้
ตัวอย่าง Success Test Scenarios: ถอนเงินสดได้สำเร็จ
Test Scenario ID: WD-SC-01
เงื่อนไขที่จะถูกทดสอบ
อายุเจ้าของบัญชีมากกว่า 15 ปี
และ
ถอนครั้งละเท่ากันกับ 10,000.00 บาท
และ
ถอนวันละน้อยกว่า 20,000.00 บาท
และ
บัญชีออมทรัพย์ไม่ถูกอายัด
และ
ถอนครั้งละมากกว่าขั้นต่ำ 100.00 บาท
และ
เวลาถอนเงิน เท่ากันกับ 08:00 น.
สิ่งที่ต้องเตรียมการก่อนการทดสอบ
ข้อมูลบัญชี
ชื่อธนาคาร: SCK Bank
ประเภท: ออมทรัพย์
สถานะ: ไม่ถูกอายัด
เลขบัญชี: 0298387111
ชื่อบัญชี: พรพิมล ศรีแก้ว
วันเกิด: 08/06/2549
อายุ: 17 ปี
และ
ยอดเงินในบัญชีก่อนถอน: 253,000.00 บาท
และ
วันและเวลาที่ถอน: 08/06/2566 เวลา 08:00 น.
และ
ยอดเงินถอนรวมทั้งวัน: 2,000.00 บาท
ข้อมูลที่ใช้ในการทดสอบ หรือ ขั้นตอนการทดสอบ
ข้อมูลสาขา C-Store ที่ถอนเงิน
รหัส 73662
สาขา คอนโดวีเค
และ
ยอดเงินที่ถอน: 10,000.00 บาท
ผลลัพธ์ที่คาดหวัง ก่อนถอนสำเร็จ
ค่าธรรมเนียม: 0.00 บาท
ผลลัพธ์ที่คาดหวัง หลังถอนสำเร็จ
ข้อมูลบัญชี
ชื่อธนาคาร: SCK Bank
ประเภท: ออมทรัพย์
สถานะ: ไม่ถูกอายัด
เลขบัญชี: 0298387111
ชื่อบัญชี: พรพิมล ศรีแก้ว
วันเกิด: 08/06/2549
อายุ: 17 ปี
และ
ยอดคงเหลือในบัญชีหลังฝาก = ยอดเงินในบัญชีก่อนถอน - ยอดเงินที่ถอน
= 253,000.00 - 10,000.00
= 243,000.00 บาท
และ
ยอดคงเหลือที่ถอนได้ทั้งวัน = 20,000.00 - ยอดเงินถอนรวมทั้งวัน - ยอดเงินที่ถอน
= 20,000.00 - 2,000.00 - 10,000.00
= 8,000.00 บาท
และ
ส่วนแบ่งให้ C-Store: 0.00 บาท
ส่วนแบ่งให้ ธนาคาร: 0.00 บาท
ตัวอย่างโจทย์ Points System
เงื่อนไขทางธุรกิจ (Business Conditions) หรือ ความต้องการ (Requirements) คือ
PS1 — ทุก ๆ ราคาสินค้าที่สั่งซื้อ 100.00 บาท มีค่าเท่ากับแต้มสะสม 1 แต้ม
PS2 — 1 แต้ม มีค่าเท่ากับ 1 บาท ที่ใช้ในการสั่งซื้อในครั้งต่อไป
PS3 — แต้มมีอายุ 180 วัน นับตั้งแต่วันที่แต้มถูกอนุมัติ
PS4 — แต้มจะอนุมัติเมื่อลูกค้ากดยืนยันการได้รับสินค้า โดยนับวันที่กดยืนยันการได้รับสินค้าเป็นวันที่ 1 ของอายุ 180 วัน
จากโจทย์ เราสามารถแบ่งออกเป็น 2 ส่วนการทำงานของระบบได้ดังนี้
- การได้มาซึ่งแต้ม จากการซื้อสินค้า
- การใช้งานแต้มเป็นส่วนลด ในการซื้อสินค้า
ซึ่งถ้าเราลองสังเกตเงื่อนไขทางธุรกิจดูอีกครั้ง เราจะเห็นว่าเงื่อนไขแต่ละข้อนั้น ไม่ได้ถูกใช้กับทั้งสองส่วน ทำให้เราสามารถแยกเงื่อนไขทางธุรกิจออกมาตามกลุ่มของการทำงานของระบบทั้งสอง ได้ดังนี้
การได้มาซึ่งแต้ม จากการซื้อสินค้า
PS1 — ทุก ๆ ราคาสินค้าที่สั่งซื้อ 100.00 บาท มีค่าเท่ากับแต้มสะสม 1 แต้ม
PS4 — แต้มจะอนุมัติเมื่อลูกค้ากดยืนยันการได้รับสินค้า โดยนับวันที่กดยืนยันการได้รับสินค้าเป็นวันที่ 1 ของอายุ 180 วัน
การใช้งานแต้มเป็นส่วนลด ในการซื้อสินค้า
PS2–1 แต้ม มีค่าเท่ากับ 1 บาท ที่ใช้ในการสั่งซื้อในครั้งต่อไป
PS3 — แต้มมีอายุ 180 วัน นับตั้งแต่วันที่แต้มถูกอนุมัติ
จากทั้งสองส่วนนี้ เราจะขอเริ่มต้นด้วยการออกแบบกรณีการทดสอบ (Test Case) และ สถานการณ์การทดสอบ (Test Scenario) ของ การได้มาซึ่งแต้ม จากการซื้อสินค้า ก่อน แล้วตามด้วย การใช้งานแต้มเป็นส่วนลด ในการซื้อสินค้า นะคะ
กรณีการทดสอบ (Test Case) : การได้มาซึ่งแต้ม จากการซื้อสินค้า
PS1 - ทุก ๆ ราคาสินค้าที่สั่งซื้อ 100.00 บาท มีค่าเท่ากับแต้มสะสม 1 แต้ม
สำหรับเงื่อนไขนี้เราจะใช้เทคนิค BVA ในการออกแบบ เนื่องจากเป็นเงื่อนไขที่มีค่าเป็นตัวเลขเข้ามาเกี่ยวข้อง เราสามารถออกแบบได้ 3 ช่วงของข้อมูล ดังนี้
PS1-TC1
เงื่อนไขที่จะถูกทดสอบ: ราคาสินค้าน้อยกว่า 100.00 บาท
ข้อมูลที่ใช้ในการทดสอบ: ซื้อสินค้าราคาเท่ากันกับ 99.00 บาท
ผลลัพธ์ที่คาดหวัง: จำนวนแต้มสะสม เท่ากันกับ 0 แต้ม
PS1-TC2
เงื่อนไขที่จะถูกทดสอบ: ราคาสินค้าเท่ากันกับ 100.00 บาท
ข้อมูลที่ใช้ในการทดสอบ: ซื้อสินค้าราคาเท่ากันกับ 100.00 บาท
ผลลัพธ์ที่คาดหวัง: จำนวนแต้มสะสม เท่ากันกับ 1 แต้ม
PS1-TC3
เงื่อนไขที่จะถูกทดสอบ: ราคาสินค้ามากกว่า 100.00 บาท
ข้อมูลที่ใช้ในการทดสอบ: ซื้อสินค้าราคาเท่ากันกับ 1,499.00 บาท
ผลลัพธ์ที่คาดหวัง: จำนวนแต้มสะสม เท่ากันกับ 14 แต้ม
ในส่วนของข้อมูลที่ใช้ในการทดสอบ ที่เราใส่มาในขั้นตอนการออกแบบกรณีการทดสอบ (Test Case) ด้วยนั้น ทำให้เราเข้าใจการทำงานของระบบได้ง่ายขึ้น ให้เรามองออกว่าต้องใช้ข้อมูลประมาณไหน ซึ่งเราสามารถเปลี่ยนข้อมูลได้อีกหลายค่า ในตอนที่เราออกแบบสถานการณ์การทดสอบ (Test Scenario) ค่ะ
PS4 - แต้มจะอนุมัติเมื่อลูกค้ากดยืนยันการได้รับสินค้า โดยนับวันที่กดยืนยันการได้รับสินค้าเป็นวันที่ 1 ของอายุ 180 วัน
สำหรับเงื่อนไขนี้ เราจะใช้เทคนิคการออกแบบ State Transition นั่นก็คือ การกำหนดสถานะของแต้ม ในแต่ละจุดของการได้มาซึ่งแต้ม จากการซื้อสินค้า เราสามารถกำหนดออกมาได้ทั้งหมด 5 สถานะ ดังนี้
สถานะของแต้มที่ 1: รออนุมัติ
สถานะของแต้มที่ 2: อนุมัติ
สถานะของแต้มที่ 3: ถูกใช้เป็นส่วนลด
สถานะของแต้มที่ 4: แต้มถูกคืน
สถานะของแต้มที่ 5: หมดอายุ
ขั้นตอนถัดมา หลังจากที่กำหนดทุกสถานะครบเรียบร้อยแล้ว เราจะต้องกำหนด Action หรือ เงื่อนไขที่ทำให้เกิดการย้ายสถานะ และ Actor หรือ คนหรือสิ่งที่ทำให้เกิดการย้ายสถานะ ซึ่งการย้ายสถานะจะมี 4 คู่ดังนี้
สถานะของแต้มที่ 1 → สถานะของแต้มที่ 2 : รออนุมัติ จะเปลี่ยนไป อนุมัติ
Actor หรือ คนหรือสิ่งที่ทำให้เกิดการย้ายสถานะ คือ ลูกค้า
Action หรือ เงื่อนไขที่ทำให้เกิดการย้ายสถานะ คือ กดยืนยันการได้รับสินค้า
สถานะของแต้มที่ 2 → สถานะของแต้มที่ 3 : อนุมัติ จะเปลี่ยนไป ถูกใช้เป็นส่วนลด
Actor หรือ คนหรือสิ่งที่ทำให้เกิดการย้ายสถานะ คือ ลูกค้า
Action หรือ เงื่อนไขที่ทำให้เกิดการย้ายสถานะ คือ ใช้แต้มเป็นส่วนลด ในการซื้อสินค้า
สถานะของแต้มที่ 3 → สถานะของแต้มที่ 4: ถูกใช้เป็นส่วนลด จะเปลี่ยนไป แต้มถูกคืน
Actor หรือ คนหรือสิ่งที่ทำให้เกิดการย้ายสถานะ คือ ลูกค้า
Action หรือ เงื่อนไขที่ทำให้เกิดการย้ายสถานะ คือ ลูกค้าใช้แต้มเป็นส่วนลด ในการซื้อสินค้า และ ได้รับสินค้า และ สินค้ามีประกัน 10 เดือน สามารถคืนสินค้าได้ และ ลูกค้าคืนสินค้าสำเร็จ และ อายุแต้มยังไม่เกิน 180 วัน
ในความเป็นจริงแล้ว ตรงส่วนนี้ยังมีความไม่ชัดเจนของเงื่อนไขอยู่ เราควรจะถามกลับไปยังเจ้าของความต้องการหรือผู้ที่ให้ Requirementsให้เขาเป็นคนตัดสินใจและยืนยันกลับมา ว่าสามารถใช้แต้มเป็นส่วนลดได้หรือไม่ได้
ดังนั้น ในบทความนี้เราจะกำหนดให้สามารถใช้แต้มเป็นส่วนลดได้ หากแต้มมีอายุเท่ากันกับ 180 วัน
ถือว่าเป็นอีกหนึ่งหน้าที่ของ Software Tester ที่จำเป็นต้องหาและระบุ Hidden Assumption ออกมาให้ได้ เพื่อให้การออกแบบของเราครอบคลุมเงื่อนไขมากที่สุดค่ะ
สถานะของแต้มที่ 2 → สถานะของแต้มที่ 5: อนุมัติ จะเปลี่ยนไป หมดอายุ
Actor หรือ คนหรือสิ่งที่ทำให้เกิดการย้ายสถานะ คือ ระบบ
Action หรือ เงื่อนไขที่ทำให้เกิดการย้ายสถานะ คือ แต้มมีอายุมากกว่า 180 วัน
ตัวอย่าง Success Test Scenarios: การได้มาซึ่งแต้ม จากการซื้อสินค้า
Test Scenario ID: PS-TS1
เงื่อนไขที่จะถูกทดสอบ
ราคาสินค้ามากกว่า 100.00 บาท
และ
สถานะของแต้ม รออนุมัติ → สถานะของแต้ม อนุมัติ
สิ่งที่ต้องเตรียมการก่อนการทดสอบ
ข้อมูลสมาชิก
รหัสสมาชิก: 13001
ชื่อ — สกุล: ฟ้าใส ใจดี
และ
ข้อมูลการสั่งซื้อ
รายการ: หม้อทอดไร้น้ำมัน
หมายเลขคำสั่งซื้อ: 200320POVE0EIW
วันที่ 10/08/2566 เวลา 12:00 น.
ราคาสินค้า: 2,400.00 บาท
หมายเลขการจัดส่ง: OB2800918364TH
และ
จำนวนแต้มที่มีอยู่: 50 แต้ม
และ
จำนวนแต้มที่จะได้รับ: 24 แต้ม
สถานะของแต้มที่จะได้รับ: รออนุมัติ
ข้อมูลที่ใช้ในการทดสอบ หรือ ขั้นตอนการทดสอบ
วันและเวลาที่ได้รับสินค้า: วันที่ 13/08/2566 เวลา 15:00 น.
ผลลัพธ์ที่คาดหวัง หลังได้รับสินค้า
จำนวนแต้มที่จะได้รับ: 24 แต้ม
สถานะของแต้มที่จะได้รับ: รออนุมัติ
ข้อมูลที่ใช้ในการทดสอบ หรือ ขั้นตอนการทดสอบ
วันและเวลาที่กดยืนยันการรับสินค้า: วันที่ 15/08/2566 เวลา 20:30 น.
ผลลัพธ์ที่คาดหวัง หลังกดยืนยันการรับสินค้า
จำนวนแต้มที่ได้รับ: 24 แต้ม
สถานะของแต้มที่ได้รับ: อนุมัติ
จำนวนแต้มที่สามารถใช้งานได้
= จำนวนแต้มที่มีอยู่ + จำนวนแต้มที่ได้รับ = 50 + 24 = 74 แต้ม
วันและเวลาที่แต้มมีอายุ 1 วัน: วันที่ 15/08/2566 เวลา 20:30 น.
วันและเวลาที่แต้มมีอายุ 180 วัน: วันที่ 11/02/2567 เวลา 23:59 น.
Test Scenario ID: PS-TS2
เงื่อนไขที่จะถูกทดสอบ
ราคาสินค้าเท่ากันกับ 100.00 บาท
และ
สถานะของแต้ม รออนุมัติ → สถานะของแต้ม อนุมัติ
สิ่งที่ต้องเตรียมการก่อนการทดสอบ
ข้อมูลสมาชิก
รหัสสมาชิก: 23905
ชื่อ — สกุล: ศุภนัฐ หิรัญกิจ
และ
ข้อมูลการสั่งซื้อ
รายการ: น้ำซุปชาบูน้ำดำ
หมายเลขคำสั่งซื้อ: 831192DSSA5BEP
วันที่ 01/07/2566 เวลา 11:30 น.
ราคาสินค้า: 100.00 บาท
หมายเลขการจัดส่ง: EP9910028453SQ
และ
จำนวนแต้มที่มีอยู่: 129 แต้ม
และ
จำนวนแต้มที่จะได้รับ: 1แต้ม
สถานะของแต้มที่จะได้รับ: รออนุมัติ
ข้อมูลที่ใช้ในการทดสอบ หรือ ขั้นตอนการทดสอบ
วันและเวลาที่ได้รับสินค้า: วันที่ 04/07/2566 เวลา 09:23 น.
ผลลัพธ์ที่คาดหวัง หลังได้รับสินค้า
จำนวนแต้มที่จะได้รับ: 1 แต้ม
สถานะของแต้มที่จะได้รับ: รออนุมัติ
ข้อมูลที่ใช้ในการทดสอบ หรือ ขั้นตอนการทดสอบ
วันและเวลาที่กดยืนยันการรับสินค้า: วันที่ 04/07/2566 เวลา 18:11 น.
ผลลัพธ์ที่คาดหวัง หลังกดยืนยันการรับสินค้า
จำนวนแต้มที่ได้รับ: 1 แต้ม
สถานะของแต้มที่ได้รับ: อนุมัติ
จำนวนแต้มที่สามารถใช้งานได้
= จำนวนแต้มที่มีอยู่ + จำนวนแต้มที่ได้รับ = 129 + 1 = 130 แต้ม
วันและเวลาที่แต้มมีอายุ 1 วัน: วันที่ 04/07/2566 เวลา 18:11 น.
วันและเวลาที่แต้มมีอายุ 180 วัน: วันที่ 31/12/2566 เวลา 23:59 น.
ตัวอย่าง Alternative Test Scenarios: การไม่ได้มาซึ่งแต้ม จากการซื้อสินค้า
Test Scenario ID: PS-TSA1
เงื่อนไขที่จะถูกทดสอบ
ราคาสินค้าน้อยกว่า 100.00 บาท
สิ่งที่ต้องเตรียมการก่อนการทดสอบ
ข้อมูลสมาชิก
รหัสสมาชิก: 100082
ชื่อ — สกุล: เกศินี อมรศิลป์
และ
ข้อมูลการสั่งซื้อ
รายการ: น้ำสมแท้ 100% (500 ml)
หมายเลขคำสั่งซื้อ: 003185BNMJ1LHX
วันที่ 01/10/2566 เวลา 11:30 น.
ราคาสินค้า: 99.00 บาท
หมายเลขการจัดส่ง: SP0030121439AB
และ
จำนวนแต้มที่มีอยู่: 10 แต้ม
และ
จำนวนแต้มที่จะได้รับ: 0 แต้ม
สถานะของแต้มที่จะได้รับ: -
ข้อมูลที่ใช้ในการทดสอบ หรือ ขั้นตอนการทดสอบ
วันและเวลาที่ได้รับสินค้า: วันที่ 12/09/2566 เวลา 14:05 น.
ผลลัพธ์ที่คาดหวัง หลังได้รับสินค้า
จำนวนแต้มที่จะได้รับ: 0 แต้ม
สถานะของแต้มที่จะได้รับ: -
ข้อมูลที่ใช้ในการทดสอบ หรือ ขั้นตอนการทดสอบ
วันและเวลาที่กดยืนยันการรับสินค้า: วันที่ 16/09/2566 เวลา 10:15 น.
ผลลัพธ์ที่คาดหวัง หลังกดยืนยันการรับสินค้า
จำนวนแต้มที่ได้รับ: 0 แต้ม
สถานะของแต้มที่ได้รับ: -
จำนวนแต้มที่สามารถใช้งานได้
= 10 + 0 = 10 + 0 = 10 แต้ม
วันและเวลาที่แต้มมีอายุ 1 วัน: -
วันและเวลาที่แต้มมีอายุ 180 วัน: -
การใช้ Template ของกรณี Alternative เราจะต้องใช้ Template เดียวกันกับของกรณี Success นั่นคือ เราต้องออกแบบออกมาให้ใช้ได้กับทั้งคู่ ให้ใช้คอลัมน์เดียวกันได้ และหากไม่ได้ใช้คอลัมน์ไหน เราก็จะเว้นไว้ หรือ ขีด หรือใช้คำว่า ไม่มี ไม่ได้กรอก ก็ได้
กรณีการทดสอบ (Test Case) : การใช้งานแต้มเป็นส่วนลด ในการซื้อสินค้า
PS2 - 1 แต้ม มีค่าเท่ากับ 1 บาท ที่ใช้ในการสั่งซื้อในครั้งต่อไป
สำหรับเงื่อนไขนี้ เราจะใช้เทคนิค Use Case เราต้องระบุกรณีการใช้งานที่สามารถเกิดขึ้นได้ในระบบทั้งหมด ออกแบบมาได้ ดังนี้
กรณีที่มีแต้ม แต่ไม่ใช้แต้มเป็นส่วนลด
PS2-TC1 กรณีที่มีแต้ม แต่ไม่ใช้แต้มเป็นส่วนลด เมื่อมีแต้มน้อยกว่าราคาสินค้า
PS2-TC2 กรณีที่มีแต้ม แต่ไม่ใช้แต้มเป็นส่วนลด เมื่อมีแต้มเท่ากันกับราคาสินค้า
PS2-TC3 กรณีที่มีแต้ม แต่ไม่ใช้แต้มเป็นส่วนลด เมื่อมีแต้มมากกว่าราคาสินค้า
กรณีที่มีแต้ม ใช้แต้มเป็นส่วนลดแค่บางส่วน
PS2-TC4 กรณีที่มีแต้ม ใช้แต้มเป็นส่วนลดแค่บางส่วน เมื่อมีแต้มน้อยกว่าราคาสินค้า
PS2-TC5 กรณีที่มีแต้ม ใช้แต้มเป็นส่วนลดแค่บางส่วน เมื่อมีแต้มเท่ากันกับราคาสินค้า
PS2-TC6 กรณีที่มีแต้ม ใช้แต้มเป็นส่วนลดแค่บางส่วน เมื่อมีแต้มมากกว่าราคาสินค้า
กรณีที่มีแต้ม ใช้แต้มเป็นส่วนลดทั้งหมด
PS2-TC7 กรณีที่มีแต้ม ใช้แต้มเป็นส่วนลดทั้งหมด เมื่อมีแต้มน้อยกว่าราคาสินค้า
PS2-TC8 กรณีที่มีแต้ม ใช้แต้มเป็นส่วนลดทั้งหมด เมื่อมีแต้มเท่ากันกับราคาสินค้า
กรณีที่ไม่มีแต้ม ไม่มีแต้มไปใช้เป็นส่วนลด
PS2-TC9 กรณีที่ไม่มีแต้ม ไม่มีแต้มไปใช้เป็นส่วนลด
ในส่วนของเทคนิคนี้ ถ้าหากว่ามีกรณีการใช้งานที่ออกแบบมาได้เยอะมาก เราสามารถปรึกษาเจ้าของความต้องการและทุกคนในทีมพัฒนาของเรา ว่าเราสามารถเลือกบางกรณีมาทดสอบได้หรือไม่ หรือควรจะใช้ทุกกรณีที่มีอยู่ทั้งหมดนั้น เพื่อความครอบคลุมที่ดีที่สุดของการทดสอบ
PS3 — แต้มมีอายุ 180 วัน นับตั้งแต่วันที่แต้มถูกอนุมัติ
สำหรับเงื่อนไขนี้ เราสามารถใช้เทคนิค BVA มาใช้ในการออกแบบได้ ดังนี้
PS3-TC1
เงื่อนไขที่จะถูกทดสอบ: แต้มมีอายุน้อยกว่า 180 วัน
ข้อมูลที่ใช้ในการทดสอบ: แต้มมีอายุ 175 วัน
ผลลัพธ์ที่คาดหวัง: สามารถใช้แต้มเป็นส่วนลดได้
PS3-TC2
เงื่อนไขที่จะถูกทดสอบ: แต้มมีอายุเท่ากันกับ 180 วัน
ข้อมูลที่ใช้ในการทดสอบ: แต้มมีอายุ 180 วัน
ผลลัพธ์ที่คาดหวัง: สามารถใช้แต้มเป็นส่วนลดได้
PS3-TC3
เงื่อนไขที่จะถูกทดสอบ: แต้มมีอายุมากกว่า 180 วัน
ข้อมูลที่ใช้ในการทดสอบ: แต้มมีอายุ 181 วัน
ผลลัพธ์ที่คาดหวัง: ไม่สามารถใช้แต้มเป็นส่วนลดได้
และอีกหนึ่งอย่างที่เราต้องวิเคราะห์เพิ่มอีกก็คือ เวลาที่จะทำให้แต้มหมดอายุนั้นต้องนับอย่างไร เช่น
แบบที่ 1 ยืนยันรับสินค้าวันที่ 02/08/66 เวลา 13:00 น. แต้มจะหมดอายุวันที่ 29/01/67 เวลา 12:59 น.
แบบที่ 2 ยืนยันรับสินค้าวันที่ 02/08/66 เวลา 13:00 น. แต้มจะหมดอายุวันที่ 29/01/67 เวลา 13:00 น.
แบบที่ 3 ยืนยันรับสินค้าวันที่ 02/08/66 เวลา 13:00 น. แต้มจะหมดอายุวันที่ 29/01/67 เวลา 23:59 น.
ซึ่งเราก็ควรต้องถามกลับไปยังเจ้าของความต้องการหรือผู้ที่ให้ Requirements ได้ตัดสินใจและยืนยันว่าจะใช้เงื่อนไขไหนในการที่จะหมดอายุของแต้ม
ดังนั้น ในบทความนี้เราจะกำหนดให้ใช้แบบที่ 3 คือ ยืนยันรับสินค้าวันที่ 02/08/66 เวลา 13:00 น. แต้มจะหมดอายุวันที่ 29/01/67 เวลา 23:59 น.
ตัวอย่าง Success Test Scenarios: การใช้งานแต้มเป็นส่วนลด ในการซื้อสินค้า
Test Scenario ID: PS-TA1
เงื่อนไขที่จะถูกทดสอบ
กรณีที่มีแต้ม ใช้แต้มเป็นส่วนลดแค่บางส่วน เมื่อมีแต้มมากกว่าราคาสินค้า
และ
แต้มมีอายุน้อยกว่า 180 วัน
และ
สถานะของแต้ม อนุมัติ → สถานะของแต้ม ถูกใช้เป็นส่วนลด
สิ่งที่ต้องเตรียมการก่อนการทดสอบ
ข้อมูลสมาชิก
รหัสสมาชิก: 001943
ชื่อ — สกุล: กัญญา รัตนพงษ์
และ
จำนวนแต้มที่มีอยู่: 215 แต้ม
สถานะของแต้มที่มีอยู่: อนุมัติ
อายุของแต้มที่มีอยู่ ณ วันที่ 22/06/2566: 150 วัน
วันและเวลาที่แต้มมีอายุ 1 วัน: วันที่ 23/01/2566 เวลา 12:05 น.
วันและเวลาที่แต้มมีอายุ 180 วัน: วันที่ 22/07/2566 เวลา 23:59 น.
ข้อมูลที่ใช้ในการทดสอบ หรือ ขั้นตอนการทดสอบ
ข้อมูลการสั่งซื้อ
1
รายการ: ฟองเต้าหู้ม้วน 300 กรัม
ราคาสินค้า: 129.00 บาท
2
รายการ: เส้นมันเทศจีน 200g
ราคาสินค้า: 39.00 บาท
วันที่ 22/06/2566 เวลา 08:32 น.
หมายเลขคำสั่งซื้อ: 831572PERF50SSZ
และ
ข้อมูลการชำระเงิน
ราคาสินค้ารวมทั้งหมด = 129.00 + 39.00 = 168.00 บาท
ค่าจัดส่ง: 35.00 บาท
จำนวนแต้มที่ใช้เป็นส่วนลด: 100 แต้ม
ผลลัพธ์ที่คาดหวัง
ราคารวมสุทธิ = (ราคาสินค้ารวมทั้งหมด + ค่าจัดส่ง) - จำนวนแต้มที่ใช้เป็นส่วนลด
= (168.00 + 35.00) - 100.00
= 203.00 - 100.00
= 103.00 บาท
และ
การใช้งานแต้มเป็นส่วนลด: สามารถใช้งานแต้มเป็นส่วนลดได้สำเร็จ
สถานะของแต้ม: ถูกใช้เป็นส่วนลด
จำนวนแต้มที่สามารถใช้งานได้ = จำนวนแต้มที่มีอยู่ - จำนวนแต้มที่ใช้เป็นส่วนลด
= 215 - 100 = 115 แต้ม
Test Scenario ID: PS-TA2
เงื่อนไขที่จะถูกทดสอบ
กรณีที่มีแต้ม ใช้แต้มเป็นส่วนลดทั้งหมด เมื่อมีแต้มน้อยกว่าราคาสินค้า
และ
แต้มมีอายุเท่ากันกับ 180 วัน
และ
สถานะของแต้ม อนุมัติ → สถานะของแต้ม ถูกใช้เป็นส่วนลด
สิ่งที่ต้องเตรียมการก่อนการทดสอบ
ข้อมูลสมาชิก
รหัสสมาชิก: 112546
ชื่อ — สกุล: พชร เหมสถิต
และ
จำนวนแต้มที่มีอยู่: 56 แต้ม
สถานะของแต้มที่มีอยู่: อนุมัติ
อายุของแต้มที่มีอยู่ ณ วันที่ 09/09/2566: 180 วัน
วันและเวลาที่แต้มมีอายุ 1 วัน: วันที่ 13/03/2566 เวลา 12:05 น.
วันและเวลาที่แต้มมีอายุ 180 วัน: วันที่ 09/09/2566 เวลา 23:59 น.
ข้อมูลที่ใช้ในการทดสอบ หรือ ขั้นตอนการทดสอบ
ข้อมูลการสั่งซื้อ
1
รายการ: น้ำยาซักผ้า Dee-Nee ขนาด 500 ml
ราคาสินค้า: 65.00 บาท
2
รายการ: น้ำยาปรับผ้านุ่ม FS ขนาด 650 ml
ราคาสินค้า: 55.00 บาท
3
รายการ: น้ำยาซักผ้าขาว ขนาด 320 มล.
ราคาสินค้า: 69.00 บาท
วันที่ 09/09/2566 เวลา 15:27 น.
หมายเลขคำสั่งซื้อ: 300294KLLV0QAC
และ
ข้อมูลการชำระเงิน
ราคาสินค้ารวมทั้งหมด = 65.00 + 55.00 + 69.00 = 189.00 บาท
ค่าจัดส่ง: 40.00 บาท
จำนวนแต้มที่ใช้เป็นส่วนลด: 56 แต้ม
ผลลัพธ์ที่คาดหวัง
ราคารวมสุทธิ = (ราคาสินค้ารวมทั้งหมด + ค่าจัดส่ง) - จำนวนแต้มที่ใช้เป็นส่วนลด
= (189.00 + 40.00) - 56.00
= 229.00 - 56.00
= 173.00 บาท
และ
การใช้งานแต้มเป็นส่วนลด: สามารถใช้งานแต้มเป็นส่วนลดได้สำเร็จ
สถานะของแต้ม: ถูกใช้เป็นส่วนลด
จำนวนแต้มที่สามารถใช้งานได้ = จำนวนแต้มที่มีอยู่ — จำนวนแต้มที่ใช้เป็นส่วนลด
= 56 - 56 = 0 แต้ม
และสุดท้ายนี้ ผู้เขียนขอย้ำกันอีกครั้งว่าทุกอย่างที่เขียนขึ้นในบทความนี้ เกิดจากการทำความเข้าใจและฝึกทำซ้ำ ๆ ของตัวผู้เขียนเองเท่านั้นค่ะ หากมีข้อผิดพลาดหรือทำให้เกิดความเข้าใจผิดประการใด ผู้เขียนต้องขออภัยมา ณ ที่นี้ด้วยค่า
ขอบคุณทุกคนที่อ่านจนจบนะคะ และพบกันใหม่ค่ะ