> For the complete documentation index, see [llms.txt](https://www.saladpuk.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.saladpuk.com/tips/y-test-first.md).

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

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

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

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

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

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

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

* [👦 Test-Driven Development](https://www.saladpuk.com/software-testing/tdd101) (คอร์สจัดหนัก)
* [👦 Test-First Design](https://www.saladpuk.com/software-testing/test-first-design) (ตัวอย่างเบาๆ)

**หนังสือแนะนำ**\
[Writing Great Specifications: Using Specification By Example and Gherkin](https://www.amazon.com/Writing-Great-Specifications-Specification-Example/dp/1617294101)

หรือจะลองเข้าไปอ่านตัวนี้ก่อนก็โอเคอยู่นะ [Writing Great Specifications](https://livebook.manning.com/book/writing-great-specifications/a-complete-list-of-gherkin-keywords-and-their-synonyms/)

![](/files/-M06T5QZ2Q-Q_s_HQBIa)
