TDD Kata

20131119_093329

Kata คือ รูปแบบท่าทางและ จังหวะการเคลื่อนไหว เพื่อใช้ในการฝึกฝนด้วยตนเองหรือเป็นคู่ก็ได้ เพื่อให้เกิดควมเชี่ยวชาญ จนมีความสามารถให้ได้ใกล้เคียงกับเหตุการณ์ หรือสถานะการณ์จริงก่อนที่จะออกไปลงมือกระทำหรือปฏิบัติจริงๆ

ตัวอย่างของ Kata  เช่น คำภีร์เปลี่ยนเส้นเอ็น(เอามาจากหนังจีนกำลังภายใน ของจริงมีรึเปล่าผมก็ไม่รู้) ในคำภีร์ก็ จะบอกถึงรูปแบบของท่าทาง ขั้นตอนการเคลื่อนไหว และ เคล็ดลับของจังหวะลมหายใจ(การเดินลมปราณ)ไว้ครบถ้วน… ให้ผู้ฝึกฝนปฎิบัติตามไปเรื่อยๆจนสำเร็จเป็นขั้นๆ เมื่อออกไปประลองยุทธ์หรือนำไปใช้จริง ท่าทาง และเคล็ดลับการเคลื่อนไหว ตามคำภีร์ก็จะแสดงออกมา พร้อมไปกับผู้ฝึกนั้น ทำให้เกิดผลลัพย์ ได้พลังการต่อสู้ได้อย่างมีประสิทธิภาพ ตามที่ผู้คิดค้นคัมภีร์คาดหวังไว้

ส่วน TDD Kata ที่ผมเขียนไว้นี้ คือ ผมได้นำเอาขั้นตอนวิธีการปฎิบัติของ Test Driven Development (TDD) ที่ใช้ในการเขียน code พัฒนา software ที่มี 3 ขั้นตอนคือ Red-Green-Refactor แต่จากภาพก็ไม่ใช่เขียน code เกี่ยวกับซอฟแวร์สักหน่อยเลย

ก็ใช่หน่ะสิ เพราะผมตั้งใจไว้อย่างนั้น

จากภาพผมตั้งใจเปรียบเปรย หรือ อุปมาอุปไมย (metaphor) ให้เห็นว่า การคิดเขียนเรื่องราวออกมาเป็นขั้นตอนโดยคาดหวังผลลัพย์ไว้ก่อน เป็นลักษณะเดียวกันกับที่เราตั้งสมมติฐาน จินตนาการไว้ในหัว(Red) ให้ชัดเจนแล้วเราก็เริ่มเขียน code ให้ทำงานได้ โดยสมมุติเหตุการณ์ให้เหมือนในเรื่องราวที่เขียนไว้ หรือจินตนาการตั้งต้นของเรา เหมือนกับเอาตุ๊กตาไม้มาวางแล้วให้เราฝึกฝนท่าทางไปเรื่อยๆ เพื่อพิสูจน์สมมติฐานที่ตั้งต้นนั้นไว้ หรือฝึกจนเข้าใจท่าทางที่ออกแบบไว้ให้ได้(Green)ก่อน หลังจากนั้นจึงนำ code นี้ หรือสมมุติฐานนี้ไปใช้ ไปปฏิบัติงานจริงๆ ไปทำผลิตภัณฑ์หรือบริการจริงๆออกมา เหมือนกับนำเอากระบวนท่าที่ได้ฝึกฝนกับตุ๊กตาไม้จนเชี่ยวชาญ จนนำไปใช้งานได้คล่อง(Refactor)

หลังจากนำ code หรือกระบวนท่าจาก Kata ไปใช้ มันก็ไม่ได้หยุดแค่นั้น เหตุการณ์ที่เกิดขึ้นจริงไม่เป็นดังที่ สมมุติฐานที่เราคิดไว้ 100% ก็ได้ มันก็ยังคงมีเหตุการณ์ใหม่ๆนอกเหนือจากที่เราคิดไว้เพิ่มเข้ามา เปลี่ยนแปลงไปเรื่อยๆตามสถานะการณ์บนโลกเราจริงๆ อย่างไรก็แล้วแต่ให้เรานำเรื่องราวเหล่านั้นกลับเข้ามา เป็นเรื่องราวตั้งต้นใหม่ต่อไปเพื่อคิด(Red), ทดลองทำให้เป็นไปได้(Green), และจึงนำไปดัดแปลงให้เหมาะสม ใช้ประโยชน์ได้ง่ายขึ้น มีประสิทธิภาพดีขึ้น(Refactor) เพื่อประยุกต์ใช้งานต่อไป มันก็จะเข้าสู่งวงจรณ์(loop)หรือจังหวะ(rhythm) เดิมของ TDD ที่จะทำให้ product ของเรามีวิวัฒนาการได้ ก็อันเนื่องมาจากการเปลี่ยนแปลง code ให้ตอบโจทย์แก้ปัญหามากขึ้น ดั่งเช่นกับ การปรับปรุง Kata ให้ดีขึ้นเรื่อยๆยังไงล่ะ

การใช้ TDD พัฒนาซอฟแวร์นั้น ก็จะได้ผลลัพธ์ที่ใกล้เคียงกับความคาดหวัง หรือ สมมติฐาน หรือ เรื่องราวที่เราคาดหวังผลลัพย์ที่ต้องการได้ ด้วยจังหวะแบบ Red-Green-Refractor นี้มันเหมือนการคิดค้นวิธีให้ได้ผลลัพธ์ที่ต้องการก่อน ในแบบเดียวกับการฝึกฝน Kata ใดซ้ำๆกัน จนเชี่ยวชาญนั่นเอง

เลยกลายเป็นที่มาของหัวข้อเรื่อง TDD Kata นี้… รูปที่ผมวาดไว้ไม่สวยงามนัก หวังว่ามันคงจะสื่อในสิ่งที่ผมได้ตั้งใจไว้ ให้ผู้อ่านเข้าใจได้บ้างนะครับ

ขอบคุณครับ
#:P

Advertisements