“How to Chang from Manual Testing to Automated Testing in Practice Workshop”
- Posted by Pissamai Numchan
- Categories การจัดการความรู้, ชุมชนนักพัฒนา
- Date July 25, 2022
Software Testing Process
Software Testing Process คือขั้นตอนในการดำเนินการทดสอบซอฟต์แวร์ โดยผู้ที่ทำหน้าที่ทดสอบ คือ Tester, Programmer, System Analyst, Business Analyst โดยจะแบ่งเป็น 2 ส่วนคือ Test Development และ Test Execution
1. Test Development ประกอบด้วย 2 เฟสคือ
1.1 Test Design: การวิเคราะห์และออกแบบ ทำโดย SA, BA, Programmer
– Identify Tested Conditions ซึ่งจะต้องใช้คนทำโดยมาหาจาก Requirement เพื่อหาเงื่อนไขที่ถูกทดสอบ
– Specify Test Case จะได้ Test Case ในระดับ Unit Test
– Specify Test Scenarios นำ Test Case มาร้อยเรียงเป็น Test Scenarios (End to End)
1.2 Develop Test Scenarios: การสร้าง Test Scenarios
– Prepare Test Data
– Prepare Test Environment
2. Test Execution ที่เป็น Automate
2.1 Execute Test Scenarios
2.2 Report Bugs and Defects
2.3 Execute Retest
2.4 Execute Regression Testing
ยกเว้น Fix Bugs and Defects ที่ไม่ได้เป็น Automate
ภาพที่ 1 Software Testing Process
วัตถุประสงค์ของการทำ Automation Testing
วัตถุประสงค์ของการทำ Automation Testing คือการ Repeat งานซ้ำๆ เพื่อลดกำลังคน ลดทรัพยากร สร้างความคุ้มค่า เนื่องจากมีการลงทุนสูงมากในการหาเครื่องมือ และการเตรียม Environmental ซึ่งการรัน Automation Testing ที่สามารถใช้งานได้บ่อยจะทำให้รู้ว่าเมื่อมีการปรับเปลี่ยนแล้วระบบยังสามารถทำงานได้ถูกต้อง ช่วยให้ประหยัดเวลาหลังจากขึ้น Production ไปแล้ว และลดจำนวนคนในการทดสอบระบบ ซึ่งต้องมีการกำหนดผลลัพธ์ของการทำ Automation Testing ที่สามารถวัดผลได้
Automated Testing กับกระบวนการพัฒนาระบบ
ในกระบวนการทดสอบจะให้ความสำคัญกับกระบวนการศึกษา Requirements ที่ต้องทำความเข้าใจปัญหาที่ต้องการแก้คืออะไร จากปัญหาต้องใช้ Features อะไรที่มาช่วยปัญหา และมี Solution อะไรที่ไปตอบโจทย์ ซึ่งเป็นจุดตั้งต้นที่จะไปทำ Automation Test
ประเภทของ Requirement
Requirement จะประกอบด้วย Functional และ Non-Functional
ภาพที่ 2 ประเภทของ Requirement
Test Mapping
จากประเภทของ Requirement จะประกบคู่มาเป็น Functional Tests และ Non-Functional Tests 2 ส่วนรวมกันเรียกว่า Acceptance Tests
ภาพที่ 3 ส่วนประกอบของ Software Testing ที่จากการ Requirement
- Functional Requirement
- ระบบมี Feature อะไรบ้าง แต่ละ Feature ทำงานอย่างไร
- Non-Function Requirement
- Security test
- Performance test เช่น Load test, Stress test
Regression Tests Suite
คือกระบวนการทดสอบที่ต้องทดสอบในส่วนของ Functional ทำตั้งแต่ระดับ Function หรือ Class หรือระดับ Unit Test ขึ้นไปถึง End-to-End Business Test และ ทดสอบส่วนของ Non-Functional
1. Functional Test Suite
1.1 Unit Test เป็นพื้นฐานสำคัญที่ทำงานร่วมกับฟังก์ชันที่โปรแกรมเมอร์เขียน ที่ต้องทำ Test Case
1.2 Integration Test หลาย ๆ ตัวที่ต้องทำงานร่วมกัน และต้องทำ Test Case เช่นระหว่าง API กับ Database หรือ ระหว่าง UI กับ API
1.3 System Test เป็นการ Test ทั้งระบบที่ทำอยู่
1.4 System Integration Test เป็นการ Test ร่วมกับระบบอื่น
1.5 End-to-End Business Process Test ผ่าน API เป็นการ Test ระบบทั้งหมดผ่าน API
1.6 End-to-End Business Process Test ผ่าน UI (หรือบางที่เรียกว่า UAT) เป็นการ Test ระบบทั้งหมดผ่าน Interface
*** ซึ่ง Function Test ทั้งหมดต้องทำ Test scenario
2. Non-Function Tests
2.1 Performance Test
– Workload Model Load Test
– Workload Model Stress Test
– Workload Model Endurance Test
2.2 Security Test
ภาพที่ 4 โครงสร้างของ Automate Testing
Arrange คือ การ Setup สิ่งต่าง ๆ เช่น Data base ที่จะทดสอบกี่ครั้งข้อมูลจะต้องเหมือนเดิม
Act คือ สิ่งที่ลูกค้าทำกับระบบส่วนใหญ่จะผ่าน UI
Assert คือการตรวจสอบว่าระบบทำได้ถูกต้องตรงกับค่าที่คาดหวังหรือไม่
ตัวอย่าง การออกแบบ Automation Test Case เรื่องการคำนวนอัตราภาษีมูลค่าเพิ่ม
ภาพที่ 5 ตัวอย่างการออกแบบ Automation Test Case
ตัวอย่างโครงสร้างของ Unit Test Case สำหรับ Test Source Code
ภาพที่ 6 ตัวอย่างโครงสร้างของ Unit Test Case สำหรับ Test Source Code
Test Scenario หรือสถานการณ์ในการทดสอบ
- ต้องหาเงื่อนไขที่ต้องการทดสอบ
- เมื่อมีหลายเงื่อนไขทำให้ต้องร้อยเรียงกัน
- มีผลการทำสอบ หรือ Expected Result ร้อยเรียงมาด้วย ซึ่ง 1 เงื่อนไขอาจจะมีหลาย Expected Result
- การเตรียมการทดสอบ นำไปทำ Test Data แบบหนึ่งต่อหนึ่ง หรือ เตรียมแล้วใช้ Test Data ชุดเดียวกันได้
- สิ่งที่สามารถเขียน Code เพื่อสร้าง Automation Test คือ
- การเตรียมการก่อนทดสอบ
- ข้อมูลที่ใช้ในการทดสอบ
- ผลการทดสอบที่คาดหวัง
- ส่วนเงื่อนไขในการทดสอบโปรแกรมเมอร์จะเขียนอยู่แล้ว
ภาพที่ 7 Test Scenario
- กลุ่ม Function
- จะใช้เวลาทดสอบ ทั้ง Functional Test Suite ภายใน 5-10 นาที
- กลุ่ม Non-Functional
- Security test จะเป็นทั้ง Test Case/ Test Scenario จะรวมเวลาทดสอบกับ Function Test Suite Tool ที่ใช้เช่น OWASP
- Performance test จะกำหนดเวลาให้เหมือนการทำงานจริงมากที่สุดเช่น Performance จะสูงสุดติดต่อกัน 4 ชั่วโมง ก็ต้องใช้เวลาทดสอบ 4 ชั่วโมง
- กลุ่ม Function
Continuous Integration (CI) Pipeline
Continuous Integration Pipeline หรือ CI คือ Flow ของการพัฒนา Coding สำหรับการทำAutomation Test ที่ทำอย่างต่อเนื่องและบ่อย ๆ ซึ่งจะ re-running หรือ Execute ทั้ง Function และ Non-Function Test เพื่อให้มั่นใจว่าการพัฒนาระบบและการทดสอบยังคงถูกต้องเมื่อมีการเปลี่ยนแปลงแก้ไข ตั้งแต่ระดับ Unit Test ไปถึง End-to-End Business Test ผ่าน UI โดยใช้เวลาทั้งหมด ไม่ควรเกิน 10 นาที
ภาพที่ 8 Continuous Integration Pipeline
ตัวอย่างการ นำ Requirement มาทำ Requirement spec
- ขึงภาพระบบตามความต้องการในมุมมองของลูกค้า
- ดู Internal Design ประกอบด้วย API หรือ Function ใดบ้าง เพื่อเตรียมการทดสอบ
- ดูการเชื่อมต่อกับระบบอื่น เช่น ระบบในหน่วยงานภายใน ระบบของหน่วยงานภายนอก พิจารณาการทดสอบที่เราควบคุมได้ ควรทำ System integrate test ก่อน
ภาพที่ 9 แสดงการทำ Requirement spec แบบ End-to-End Business Process
การทำ End to End Business Process
นำมาแยก End-to-End Business Process เพื่อเห็นขอบเขตของงาน โดยแตกเป็น business scenario
ภาพที่ 10 End-to-End Business Process เพื่อเห็นขอบเขตของงาน
ทำข้อมูลเพื่อทำการทดสอบ และผลลัพธ์ที่คาดหวังในแต่ละ process ดังตัวอย่าง Feature Search มี Use Case ค้นหา “ชื่อของเล่น” เลือก วิธีส่ง “Kerry”…. ต้องมีการเตรียมข้อมูล ดังภาพ
ภาพที่ 11 การทำข้อมูลเพื่อทำการทดสอบ และผลลัพธ์ที่คาดหวังในแต่ละ process
กรณีทำสำเร็จ
ควรทำให้ครบ ตาม End-to-End Business Process
ภาพที่ 12 ภาพรวมการทำข้อมูลเพื่อทำการทดสอบ และผลลัพธ์ที่คาดหวังในแต่ละ process ทั้ง End-to-End Business Process กรณีทำสำเร็จ
กรณีทำไม่สำเร็จ
กรณีไม่สำเร็จจะไม่ทำ End-to-End Business Process จะดูว่าเกิดจากอะไรได้บ้างที่ทำไม่สำเร็จ เช่นการจ่ายเงินไม่สำเร็จ เพราะวงเงินไม่พอจะอยู่ในบริเวณ PAYMENT จะต้องเตรียมการอย่างไรให้บัตรเครดิตมีเงินไม่พอ
ภาพที่ 13 สาเหตุของการทดสอบแล้วไม่สำเร็จ
ออกแบบ End to End Business Process ผ่าน UI
การออกแบบต้องตกลงกันในทีมว่า อะไรบ้างจะเป็น Automate อะไรจะเป็น Manual ควรทำ Automate น้อยที่สุด และควรทำเคสที่เป็น Positive
ภาพที่ 14 แสดงการออกแบบ End to End Business Process ผ่าน UI
ออกแบบ End to End Business Process ผ่าน API
จะเป็นการออกแบบ Integration Test เช่น Integration Test ระหว่าง Web สำหรับ Search Toy กับ APIs โดยต้อง Return ค่ากรณี Success, Client Errors, Server Errors โดยผู้ดำเนินการทดสอบคือ Developer, Programmer และ CI Tools ซึ่ง Tools จะวิ่งทดสอบแบบ Headless คือไม่มีการเปิดหน้าเว็บ ซึ่ง Developer, Programmer จะเป็นผู้ทดสอบก่อน และ CI Tools ใช้ทดสอบเป็นระยะ ๆ
ภาพที่ 15 แสดงการออกแบบ End to End Business Process ผ่าน API
ออกแบบการเชื่อมต่อไปที่ Data Store (Integration Test)
เป็นการทดสอบ API กับข้อมูลที่เก็บในรูปแบบต่าง ๆ ซึ่ง Developer จะต้องเป็นผู้ทดสอบ
ออกแบบการเชื่อมต่อไปที่ Data Store (Integration Test)
เป็นการทดสอบ API กับข้อมูลที่เก็บในรูปแบบต่าง ๆ ซึ่ง Developer จะต้องเป็นผู้ทดสอบ
ออกแบบ System Test
เป็นการเชื่อมต่อระบบไปยังระบบอื่นที่จำลองขึ้นมา (Mock หรือ Stub)
ภาพที่ 16 แสดงการออกแบบ System Test
ออกแบบ System Integration Test
เป็นการเชื่อมต่อระบบไปยังระบบอื่นที่เป็นระบบจริง Server จริง ทั้งภายในและภายนอกองค์กร
ภาพที่ 17 แสดงการออกแบบ System Integration Test กับระบบอื่น
ภาพรวมการทดสอบ
ควรทำให้เห็นภาพเดียวกัน ทำข้อตกลงการดำเนินงานก่อนลงมือทำงานร่วมกัน
ภาพที่ 18 การออกแบบภาพรวมของการทดสอบ
ตัวอย่างการทำ Arrange ในส่วนของ Unit Test
ขั้นตอนการทำงานของ API คำนวนคะแนน ในตัวอย่างนี้จะสนใจเฉพาะ การคำนวนคะแนน จะไม่สนใจสินค้า หรือการตัด Stock ดังนั้นจึงมีการเตรียม Data ดังภาพ
ภาพที่ 19 ตัวอย่างการทำ Arrange ส่วนของการเตรียมข้อมูลสำหรับ Unit Test
Data จะไหลมาจาก End to End มาทำ API Test และ Unit Test และใส่ Data เพิ่มเติ่มรายละเอียดในการทดสอบเพื่อความถูกต้องมากขึ้น ใน Unit Test ดังนั้นตอนทดสอบ End to End ก็จะไม่ต้องทดสอบการคำนวนคะแนนในหลาย ๆ แบบ เพราะทำตอน Unit Test ไปแล้ว
ถ้ามี Function อื่น ๆ ที่ต้องการทดสอบก็จะมีกรอบ Unit Test อีกเรื่อย ๆ โดยใช้ข้อมูล จาก End to End และใส่ข้อมูลอื่นที่สนใจ ตอนทำ Unit Test
ตัวอย่าง Code ในการทำ UI Automation Test ด้วย Tool ชื่อ Robot frame work ซึ่งเป็น Open Source โดยเทียบคำสั่งที่ลูกค้าเข้าใจกับรายละเอียด
ภาพที่ 20 ตัวอย่าง Code ในการทำ UI Automation Test ด้วย Robot frame work
ตัวอย่าง Web Site สำหรับทดสอบ API
ภาพที่ 21 ตัวอย่าง Web Site สำหรับทดสอบ API
Non-Functional Test
1. Performance Test
1.1 Load Test
ต้องมีการเป้าหมายของการทดสอบ เช่น Order จาก Business Goal ต้องการให้ มี 400,000 Order ในวันเสาร์ อาทิตย์ ภายใน 6 เดือน เพื่อหาจำนวนการสั่งซื้อมากที่สุด ทำการกระจาย พฤติกรรมการใช้งานเป็นช่วง เวลา เพื่อดูการพฤติกรรมการเข้าใช้งาน ดังตัวอย่าง ในช่วง 10-12.00 น.จะมากสุด 100,000 order/2 hours = 14 order/second หรือค่าเฉลี่ย ที่ระบบจะต้องรองรับ และวัดเรื่อง Response Time เช่น < 1 s หรือแปลงเป็นค่า Percentile 95%, 98%, 99% ซึ่งต้องไปกำหนดเรื่องทรัพยากรที่ต้องใช้ ทั้ง CPU, Memory เพื่อนำไปแปลงเป็น Automation Test
1.2 Scalability Test
จากค่าเฉลี่ย 4 order/second บางองค์กรจะเตรียมทรัพยากรให้รองรับค่าเฉลี่ยก่อน เพื่อให้ปกติทำงานได้ แล้วค่อย ๆ ขยายให้เป็น 14 order/second แล้วดูว่าระบบรองรับได้หรือไม่
1.3 Endurance Tests
ถ้าระบบมีปัญหาด้านการรันนาน ๆ เมื่อ Restart แล้วเร็วและเมื่อใช้งานก็ช้าอีก วิธีการทดสอบความคงทนของระบบให้รันเป็นเวลานานขึ้นกว่าเดิม ดูว่า CPU, Memory ใช้มากขึ้นหรือไม่แล้วนำมาหาวิธีการแก้ไขปัญหา
1.4 Stress Tests
เอาตัวเลข Order ในอนาคตมาวางแผนว่าระบบรองรับไปถึงเมื่อไหร่ ไกลแค่ไหน
1.5 Spike Tests
เมื่อเกิดเหตุการณ์ Work Load เพิ่มขึ้นมากกว่าปกติช่วงเวลาหนึ่ง และระบบอาจจะไม่ทำงานต่อได้เป็นปกติ หรือทดสอบเพื่อป้องกัน DDoS Attack
การทดสอบ Performance Test จะทำแบบ End-to-End และ Performance Test ทั้ง Loop เริ่มจาก Load Test และตัวอื่น ๆ
2. Security Test
2.1 Static Scan
จะไม่มี Environment จริง ดูจาก Source Code และ library และทำการสแกนช่องโหว่ต่าง ๆ ด้วยเครื่องมือของแต่ละภาษา ทำก่อน Dynamic Scan โดยเรียกดูความเสี่ยงจาก Risk Database เช่น Java ใช้ SonarQube, Node ใช้ Lintและ Npm Audit ร่วมกัน, Docker จะใช้ Docker Scan เพื่อสแกน image ว่าไปใช้ Library ที่มีความเสี่ยงหรือไม่
2.2 Dynamic Scan
จะต้องมี Environment จริง มีการ Start Application จริง และมี Tools เข้า Test App ซึ่งเครื่องมือจะนำข้อมูลจากรายงานที่สรุปเรื่องความปลอดภัยที่รวบรวมไว้ เช่น OWASP จะสรุป 10 ช่องโหว่ ที่เว็บโดนเจาะ และออก Spec ว่าถ้าจะป้องกันไม่ให้เว็บโดนเจาะจะต้องทำอะไรบ้าง OWASP จะพัฒนาซอฟต์แวร์ที่ช่วย Scan ช่องโหว่ที่ความความเสี่ยง ชื่อ ZAProxy ซึ่งสามารถดาวน์โหลดลงมาและ Scan เว็บได้เลย
*** Risk Database จะเก็บว่ามีความเสี่ยงที่ Library ไหนบ้าง และมี Pattern ไหนบ้างที่ต้องตรวจสอบ
*** ต้นทุนการทดสอบ
- Unit Test ต้นทุนจะต่ำมาก และมีเครื่องมือให้ใช้อยู่แล้ว เช่น Unit Test for Java
- End-to-End Test ไม่สามารถใช้ภาษาที่พัฒนาอยู่เขียนได้ ต้องหาเครื่องมือใหม่ ๆ มาช่วย เช่น Robot Framework ซึ่งจะต้องมีต้นทุนในการจัดหา และต้นทุนในการศึกษา จึงไม่ควรทำมาก ให้เลือก Use Case ที่สำคัญที่จำเป็นต้องทำ
รวบรวมและถอดบทเรียนจากการอบรมหลักสูตร
How to Change from Manual Testing to Automated Testing in Practice Workshop
วันที่ 28- 30 มีนาคม 2565
You may also like
กระบวนการจัดเตรียม SSL Certificate สำหรับเครื่องแม่ข่ายมหาวิทยาลัยบูรพา
กระบวนการจัดเตรียม SSL Certificate สำหรับเครื่องแม่ข่ายมหาวิทยาลัยบูรพา (อิงระเบียบราชการ) แบ่งออกเป็น 2 ส่วนใหญ่ ๆ คือ 1) การจัดหา/จัดซื้อ SSL Certificate 2) การเตรียม Certificate สำหรับนำไปติดตั้งใช้งาน ส่วนที่ 1 การจัดหา/จัดซื้อ SSL Certificate (1) สำรวจราคาในตลาด จากนั้นนำเสนองบประมาณ เพื่อเตรียมโครงการจัดซื้อตามระเบียบการจัดซื้อจัดจ้างและการบริหารพัสดุภาครัฐ (ประสานเจ้าหน้าที่พัสดุ) (2) เมื่อผ่านขั้นตอนการจัดซื้อตามระเบียบฯ และได้ผู้ขายแล้ว ให้ประสานงานกับทางผู้ขายโดยใช้ช่องทางอีเมลเป็นช่องทางติดต่อประสานงาน และให้ใช้อีเมลทางการด้วย เช่น someone@buu.ac.th (3) เมื่อตกลงช่องทางประสานงานกับผู้ขายได้แล้ว ให้สอบถามผู้ขายเกี่ยวกับวิธีการยืนยันความเป็นเจ้าของ domain name …
เชื่อมต่อฐานข้อมูล Oracle, Microsoft SQL Server และ MySQL ด้วย DataGrip (Education)
ความสำคัญและความเป็นมา DataGrip เป็นซอฟท์แวร์สำหรับการจัดการฐานข้อมูล เช่นเดียวกันกับ Navicat ที่ฝ่ายพัฒนาระบบใช้กันอยู่ อีกทั้งเรามหาวิทยาลัยบูรพามีลิขสิทธิ์ บัญชีที่บุคลากร และนิสิตจะสมัคร เป็นแบบใช้เพื่อการศึกษา (for Educational purposes) ที่ทำให้เราสามารถใช้ DataGrip ที่มี feature ได้เหมือนกับที่เรามี ลิขสิทธิ์แบบ commercial จากความเป็นมาในข้างต้น Explicit Knowledge นี้ จึงขอเสนอวิธีการเชื่อมต่อฐานข้อมูล Oracle, Microsoft SQL Server และ MySQL ด้วย DataGrip (Education) สิ่งที่จำเป็นต้องมีเพื่อใช้งานโปรแกรม DataGrip for Education …
การใช้ AI สร้างภาพ (AI image generator)
การใช้ AI สร้างภาพ (AI image generator) เป็นปัญญาประดิษฐ์ประเภทหนึ่ง ที่ใช้ในการสร้างภาพขึ้นมานั้น เป็นเครื่องมือสร้างงานศิลปะด้วย AI อาศัยโครงข่ายประสาทเทียม (Artificial Neural Networks) ซึ่งเป็นการสร้างระบบคอมพิวเตอร์จากโมเดลทางคณิตศาสตร์ที่ซับซ้อน เพื่อจำลองวิธีการทำงานของสมองมนุษย์ หรือเป็นการทำให้คอมพิวเตอร์รู้จักการคิดและการจดจำ หรือจะใช้โครงข่ายประสาทเทียมในการทำให้คอมพิวเตอร์รู้จักและเข้าใจภาษามนุษย์นั่นเอง โดยมีกระบวนการทำงานหลัก คือการแปลงข้อความเป็นภาพ (Text-to-Image) ที่สามารถเปลี่ยนข้อความที่เราพิมพ์ให้เป็นภาพ เพียงพิมพ์คำหรือคีย์เวิร์ด ที่เราต้องการเข้าไป จากนั้น AI จะทำการสร้างภาพให้เอง โดยเว็บไซต์ที่ให้บริการ ได้แก่ Adobe Firefly, Midjourney, …