Screen Shot 2557-09-14 at 8.02.12 PM
เห็นเอกสารและวิธีการสอนเกี่ยวกับ Testing 101 สำหรับทีมพัฒนาของ Esty.com
แล้วชอบมากๆ เลยเอามาสรุปนิดหน่อย ว่าที่นี่ทำกันอย่างไร
มีเนื้อหาการสอนอะไรบ้าง รวมทั้งเอกสารต่างๆ ที่ใช้งาน
ที่สำคัญข้อมูลทั้งหมดเราสามารถนำมาใช้ฝึกฝนได้เลยครับ
มาดูกันเลยดีว่า วัฒนธรรมของทีมเป็นอย่างไร

ทำความรู้จักกับ Etsy.com

Etsy.com เป็น web e-commerce สำหรับงานฝีมือที่ใหญ่ที่สุดในโลก
สิ่งหนึ่งที่ขอแนะนำก็คือ Engineering Blog ในชื่อว่า CodeAsCraft
เป็น blog ไว้เขียนอธิบายเรื่องรวมต่างๆ ที่ทางทีมพัฒนาทำกัน

โดยสิ่งที่น่าสนใจล่าสุดก็คือ วิธีการสอนเรื่อง Testing ของทีมพัฒนา
ได้แนะนำวิธีการต่างๆ ตลอดจนเอกสารการสอนไว้อย่างละเอียด

เริ่มต้นด้วย

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

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

ภาษาโปรแกรมหลักที่ใช้ในการพัฒนาก็คือ PHP
และ testing framework ที่ใช้คือ phpUnit

สิ่งที่ทาง Etsy.com สอนนั้นคือ Testing Best Proctices Guide

เหตุผลที่ต้องสอนเรื่องนี้ เพราะว่า

1. Correctness
เพื่อทำให้มั่นใจว่า code ที่คุณเขียนออกมานั้นไม่มี bug และ มั่นใจว่ามันทำงานถูกต้องตามที่ต้องการ

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

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

ลำดับขั้นตอนการสอนของทีม Etsy.com เป็นดังนี้

ขั้นตอนแรกสำคัญมากๆ คือ วิธีการคิด (Think) ว่า

  • จะทดสอบอะไร
  • จะทำการทดสอบด้วยข้อมูลเข้าอะไร (Input)
  • จะได้ผลออกมาอย่างไร (Output หรือ Expected Result)
  • จะแยกส่วนการทำงานแต่ละส่วนออกจากกันอย่างไร

ขั้นตอนที่สอง เลือกสิ่งที่เรียกว่า Abstraction ที่ถูกต้องสำหรับการทดสอบ
เป็นสิ่งที่ยากสุดๆ ครับ
โดยต้องคิดเสมอว่า สิ่งที่คุณกำลังจะทดสอบนั้น
ต้องอยู่ภายใต้ Abstraction นะ

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

การทดสอบประกอบไปด้วย 3 ระดับ คือ

  • ระดับที่ 1 คือ Unit testing
  • ระดับที่ 2 คือ Integration testing
  • ระดับที่ 3 คือ System testing

แต่ทางทีมจะแนะนำว่า แต่ละระดับในการทดสอบต้องมีความสมดุล ไม่มากหรือน้อยไป
สิ่งที่จะตอบคุณได้ว่าจะทดสอบระดับไหน คือ จริงๆ แล้วคุณกำลังต้องการทดสอบอะไรกันแน่

เช่น unit test นั้นใช้สำหรับทดสอบการทำงานของส่วนย่อยต่างๆ
ดังนั้นมันจะทำให้ code นั้นถูกแบ่งเป็น module ย่อยๆ โดยอัตโนมัติ
แต่ถ้าคุณต้องการทดสอบว่าส่วนงานแต่ละส่วนทำงานร่วมกันได้หรือไม่
นั่นแสดงว่าคุณต้องเขียน Integration และ System test แล้ว

รวมทั้งยังได้แนะนำการใช้งาน Mocking หรือ Test double
ซึ่งเป็นแนวคิดที่สำคัญมากๆ สำหรับการทดสอบ
และยังมีเรื่องการทดสอบ Legacy code อีกด้วย

ดังนั้นลองฝึกหัดคิด ลงมือทำจากตัวอย่าง CodeLab ได้เลย
เพราะว่า การอ่านอย่างเดียว โดยไม่ลงมือทำ จะไม่เกิดประโยชน์เลย

กิจกรรมหลักๆ ที่ทางทีมพัฒนา Etsy.com ยังมีอย่างอื่นอีกดังนี้

  • สอนเรื่องต่างๆ เหล่านี้ให้กับพนักงานใหม่ (Bootcamp)
  • Technical talk
  • Dojo
  • Code review

รวมไปถึงเรื่องเทคนิคเชิงลึกที่ไม่สามารถเห็นได้ใน code ซึ่งทางทีม Etsy.com แก้ได้ง่ายๆ
ด้วยการสอน สร้าง process และ เครื่องมือต่างๆ ขึ้นมาเอง
เพื่อทำให้เห็นภาพชัดขึ้นกว่าเดิม และทำอย่างนี้ไปเรื่อยๆ

สิ่งที่สังเกตได้จากทีมพัฒนาของ Etsy.com

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

ถ้าเรื่องอะไรมันไม่ชัด ก็ทำให้ชัดด้วยวิธีการต่างๆ เช่น การสอนภายในเป็นต้น

ลองย้อนกลับไปดูทีมของแต่ละคนว่า วันนี้คุณทำหรือเขียน test สำหรับ code ของคุณแล้วหรือยัง !!
แล้วในทีม องค์กร ของคุณมีการสอนอะไรทำนองนี้หรือไม่
หรือว่าทำสิ่งที่เรียกว่า On The Job Traning กัน … แล้วมันได้ผลหรือเปล่า …

Screen Shot 2557-09-14 at 8.18.21 PM