จากงาน Android Dev Summit 2015 นั้น
นั่งดู VDO เรื่อง Android Testing
ซึ่งมีคำหนึ่งที่น่าสนใจมาก ๆ คือ Hermetic Testing ?
เนื่องจากไม่เคยได้ยิน และ งงกับคำนี้มาก
เลยทำการค้นหา และ นำมาสรุปหน่อย
พบว่า มันสำคัญมาก ๆ สำหรับการทดสอบระบบงาน
Hermetic Testing มันคืออะไร ?
จาก Blog ของ Google Testing อธิบายไว้ว่า ระบบงานต่าง ๆ นั้นมันมีความซับซ้อนสูงมาก ประกอบไปด้วยส่วนการทำงานต่าง ๆ มากมาย ทั้งผ่านและไม่ผ่าน network ทั้งระบบงานภายใน และ ภายนอก ทำให้เกิดปัญหาในการทดสอบมากมายดังนั้นเราทำการทดสอบระบบแบบ End-to-End testing กันอย่างไร ?แสดงตัวอย่างระบบดังรูป คำอธิบาย ระบบที่ต้องการทดสอบนั้น ผ่าน Frontend server เมื่อผู้ใช้งานใช้งานแล้วจะต้องติดต่อไปยังระบบ backend 3 ระบบ โดยที่ End-to-End test นั้นมีเป้าหมาย เรื่องความเร็วและความน่าเชื่อถือในการทดสอบ ดังนั้นสิ่งที่เราต้องหลีกเลี่ยงคือ
- การติดต่อผ่านระบบ network ลองคิดดูสิว่า ถ้า network มันพัง การทดสอบจะเป็นอย่างไร ?
- การเรียกใช้งานระบบจากภายนอก ลองคิดดูสิว่า ถ้าระบบภายนอกมันปิดไป การทดสอบจะเป็นอย่างไร ?
มาดูกันหน่อยสิว่า Hermetic Server มันคืออะไรและเป็นอย่างไร ?
พูดง่าย ๆ คือ Server in the box นั่นคือ ถ้าเราสามารถ start server ต่าง ๆ ที่เกี่ยวข้องขึ้นมาบนเครื่องเดียว แน่นอนว่า ไม่จำเป็นต้องติดต่อผ่านระบบ network รวมทั้งเป็น server ที่ทำงานตามที่เราคาดหวังไว้ด้วย เช่น สร้างมาเพื่อให้ทำงานถูก หรือ สร้างมาเพื่อให้ทำงานผิด เป็นต้น เพียงเท่านี้คุณก็มี Hermetic Server ไว้ใช้ทดสอบระบบแล้วนะปล. ในบางกรณีอาจจะมีมากกว่า 1 เครื่องก็ได้นะ Server ที่สร้างอาจจะเป็นเครื่องจริง ๆ หรือ Virtual machine ก็ได้มาดูการออกแบบกันบ้าง การสร้าง Hermetic server นั้นควรทำตั้งแต่ขั้นตอนการออกแบบระบบ อย่ารอ อย่าช้า อย่าอ้างถึงข้อจำกัดต่าง ๆ ลงมือทำ และ สร้างซะ !! รวมไปถึงสิ่งต่าง ๆ เหล่านี้
- ใช้ Dependency Injection สำหรับจัดการ connection ต่าง ๆ ไปยัง server
- ข้อมูลที่จะต้องมีอยู่ในแต่ละ server
- ถ้า server มีการใช้งานข้อมูลจาก database จะต้องทำการ fake หรือใช้ In-Memory database แทนเสมอ
- สิ่งที่เรา fake ขึ้นมานั้น ต้องทำการตรวจสอบด้วยว่า code ของเราเรียกใช้งานได้อย่างถูกต้องหรือไม่ เช่น การใช้ mock เป็นต้น
- วิธีการเตรียมข้อมูล หรือ test data ให้มันง่าย และ สะดวก
- เตรียม logging module เพื่อช่วยตรวจสอบการทำงานในการทดสอบ
- ทำการ start test server ขึ้นมา
- ทำการทดสอบส่วน API ซึ่งเป็น backend ของระบบ
- ทำการทดสอบ performance test แบบเล็ก ๆ
- ทำการทดสอบ UI จากส่วนของ Frontend
ลองกลับมาที่การทดสอบ Android app หน่อยสิ
แน่นอนว่ามีปัญหาหลัก ๆ ดังนี้- การทดสอบช้ามาก ๆ
- บ่อยครั้งการทดสอบจะ fail รวมถึงปัญหาเรื่อง memory และ CPU
- ยากต่อการ debug หรือหาข้อผิดพลาด
- ปัญหาในการเรียกใช้ระบบภายนอก เช่น Autentication server และ Backed server เป็นต้น
คำถาม แล้วคุณทำการทดสอบแบบ End-to-End testing กันอย่างไร ?Reference Websites http://googletesting.blogspot.com/2012/10/hermetic-servers.html http://googletesting.blogspot.com/2015/03/android-ui-automated-testing.html