อ่านบทความเรื่อง Rapid release at massive scale จาก Facebook
แล้วไปเจอ paper ที่ทาง facebook เขียนไว้คือ
Continuous Deployment of Mobile Software at Facebook (Showcase)
ตามจริงมี paper ที่เกี่ยวข้องอีกหลายฉบับเลย

ใน paper ฉบับนี้มีความน่าสนใจในเรื่อง

  • Release cycle ของ mobile app ทั้ง iOS และ Android
  • การจัดเก็บข้อมูลต่าง ๆ ที่เกี่ยวกับการ release และ deployment
  • การทดสอบระบบงาน
  • มีการสรุปข้อมูลต่าง ๆ ของการพัฒนาอีกด้วย

ดังนั้นมาดูกันนิดหน่อย

เปิดด้วยข้อสรุปของ paper นี้ดีกว่า

รอบของการ release ระบบที่สั้น ๆ นั้น
ช่วยทำให้ Time to Market เร็วขึ้น
ช่วยทำให้ได้รับ feedback จากผู้ใช้งานเร็วและดีขึ้น

แต่การมีเพียง continuous deployment เพียงอย่างเดียว
มันไม่ได้ช่วยเพิ่ม productivity ของทีมพัฒนาหรอกนะ

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

สำหรับการ release ของ Mobile app นั้นมันไม่ง่ายเลยทั้งการ rollout และ rollback
ดังนั้นสิ่งที่นำมาใช้งานคือ Feature Flag
เพื่อให้สามารถเปิดหรือปิด function/feature ของระบบจาก server ได้ง่าย ๆ
ดังนั้นถ้า function/feature ใด ๆ มีปัญหา
ก็สามารถทำการปิดจาก server ได้เลย

การ release แบบรอบสั้น ๆ ช่วยลดปัญหาต่าง ๆ ลงไป
เช่นข้อขัดแย้งของ code ในไฟล์เดียวกัน ที่ต้องแก้ไขจากหลาย ๆ คน

เรื่องของ Mobile Release Cycle

โดยแบ่งออกเป็นสองส่วนคือ

  1. Development Activity โดยนักพัฒนาจะทำการ push code ไปที่ Master branch
  2. Deployment Activity โดย Release engineer จะทำการ cut code จาก Master branch มายัง Release branch

จากนั้นก็เข้าสู่กระบวนการ release ต่อไป

Release Cycle สำหรับ iOS เป็นดังรูป
โดยแบ่งเป็นรอบ ๆ ละ 2 สัปดาห์

เรื่องการจัดเก็บข้อมูลของแต่ละ release และ deployment

มีเยอะมาก ๆ ยกตัวอย่างเช่น

  • Revision-control system records เก็บข้อมูลของแต่ละ commit, push เช่น จำนวนบรรทัดและเจ้าของ เป็นต้น
  • Crash database เป็นระบบ crash report ซึ่งจะได้รับข้อมูลเมื่อ FB app มีปัญหา ซึ่งแบ่งตามการ release ไป
  • Flytrap database เก็บข้อมูลของ issue ต่าง ๆ ที่ถูก report มาจากผู้ใช้ภายในและภายนอก
  • Tasks database เป็น database หลักของทีม Release Engineer ซึ่งเก็บข้อมูล task ต่าง ๆ ทั้งการ implement และ issue ต่าง ๆ ที่ทำ
  • Production issue database ปัญหาต่าง ๆ ที่เกิดขึ้นบน production
  • Daily Active People (DAP) ข้อมูลผู้ใช้งาน Facebook app ในแต่ละวัน

โดยข้อมูลเหล่านี้จะนำมาใช้ในการวิเคราะห์ต่อไป

เรื่องการทดสอบระบบงาน

การทดสอบเป็นสิ่งที่สำคัญมากสำหรับ Mobile app เนื่องจาก

  • Mobile software มีการเปลี่ยนแปลงที่บ่อยและเยอะมาก ๆ
  • จำนวน device และ version ของ device มีมากมายและแตกต่างกัน
  • ยากต่อการแก้ไขปัญหาที่เกิดขึ้นหลังจากการ deploy/release !!

โดยการทดสอบของ FB app นั้นจะมีการทดสอบต่าง ๆ เหล่านี้

  • Unit test เป็น white-box testing สำหรับการ verify การทำงานในส่วนต่าง ๆ
  • Static Analysis เป็นการวิเคราะห์ source code เพื่อช่วยหาจุดที่อาจจะก่อให้เกิดปัญหาได้ เช่น null pointer, resource leak และ memory leak เป็นต้น
  • Build test เป็นการทดสอบว่า source code ทั้งหมดยัง build ได้
  • Snapshot test เป็นการทดสอบโดยบันทึกแต่ละหน้าจอเป็นรูปภาพ จากนั้นเอามาเปรียบเทียบกับสิ่งที่ต้องการ
  • Integration test เป็น black-box testing เพื่อทดสอบการทำงานในแต่ละ feature และ flow ต่าง ๆ ทั้งหมด นั่นคือ regression test นั่นเอง
  • Performance test เป็นการทดสอบใน mobile lab เน้นในเรื่องประสิทธิภาพของการทำงาน รวมทั้งการใช้งาน resource ต่าง ๆ อีกด้วย

สิ่งที่น่าสนอีกเรื่องของ Testing Principle

  • Coverage การทดสอบต้องครอบคลุมการทำงานในส่วนต่าง ๆ และแต่ละ test ต้องมีประโยชน์และทำการทดสอบบ่อย ๆ
  • Responsive การทดสอบต้องเร็ว เมื่อเกิดปัญหาต้องบอกได้เลยว่าเป็นปัญหาจากอะไร ตรงไหน
  • Quality
  • Automation การทดสอบต้องทำงานแบบอัตโนมัติให้ได้มากที่สุดเท่าที่จะเป็นไปได้ จะทำให้สามารถทดสอบซ้ำแล้วซ้ำอีกได้ และทดสอบได้บ่อยเท่าที่ต้องการ
  • Prioritization ต้องจัดเรียงลำดับความสำคัญของการทดสอบด้วย เนื่องจากการทดสอบต้องใช้ resource ต่าง ๆ เยอะ แต่ก็ต้องการความเร็วเช่นกัน ยกตัวอย่างเช่น developer อยากรู้ว่า code มีปัญหาหรือไม่ ดังนั้นทำการทดสอบ unit test ก่อน เพื่อให้นักพัฒนารู้ผล จากนั้นจึงทำการทดสอบ integration test ต่อไป

และสิ่งที่ขาดไปไม่ได้เลยคือ Testing Infrastructure
และแน่นอนว่า Manual testing ก็ยังมีอยู่เช่นกัน

ส่วนผลการวิเคราะห์ในมุมต่าง ๆ ลองอ่านใน Paper ดูนะครับ