การทดสอบอัตโนมัติช่วยปรับปรุงคุณภาพแอปได้หลายวิธี เช่น ช่วยให้คุณทำการตรวจสอบ จับการถดถอย และยืนยัน ความเข้ากันได้ กลยุทธ์การทดสอบที่ดีจะช่วยให้คุณใช้ประโยชน์จากการทดสอบอัตโนมัติ เพื่อมุ่งเน้นที่ประโยชน์สำคัญอย่างหนึ่ง นั่นคือ ประสิทธิภาพของนักพัฒนาแอป
ทีมจะทำงานได้อย่างมีประสิทธิภาพมากขึ้นเมื่อใช้แนวทางที่เป็นระบบ ในการทดสอบร่วมกับการปรับปรุงโครงสร้างพื้นฐาน การทำเช่นนี้จะช่วยให้ได้รับความคิดเห็นเกี่ยวกับลักษณะการทำงานของโค้ดอย่างทันท่วงที กลยุทธ์การทดสอบที่ดีควรมีลักษณะดังนี้
- ตรวจพบปัญหาโดยเร็วที่สุด
- ดำเนินการได้อย่างรวดเร็ว
- ระบุอย่างชัดเจนเมื่อต้องแก้ไขบางอย่าง
หน้านี้จะช่วยคุณตัดสินใจว่าจะใช้การทดสอบประเภทใด จะทำการทดสอบที่ใด และควรทดสอบบ่อยเพียงใด
พีระมิดการทดสอบ
คุณจัดหมวดหมู่การทดสอบในแอปพลิเคชันที่ทันสมัยตามขนาดได้ การทดสอบขนาดเล็กจะมุ่งเน้นเฉพาะ โค้ดบางส่วน จึงทำให้การทดสอบรวดเร็วและเชื่อถือได้ การทดสอบขนาดใหญ่มี ขอบเขตกว้างและต้องมีการตั้งค่าที่ซับซ้อนมากขึ้นซึ่งดูแลรักษายาก อย่างไรก็ตาม การทดสอบขนาดใหญ่มีความเที่ยงตรงมากกว่า* และสามารถค้นพบปัญหาได้มากกว่า ในคราวเดียว
*ความเที่ยงตรงหมายถึงความคล้ายคลึงกันของสภาพแวดล้อมรันไทม์ของการทดสอบกับสภาพแวดล้อมการใช้งานจริง

แอปส่วนใหญ่ควรมีการทดสอบขนาดเล็กหลายครั้งและการทดสอบขนาดใหญ่ค่อนข้างน้อย การกระจายการทดสอบในแต่ละหมวดหมู่ควรมีลักษณะเป็นพีระมิด โดยการทดสอบขนาดเล็กจำนวนมากจะอยู่ฐาน และการทดสอบขนาดใหญ่จำนวนน้อยจะอยู่ยอด
ลดต้นทุนของข้อบกพร่อง
กลยุทธ์การทดสอบที่ดีจะช่วยเพิ่มประสิทธิภาพการทำงานของนักพัฒนาซอฟต์แวร์ให้ได้สูงสุดพร้อมกับลดต้นทุนในการค้นหาข้อบกพร่อง
ลองดูตัวอย่างกลยุทธ์ที่อาจไม่มีประสิทธิภาพ ในที่นี้ จำนวน การทดสอบตามขนาดไม่ได้จัดระเบียบเป็นพีระมิด มีการทดสอบแบบครบวงจรขนาดใหญ่มากเกินไป และมีการทดสอบ UI ของคอมโพเนนต์น้อยเกินไป

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

