ในการพัฒนา software นั้นเรามักจะได้ยินคำว่า Spaghetti code บ่อยมาก ๆ
ซึ่งก่อให้เกิดปัญหาตามมามากมาย
ส่งผลให้การดูแลรักษาระบบเป็นเรื่องที่ยาก และ ต้องใช้ค่าใช้จ่ายที่สูงมาก ๆ
โดยปัญหานี้ก็ยังพบเจอในชุดการทดสอบอีกด้วย
เนื่องจากทีมพัฒนาไม่สนใจ
เนื่องจากทีมพัฒนาไม่ใส่ใจ
เนื่องจากทีมพัฒนาไม่ทำการปรับปรุงให้ดีขึ้นอย่างสม่ำเสมอ
หรืออาจจะไม่รู้ด้วยว่า สิ่งที่ทำลงไปนั้นมันก่อให้เกิดปัญหาอย่างไร
ดังนั้นสิ่งที่ควรทำก็คือ ปรับปรุงชุดการทดสอบอย่างสม่ำเสมอ
ทั้งการปรับปรุงโครงสร้าง
ทั้งการลบชุดการทดสอบที่ไม่ได้ใช้งาน
ทั้งเวลาในการทดสอบที่ต้องลดลง
รวมทั้งปรับปรุงเรื่องความรู้ความสามารถอีกด้วย
คำถามคือ ปัจจุบันเราทำการปรับปรุงกันบ้างหรือไม่ ? หรือเพียงทำให้มันเสร็จไปวัน ๆ เท่านั้นเอง !!
ในบทความนี้จะอธิบายเกี่ยวกับรูปแบบของ Spaghetti Pattern ในชุดการทดสอบ
ว่าเป็นอย่างไรบ้าง ? ว่ามีข้อดีอะไรบ้าง ? ว่ามีข้อเสียอะไรบ้าง ? ในการพัฒนาที่เขียนชุดการทดสอบจะพบว่า จำนวนของชุดการทดสอบจะมากขึ้นเรื่อย ๆ ที่สำคัญมักจะมีรูปแบบ code ที่เรียกว่า anti-pattern มากขึ้นเช่นกัน โดย anti-pattern นั้นคือ รูปแบบของ code ที่เจอเป็นปกติ เป็นวิธีการที่ทำงานได้ เหมาะมาก ๆ พัฒนาได้เร็วมาก ๆ ในขณะนั้น !! แต่เมื่อดูให้ดีพบว่า ทำให้เกิดผลกระทบมากมาย หรือทำให้ชุดการทดสอบพังง่ายมาก ๆแต่ถ้าถามว่า มีวิธีการแก้ไขปัญหา หรือ สิ่งที่ดีกว่าหรือไม่ ? ตอบได้เลยว่า มีสิ แต่ ... นักพัฒนาส่วนใหญ่จะบอกว่า ไม่ ไม่มีเวลา เดี๋ยวค่อยกลับทำทีหลัง ไว้มีเวลาค่อยมาแก้ไข ทำให้เสร็จก่อนนะสุดท้ายคือ ไม่เคยกลับมาแก้ไขเลย (Later is Never) นี่แหละคือ anti-pattern ที่เกิดขึ้น ซึ่งเป็นแนวคิด และ วินัยของนักพัฒนาที่ไม่ดีเลยนะ ผมคิดว่า นักพัฒนาส่วนใหญ่ไม่เป็นแบบนี้กันหรอกนะ
โดยที่ anti-pattern มีมากมายเช่น
- Spaghetti Pattern
- สำหรับ UI testing การเลือก locator ก็สำคัญ
- ใช้ XPath และ CSS selector มาก ๆ ก็แย่ เพราะว่าเปลี่ยน UI ทีก็พังที !!
- การใช้ absolute path เยอะ ๆ ก็ทรมาน
- ถ้าต้องทดสอบชุดการทดสอบแบบ sequential หรือ เรียงลำดับกันก็ไม่น่าจะใช่ เพราะว่า ช้ามาก ๆ
- แต่ละ test case ต้องทำงานต่อเนื่องกันเสมอ
- Code ของการทดสอบแต่ละ test case เยอะ ๆ หรือเอาทุกอย่างมากองรวมกัน น่าจะไม่ใช่แนวทางที่ดี
คำถามคือ สิ่งที่บอกว่าไม่ work มันมาจากไหน ? ลองตอบกันดูนะ
มาดูรายละเอียดของ Spaghetti Pattern กันบ้าง
หลัก ๆ มาจากขาดประสบการณ์ในการออกแบบ พูดง่ายว่า ออกแบบได้แย่มาก ๆ ทั้งในแง่ architecture ของระบบ ทั้งในแง่โครงสร้างของ code ทั้งในแง่โครงสร้างของการทดสอบ ตัวอย่างเช่น ชุดการทดสอบมีขนาดใหญ่ ชุดการทดสอบนัวเนีย พัวพันกันไปหมด ชุดการทดสอบหนึ่งต้องรอผลจากการทดสอบหนึ่ง ๆ ชุดการทดสอบซ้ำ ๆ ในเรื่องเดิม ๆ ชุดการทดสอบแก้ไขได้ยากมาก ๆ ชุดการทดสอบไม่ได้อธิบาย business flow อะไรเลย ชุดการทดสอบไม่สามารถทดสอบซ้ำได้ มีตัวแปรระดับ global ในการทดสอบ ซึ่งแต่ละการทดสอบต้องใช้งานร่วมกัน !!ถ้าระบบงานทำงานช้า ก็แก้ไขชุดการทดสอบให้รอไปสิ !! แบบนี้เจอเยอะมาก ๆอธิบายการทำงานยากมาก ๆ ไป ๆ มา ๆ ต้องมานั่ง debug ชุดการทดสอบเหล่านั้นอีก !!
นี่ก็คือรูปแบบคร่าว ๆ ของ Spaghetti นะ มีใครตกอยู่ในสถานการณ์แบบนี้บ้าง ? หรือว่ากำลังลงมือสร้างขึ้นมา ?