มีคำถามที่น่าสนใจมาก ๆ คือ
เราต้องทำอย่างไรบ้างเพื่อดูแลรักษาคุณภาพของ code ?
เราต้องทำอย่างไรบ้างเพื่อปรับปรุงคุณภาพของ code ให้ดีขึ้น ?
ลองมาหาตอบคำถามกันหน่อยสิ
1. เริ่มต้นด้วยการเขียน Unit test ที่มีประโยชน์
โดยที่การเขียน unit test นั้นย่อมมี learning curve อยู่แล้ว แต่มันไม่ใช่ปัญหาใหญ่อะไรมากไปกว่าการไม่เขียน เป็นสิ่งที่ developer ต้องสนใจ ใส่ใจและฝึกฝน เพื่อให้เกิดเป็นทักษะของตนเอง จนทำให้กลายเป็นนิสัยของเราไปเองผลที่จะได้รับกลับมาก็คือ คุณภาพของ code ที่ดีขึ้นกว่าเดิม เนื่องจาก unit test จะบังคับให้เราเขียน code ที่ง่ายต่อการทดสอบ นั่นก็คือ code แต่ละส่วนจะไม่ผูกมัดกันแน่นหรือเรียกว่า Tight coulping นั่นเอง ซึ่งทำให้การออกแบบมันดีขึ้นตามไปด้วยการเขียน unit test นั้นต้องพิจารณาถึงความคุ้มค่าด้วยนะ แต่สำหรับผู้เริ่มต้นให้เขียนเยอะ ๆ เข้าไว้นะครับ จะทำให้เรารู้ว่าควรหรือไม่ควรเขียนอะไร อย่ามานั่งเถียงกันว่าจะเขียนหรือไม่เขียนดี ซึ่งมันเสียเวลาโดยเปล่าประโยชน์
2. แยกส่วนการทำงานออกจากกันอย่างเหมาะสม
สิ่งที่ developer ต้องให้ความสนใจก็คือ การจัดการเรื่อง dependency graph ที่เกิดขึ้นภายใน code ที่พัฒนา ว่าเราจัดการได้ดีเพียงใด ส่วนใหญ่มักจะแยกออกเป็นส่วนเล็ก ๆ แยกตามหน้าที่การทำงาน เช่น module และ namespace เป็นต้น ลด ละ เลิก เรื่องการใช้ Global variable ที่ถูกใช้งานจากทุก ๆ ส่วน จนสุดท้ายทำให้เราไม่รู้เลยว่า ใครมาแก้ไขหรือเปลี่ยนแปลงค่าอะไรบ้าง เป็นสาเหตุให้เกิดข้อผิดพลาดมากมายตามมา มีคำถามที่ต้องตอบให้ได้ในการออกแบบและเขียน code คือ ในส่วนการทำงาน A ต้องการ B จริง ๆ หรือไม่ ?3. หัดเขียน code เพื่อคนอื่น ๆ บ้าง
บ่อยครั้งที่ developer มักจะเขียน code ด้วย pattern สวย ๆ บ่อยครั้งที่ developer มักจะเขียน code ด้วย pattern แปลกตา บ่อยครั้งพบว่า คนอื่น ๆ ในทีมมักไม่เข้าใจ และอาจจะทำตามแบบไม่เข้าใจ หรือ เข้าใจแบบผิด ๆ ไป ทำให้เกิดความผิดพลาดมากมายตามมา ดังนั้นแทนที่ code จะออกมาดีตามที่คาดหวัง กลับกลายว่าเกิดปัญหามากมายตามมาไป !! ดังนั้นถ้าต้องการเขียน code ในรูปแบบที่ทีมยังไม่เข้าใจ ก็ช่วยอธิบายให้ทีมเข้าใจและใช้งานเป็น หรือ ประยุกต์ได้ ไม่เช่นนั้นก็ลบไปเถอะครับ ของดีแต่อยู่ผิดที่ มันก็แย่ได้เช่นกัน4. ลดความซับซ้อนของ code ลงซะบ้าง
ค่าความซับซ้อนของ code วัดด้วยค่า Cyclomatic complexity เพื่อวัดดูว่าใน code มีเส้นทางที่เป็นไปได้กี่เส้นทาง ดังนั้น code ที่ดีมาก ๆ คือ ค่าความซับซ้อนเท่ากับ 1 !! แต่ในความเป็นจริงเรากลับพบเงื่อนไข และ เส้นทางมากมายใน code เช่น if-else ก็เกิด 2 เส้นทางแล้ว ลองคิดดูสิว่า เรามี if-elseif-else กันเยอะไหม ? ลองคิดดูสิว่า เรามี loop ซ้อน loop กันเยอะไหม ? ซึ่งก่อให้เกิดปัญหามากมาย ส่งผลต่อเวลาในการพัฒนา ส่งผลต่อเวลาในการทดสอบ ส่งผลต่อจำนวน bug ที่เยอะขึ้น ส่งผลต่อเวลาในการ debug !! ส่งผลต่อเวลาในการเพิ่ม แก้ไข code รวมทั้งส่งผลต่อคุณภาพของ code ด้วย ดังนั้นควรลดค่าความซับซ้อนของ code ให้ต่ำมาก ๆ นะครับ5. ตั้งชื่อให้ชัดเจน สื่อสารถึงหน้าที่การทำงาน
เป็นสิ่งที่ developer บอกว่ายากมาก ๆ แต่มันกลับส่งผลต่อคุณภาพของ code อย่างมากเช่นกัน ดังนั้นต้องฝึก อ่าน และ เขียนเยอะ ๆ ชื่อแย่ ๆ นำไปสู่ความเข้าใจผิดมากมาย ดังนั้นถ้ามีโอกาสก็ช่วยปรับปรุงชื่อต่าง ๆ ให้ดี สื่อสารให้ตรงความต้องการมากขึ้นนะครับ ตัวอย่างเช่นยังมีคนเข้าใจว่า Java กับ Javascript มันเหมือนกันอยู่เลย !!โดยสิ่งต่าง ๆ เหล่านี้เป็นสิ่งที่ยากน่าดู
แต่คิดว่าไม่น่าเกินความสามารถของ developer อย่างแน่นอน เพียงแค่ต้องใช้เวลาในการฝึกฝนความสามารถ เพียงแค่ต้องใช้เวลาในการสร้างวินัย เพียงแค่ต้องใช้เวลาในการสร้างจนเป็นนิสัย เท่านั้นเอง แล้วผลที่ตามมาก็คือ code ที่มีคุณภาพสูงขึ้นสุดท้ายแล้ว Developer ทั้งหลายจะตอบคำถามนี้กันอย่างไรบ้าง ? มาแบ่งปันความคิดเห็นกันหน่อยสิครับ