บังคับทำเทสทำไมฟระ?

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

ตัวอย่าง ลูกค้าทั่วไปที่มาซื้อหนังสือถ้าซื้อเกิน 200 บาทจะได้ส่วนลด 10 บาท แต่ถ้าเป็นลูกค้า VIP จะได้ส่วนลด 15%

จากด้านบนก็ดูเหมือนจะไม่มีอะไรชิมิ? แต่ผมถามหน่อยว่า

  • ลูกค้าทั่วไปถ้าซื้อ 200 บาทพอดีเป๊ะ จะได้ส่วนลดหรือเปล่า ? (รู้ได้ไงว่าลูกค้าอยากได้แบบที่เราคิด?)

  • ลูกค้า VIP ที่ซื้อเกิน 200 บาทจะได้ส่วนลด 10 บาทนั่นด้วยหรือเปล่า ? (รู้ได้ไงว่าโปรโมชั่นมันทับซ้อนกันไม่ได้ ?)

  • ลูกค้า VIP จำเป็นไหมที่ต้องซื้อเกิน 200 เพื่อให้ได้ส่วนลด 15% (ในโจทย์ไม่ได้บอกนิ ?)

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

สำหรับคนที่สนใจอยากรู้เรื่องการเขียน Test แนะนำลิงค์นี้เบยดูได้ฟรีตั้งแต่ต้นจนจบ

หนังสือแนะนำ Writing Great Specifications: Using Specification By Example and Gherkin

หรือจะลองเข้าไปอ่านตัวนี้ก่อนก็โอเคอยู่นะ Writing Great Specifications