# Test-Driven Development

## 😢 ปัญหา

1. เคยรู้สึกปวดกบาลกันไหม เวลาที่เราเขียนๆงานอยู่แล้ว**เพื่อนมาบอกว่าเจอ bug ในงานของเรา** แล้วพอเราแก้ให้เขาเสร็จ มันก็เดินมาบอกว่า**ไอ้ที่แก้เมื้อกี้มันทำตรงนั้นพังด้วยอ่ะ** ด้วยจิตวิญญาณของโปรแกรเมอร์ของเราเลยต้อง**ตามไปแก้ให้มันต่อ** แล้วพอเราแก้เสร็จ เจอเพื่อนเรามันก็เดินมาบอกว่า อะเค **bug ล่าสุดหายละ แต่ bug ตัวแรกสุดอะกลับมาอีกละ** วนเวียนกันไปเรื่อยๆ&#x20;
2. ตอนที่เราเทสกันแต่ละรอบก็ใช้เวลาเทสนานม๊วก เช่น**กว่า developer จะส่งให้ฝั่ง tester ได้เทส** และ**กว่าที่ tester จะส่งผลกลับมาให้ developer ได้** นี่ยังไม่รวมว่าพวก tester จะต้องใช้เวลาทำความเข้าใจว่าจะเทสยังไงด้วยนะ รวมๆแล้ว**เขียนโปรแกรมหรือแก้ bug เสร็จ 1 ครั้ง กว่าจะรู้ผลว่ามี bug หรือเปล่าอาจจะใช้เวลามากกว่า 1 วัน**ก็ได้!&#x20;

## 😄 วิธีแก้ปัญหา

ปัญหาที่เกิดขึ้นมันชี้ว่า **โค้ดที่เราเขียนมันไม่ถูกนำไปเทส** หรือ **เทสที่นำไปทดสอบมันไม่ครอบคลุม** และในบางทีอาจจะหมายถึงเรา**ไม่มีสิ่งที่เรียกว่า Test automation** ก็ได้ทำให้การเทสแต่ละครั้งมันช้าม๊วก ดังนั้นจากที่ว่ามาในเรื่องนี้เราจะมาดูกันว่าการพัฒนาซอฟต์แวร์โดยใช้หลัก **Test-Driven Development** หรือ **TDD** มันจะมาช่วยลดปัญหาที่ว่ามายังไงบ้างกันเน่อ

{% hint style="info" %}
เชื่อไหมว่า 80% ของคนเขียนโค้ดส่วนใหญ่ไม่สนใจเรื่องนี้เพราะมองว่ามันเสียเวลาที่จะทำ แต่สุดท้ายงานก็จะออกมาไม่มีคุณภาพ bug เยอะเต็มไปหมด และไม่สามารถจะเพิ่มความสามารถใหม่ๆเข้าไปในโปรแกรมได้ แต่ถ้าเราได้ลองศึกษาและทำมันเป็นชีวิตประจำวันไปแล้วละก็จะพบว่า มันเร็วกว่าการเขียนแบบเดิมหลายเท่าเสียอีก (ผมไม่ได้มโนเอานะ มันมีวิจัยเรื่องนี้จริงๆ)
{% endhint %}

{% hint style="success" %}
สไลด์ที่ใช้ในการสอน\
<https://gitpitch.com/saladpuk/test-driven-development>
{% endhint %}

## 🧭 ความรู้ในการจัดการปลาตัวนี้

{% content-ref url="tdd101/intro" %}
[intro](https://www.saladpuk.com/software-testing/tdd101/intro)
{% endcontent-ref %}

{% content-ref url="tdd101/test-cases" %}
[test-cases](https://www.saladpuk.com/software-testing/tdd101/test-cases)
{% endcontent-ref %}

{% content-ref url="tdd101/xunit01" %}
[xunit01](https://www.saladpuk.com/software-testing/tdd101/xunit01)
{% endcontent-ref %}

{% content-ref url="tdd101/xunit02" %}
[xunit02](https://www.saladpuk.com/software-testing/tdd101/xunit02)
{% endcontent-ref %}

{% content-ref url="tdd101/testable-code" %}
[testable-code](https://www.saladpuk.com/software-testing/tdd101/testable-code)
{% endcontent-ref %}

{% content-ref url="tdd101/mantra-of-tdd" %}
[mantra-of-tdd](https://www.saladpuk.com/software-testing/tdd101/mantra-of-tdd)
{% endcontent-ref %}

{% content-ref url="tdd101/fun-n-nonefun-testing" %}
[fun-n-nonefun-testing](https://www.saladpuk.com/software-testing/tdd101/fun-n-nonefun-testing)
{% endcontent-ref %}

{% content-ref url="tdd101/manual-vs-automation" %}
[manual-vs-automation](https://www.saladpuk.com/software-testing/tdd101/manual-vs-automation)
{% endcontent-ref %}

{% content-ref url="tdd101/automation-frameworks" %}
[automation-frameworks](https://www.saladpuk.com/software-testing/tdd101/automation-frameworks)
{% endcontent-ref %}

{% content-ref url="tdd101/mock-framework" %}
[mock-framework](https://www.saladpuk.com/software-testing/tdd101/mock-framework)
{% endcontent-ref %}

{% content-ref url="tdd101/moq101" %}
[moq101](https://www.saladpuk.com/software-testing/tdd101/moq101)
{% endcontent-ref %}

{% content-ref url="tdd101/summary" %}
[summary](https://www.saladpuk.com/software-testing/tdd101/summary)
{% endcontent-ref %}

## 🎥 วีดีโอทั้งหมดของคอร์สนี้

[@Youtube Test-Driven Development (TDD)](https://www.youtube.com/playlist?list=PLUjAn8nwWniiL3ToFK8PfmAo8U6IoGAkg)
