Screen Shot 2558-01-19 at 2.44.23 PM
เรื่องที่ 27 ที่นักพัฒนาควรรู้ และ เข้าใจก็คือ Test While You Sleep (and over Weekends)

คุณพบปัญหาเรื่อง server ที่ใช้ในการพัฒนา software ไม่เพียงพอหรือไม่ ?
ซึ่งมันทำให้ไม่สามารถทำงาน หรือ ใช้งานในเวลาการทำงานได้มากนัก
เช่น
คุณมี test server หรือไม่  ?
เพื่อทำหน้าที่ run ชุดการทดสอบทั้งหมด
แต่ปัญหาคือ ไม่สามารถทำการทดสอบได้ตลอดในเวลาทำงานปกติ
ดังนั้น ถ้าเจอเหตุการณ์เช่นนี้ สามารถให้มันทำงานตอนกลางคืนได้นะ

มาดูตัวอย่างของปัญหากันดู

1. ก่อนที่คุณทำการ check-in การเปลี่ยนแปลง จะไม่ทำการ run ชุดทดสอบทั้งหมด ใช่หรือไม่ ?

เป็นปัญหาหลักของนักพัฒนา software ส่วนใหญ่เลยก็ว่าได้
เพราะว่า โดนบีบด้วยเวลาใช่ไหมล่ะ !!
ดังนั้น ยิ่งใกล้วัน deadline มากเท่าไร
เราที่เป็นมนุษย์ ก็ตัดสิ่งต่างๆ ออกไป เพื่อทำงานเสร็จให้ได้มากที่สุดเท่าที่จะทำได้
หนึ่งในนั้น คือ การไม่ run ชุดการทดสอบไงล่ะ !!

แต่เดี๋ยวก่อนนะ มันวิธีการอื่นๆ อีกนะที่สามารถทำได้ เช่น
เช่นแยกชุดการทดสอบออกเป็นชุดเล็กๆ ตาม profile หรือกลุ่มของการทดสอบ
เช่น unit test, integration test และ acceptance test เป็นต้น
และให้ทำการทดสอบในกลุ่มที่คิดว่า น่าจะเพียงพอทำให้มั่นใจว่า
สิ่งที่ทำมันถูกต้อง และทำงานได้อย่างรวดเร็ว
เพื่อตรวจสอบก่อนที่จะทำการ check-in code

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

… แต่ถ้ามี server เพียงพอ ก็ไม่ต้องทำการทดสอบแบบนี้นะครับ
เพราะว่า มันจะมี feedback loop ที่ช้าเกินไป

2. ในการทดสอบจำเป็นต้องใช้ทรัพยากรของ server สูงๆ หรือไม่ ?

ตัวอย่างเช่นทำการทดสอบแบบ Soak test, Performance test เป็นต้น
ซึ่งต้องใช้ทั้งทรัพยากร และ เวลาในการทดสอบที่สูง
ดังนั้น มันอาจจะก่อให้เกิดผลกระทบอย่างมาก
ถ้าทำการทดสอบในเวลาทำงานปกติ

ดังนั้น สามารถแก้ไขปัญหาด้วยการตั้งเวลาให้ทำการทดสอบแบบอัตโนมัติในเวลากลางคืน

3. คุณต้องทำการทดสอบแบบ manual ใน environment แต่แตกต่าง หลากหลาย ใช่หรือไม่ ?

ตัวอย่างเช่น ต้องทำสอบระบบงานบนระบบปฏิบัติการทั้ง 32-bit และ 64-bit
ทั้งบนระบบปฏิบัติการ Windows, Linux, Mac
หรือต้องทำสอบผ่าน protocol ต่างๆ เช่น HTTP, TCP, SOAP, CORBA เป็นต้น
ถ้าคุณทำการทดสอบพวกนี้แบบ manual
คิดดูสิว่า ต้องใช้จำนวนคน และ เวลาในการทดสอบมากเพียงใด
และบ่อยครั้ง มักพบว่า
การทดสอบมันช้าเกินไป และกลายเป็นส่วนงานที่ล่าช้าไปมาก
ยิ่งได้รับแรงกดดันจากเรื่อง deadline มาด้วย
ก็ยิ่งทำให้คุณภาพการทดสอบลดลงไป
ส่งผลให้ปัญหาเกิดขึ้นมาตามหลังเยอะมาก ใช่ไหม ?

ดังนั้น สามารถแก้ไขด้วยการสร้างชุดการทดสอบแบบอัตโนมัติขึ้นมาซะ

แล้วให้ทำการ run ชุดทดสอบเหล่านี้ในเวลากลางคืน หรือ หลังเลิกงาน

  • เพื่อทำให้เราลดเวลาในการทดสอบ
  • เพื่อทำให้เราลดจำนวนคนในการทดสอบ
  • เพื่อทำให้เราลดการทดสอบแบบ manual
  • เพื่อทำให้เราสามารถทดสอบได้บ่อยขึ้น

ส่วนการระบบการ run ก็ง่ายมาก เพียงแค่ตั้ง cron job ทิ้งไว้มันก็ทำงานได้แล้วนะ
ไม่ต้องไปหาระบบอะไรมาติดตั้งเลย

หัวใจหลักก็คือ Automated test นะครับ