- การทดสอบหน่วยจะทำงานในเครื่องโฮสต์และยืนยันหน่วยตรรกะที่ทำงานได้หน่วยเดียวโดยไม่มีการอ้างอิงเฟรมเวิร์ก Android
- ตัวอย่าง: การยืนยันข้อผิดพลาดที่คลาดเคลื่อนไป 1 ในฟังก์ชันทางคณิตศาสตร์
- การทดสอบคอมโพเนนต์จะยืนยันฟังก์ชันการทำงานหรือลักษณะที่ปรากฏของโมดูลหรือ
คอมโพเนนต์โดยไม่ขึ้นอยู่กับคอมโพเนนต์อื่นๆ ในระบบ การทดสอบคอมโพเนนต์แตกต่างจากการทดสอบหน่วยตรงที่ขอบเขตการทดสอบจะครอบคลุมถึงการแยกส่วนที่สูงกว่า
เหนือเมธอดและคลาสแต่ละรายการ
- ตัวอย่าง: ทดสอบภาพหน้าจอสำหรับปุ่มที่กำหนดเอง
- การทดสอบฟีเจอร์จะยืนยันการโต้ตอบของคอมโพเนนต์หรือโมดูลอิสระอย่างน้อย 2 รายการ
การทดสอบฟีเจอร์มีขนาดใหญ่และซับซ้อนกว่า และ
มักจะดำเนินการที่ระดับฟีเจอร์
- ตัวอย่าง: การทดสอบลักษณะการทำงานของ UI ที่ยืนยันการจัดการสถานะในหน้าจอ
- การทดสอบแอปพลิเคชันจะยืนยันฟังก์ชันการทำงานของแอปพลิเคชันทั้งหมด
ในรูปแบบของไบนารีที่สามารถติดตั้งใช้งานได้ เป็นการทดสอบการผสานรวมขนาดใหญ่ที่
ใช้ไบนารีที่แก้ไขข้อบกพร่องได้ เช่น บิลด์สำหรับนักพัฒนาซอฟต์แวร์ที่มีฮุกการทดสอบ
เป็นระบบภายใต้การทดสอบ
- ตัวอย่าง: การทดสอบลักษณะการทำงานของ UI เพื่อยืนยันการเปลี่ยนแปลงการกำหนดค่าใน อุปกรณ์พับได้ การทดสอบการแปล และการทดสอบการช่วยเหลือพิเศษ
- การทดสอบรุ่นที่อาจได้รับการเผยแพร่จะยืนยันฟังก์ชันการทำงานของบิลด์ที่เผยแพร่
การทดสอบเหล่านี้คล้ายกับการทดสอบแอปพลิเคชัน เพียงแต่ไบนารีของแอปพลิเคชันจะได้รับการย่อขนาดและเพิ่มประสิทธิภาพ การทดสอบเหล่านี้เป็นการทดสอบการผสานรวมแบบครบวงจรขนาดใหญ่
ซึ่งทำงานในสภาพแวดล้อมที่ใกล้เคียงกับเวอร์ชันที่ใช้งานจริงมากที่สุดโดยไม่
เปิดเผยแอปต่อบัญชีผู้ใช้สาธารณะหรือแบ็กเอนด์สาธารณะ
- ตัวอย่าง: เส้นทางของผู้ใช้ที่สำคัญ การทดสอบประสิทธิภาพ
การจัดหมวดหมู่นี้พิจารณาจากความเที่ยงตรง เวลา ขอบเขต และระดับ การแยก คุณสามารถทำการทดสอบประเภทต่างๆ ในหลายเลเยอร์ได้ ตัวอย่างเช่น เลเยอร์การทดสอบแอปพลิเคชันอาจมีการทดสอบพฤติกรรม ภาพหน้าจอ และ ประสิทธิภาพ
ขอบเขต |
การเข้าถึงเครือข่าย |
การลงมือปฏิบัติ |
ประเภทบิวด์ |
วงจร |
|
---|---|---|---|---|---|
หน่วย |
เมธอดหรือคลาสเดียวที่มีทรัพยากร Dependency น้อยที่สุด |
ไม่ |
ในพื้นที่ |
แก้ไขข้อบกพร่องได้ |
ก่อนผสาน |
ส่วนประกอบ |
ระดับโมดูลหรือคอมโพเนนต์ หลายชั้นเรียนพร้อมกัน |
ไม่ |
ภายใน |
แก้ไขข้อบกพร่องได้ |
ก่อนผสาน |
ฟีเจอร์ |
ระดับฟีเจอร์ การผสานรวมกับคอมโพเนนต์ที่ทีมอื่นๆ เป็นเจ้าของ |
จำลอง |
Local |
แก้ไขข้อบกพร่องได้ |
ก่อนผสาน |
แอปพลิเคชัน |
ระดับแอปพลิเคชัน การผสานรวมกับฟีเจอร์และ/หรือบริการที่ทีมอื่นๆ เป็นเจ้าของ |
จำลอง |
โปรแกรมจำลอง |
แก้ไขข้อบกพร่องได้ |
ก่อนการผสาน |
รุ่นที่อาจได้รับการเผยแพร่ |
ระดับแอปพลิเคชัน การผสานรวมกับฟีเจอร์และ/หรือบริการที่ทีมอื่นๆ เป็นเจ้าของ |
เซิร์ฟเวอร์เวอร์ชันที่ใช้งานจริง |
โปรแกรมจำลอง |
บิลด์รุ่นที่ย่อขนาดแล้ว |
|
กำหนดหมวดหมู่การทดสอบ
โดยหลักการแล้ว คุณควรพิจารณาเลเยอร์ล่างสุดของพีระมิดที่สามารถ ให้ระดับความคิดเห็นที่เหมาะสมแก่ทีมได้
เช่น ลองพิจารณาวิธีทดสอบการใช้งานฟีเจอร์นี้ ซึ่งก็คือ UI ของ ขั้นตอนการลงชื่อเข้าใช้ คุณจะเลือกหมวดหมู่ที่แตกต่างกันโดยขึ้นอยู่กับสิ่งที่คุณต้องการทดสอบ
กลุ่มตัวอย่างที่ใช้ทดสอบ |
คำอธิบายเกี่ยวกับสิ่งที่กำลังทดสอบ |
หมวดหมู่การทดสอบ |
ตัวอย่างประเภทการทดสอบ |
---|---|---|---|
ตรรกะของเครื่องมือตรวจสอบแบบฟอร์ม |
คลาสที่ตรวจสอบความถูกต้องของอีเมลกับนิพจน์ทั่วไปและตรวจสอบว่ามีการป้อนฟิลด์รหัสผ่าน ไม่มีทรัพยากร Dependency |
การทดสอบหน่วย |
|
ลักษณะการทำงานของ UI แบบฟอร์มลงชื่อเข้าใช้ |
แบบฟอร์มที่มีปุ่มซึ่งจะเปิดใช้ได้เมื่อมีการตรวจสอบแบบฟอร์มแล้วเท่านั้น |
การทดสอบคอมโพเนนต์ |
การทดสอบลักษณะการทำงานของ UI ที่ทำงานใน Robolectric |
ลักษณะ UI ของแบบฟอร์มลงชื่อเข้าใช้ |
แบบฟอร์มที่ทำตามข้อกำหนด UX |
การทดสอบคอมโพเนนต์ |
|
การผสานรวมกับเครื่องมือจัดการการตรวจสอบสิทธิ์ |
UI ที่ส่งข้อมูลเข้าสู่ระบบไปยังเครื่องมือจัดการการตรวจสอบสิทธิ์และรับการตอบกลับซึ่งอาจมีข้อผิดพลาดต่างๆ |
การทดสอบฟีเจอร์ |
|
กล่องโต้ตอบการลงชื่อเข้าใช้ |
หน้าจอที่แสดงแบบฟอร์มลงชื่อเข้าใช้เมื่อกดปุ่มเข้าสู่ระบบ |
การทดสอบแอปพลิเคชัน |
การทดสอบลักษณะการทำงานของ UI ที่ทำงานใน Robolectric |
เส้นทางของผู้ใช้ที่สำคัญ: การลงชื่อเข้าใช้ |
ขั้นตอนการลงชื่อเข้าใช้ที่สมบูรณ์โดยใช้บัญชีทดสอบกับเซิร์ฟเวอร์ Staging |
รุ่นที่อาจได้รับการเผยแพร่ |
การทดสอบลักษณะการทำงานของ Compose UI ตั้งแต่ต้นจนจบที่ทำงานบนอุปกรณ์ |
ในบางกรณี การระบุว่าเนื้อหาใดอยู่ในหมวดหมู่ใดหมวดหมู่หนึ่งอาจเป็นเรื่อง อัตวิสัย นอกจากนี้ ยังมีสาเหตุอื่นๆ ที่ทำให้มีการเลื่อนการทดสอบขึ้นหรือลง เช่น ค่าใช้จ่ายด้านโครงสร้างพื้นฐาน ความไม่เสถียร และระยะเวลาการทดสอบที่นาน
โปรดทราบว่าหมวดหมู่การทดสอบไม่ได้กำหนดประเภทการทดสอบ และไม่จำเป็นต้องทดสอบฟีเจอร์ทั้งหมดในทุกหมวดหมู่
การทดสอบด้วยตนเองยังเป็นส่วนหนึ่งของกลยุทธ์การทดสอบได้ด้วย โดยปกติแล้ว ทีม QA จะ ทำการทดสอบรุ่นที่พร้อมเผยแพร่ แต่ก็อาจมีส่วนร่วมในขั้นตอนอื่นๆ ด้วย เช่น การทดสอบแบบสำรวจเพื่อหาข้อบกพร่องในฟีเจอร์โดยไม่มีสคริปต์
โครงสร้างพื้นฐานการทดสอบ
กลยุทธ์การทดสอบต้องได้รับการสนับสนุนจากโครงสร้างพื้นฐานและเครื่องมือที่จะช่วยให้นักพัฒนาแอปทำการทดสอบอย่างต่อเนื่องและบังคับใช้กฎที่รับประกันว่าการทดสอบทั้งหมดจะผ่าน
คุณสามารถจัดหมวดหมู่การทดสอบตามขอบเขตเพื่อกำหนดเวลาและสถานที่ที่จะทำการทดสอบ ตัวอย่างเช่น ตามโมเดล 5 เลเยอร์
หมวดหมู่ |
สภาพแวดล้อม (ที่ไหน) |
ทริกเกอร์ (เมื่อ) |
---|---|---|
หน่วย |
[Local][4] |
ทุกคอมมิต |
ส่วนประกอบ |
ในพื้นที่ |
ทุกคอมมิต |
ฟีเจอร์ |
อุปกรณ์ในเครื่องและโปรแกรมจำลอง |
ก่อนผสาน ก่อนผสาน หรือก่อนส่งการเปลี่ยนแปลง |
แอปพลิเคชัน |
ในเครื่อง โปรแกรมจำลอง โทรศัพท์ 1 เครื่อง โทรศัพท์แบบพับได้ 1 เครื่อง |
หลังการผสาน หลังผสานหรือส่งการเปลี่ยนแปลง |
รุ่นที่อาจได้รับการเผยแพร่ |
โทรศัพท์ 8 เครื่อง, อุปกรณ์แบบพับได้ 1 เครื่อง, แท็บเล็ต 1 เครื่อง |
ก่อนเปิดตัว |
- การทดสอบหน่วยและคอมโพเนนต์จะทำงานในระบบการผสานรวมอย่างต่อเนื่องสำหรับการคอมมิตใหม่ทุกครั้ง แต่จะทำงานเฉพาะสำหรับโมดูลที่ได้รับผลกระทบเท่านั้น
- การทดสอบหน่วย องค์ประกอบ และฟีเจอร์ทั้งหมดจะทำงานก่อนที่จะผสานหรือ ส่งการเปลี่ยนแปลง
- การทดสอบแอปพลิเคชันจะทำงานหลังการผสาน
- การทดสอบรุ่นที่พร้อมใช้งานจะทำงานทุกคืนบนโทรศัพท์ อุปกรณ์พับได้ และแท็บเล็ต
- ก่อนการเผยแพร่ การทดสอบรุ่นที่พร้อมเผยแพร่จะทำงานในอุปกรณ์จำนวนมาก
กฎเหล่านี้อาจเปลี่ยนแปลงเมื่อเวลาผ่านไปเมื่อจำนวนการทดสอบส่งผลต่อประสิทธิภาพการทำงาน ตัวอย่างเช่น หากเปลี่ยนการทดสอบเป็นแบบรายคืน คุณอาจลดเวลาในการสร้างและทดสอบ CI แต่ก็อาจทำให้วงจรความคิดเห็นยาวนานขึ้นด้วย