มีคำถามเกี่ยวกับการมาเป็น Test Automation Engineer ว่า
ควรมี technical skill อะไรบ้าง ?
เพื่อช่วยให้การทดสอบดีขึ้น
จากสิ่งที่ทำและเจอมา สามารถสรุปคร่าว ๆ ได้ดังนี้
ให้เริ่มจากวิธีคิดก่อนว่า ต้องปรับปรุงให้ดีกว่าเดิม
อย่าไปกลัวที่จะเรียนรู้สิ่งใหม่ ๆ
จากนั้นลงมือทำ วัดผล ให้ได้รับ feedback และปรับปรุงด้วยการลงมือทำซ้ำ ๆ
มาเริ่มกันเลย
เรื่องแรก programming skill ให้เลือกสักภาษาก่อนเพื่อศึกษา
เนื่องจากการทำ automation test นั้นจำเป็นต้องเขียน script หรือ code เสมอ
แต่เป็นการเขียนในเชิงการทดสอบ ไม่ใช่การพัฒนาระบบงาน
แต่เรื่องนี้เป็นกำแพงอันยิ่งใหญ่ สำหรับ QA/Tester ที่ทำ manual มาตลอด หรือ non-technical
จึงต้องอาศัยวิธีคิด ความพยายามสูงกว่าคนอื่น ๆ
แต่ส่วนใหญ่มักจะหนีไปใช้เครื่องมือพวก
- AI หรือ GenAI
- Record and playback tool
- Scriptless/No code/Low Code tool
ซึ่งมันคือการหนีนั่นเอง ดังนั้นจะไม่ได้มีความรู้ด้าน programming มากนัก
ก็จะไม่ได้สนใจเรื่องนี้เท่าไร เน้น tool ล้วน ๆ
จะส่งผลดีในช่วงแรก แต่ในการดูแลระยะยาวจะวุ่นวายหรือลำบากมาก ๆ
เช่นเกิด flaky test ขึ้นมาอีก
สุดท้ายจะบอกว่า ทดสอบแบบเดิมดีกว่า !!
แต่แน่นอนว่า มันก็คือ หนึ่งในการเรียนรู้เช่นกัน
เรื่องที่สองคือ การใช้งาน Version Control เช่น Git
เพราะว่าเขียน test script จำเป็นต้องจัดการ version ของ script เหล่านั้น
และการใช้เครื่องมือเดียวกับทีมพัฒนาก็จะช่วยให้ทำงานเป็นทีมมากขึ้น
อย่างน้อยถ้ามีปัญหาก็สามารถพูดคุยกันได้
แนะนำให้เริ่มที่ command line tool ก่อนนะครับ
อย่าเพิ่มเริ่มด้วย GUI tool
ยากหน่อยในการเริ่มต้น แต่พื้นฐานสำคัญมาก ๆ
อีกอย่างเรื่องของ การใช้ command line tool ต่าง ๆ ก็ฝึกเอาไว้
ถ้าเขียน shell script ได้ก็จะดียิ่งขึ้น
อีกอย่างเมื่อ test script มีการเปลี่ยน ก็จะเป็นต้องทำการ execute test ทั้งหมดทุก ๆ ครั้งอีกด้วย
ตรงนนี้ช่วยให้สามารถเพิ่มการทดสอบแบบอัตโนมัติ
ใน pipeline ของ CI/CD process ได้ง่ายอีกด้วย
ลด ละ เลิก การส่ง test script ผ่าน email หรือ chat tool กันได้แล้ว !!
เรื่องที่สาม เรียนรู้เรื่อง format file ต่าง ๆ ที่จำเป็นต่อการใช้งาน
ยกตัวอย่างเช่นส่วนใหญ่ต้องรู้ และ เขียนพวก JSON, YAML ได้
ก่อนนี้จะมีพวก XML, CSV เป็นต้น
หรือถ้าต้องการ validate โครงสร้างข้อมูลก็ต้องรู้ เช่น
- JSON ต้องรู้ JSON Schema
- XML ต้องรู้ XML Schema
เรื่องที่สี่ จะทดสอบระบบอะไรก็ต้องรู้เรื่องนั้น ๆ
ยกตัวอย่างเช่น ทดสอบ web application ผ่าน web browser
ก็ต้องมีความรู้เรื่องพื้นฐานของ web ก่อนด้วย เช่น
- HTML/CSS/JavaScript พื้นฐาน
- การเข้ามถึง element ต่าง ๆ เช่น id/name/xpath/css seclector
- ใช้ web browser เช่น Google Chrome ก็ต้องเข้าใจ หรือใช้งาน DevTool ได้อย่างดีเช่นกัน
พวก Database ทั้ง SQL และ NoSQL
ถ้ามีความรู้จะช่วยให้เราเข้าใจโครงสร้างระบบมากยิ่งขึ้น
เรื่องที่ห้า ชุดเครื่องมือต่าง ๆ ในการทดสอบของแต่ละแบบ
ยกตัวอย่างเช่น
- UI test ของ web app
- UI test ของ mobile app
- API test ของ REST API, GraphQL
- Service component test
- Contract test
- .....
จะใช้อะไร มีข้อดีข้อเสียอะไรบ้าง
เรียนรู้ให้มาก ลองใช้ให้มาก
เตรียมความพร้อมเอาไว้ เมื่อถึงเวลาจะได้นำมาใช้ได้เลย
ไม่ต้องมาเริ่มเรียนรู้ใหม่จากศูนย์ บ่อยครั้งมันก็ช้าเกินไปแล้ว
เรื่องที่หก เข้าใจเรื่องของ Architecture ของระบบงาน หรือ Software design บ้าง
ปัญหาที่เจอสำหรับการทดสอบคือ
จะทดสอบแต่ในมุมมองของ Black box testing เยอะมาก ๆ
รอให้เสร้จแล้วค่อยทดสอบ
บอกได้เลลย เอาอะไรมาช่วยก็ไม่รอด
เพราะว่าการทดสอบอยู่ในช่วงท้าย
ทำได้แค่ตามทดสอบให้มันจบ ๆ ไป
ดังนั้นอยากให้กลับมาดูเป็น Gray box หรือ white box testing มากยิ่งขึ้น
คือการเข้ามาดู หรือ เข้าใจโครงสร้าง หรือ architecture ของระบบงานให้มากขึ้น
เช่นระบบงานมี Frontend, Backend, Database, Caching, API gateway, Load balancer
จะช่วยทำให้เข้าใจมากขึ้นมาว่า
ควรจะมี test strategy อะไรบ้างที่เหมาะสม
เพื่อค่อย ๆ ทดสอบในแต่ละส่วนว่าถูกต้อง
ส่วนไหนต้องจำลอง (Test double) แบบไหน อย่างไร เครื่องมืออะไร
ส่วนไหนที่มีปัญหา หรือ คอขวด
อย่างเช่น Load balancer จะทดสอบอย่างไร ?
แนวทางในการเตรียม data test ให้เหมาะสม หรือ ไปจนถึงการ generate data test อีกด้วย
จากนั้นค่อยมาทำ End-to-end test ในขั้นตอนสุดท้าย !!
แต่เหนือสิ่งอื่นใด คือการฝึก ฝึก ฝึก ครับ
ลงมือศึกษา ลงมือทำ