TDD != Unit Testing (2)

เมื่อวานพูดไปถึงเรื่องว่า Unit testing เป็นคำที่ขอยืมมาจากโมเดลวี ซึ่งไม่จำเป็นต้องทำโดย dev ไม่จำเป็นต้อง automate และ ไม่จำเป็นต้องเป็น white box testing วันนี้จะมาเล่าต่อว่า มันมาเกี่ยวกับ TDD ได้ยังไง

หลังจากการปฏิวัติวิธีการพัฒนาซอฟแวร์ ของ OOP คอนเซพท์ ของมอดูลก็หายไปทำให้ Unit testing ของ QA หายไปด้วย นอกจากนั้น โปรแกรมก็ซับซ้อนขึ้นจนเกินกว่าที่ Designer จะออกแบบแล้วส่งให้ Coder ทำได้ จึงเกิดตำแหน่งใหม่เรียกว่า Developer คือ รวมการ Design และ Implement ไว้ในคนๆ เดียว เกิดปัญหาใหม่เพราะ ก่อนหน้านี้กว่าจะส่งให้โค้ดได้ ต้องตรวจ design ก่อน แต่พอเปลี่ยนมาเป็น develop ไม่มีการตรวจ แล้วจะรู้ได้อย่างไร ว่าถูกต้อง เลยเกิดแนวคิดว่า ใครทำก็ตรวจสิ่งที่ตัวเองทำว่าถูกต้องหรือไม่เอง ก็เกิดไม่มีชื่อเรียกขึ้นมา เลยไปยืมคำเรียกเก่ามา เรียกว่า ‘Unit Test’ และเนื่องจากว่า unit test นี้มันทำคล้ายกันเลยมีคนทำเป็น framework ออกมาคือพวก xUnit ทั้งหลาย

แล้วเราก็พบว่า โค้ดที่เคยเขียนๆ กันไว้โดยไม่มี unit test นั้นมันเขียน unit test ตามยาก หรือไม่ได้เลย เลยมีคนคิดได้ว่า งั้นเราเขียน test ก่อนดีกว่าแล้วเขียน code ตาม จะได้บังคับไปในตัวว่า code นี้มัน test ได้แน่ๆ ปรากฏว่าทำแล้วดี และยังได้ประโยชน์หลายอย่าง เช่น พอจะ refactor ก็มันใจว่าไม่ break โค้ดเก่า หรือสามารถเข้าใจโค้ดที่เขียนไว้เดิมได้ดีขึ้นเพราะ unit test เก็บว่า โค้ดนี้ใช้อย่างไร มันเหมือนเป็น design doc ในตัว ยังไม่รวมไปถึงทำแล้วสนุก ทำสองคนเป็น ปิงปองเทคนิค ฯลฯ

ที่ร่ายยาวมาทั้งหมดนั้น เพื่อจะบอกว่า คำว่า Unit Test ในปัจจุบันนั้น ไม่ใช่การ Testing เป็นแค่การไปยืมคำเก่ามาใช้เรียกสิ่งใหม่เท่านั้นเอง

มาดู ที่คำก็ได้ Test Driven Development หลายคนมักจะพยายามแปล แล้วผิดว่า เป็นการ test ก่อนโค้ดบ้าง การใช้ test นำทางบ้าง ปัญหามันคือ พอพูดว่า test ในในมุมของคนฟังมันแปลว่า ทดสอบ มันเหมือน งานทดสอบของ QA แล้วยังไปใช้ unit test ซึ่งเป็นการทดสอบแบบหนึ่งอีก แต่จริงๆ แล้วไม่ใช่ มันชื่อ test แต่ไม่เกี่ยวกับการ test

TDD คือหลักวิธีในการพัฒนาซอฟแวร์ ที่ แบ่ง code ออกเป็นสองส่วน โดยให้โค้ดส่วนแรกทำหน้าที่เรียกโค้ดอีกส่วนที่สองและดูว่าได้ผลลัพธ์ตามต้องการหรือไม่ และโค้ดส่วนที่สองมีหน้าที่ทำงานตามที่โค้ดส่วนแรกต้องการ

เหตุบังเอิญคือ เราเรียกโค้ดส่วนแรกเรียกว่า ‘test’ และส่วนที่สองเรียกว่า ‘code’ เท่านั้นเอง ซึ่งไม่มีส่วนเกี่ยวข้องกับการ test แต่อย่างใด

Q.E.D.

Links
https://korn4d.wordpress.com/2010/08/13/tdd-unit-testing/

Advertisements

2 thoughts on “TDD != Unit Testing (2)

  1. Pingback: TDD != Unit Testing (3) « Korn4D Agile Blog

ใส่ความเห็น

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s