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

หนึ่งในข้อดีในการเขียน 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)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://www.saladpuk.com/tips/y-test-first.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
