Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 2036

วิวัฒนาการจาก Spaghetti Driven Development ถึง Test-Driven Development

$
0
0

Spaghetti-Future-Processing

Spaghetti-Future-Processing Spaghetti Driven Development มันเป็นอย่างไร ? เป็นอีกหนึ่งวิธีการของการพัฒนา software !! โดยมีขั้นตอนดังนี้
  • เขียน code โครตแย่ออกมา
  • ทำการ refactor code ให้ code ดีขึ้นและเข้าใจได้ง่ายขึ้น
  • ทำการเขียนชุดการทดสอบ
ฟังแล้วมันดูดีมาก แต่ส่วนใหญ่มักจะทำเพียงขั้นตอนแรกเท่านั้น จึงทำให้เกิด Spaghetti code ออกมาจำนวนมาก และไม่มีใครกล้าแตะต้องมัน ใจร้ายกันมาก ๆ ดังนั้นจึงมีวิธีการและแนวคิดไหม่ ๆ ขึ้นมา เพื่อทำให้ code ออกมามีคุณภาพ หนึ่งในนั้นคือ Test-Driven Development (TDD) เพื่อความเข้าใจมากขึ้นมาวิวัฒนาการของสิ่งเหล่านี้กันดีกว่า

เริ่มในยุค 80

เป็นยุคของ Spaghetti Driven Development นั่นคือเขียน code แย่ ๆ ยุ่งเหยิงออกมาก่อน จากนั้นทำการ refactor code จนกระทั่ง code เข้าใจได้ง่ายขึ้น และเขียน test ออกมา ถามว่า มี automated test ไหม ? ตอบได้เลยว่าไม่ ลองคิดถึงตัวเราเองตอนสมัยเรียนการเขียน program สิ คุณเรียนรู้ว่า จะเขียน code อย่างไรเท่านั้นใช่ไหม ?

ต่อมาในยุค 80 ถึง 90

เริ่มมีตำแหน่ง Analyst/Programmer เพื่อทำการวิเคราะห์และออกแบบระบบ ก่อนเริ่มเขียน programg เล็กน้อย ซึ่งนี่คือจุดกำเนิดของ Small Up Front Design !! มีขั้นตอนการทำงานดังนี้
  1. ทำการออกแบบระบบ
  2. ทำการเขียน program
  3. ทำการทดสอบแบบ manual
ในยุคนี้คำสั่ง goto ใน code เป็นสิ่งที่ดีมาก ๆ แน่นอนว่าสำหรับยุคนี้ภาษา COBOL มันไม่ใช่ Legacy code นะ

ต่อมาในยุค 90 ถึงปี 2000

เป็นยุคแห่ง Big Design Up Front !! เพราะว่ามีขั้นตอนจำนวนมาก รวมทั้งในแต่ละขั้นตอนเรามีตำแหน่ง และ แผนกแยกกันทำงาน เช่น
  • Business Analyst
  • Software Analyst
  • Programmer
  • QA/Tester
  • Database Administrator
  • System Admin
เริ่มมีการทดสอบแบบอัตโนมัติ (Automated Testing) แต่เป็นการทดสอบหลังจากที่เขียน program เสร็จแล้วทั้งหมด บ่อยครั้งที่มีทีมทดสอบแยกออกมาจากทีมพัฒนา !! ผลที่ตามมาคือ ปัญหามากมาย เป็นยุคที่ Object-Oriented Programming และ Design ได้รับความนิยมสูงมาก ๆ และทำให้เกิด Design Pattern ขึ้นมา เริ่มมีการพูดถึง Functional Programming กันด้วยนะ แถมมีแนวคิด DevOps ขึ้นมา ซึ่งเป็นแนวคิด Back to basic กลับไปในยุคก่อนหน้า !!

ต่อมาในช่วงต้นของยุค 2000

เริ่มกลับไปสู่ Small Design Up Front กลับมาสู่การทำงานแบบเป็นรอบสั้น ๆ (Interative and Incremantal Development) แต่ยังเขียนชุดการทดสอบแบบอัตโนมัติหลังจากเขียน program เสร็จ มีขั้นตอนการทำงานดังนี้
  1. เขียนโปรแกรม
  2. ทำการ refactor code
  3. ทำการเขียนชุดการทดสอบแบบอัตโนมัติ

มาถึงยุคปัจจุบันกันบ้าง

มีแนวคิดต่าง ๆ ที่ได้รับการยอมรับและนิยมนำมาใช้งาน ประกอบไปด้วย
  • Test-Driven Development (TDD)
  • Behaviour-Driven Development (BDD)
  • Acceptance Test-Driven Development (ATDD)
โดยแนวคิดต่าง ๆ นั้นถูกแนะนำมาจากแนวคิด Continuous Delivery และ Continuous Integration มีขั้นตอนการทำงานดังนี้
  1. เริ่มต้นจากการคิด และ เข้าใจภาพรวมของปัญหา
  2. ทำการพัฒนาเป็นรอบสั้น ๆ
  3. ก่อนที่จะเขียน program ให้เริ่มด้วยการเขียนชุดการทดสอบแบบอัตโนมัติ
  4. ทำการเขียน program เพื่อให้ชุดการทดสอบผ่าน
  5. ทำการ refactor code
  6. สนกลับไปเขียนชุดการทดสอบแบบอัตโนมัติใหม่
  7. วนแบบนี้ไปเรื่อย ๆ
ซึ่งเป็นวิธีการพัฒนาที่เป็นธรรมชาติอย่างมาก แต่มันก็ไม่ใช่เรื่องง่ายเช่นกัน ดังนั้นจึงต้องทำการฝึกฝนเพื่อให้ชำนาญ มาถึงตรงนี้น่าจะพอทำให้เราเห็นวิวัฒนาการ จาก Spaghetti Driven Development ถึง Test-Driven Development กันได้ชัดเจนขึ้น

สุดท้ายแล้ว TDD มันไม่ใช่สิ่งใหม่

แต่มันคือความสามารถที่นักพัฒนาทุกคนต้องมี และไม่ใช่สิ่งที่จะเอามาอ้างว่า ถ้าทำ TDD แล้วต้องใช้เวลาเพิ่ม !!!
คำถามตอนนี้เราพัฒนา software กันแบบไหนระหว่าง Spaghetti Driven Development ? Test-Driven Development ?
สรุปเนื้อหามาจากหนังสือ Test-Driven Development by Examples

Viewing all articles
Browse latest Browse all 2036

Trending Articles