ความครอบคลุมของการทดสอบในการทดสอบซอฟต์แวร์: วิธีการวัดความครอบคลุม
⚡ สรุปอย่างชาญฉลาด
ความครอบคลุมของการทดสอบในการทดสอบซอฟต์แวร์ คือการวัดว่าชุดการทดสอบนั้นครอบคลุมส่วนใดของแอปพลิเคชันจริง ๆ บ้าง มันช่วยเปิดเผยข้อกำหนดที่ยังไม่ได้ทดสอบ เส้นทางการทำงานของโค้ด และความเสี่ยงต่าง ๆ เพื่อให้ทีมสามารถเพิ่มกรณีทดสอบที่ตรงเป้าหมายและปล่อยเวอร์ชันใหม่ได้อย่างมั่นใจและวัดผลได้
ความครอบคลุมการทดสอบคืออะไร?
ความครอบคลุมการทดสอบหมายถึงหน่วยวัดในการทดสอบซอฟต์แวร์ที่วัดจำนวนการทดสอบที่ดำเนินการโดยชุดการทดสอบ โดยจะรวมถึงการรวบรวมข้อมูลว่าส่วนใดของโปรแกรมที่ถูกดำเนินการเมื่อรันชุดทดสอบ เพื่อพิจารณาว่าส่วนใดของคำสั่งแบบมีเงื่อนไขได้ถูกนำไปใช้
พูดง่ายๆ ก็คือเทคนิคเพื่อให้แน่ใจว่าการทดสอบของคุณกำลังทดสอบโค้ดของคุณ หรือคุณใช้โค้ดจำนวนเท่าใดจากการรันการทดสอบ
การครอบคลุมการทดสอบมีประโยชน์อย่างไร?
ในการใช้งานจริงของโครงการ การครอบคลุมการทดสอบช่วยสนับสนุนกิจกรรมเชิงปฏิบัติสี่ประการดังนี้:
- การค้นหาพื้นที่ของข้อกำหนดที่ไม่ได้นำมาใช้โดยชุดกรณีทดสอบ
- ช่วยสร้างกรณีทดสอบเพิ่มเติมเพื่อเพิ่มความครอบคลุม
- การระบุการวัดเชิงปริมาณของความครอบคลุมของการทดสอบ ซึ่งเป็นวิธีการทางอ้อมสำหรับการตรวจสอบคุณภาพ
- การระบุกรณีทดสอบที่ไม่มีความหมายซึ่งไม่ได้เพิ่มความครอบคลุม
ประโยชน์ของความครอบคลุมการทดสอบในวิศวกรรมซอฟต์แวร์
กิจกรรมเหล่านั้นก่อให้เกิดประโยชน์ทางวิศวกรรมที่เป็นรูปธรรม
- สามารถรับประกันคุณภาพของการทดสอบได้
- สามารถช่วยระบุได้ว่าส่วนใดของโค้ดที่ได้รับการสัมผัสจริงสำหรับการเผยแพร่หรือการแก้ไข
- เครื่องมือนี้สามารถระบุจุดตัดสินใจและเส้นทางทั้งหมดในแอปพลิเคชันของคุณที่ยังไม่ได้ทดสอบ ซึ่งช่วยให้คุณเพิ่มความครอบคลุมของการทดสอบได้
- ป้องกัน ข้อบกพร่อง การรั่วไหล
- สามารถควบคุมเวลา ขอบเขต และต้นทุนได้
- การป้องกันข้อบกพร่องในระยะแรกของวงจรชีวิตโครงการ
- ช่องว่างในข้อกำหนด กรณีทดสอบ และข้อบกพร่องในระดับหน่วยและระดับรหัสสามารถพบได้ด้วยวิธีง่ายๆ
ประเภทของความครอบคลุมการทดสอบ
การครอบคลุมพื้นที่ไม่ใช่แค่ตัวเลขเดียวเสมอไป ทีมต่างๆ tracคุณอาจพบคำถามหลายประเภทพร้อมกัน เนื่องจากแต่ละประเภทตอบคำถามที่แตกต่างกันเกี่ยวกับชุดคำถามเดียวกัน ตารางด้านล่างจัดกลุ่มประเภทที่คุณพบบ่อยที่สุด
| ประเภทความคุ้มครอง | สิ่งที่วัดได้ | ใช้ดีที่สุดสำหรับ |
|---|---|---|
| ความคุ้มครอง (บรรทัด) ของคำแถลง | บรรทัดคำสั่งที่เรียกใช้งานได้จะทำงานอย่างน้อยหนึ่งครั้ง | การทดสอบหน่วยและการตรวจสอบโค้ดเก่า |
| ขอบเขตสาขาหรือการตัดสินใจ | ผลลัพธ์ที่ถูกต้องและไม่ถูกต้องของทุกการตัดสินใจ | ตรรกะแบบมีเงื่อนไขและการตรวจสอบความถูกต้อง |
| ความคุ้มครองตามเงื่อนไข | แต่ละนิพจน์ย่อยแบบบูลีนเป็นค่าจริงและค่าเท็จ | นิพจน์ AND หรือ OR แบบผสม |
| การครอบคลุมเส้นทาง | เส้นทางเฉพาะที่ใช้ผ่านโมดูล | กระแสเงินและธุรกรรมที่สำคัญต่อความปลอดภัย |
| การครอบคลุมฟังก์ชัน | ฟังก์ชันหรือเมธอดที่ถูกเรียกใช้โดยการทดสอบ | เลเยอร์ API และบริการ |
| ความต้องการความคุ้มครอง | ข้อกำหนดที่เชื่อมโยงกับการทดสอบอย่างน้อยหนึ่งรายการ | การยอมรับและข้อตกลงtracการลงนามอนุมัติ |
| ความคุ้มครองความเสี่ยง | พื้นที่ที่มีความเสี่ยงสูงที่ระบุไว้ได้รับการตรวจสอบแล้ว | รอบการปลดปล่อยสั้น |
มาตรวัดห้าประเภทแรกเป็นมาตรวัดระดับรหัสและจัดอยู่ในกลุ่มต่อไปนี้ การทดสอบแบบกล่องขาวในขณะที่ข้อกำหนดและการครอบคลุมความเสี่ยงจะอยู่ในระดับแผนการทดสอบ
อะไรคือความแตกต่างหลักระหว่าง Code ความครอบคลุมและความครอบคลุมของการทดสอบ?
Code ความคุ้มครอง และความครอบคลุมของการทดสอบเป็นเทคนิคการวัดที่ช่วยให้คุณสามารถประเมินคุณภาพของโค้ดแอปพลิเคชันของคุณได้
ต่อไปนี้เป็นข้อแตกต่างที่สำคัญบางประการระหว่างบูธของวิธีการครอบคลุมเหล่านี้:
| พารามิเตอร์ | Code คุ้มครอง | ครอบคลุมการทดสอบ |
|---|---|---|
| คำนิยาม | Code คำว่า "coverage" ใช้เมื่อมีการเรียกใช้โค้ดแอปพลิเคชันขณะที่แอปพลิเคชันกำลังทำงานอยู่ | ความครอบคลุมการทดสอบหมายถึงแผนการทดสอบโดยรวม |
| เป้าหมาย | Code ตัวชี้วัดความครอบคลุมสามารถช่วยให้ทีมตรวจสอบการทดสอบอัตโนมัติของตนได้ | การครอบคลุมการทดสอบจะให้รายละเอียดเกี่ยวกับระดับการทดสอบโค้ดลายลักษณ์อักษรของแอปพลิเคชัน |
| ชนิดย่อย | Code ความคุ้มครองแบ่งออกเป็นประเภทย่อย เช่น ความคุ้มครองตามคำแถลง ความคุ้มครองตามเงื่อนไข ความคุ้มครองตามสาขา เป็นต้น Togglความคุ้มครองทางอิเล็กทรอนิกส์, ความคุ้มครอง FSM | ไม่มีประเภทย่อยของวิธีครอบคลุมการทดสอบ |
สูตรความครอบคลุมการทดสอบ
หากต้องการคำนวณความครอบคลุมของการทดสอบ คุณต้องทำตามขั้นตอนด้านล่าง:
ขั้นตอน 1) นับ Yจำนวนบรรทัดโค้ดทั้งหมดในซอฟต์แวร์ที่คุณกำลังพัฒนา การทดสอบ
ขั้นตอน 2) นับ Xจำนวนบรรทัดโค้ดที่เคสทดสอบทั้งหมดดำเนินการในปัจจุบัน
ตอนนี้ คุณต้องหา (X หารด้วย Y) คูณด้วย 100 ผลลัพธ์ของการคำนวณนี้คือ % ความครอบคลุมของการทดสอบของคุณ
ตัวอย่างเช่น:
หากจำนวนบรรทัดโค้ดในส่วนประกอบของระบบมี 500 บรรทัด และจำนวนบรรทัดที่ถูกเรียกใช้งานในกรณีทดสอบทั้งหมดที่มีอยู่คือ 50 บรรทัด แสดงว่าความครอบคลุมของการทดสอบของคุณคือ:
(50 / 500) * 100 = 10% // executed lines divided by total lines
ตัวอย่างความครอบคลุมการทดสอบ
เปอร์เซ็นต์เพียงอย่างเดียวไม่ใช่ข้อมูลทั้งหมดเสมอไป ดังตัวอย่างด้านล่างจะแสดงให้เห็น
1 ตัวอย่าง:
ตัวอย่างเช่น หาก "มีด" เป็นสิ่งของที่คุณต้องการทดสอบ คุณต้องเน้นไปที่การตรวจสอบว่ามันสามารถหั่นผักหรือผลไม้ได้อย่างแม่นยำหรือไม่ อย่างไรก็ตาม ยังมีแง่มุมอื่นๆ ที่ต้องพิจารณา เช่น ผู้ใช้ควรสามารถใช้งานได้อย่างสะดวกสบาย
2 ตัวอย่าง:
ตัวอย่างเช่น หากคุณต้องการตรวจสอบแอปพลิเคชัน Notepad การตรวจสอบคุณสมบัติพื้นฐานจึงเป็นสิ่งสำคัญ แต่คุณต้องตรวจสอบด้านอื่นๆ ด้วย เช่น แอปพลิเคชัน Notepad ตอบสนองได้ตามที่คาดหวังเมื่อใช้งานร่วมกับแอปพลิเคชันอื่นๆ ผู้ใช้เข้าใจวิธีการใช้งานแอปพลิเคชัน และแอปพลิเคชันไม่หยุดทำงานเมื่อผู้ใช้พยายามทำสิ่งผิดปกติ เป็นต้น
เทคนิคการครอบคลุมการทดสอบ
ตัวอย่างทั้งสองชี้ให้เห็นข้อสรุปเดียวกัน: การบรรลุเป้าหมายด้านความครอบคลุมนั้นขึ้นอยู่กับการเลือกเทคนิคการออกแบบการทดสอบที่เหมาะสมมากกว่าการเขียนการทดสอบเพิ่มเติม เทคนิคด้านล่างนี้ช่วยขยายความครอบคลุมในขณะที่ยังคงรักษา...ping ห้องสวีทมีขนาดเล็ก
- การวิเคราะห์ค่าขอบเขต: เลือกข้อมูลป้อนเข้าที่อยู่บริเวณขอบของแต่ละช่วงที่ถูกต้อง ซึ่งเป็นบริเวณที่มีข้อบกพร่องกระจุกตัวมากที่สุด ดูเพิ่มเติมได้ที่นี่ การวิเคราะห์ค่าขอบเขต สำหรับกรณีที่ดำเนินการแล้ว
- การแบ่งส่วนความเท่าเทียมกัน: จัดกลุ่มข้อมูลป้อนเข้าที่แอปพลิเคชันประมวลผลเหมือนกัน ดังนั้นกรณีเดียวจึงสามารถใช้แทนค่าทั้งกลุ่มได้อย่างปลอดภัย
- การทดสอบตารางการตัดสินใจ: ครอบคลุมการผสมผสานของเงื่อนไขต่างๆ และผลลัพธ์ที่คาดหวังภายในตารางเดียว
- การทดสอบการเปลี่ยนสถานะ: ทดสอบการเคลื่อนไหวที่ถูกต้องและไม่ถูกต้องทั้งหมดระหว่างสถานะของแอปพลิเคชัน
- การทดสอบเส้นทางพื้นฐาน: ดึงชุดเส้นทางอิสระขั้นต่ำจากกราฟการไหลของควบคุม
- การทดสอบตามความเสี่ยง: จัดอันดับคุณสมบัติตามผลกระทบต่อธุรกิจ และนำเสนอคุณสมบัติที่มีความเสี่ยงสูงที่สุดก่อน
- การทดสอบเชิงสำรวจ: เปิดเผยช่องโหว่ที่คดีความที่เขียนบทไว้ล่วงหน้าและรายงานข่าวไม่เคยพูดถึง
จะทำการทดสอบให้ครอบคลุมได้อย่างไร?
เมื่อเลือกเทคนิคแล้ว เส้นทางหลักสี่เส้นทางที่กำหนดไว้จะให้บริการครอบคลุมพื้นที่
- ความครอบคลุมของการทดสอบสามารถทำได้โดยใช้เทคนิคการทบทวนแบบคงที่ เช่น การทบทวนโดยผู้ทรงคุณวุฒิ การตรวจสอบ และคำแนะนำแบบทีละขั้นตอน
- โดยการเปลี่ยนข้อบกพร่องเฉพาะกิจให้เป็นกรณีทดสอบที่ปฏิบัติการได้
- ที่ระดับโค้ดหรือระดับการทดสอบหน่วย ความครอบคลุมของการทดสอบสามารถทำได้โดยการใช้การครอบคลุมโค้ดอัตโนมัติหรือเครื่องมือความครอบคลุมการทดสอบหน่วย
- ความครอบคลุมการทดสอบเชิงฟังก์ชันสามารถทำได้โดยใช้เครื่องมือการจัดการการทดสอบที่เหมาะสม
วิธีปรับปรุงความครอบคลุมของการทดสอบ
การสร้างความครอบคลุมเป็นจุดเริ่มต้น การเพิ่มความครอบคลุมเป็นขั้นตอนที่ทำซ้ำได้ ดำเนินการตามลำดับนี้ในตอนเริ่มต้นของรอบการปล่อยเวอร์ชันทุกครั้ง
- กำหนดตัวเลขปัจจุบันเป็นค่าพื้นฐาน เรียกใช้รายงานความครอบคลุมและบันทึกความครอบคลุมของคำสั่ง สาขา และข้อกำหนดแยกกัน เพื่อให้เห็นช่องว่างในแต่ละโมดูลได้อย่างชัดเจน แทนที่จะซ่อนอยู่ภายในค่าเฉลี่ยโดยรวมของโครงการ
- จัดทำแผนที่การทดสอบให้สอดคล้องกับข้อกำหนด สร้างไฟล์ tracตารางความน่าจะเป็นที่เชื่อมโยงข้อกำหนดทุกข้อเข้ากับกรณีทดสอบอย่างน้อยหนึ่งกรณี แถวว่างใดๆ หมายถึงช่องโหว่ที่ได้รับการยืนยันแล้ว ไม่ใช่ข้อสงสัย
- จัดลำดับโมดูลตามระดับความเสี่ยง ตรรกะเกี่ยวกับการชำระเงิน การตรวจสอบสิทธิ์ และการย้ายข้อมูล สมควรได้รับการอธิบายอย่างละเอียดมากกว่าแค่หน้าจอช่วยเหลือแบบคงที่ ดังนั้นควรทุ่มงบประมาณในส่วนที่หากเกิดข้อผิดพลาดจะส่งผลกระทบมากที่สุด
- เพิ่มกรณีเชิงลบและกรณีพิเศษเข้าไปด้วย ข้อมูลป้อนเข้าที่ว่างเปล่า ค่าที่มีขนาดใหญ่เกินไป การหมดเวลาของเครือข่าย และข้อผิดพลาดด้านสิทธิ์ จะส่งผลกระทบต่อส่วนต่างๆ ที่การทดสอบแบบปกติไม่เคยพบเห็น
- เพิ่มระดับการทดสอบทีละชั้น รวมกัน การทดสอบหน่วย, การทดสอบการรวมและมีการตรวจสอบแบบครบวงจร เนื่องจากแต่ละระดับจะครอบคลุมสิ่งที่ระดับอื่นไม่สามารถทำได้ในเชิงโครงสร้าง
- ทำการทดสอบการถดถอยแบบอัตโนมัติ Promoกรณีที่เสถียรเข้าสู่ การทดสอบอัตโนมัติ และดำเนินการภายในนั้น ไปป์ไลน์ CI/CD หลังจากทำการคอมมิตทุกครั้ง
- ยกเลิกคดีที่ซ้ำซ้อน ลบการทดสอบที่ซ้ำซ้อนซึ่งเพิ่มเวลาในการประมวลผลโดยไม่เพิ่มบรรทัดที่ไม่ครอบคลุมแม้แต่บรรทัดเดียว
- Revสังเกตแนวโน้มในทุกรอบการวิ่ง Tracความครอบคลุม k ถัดจาก ความหนาแน่นของข้อบกพร่องการรั่วซึมที่เพิ่มขึ้นเมื่อเทียบกับพื้นที่ราบเรียบ เป็นสัญญาณเตือนล่วงหน้าของจุดบอด
⚠️คำเตือน: อย่ามองว่า 100 เปอร์เซ็นต์เป็นเป้าหมาย ชุดตรวจสอบที่ได้ผลลัพธ์ 85 เปอร์เซ็นต์พร้อมการยืนยันที่เข้มงวด จะช่วยปกป้องการปล่อยเวอร์ชันใหม่ได้ดีกว่าการตรวจสอบแบบผิวเผิน 95 เปอร์เซ็นต์ที่รันโค้ดโดยไม่ตรวจสอบผลลัพธ์ใดๆ เลย
ข้อเสียของการครอบคลุมการทดสอบ
ความคุ้มครองยังคงมีคุณค่า แต่ก็มีข้อจำกัดที่ควรระบุไว้ก่อนที่จะรายงานเป็นเปอร์เซ็นต์ใดๆ
- งานส่วนใหญ่ในพื้นที่การทดสอบเป็นงานที่ต้องดำเนินการด้วยตนเอง เนื่องจากไม่มีเครื่องมือใดที่จะทำให้เป็นอัตโนมัติ ดังนั้นจึงต้องใช้ความพยายามอย่างมากในการวิเคราะห์ข้อกำหนดและสร้างกรณีทดสอบ
- ความครอบคลุมการทดสอบทำให้คุณสามารถนับคุณสมบัติต่างๆ แล้ววัดผลกับการทดสอบหลายๆ รายการ อย่างไรก็ตาม ยังมีพื้นที่สำหรับข้อผิดพลาดในการตัดสินอยู่เสมอ

