Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

ทำความรู้จักกับ Hermetic Testing กันหน่อย

$
0
0

speed-slow-snails-ss-1920-800x450

speed-slow-snails-ss-1920-800x450 จากงาน Android Dev Summit 2015 นั้น นั่งดู VDO เรื่อง Android Testing ซึ่งมีคำหนึ่งที่น่าสนใจมาก ๆ คือ Hermetic Testing ? เนื่องจากไม่เคยได้ยิน และ งงกับคำนี้มาก เลยทำการค้นหา และ นำมาสรุปหน่อย พบว่า มันสำคัญมาก ๆ สำหรับการทดสอบระบบงาน

Hermetic Testing มันคืออะไร ?

จาก Blog ของ Google Testing อธิบายไว้ว่า ระบบงานต่าง ๆ นั้นมันมีความซับซ้อนสูงมาก ประกอบไปด้วยส่วนการทำงานต่าง ๆ มากมาย ทั้งผ่านและไม่ผ่าน network ทั้งระบบงานภายใน และ ภายนอก ทำให้เกิดปัญหาในการทดสอบมากมาย
ดังนั้นเราทำการทดสอบระบบแบบ End-to-End testing กันอย่างไร ?
แสดงตัวอย่างระบบดังรูป h01 คำอธิบาย ระบบที่ต้องการทดสอบนั้น ผ่าน Frontend server เมื่อผู้ใช้งานใช้งานแล้วจะต้องติดต่อไปยังระบบ backend 3 ระบบ โดยที่ End-to-End test นั้นมีเป้าหมาย เรื่องความเร็วและความน่าเชื่อถือในการทดสอบ ดังนั้นสิ่งที่เราต้องหลีกเลี่ยงคือ
  • การติดต่อผ่านระบบ network ลองคิดดูสิว่า ถ้า network มันพัง การทดสอบจะเป็นอย่างไร ?
  • การเรียกใช้งานระบบจากภายนอก ลองคิดดูสิว่า ถ้าระบบภายนอกมันปิดไป การทดสอบจะเป็นอย่างไร ?
เราจำเป็นต้องเปลี่ยนจาก Global data มาเป็น Local data จาก server จริง ๆ ก็ให้ทำการจำลอง หรือ สร้าง Fake server ขึ้นมา ดังนั้นทีมทดสอบของ Google จึงได้คิดและออกแบบ End-to-End testing ใหม่ โดยเปลี่ยนมาใช้ Hermetic server แทน server จริง ๆ

มาดูกันหน่อยสิว่า 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 แทนเสมอ
เพื่อทำให้มั่นใจว่าเราสามารถจัดการ Hermetic server ได้ง่าย แต่ว่ายังไม่จบนะ !! สิ่งที่ยังต้องทำเพิ่ม เพื่อให้มีความมั่นใจมากขึ้นคือ
  • สิ่งที่เรา fake ขึ้นมานั้น ต้องทำการตรวจสอบด้วยว่า code ของเราเรียกใช้งานได้อย่างถูกต้องหรือไม่ เช่น การใช้ mock เป็นต้น
  • วิธีการเตรียมข้อมูล หรือ test data ให้มันง่าย และ สะดวก
  • เตรียม logging module เพื่อช่วยตรวจสอบการทำงานในการทดสอบ
แสดงการใช้งาน Hermetic server สำรับการทดสอบดังรูป h02 ซึ่งมันตอบโจทย์เรื่องความเร็ว และ ความน่าเชื่อถือในการทดสอบ End-to-End test โดยมีขั้นตอนการทดสอบคร่าว ๆ ดังต่อไปนี้
  • ทำการ start test server ขึ้นมา
  • ทำการทดสอบส่วน API ซึ่งเป็น backend ของระบบ
  • ทำการทดสอบ performance test แบบเล็ก ๆ
  • ทำการทดสอบ UI จากส่วนของ Frontend

ลองกลับมาที่การทดสอบ Android app หน่อยสิ

แน่นอนว่ามีปัญหาหลัก ๆ ดังนี้
  • การทดสอบช้ามาก ๆ
  • บ่อยครั้งการทดสอบจะ fail รวมถึงปัญหาเรื่อง memory และ CPU
  • ยากต่อการ debug หรือหาข้อผิดพลาด
  • ปัญหาในการเรียกใช้ระบบภายนอก เช่น Autentication server และ Backed server เป็นต้น
แสดงการทำงานดังรูป h03 ดังนั้นจึงทำการเปลี่ยนมาใช้ Hermetic UI Testing นั่นคือการสร้าง Fake server ต่าง ๆ ขึ้นมา แสดงการทำงานดังรูป h04 แต่ปัญหาจากวิธีการนี้ คือ การจัดการ Fake server ต่าง ๆ นั่นเอง ลองคิดดูสิว่า ถ้ามี server จำนวนมาก ๆ มันจะเป็นอย่างไร !! เราจำเป็นต้องจัดการให้ดีกว่านี้ เพื่อให้เราแยกส่วนของ Fake server ออกจากการทดสอบได้ รวมทั้งสามารถเปลี่ยนแปลงได้ในขณะ Runtime นั่นก็คือ การใช้ Dependency Injection ประกอบกับใน Android มี Build Variant ให้ใช้งาน ดังนั้น การทดสอบ และ จัดการจึงง่ายขึ้นอย่างมาก ๆ แสดงการทำงานดังรูป h06 มาถึงตรงนี้ น่าจะทำให้เราเข้าใจเกี่ยวกับ Hermetic Testing มากขึ้นแล้วนะ ดังนั้น กลับไปดู VDO กันต่อสิ !!
คำถาม แล้วคุณทำการทดสอบแบบ 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

Viewing all articles
Browse latest Browse all 1997

Trending Articles