slow3
สิ่งหนึ่งที่ทีมพัฒนา software มักจะประสบพบเจอปัญหาจากการเขียนชุดการทดสอบ
เช่น unit test, integration test รวมไปถึง User Interface test
นั่นก็คือ เรื่องเวลาการทดสอบที่สูงขึ้นเรื่อยๆ
จากหลักวินาทีพุ่งไปจนถึงหลายนาที เคยได้ยินว่าเป็นชั่วโมงก็มีนะ
ประเด็นคือ แล้วเราจะแก้ไขให้มันทำงานเร็วขึ้นได้อย่างไรล่ะ

เรื่องความเร็วของการทดสอบเป็นคุณสมบัติอย่างหนึ่งของ
การทดสอบที่ดีวิธีการที่จะทำให้เร็วขึ้น ซึ่งเป็นส่วนที่สำคัญมากๆ ในเรื่องของ feedback loop

ก่อนอื่นต้องหาต้นเหตุของปัญหาก่อน

ว่า มันช้ามาจากอะไร เช่น test tool หรือไม่
ถ้าต้นเหตุมากจากเครื่องมือที่ใช้ ก็เปลี่ยนมันซะ
ทำการแยกการทดสอบออกเป็นชุดๆ สิ
ไม่งั้นก็เปลี่ยนเครื่องที่เร็วขึ้นสิ ( ไม่แนะนำนะ )

ในการทดสอบนั้น เรื่องความเร็วสำคัญมากๆ

เนื่องจากถ้าใช้เวลาการทดสอบนาน ก็คือ การได้ feedback ที่ช้า
ส่งผลให้เราแก้ไขหรือรู้ผลการทำงานได้ช้าลงไป
ส่งผลให้เราสูญเสียเวลาไปโดยไร้ค่า นั่นคือ waste ที่เราสร้างขึ้นมา
ดังนั้น เราควรลด waste เหล่านี้ออกไปให้ได้มากที่สุด

ผลที่ตามมาจากการทดสอบที่ใช้เวลานานอีกก็คือ
เราไม่สามารถทำการทดสอบได้บ่อยๆ
จนทำให้ไม่อยากทดสอบ และที่เลวร้ายสุดๆ ก็คือ ไม่ทำการทดสอบดีกว่า
เพราะว่า ถ้าเขียนการทดสอบแล้วมันเปลืองนั่นเอง

ตัวอย่างเช่นระดับ code

สามารถนำแนวคิดของ Test Double มาใช้ เช่น Mock object และ Stub
ในส่วนของ code ที่ทำงานช้า เช่น

  • การส่ง email ผ่าน SMTP Server
  • การติดต่อฐานข้อมูล
  • การดึงข้อมูลผ่าน WebService
  • การอ่านและเขียนไฟล์

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

ถ้า code ที่คุณเขียนมันผูกมัดกันมากๆ แล้ว
มันก็ยากต่อการทดสอบ และแน่นอนมันยากต่อการ Mock และ Stub
นั่นหมายถึงคุณอาจจะใช้เวลาทดสอบที่สูงขึ้น

ตัวอย่างของการทดสอบ

สามารถแบ่งการทดสอบออกเป็นชุดๆ ( Suite ) ได้
จะทำให้เราสนใจในชุดของการทดสอบนั้นๆ ไปเลย
จะช่วยลดเวลาการทดสอบไปได้เยอะ
แต่เวลาโดยรวมทั้งหมดยังช้านะ

ตัวอย่างของเครื่องมือทดสอบ

ถ้ามาจากเครื่องมือการทดสอบ เช่น test library, IDE

IDE อาจจะทำการทดสอบช้า มาจากเวลาก่อนที่จะเริ่มทดสอบ
ต้องดึงค่าต่างๆ มาเตรียมพร้อมก่อน แล้วจึงเริ่มทำการทดสอบ ( Start time  คือ Overhead)
ตรงนี้สามารถแก้ไขง่ายๆ ด้วยการเปลี่ยนจาก IDE ไปใช้พวก command line tool เลย
ถ้าไม่เชื่อก็ลองดูได้นะครับ แต่เชื่อว่าหลายๆ คนที่ติด IDE ไม่กล้าย้าย

ดังนั้น ต้องท่องจำไว้เลยว่า การทดสอบของเราห้ามช้าโดยเด็ดขาด !!

สามารถอ่านบทความในเรื่องนี้เพิ่มเติมได้จากจาก CleanCode.com เรื่อง Test Time น่าสนใจมากครับ
โดยเขาสรุปไว้อย่างดีเลยว่า ซึ่งผมเอามาปรับนิดหน่อยว่า

  • Programmer ต้องใส่ใจต่อระบบ
  • Programmer ต้องใส่ใจต่อการทดสอบระบบ
  • Programmer ที่ใส่ใจเรื่องการทดสอบแล้ว ต้องมั่นใจด้วยว่ามันทำงานได้อย่างรวดเร็ว
  • การทดสอบที่ทำงานช้า มันสะท้อนถึงประสบการณ์และความเป็นมืออาชีพของทีม
  • การทดสอบที่ทำงานช้า มันก่อนให้เกิดความผิดพลาดมากมายที่จะตามมา หรือ บอกว่าทีมหรือคุณไม่มีความใส่ใจต่อการทดสอบระบบเลย

 

Tags: