BlogTechnologyUncategorized

แชร์ประสบการณ์งานสาย QA ความรู้เน้นๆ แบบไม่กั๊ก

       จากบทความที่แล้ว เราได้แชร์ความรู้เกี่ยวกับงาน Quality Assurance ซึ่งได้รับผลตอบรับจากผู้ที่สนใจค่อนข้างดี มีคำถามมากมาย ที่ถามกันเข้ามาเกี่ยวกับหลักการทำงาน ขั้นตอนการทำงาน หรือ กระบวนการคิด กว่าจะออกมาเป็นโปรแกรมที่สมบูรณ์แบบให้ได้ใช้งานกันนั้น ไม่ง่ายเลยจริงๆ ผู้ที่อยู่ในวงการงานสายเทคนิคคงเข้าใจดี เพื่อให้เป็นความรู้ที่มองเห็นภาพจริง และเป็นประโยชน์นำไปต่อยอดในการทำงานได้อย่างเห็นผล วันนี้แอดมินมีความรู้อัดแน่นไม่จกตา มาให้เพื่อเป็นแนวทาง แอดมินขอแนะนำผู้ที่จะมาให้ความรู้กับเรา ไปเริ่มกันเลยค่ะ 

    คุณอนรรฆ อำไพวิทย์  หรือ คุณเฟิร์ส ประสบการณ์ทำงาน 7 ปี ตำแหน่ง Project Manager บริษัท สวิฟต์เลท จำกัด จะมาเล่าถึงประสบการณ์การทำงานจริง เริ่มตั้งแต่ศูนย์ กว่าจะมาถึงจุดนี้ ต้องผ่านความโหดหินแค่ไหน ลุยจริง เจ็บจริง เรียนรู้ และ แก้ไขได้จริง โดยเน้นหลักการทำงานที่ผ่านมาเป็นบทเรียน เพื่อจะได้พัฒนาโปรเจคต่อไปให้ดีมากยิ่งขึ้น ที่ใช้หลักการทำงานจริง มากกว่าเรียนรู้ในห้องเรียน และส่วนใครที่สงสัย หรืออมีคำถาม ทางบริษัท สวิฟต์เลท ยินดีให้คำปรึกษา โดยไม่มีค่าใช้จ่ายค่ะ

ก่อนที่จะพูดถึง  Quality Assurance Officer เราต้องทำความเข้าใจกับ Quality กันก่อน .. 

 

Quality หรือ คุณภาพ คือการดำเนินการที่มีประสิทธิภาพ และสามารถส่งมอบ Software ที่ใช้งานได้จริงให้ลูกค้าเกิดความพึ่งพอใจ และเป็นไปตามข้อกำหนด ซึ่ง Quality ของ Software จะออกมาดีได้ ก็ต้องผ่านการ Quality Assurance หรือการประกันคุณภาพในแต่ละขั้นตอนในการทำงาน เรียกว่า Layers of Quality Assurance 

QA Layers ถูกแบ่งออกเป็นสองส่วนตามสีดังภาพ คือ สีฟ้าเป็น High-Level Layers: Business ที่จะมีการทดสอบจากมนุษย์ ตั้งแต่ Developer, Quality Assurance, จนถึงการนำเสนอให้ลูกค้าทดสอบ และสีส้มเป็นส่วน Technical ซึ่งส่วนใหญ่แทบจะทั้งหมดของ Technical Layers จะถูกทดสอบด้วยเครื่องมือทดสอบแบบอัตโนมัติที่ทีมพัฒนาขึ้นพร้อมกับระบบเพื่อให้มั่นใจได้ว่าระบบจะมีความถูกต้องอยู่สม่ำเสมอ

Unit Testing คือ หน่วยย่อยที่สุดของการทดสอบ ทีม Developer ใช้ Unit Test ในการตรวจสอบพฤติกรรม และสถานะของ Code ที่เขียน (Function, Method) ซึ่งเครื่องมือทดสอบที่ใช้จะขึ้นอยู่กับเครื่องมือที่ใช้พัฒนา เช่น .NET จะใช้ NUnit, PHP จะใช้ PHPUnit, และสำหรับ Ruby เราจะใช้ RSpec เป็นต้น

Functional Testing เป็นการทดสอบพฤติกรรมในระดับ Application Level ที่เป็น Feature ที่ลูกค้าใช้งานจริงผ่านหน้าจอ User Interface โดยจะใช้เครื่องมือ Automation Test ที่เขียนคำสั่งโดย Quality Assurance เช่น Capybara หรือ Robot Framework สำหรับ Web Application และ Calabash หรือ Katalon สำหรับ Mobile Application

Integration Testing เป็นการทดสอบกรณีที่ระบบมีการเชื่อมต่อกับระบบอื่น ๆ ภายนอก เราทดสอบโดยการเขียนชุดทดสอบ และทดสอบ Request โดย Parameter หลายชุดที่แตกต่างกันออกไป และตั้งผลลัพธ์ที่คาดหวังไว้ เพื่อตรวจสอบผลลัพธ์ให้ถูกต้องอย่างสม่ำเสมอ ซึ่ง Integration Testing ดังที่กล่าวมาจะใช้เครื่องมือทดสอบเดียวกับ Unit Testing

Capacity Testing หรือ Load Testing จะทดสอบในกรณีที่ระบบมีความคาดหวังถึงปริมาณการใช้งานที่สูงกว่าปกติ หรือระบบมีการทำงานเบื้องหลังที่มีความซับซ้อนกว่าปกติ เราสามารถตั้งระดับจำนวนผู้ใช้งาน ณ เวลานั้น สำหรับ Request ที่ต้องการ เพื่อทดสอบด้วยชุดเครื่องมือเช่น Jmeter และตรวจสอบผลลัพธ์จากการตั้งค่าว่า Performance ของ Server ที่ต้องการใช้มีความเหมาะสมหรือไม่

User Acceptance Testing เป็นการทดสอบโดยคาดหวังว่าพฤติกรรม, User Experience ใน Application เป็นไปตามความต้องการของธุรกิจที่มีการวางแผนไว้ก่อนเริ่มการพัฒนา ซึ่งเป็นการตรวจสอบครั้งสุดท้ายก่อนที่ Application จะถูกใช้งานจริงใน Production

6 ข้อ หน้าที่การทำงานของ QA เข้มข้น แบบเน้นๆ !

  1. Requirement Analysis
  • รับฟัง Requirement เข้าใจ Business Value ที่ลูกค้าต้องการ
  • ชี้แจงและคุยกับทีมให้เข้าใจตรงกัน
  • สร้าง Stories จากรายละเอียดต่างๆ ที่รวบรวมและวิเคราะห์ 
  • จัดลำดับความสำคัญของแต่ละ Stories เพื่อให้ได้งานที่ลูกค้าจำเป็นต้องใช้งานก่อน
  • จัดการการทำงานจากหลัก Project Management Triangle โดยยึด Quality เป็นหลักสำคัญ
  • ร่วมมือกับทีมในการเลือก Stories ที่สำคัญ และทำการประเมินเวลาในการจัดทำ

2. Test Scenario 

  • สามารถแตก Acceptance Criteria ของ Story นั้นออกมาเป็น Test Scenario ได้
  • สามารถหา Case ที่ประหลาดที่ซ่อนอยู่และอาจทำให้เกิดปัญหาได้
  • สามารถประเมินการทำ Test Scenario โดยให้มีความสมดุลระหว่างจำนวน Case ในการทดสอบให้น้อยที่สุดและสามารถครอบคลุมได้มากที่สุดเพื่อให้ใช้เวลาได้อย่างสมดุล

3. Development Process

  • ร่วมมือกับทีมในการดูแลให้การ Run Automation Integration Test ถูกต้องอยู่เสมอ และครอบคลุมให้ได้มากที่สุด
  • ร่วมมือกับทีม ในการแก้ปัญหาต่างๆ ที่เกิดขึ้น
  • บันทึก Bug, Issues, ทดสอบและหาปัญหาเพื่อหาสาเหตุถ้าทำได้
  • Update Acceptance Criteria , Test Scenario เมื่อพบ Case ใหม่ๆ เกิดขึ้น
  • ทำให้มั่นใจได้ว่าทุกคนในทีมมีความเข้าใจตรงกัน และสื่อสารกันอย่างสม่ำเสมอ

4. QA Process

  • ทดสอบ Feature ตามที่เขียน Test Scenario ไว้
  • ทำให้มั่นใจได้ว่า Code ใหม่ที่ออกมา ตรงกับ Test Sceanrio และ Acceptance Criteria
  • สร้างชุดทดสอบอัตโนมัติสำหรับ Case ที่จำเป็น
  • Run ชุดทดสอบอัตโนมัติที่สร้างขึ้น และทำให้มั่นใจได้ว่า Run ผ่านถูกต้อง ทั้งชุดที่สร้างขึ้นใหม่ และชุดเดิมที่เคยสร้างทั้งหมด
  • ทดสอบ ทดลอง ตั้งใจหาช่องว่างเพื่อพังระบบ
  • ร่วมมือกับทีมถ้ามีปัญหาใดๆ เกิดขึ้น

5. UAT (User Acceptance Test)

  • นำเสนอ feature ในแต่ละ story ที่พัฒนาเสร็จแล้วให้ Product Owner หรือลูกค้า
  • จดบันทึกถ้ามีการแก้ไข หรือเปลี่ยนแปลง
  • นิยามได้ว่าการแก้ไขหรือเปลี่ยนแปลงนั้นเป็น Bug หรือ Story (New Requirement)
  • บันทึก Story ที่ผ่านการยอมรับเรียบร้อยแล้ว

6. Deployment

  • วางแผนการ Deploy ว่า Stories ใด ต้องมีการ Deploy ณ วันเวลาไหนบ้าง โดยอาจจะร่วมมือกับทีม Business ในบางกรณี
  • จัดทำ Release Note และเอกสารการ Deploy เพื่อบันทึกข้อมูลการ Deploy
  • ทำการทดสอบ Sanity Check ก่อนการ Deploy
  • ร่วมมือกับทีม Developer , Devops เพื่อแก้ปัญหาที่เกิดขึ้นถ้ามี

 ในทุกกระบวนการ จะมีเรื่องของ Quality อยู่ และมีเจ้าหน้าที่ QA ให้การสนับสนุนตลอดกระบวนการ ไม่ใช่แค่ทดสอบตาม Script เพียงอย่างเดียว 

      จะเห็นได้ว่า..  ตลอดกระบวนการทำงานตั้งแต่ลูกค้าไปจนถึง Developer ล้วนมีคุณภาพเกี่ยวข้องทั้งนั้น ถ้าได้รับ Requirement มาไม่ดี ไม่ครบถ้วน ไม่เข้าใจ หรือไม่สามารถสื่อสารกับลูกค้าได้ ย่อมทำให้คุณภาพออกมาไม่ดี เพราะไม่ตรงกับความต้องการของลูกค้า ถ้าได้รับ Requirement มาดี แต่วิเคราะห์และใส่รายละเอียดให้กับทีมพัฒนาไม่ดี ก็ทำให้คุณภาพไม่ดี ถ้าทีมพัฒนา ทำงานไม่ดี ทำแค่ให้เสร็จ แต่ไม่คำนึงถึงการพัฒนาต่อในอนาคต ไม่ออกแบบ ไม่เขียนชุดทดสอบ ก็จะทำให้ในอนาคต คุณภาพของงานก็จะออกมาไม่ดี เพราะระบบมีโอกาสทำงานผิดพลาด และแก้ไขได้ลำบากเพราะฉะนั้น คนที่ต้องประกันคุณภาพ ไม่ใช่เจ้าหน้าที่ QA เท่านั้น แต่ Quality เป็นหน้าที่ของทุกคนในทีมจะต้องช่วยกันดูแล เพราะฉะนั้น ในมุมมองที่กล่าวมา อาจจะกล่าวได้ว่า เจ้าหน้าที่ QA ก็เหมือน Quality Assistance ซึ่งทำหน้าที่ในการสนับสนุนและดูแลกระบวนการด้านคุณภาพให้กับทีม เพื่อให้ผลงานที่ออกมามีคุณภาพมากที่สุด และผลงานที่มีคุณภาพ ก็ต้องมาจากกระบวนการที่มีคุณภาพด้วย