การพัฒนาซอฟต์แวร์ที่มีประสิทธิภาพ เป็นปัญหาที่ทุกวันนี้หลายๆ องค์กรต้องพบเจอ วัฒนธรรมการทำงานร่วมกัน (Collaborative Culture) กลายเป็นสิ่งสำคัญที่องค์กรต่างๆ ต้องให้ความสำคัญ เพราะจะช่วยส่งเสริมประสิทธิภาพการทำงานเป็นทีม เพิ่มขวัญกำลังใจของพนักงาน และนำไปสู่ความสำเร็จขององค์กรในอนาคต ด้วยเหตุนี้ การใช้ Test-Driven Development (TDD) เข้ามาเป็นองค์ประกอบหลัก จึงเป็นวิธีหนึ่งที่มีประสิทธิภาพในการพัฒนาซอฟต์แวร์ และเขียนโปรแกรมเป็นทีม
การพัฒนาซอฟต์แวร์ที่มีประสิทธิภาพ ? – Test-Driven Development เริ่มต้นอย่างไร
รู้จักวิธี TDD ซึ่งเป็นกระบวนการพัฒนาซอฟต์แวร์ที่เน้นการเขียน เทสต์ ก่อนเขียนโค้ดจริงๆ เป็นการพัฒนาแบบมีโครงสร้าง และมุ่งเน้นไปที่ฟังก์ชันการทำงานย่อยๆ ที่ชัดเจนของซอฟต์แวร์ เพื่อกำหนดให้ฟังก์ชันการทำงานนั้นทำงานถูกต้องตามที่คาดหวังก่อนจะเริ่มเขียนโค้ดเวอร์ชันสมบูรณ์
การเขียนเทสต์ (Code Testing) คืออะไร ?
เทสต์เหล่านี้จะตรวจสอบฟังก์ชันการทำงานพื้นฐานของซอฟต์แวร์ที่ต้องการพัฒนา อาจจะเป็น 30% ของโค้ด ตัวอย่างเช่น “การสร้างระบบจองห้องประชุม”
เริ่มต้นออกแบบเชิงแนวคิด และสร้างฟังก์ชันย่อยๆ ของระบบไว้ก่อนให้ครบถ้วนในภาพรวม เพียงพอที่จะมี Event ต่อกันได้ ประกอบด้วยคอมเมนต์ และฟังก์ชันคร่าวๆ เป็นต้น
def test_can_create_room():
#สร้างห้องประชุมใหม่
code…
def test_can_book_room():
#สร้างห้องประชุม สร้างการจอง
code…
เทสต์เหล่านี้จะล้มเหลวในตอนแรก นั่นคือสิ่งที่เราคาดหวังไว้ เพราะเราเพิ่งเขียนเทสต์ แต่ยังไม่ได้เขียนโค้ดจริง (เปรียบเสมือนการสร้างบ้านก็ต้องมีโครงบ้าน)
ก่อนจะไปขั้นตอนถัดไป กลับไปสู่วงจรของการทำ TDD กันก่อน ..
ก่อนอื่นอยากให้นักพัฒนาทุกคนจำภาพนี้ให้ได้ก่อน ซึ่งง่ายยยมากก แดง > เขียว > ฟ้า
รูปอ้างอิง : medium, codeheroes
วงจร TDD ประกอบด้วยขั้นตอน ดังนี้ :
- สีแดง (RED) : การเขียนเทสต์ที่ล้มเหลว (Test Fails) ในขั้นตอนแรก วางโครงสร้างระบบตามแนวคิดในหัวก่อน
- เขียว (GREEN) : เขียนโค้ดให้น้อยที่สุดเพื่อให้เทสต์พอที่จะผ่าน (Write code to pass test.)
- ปรับโครงสร้าง (REFACTOR) : ปรับโครงสร้างทั้งเทสต์ และโค้ดเพื่อพัฒนาคุณภาพ ทำให้โค้ดเข้าใจได้ง่าย ลดความซับซ้อน (Clean Code) และพร้อมสำหรับการกลับมาดูแลต่อในภายหลังได้ง่าย
- ทำซ้ำ (LOOP) : ทำซ้ำขั้นตอน 1-3 สำหรับฟังก์ชันการทำงานอื่นๆ
Test Driven Development Example : เรื่อง “การพัฒนาระบบจองห้องประชุม” ด้วยภาษา Python
1. RED : เขียนเทสต์ฟังก์ชันภาพรวมการทำงานพื้นฐานของระบบจองห้องประชุม
2. GREEN : ขั้นตอนถัดไป เขียนโค้ดให้น้อยที่สุดเท่าที่จำเป็นเพื่อให้เทสต์ผ่านทุกฟังก์ชันก็พอ
3. REFACTOR : หลังจากนักพัฒนาทำขั้นตอนที่ 1-2 เรียบร้อยแล้ว ขั้นตอนนี้จะเป็นการปรับโครงสร้างโค้ดเพื่อให้คลีนนๆ อ่านง่าย และบำรุงรักษาได้ง่าย โดยนักพัฒนาแต่ละคนจะมีสไตล์การเขียนที่แตกต่างกันขึ้นอยู่กับความถนัด และความพอใจ
4. LOOP : ทำขั้นตอนที่ 1-3 ซ้ำแบบเดียวกันกับฟังก์ชันอื่นๆ เพื่อให้เป็นมาตรฐานเดียวกันอย่างสม่ำเสมอ
ขั้นตอนทั้งหมดไม่ยากเลยใช่ไหมครับ Back to basic สุดๆ >.<
แล้วเราทำ TDD ไปทำไม ?
ข้อดี :
- ช่วยให้เขียนโค้ดได้มีคุณภาพ
- ตรวจสอบข้อผิดพลาดจากโค้ดได้รวดเร็ว
- ทำให้โค้ดง่ายต่อการบำรุงรักษา
ข้อเสีย :
- อาจใช้เวลามากขึ้นในช่วงแรก
- ต้องเปลี่ยนวิธีคิดในการเขียนโค้ดอย่างเป็นระบบ
อย่างไรก็ตามการนำ TDD มาใช้ไม่ได้หมายความว่าจะไม่มีความซับซ้อนในช่วงเริ่มต้น สมาชิกในทีมจำเป็นต้องมีความเข้าใจในกระบวนการพัฒนาซอฟต์แวร์ที่สอดคล้องกันผ่านการสื่อสารอย่างเหมาะสม และสามารถนำวิธีการดังกล่าวไปประยุกต์ใช้ในองค์กรได้สม่ำเสมอจนเกิดเป็นวัฒนธรรมองค์กรแห่งอนาคตต่อไป