บทช่วยสอนการครอบคลุมโค้ด: สาขา คำชี้แจง และการทดสอบการตัดสินใจ

ความคุ้มครองรหัสคืออะไร?

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

ในกรณีส่วนใหญ่ ระบบครอบคลุมโค้ดจะรวบรวมข้อมูลเกี่ยวกับโปรแกรมที่กำลังทำงานอยู่ นอกจากนี้ยังรวมข้อมูลดังกล่าวเข้ากับข้อมูลซอร์สโค้ดเพื่อสร้างรายงานเกี่ยวกับการครอบคลุมโค้ดของชุดทดสอบ

เหตุใดจึงต้องใช้การทดสอบการครอบคลุมโค้ด

ต่อไปนี้เป็นเหตุผลสำคัญบางประการในการใช้การครอบคลุมโค้ด:

  • ช่วยให้คุณวัดประสิทธิภาพของการดำเนินการทดสอบ
  • มันมีการวัดเชิงปริมาณ
  • มันกำหนดระดับที่ซอร์สโค้ดได้รับการทดสอบ

วิธีการครอบคลุมโค้ด

ต่อไปนี้เป็นวิธีการครอบคลุมรหัสหลัก

  • ความคุ้มครองคำชี้แจง
  • ความคุ้มครองการตัดสินใจ
  • ความคุ้มครองสาขา
  • Togglอีความคุ้มครอง
  • ความคุ้มครอง FSM

ความคุ้มครองคำชี้แจง

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

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

ความคุ้มครองคำชี้แจง

In สีขาว Box การทดสอบผู้ทดสอบกำลังมุ่งเน้นไปที่วิธีการทำงานของซอฟต์แวร์ กล่าวอีกนัยหนึ่ง ผู้ทดสอบจะมุ่งเน้นไปที่การทำงานภายในของซอร์สโค้ดที่เกี่ยวข้องกับกราฟโฟลว์ควบคุมหรือโฟลว์ชาร์ต

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

มาทำความเข้าใจกับตัวอย่างวิธีคำนวณความครอบคลุมของใบแจ้งยอด

สถานการณ์จำลองในการคำนวณความครอบคลุมของคำชี้แจงสำหรับซอร์สโค้ดที่กำหนด ที่นี่เราใช้สถานการณ์ที่แตกต่างกันสองสถานการณ์เพื่อตรวจสอบเปอร์เซ็นต์ความครอบคลุมของใบแจ้งยอดสำหรับแต่ละสถานการณ์

รหัสแหล่งที่มา:

Prints (int a, int b) {                       ------------  Printsum is a function 
    int result = a+ b; 
    If (result> 0)
    	Print ("Positive", result)
    Else
    	Print ("Negative", result)
    }                                        -----------   End of the source code 

สถานการณ์จำลอง 1:

ถ้า A = 3, B = 9

ความคุ้มครองคำชี้แจง

ข้อความที่ทำเครื่องหมายด้วยสีเหลืองคือข้อความที่ดำเนินการตามสถานการณ์

จำนวนคำสั่งที่ดำเนินการ = 5 จำนวนคำสั่งทั้งหมด = 7

ความครอบคลุมของคำชี้แจง: 5/7 = 71%

ความคุ้มครองคำชี้แจง

ในทำนองเดียวกันเราจะเห็นสถานการณ์ที่ 2

สถานการณ์จำลอง 2:

ถ้า A = -3, B = -9

ความคุ้มครองคำชี้แจง

ข้อความที่ทำเครื่องหมายด้วยสีเหลืองคือข้อความที่ดำเนินการตามสถานการณ์

จำนวนคำสั่งที่ดำเนินการ = 6

จำนวนใบแจ้งยอดทั้งหมด = 7

ความคุ้มครองคำชี้แจง

ความครอบคลุมของคำชี้แจง: 6/7 = 85%

ความคุ้มครองคำชี้แจง

แต่โดยรวมแล้วหากคุณเห็น ข้อความทั้งหมดก็ครอบคลุมอยู่ในทั้งสองสถานการณ์ ดังนั้นเราจึงสามารถสรุปได้ว่าความครอบคลุมของใบแจ้งยอดโดยรวมคือ 100%

ความคุ้มครองคำชี้แจง

คำชี้แจงความคุ้มครองครอบคลุมอะไรบ้าง?

  1. งบที่ไม่ได้ใช้
  2. รหัสตาย
  3. สาขาที่ไม่ได้ใช้
  4. งบที่ขาดหายไป

การทดสอบความครอบคลุมการตัดสินใจ

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

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

การทดสอบความครอบคลุมการตัดสินใจ

ตัวอย่างความคุ้มครองการตัดสินใจ

ลองพิจารณาโค้ดต่อไปนี้

Demo(int a) {                       
     If (a> 5)
    	a=a*3
     Print (a)
    }

สถานการณ์จำลอง 1:

ค่าของ a คือ 2

การทดสอบความครอบคลุมการตัดสินใจ

รหัสที่เน้นด้วยสีเหลืองจะถูกดำเนินการ นี่คือผลลัพธ์ "ไม่" ของการตัดสินใจหาก (a>5) ถูกเลือก

ความครอบคลุมในการตัดสินใจ = 50%

สถานการณ์จำลอง 2:

ค่าของ a คือ 6

การทดสอบความครอบคลุมการตัดสินใจ

รหัสที่เน้นด้วยสีเหลืองจะถูกดำเนินการ นี่คือผลลัพธ์ "ใช่" ของการตัดสินใจหาก (a>5) ถูกเลือก

ความครอบคลุมในการตัดสินใจ = 50%

กรณีทดสอบ มูลค่าของ A เอาท์พุต ความคุ้มครองการตัดสินใจ
1 2 2 50%
2 6 18 50%

การทดสอบความครอบคลุมสาขา

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

ตัวอย่างเช่น หากผลลัพธ์เป็นแบบไบนารี คุณต้องทดสอบผลลัพธ์ทั้งจริงและเท็จ

สูตรคำนวณความครอบคลุมสาขา:

การทดสอบความครอบคลุมสาขา

ตัวอย่างความคุ้มครองสาขา

หากต้องการเรียนรู้ความครอบคลุมของสาขา ลองพิจารณาตัวอย่างเดียวกันกับที่ใช้ก่อนหน้านี้

ลองพิจารณาโค้ดต่อไปนี้

Demo(int a) {                       
     If (a> 5)
    	a=a*3
     Print (a)
    }                                       

การทดสอบความครอบคลุมสาขา

ความครอบคลุมของสาขาจะพิจารณาสาขาที่ไม่มีเงื่อนไขเช่นกัน

กรณีทดสอบ มูลค่าของ A เอาท์พุต ความคุ้มครองการตัดสินใจ ความคุ้มครองสาขา
1 2 2 50% 33%
2 6 18 50% 67%

ข้อดีของการครอบคลุมสาขา:

การทดสอบการครอบคลุมสาขาให้ข้อดีดังต่อไปนี้:

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

การทดสอบความครอบคลุมของสภาพ

ความคุ้มครองสภาพ หรือการครอบคลุมการแสดงออกเป็นวิธีการทดสอบที่ใช้เพื่อทดสอบและประเมินตัวแปรหรือนิพจน์ย่อยในคำสั่งเงื่อนไข เป้าหมายของการครอบคลุมเงื่อนไขคือการตรวจสอบผลลัพธ์แต่ละรายการสำหรับเงื่อนไขเชิงตรรกะแต่ละเงื่อนไข การครอบคลุมเงื่อนไขให้ความไวต่อกระแสควบคุมที่ดีกว่าการครอบคลุมการตัดสินใจ ในการครอบคลุมนี้ จะพิจารณาเฉพาะนิพจน์ที่มีตัวดำเนินการเชิงตรรกะเท่านั้น

ตัวอย่างเช่น หากนิพจน์มีการดำเนินการบูลีน เช่น AND, OR, XOR ซึ่งระบุถึงความเป็นไปได้ทั้งหมด

ความคุ้มครองตามเงื่อนไขไม่ได้ให้การรับประกันเกี่ยวกับความคุ้มครองการตัดสินใจทั้งหมด

สูตรคำนวณความครอบคลุมของเงื่อนไข:

การทดสอบความครอบคลุมของสภาพ

ตัวอย่าง:

การทดสอบความครอบคลุมของสภาพ

สำหรับนิพจน์ข้างต้น เรามีชุดค่าผสมที่เป็นไปได้ 4 ชุด

  • TT
  • FF
  • TF
  • FT

พิจารณาอินพุตต่อไปนี้

X = 3

ป=4

(x TRUE ความครอบคลุมของสภาพคือ ¼ = 25%
A = 3

B = 4

(ก>ข) FALSE

ความครอบคลุมของเครื่องจักรที่มีสถานะจำกัด

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

ประเภทของรหัสครอบคลุมให้เลือก

นี่เป็นคำตอบที่ตอบยากที่สุดอย่างแน่นอน ในการเลือกวิธีการครอบคลุม ผู้ทดสอบจำเป็นต้องตรวจสอบว่า

  • รหัสที่อยู่ระหว่างการทดสอบมีข้อบกพร่องที่ยังไม่ถูกค้นพบจุดเดียวหรือหลายจุด
  • ค่าปรับที่อาจเกิดขึ้น
  • ต้นทุนชื่อเสียงที่เสียไป
  • ต้นทุนการขายที่หายไป ฯลฯ

ยิ่งความน่าจะเป็นที่ข้อบกพร่องจะทำให้เกิดความล้มเหลวในการผลิตที่มีต้นทุนสูงขึ้นเท่าใด ระดับความครอบคลุมที่คุณต้องเลือกก็จะยิ่งรุนแรงมากขึ้นเท่านั้น

ความครอบคลุมของโค้ดเทียบกับความครอบคลุมด้านการใช้งาน

รหัสครอบคลุม ครอบคลุมการทำงาน
การครอบคลุมโค้ดจะบอกคุณว่าหน่วยงานทดสอบของคุณใช้ซอร์สโค้ดได้ดีเพียงใด ความครอบคลุมด้านฟังก์ชันจะวัดว่าม้านั่งทดสอบของคุณครอบคลุมฟังก์ชันการทำงานของการออกแบบได้ดีเพียงใด
ห้ามใช้ข้อกำหนดการออกแบบ ใช้ข้อกำหนดการออกแบบ
ทำโดยนักพัฒนา ทำโดยผู้ทดสอบ

เครื่องมือครอบคลุมโค้ด

นี่คือรายการเครื่องมือครอบคลุมโค้ดที่สำคัญ:

ชื่อเครื่องมือ Descriptไอออน
Cobertura เป็นเครื่องมือครอบคลุมโค้ดโอเพ่นซอร์ส โดยจะวัดความครอบคลุมของการทดสอบโดยใช้เครื่องมือฐานโค้ดและวิเคราะห์บรรทัดของโค้ดที่กำลังดำเนินการและบรรทัดใดที่ไม่ถูกดำเนินการเมื่อชุดการทดสอบทำงาน
ไม้จำพวกถั่ว Clover ยังช่วยลดเวลาการทดสอบด้วยการรันเฉพาะการทดสอบที่ครอบคลุมโค้ดแอปพลิเคชันที่ถูกปรับเปลี่ยนตั้งแต่รุ่นก่อน
DevPartner DevPartner ช่วยให้นักพัฒนาวิเคราะห์ได้ Java โค้ดสำหรับคุณภาพและความซับซ้อนของโค้ด
Emma EMMA รองรับคลาส วิธีการ บรรทัด และบล็อกฐาน ระดับไฟล์ต้นฉบับรวม คลาส และเมธอด
คาลิสติก Kalistick เป็นแอปพลิเคชันบุคคลที่สามที่วิเคราะห์โค้ดด้วยมุมมองที่แตกต่างกัน
CoView และ CoAnt ซอฟต์แวร์การเขียนโค้ดเป็นเครื่องมือครอบคลุมโค้ดสำหรับการวัด การสร้างวัตถุจำลอง การทดสอบโค้ด การครอบคลุมเส้นทางและสาขา ฯลฯ
เป้าสำหรับ C++ BulseyeCoverage เป็นเครื่องมือครอบคลุมโค้ดสำหรับ C++ และซี
Sonar Sonar เป็นเครื่องมือครอบคลุมโค้ดแบบเปิดซึ่งช่วยให้คุณจัดการคุณภาพของโค้ดได้

ข้อดีและข้อเสียของการใช้การครอบคลุมโค้ด

ข้อดีของการครอบคลุมโค้ด ข้อเสียของการครอบคลุมโค้ด
มีประโยชน์ในการประเมินการวัดเชิงปริมาณของการครอบคลุมโค้ด แม้ว่าคุณลักษณะเฉพาะใดๆ จะไม่ถูกนำมาใช้ในการออกแบบ ความครอบคลุมของโค้ดยังคงรายงานความครอบคลุม 100%
ช่วยให้คุณสร้างกรณีทดสอบเพิ่มเติมเพื่อเพิ่มความครอบคลุมได้ ไม่สามารถระบุได้ว่าเราได้ทดสอบค่าที่เป็นไปได้ทั้งหมดของคุณลักษณะโดยใช้การครอบคลุมโค้ดหรือไม่
ช่วยให้คุณค้นหาพื้นที่ของโปรแกรมที่ไม่ได้ใช้โดยชุดกรณีทดสอบ การครอบคลุมโค้ดไม่ได้บอกว่าคุณครอบคลุมตรรกะของคุณมากน้อยเพียงใด
ในกรณีที่ไม่ได้ใช้งานฟังก์ชันที่ระบุ หรือไม่ได้รวมไว้ในข้อกำหนด เทคนิคตามโครงสร้างจะไม่สามารถค้นหาปัญหาดังกล่าวได้

สรุป

  • การครอบคลุมโค้ดเป็นการวัดที่อธิบายระดับของการทดสอบซอร์สโค้ดของโปรแกรม
  • ช่วยให้คุณวัดประสิทธิภาพของการดำเนินการทดสอบ
  • วิธีการครอบคลุมโค้ด 1 วิธี ได้แก่ 2.) การครอบคลุมคำชี้แจง 3.) การครอบคลุมเงื่อนไข 4) การครอบคลุมสาขา XNUMX) Toggle ความคุ้มครอง 5) ความคุ้มครอง FSM
  • ความครอบคลุมของคำชี้แจงเกี่ยวข้องกับการดำเนินการของคำสั่งปฏิบัติการทั้งหมดในซอร์สโค้ดอย่างน้อยหนึ่งครั้ง
  • ความครอบคลุมของการตัดสินใจจะรายงานผลลัพธ์ที่แท้จริงหรือเท็จของนิพจน์บูลีนแต่ละรายการ
  • ในพื้นที่ครอบคลุมของสาขา ทุกผลลัพธ์จากโมดูลโค้ดจะถูกทดสอบ
  • Conditional จะเปิดเผยวิธีประเมินตัวแปรหรือนิพจน์ย่อยในคำสั่งแบบมีเงื่อนไข
  • การครอบคลุมเครื่องจักรสถานะจำกัดเป็นวิธีการครอบคลุมโค้ดที่ซับซ้อนที่สุดอย่างแน่นอน
  • ในการเลือกวิธีการครอบคลุม ผู้ทดสอบจำเป็นต้องตรวจสอบค่าปรับที่อาจเกิดขึ้น การสูญเสียชื่อเสียง การสูญเสียการขาย ฯลฯ
  • การครอบคลุมโค้ดจะบอกคุณว่าซอร์สโค้ดถูกใช้งานโดยม้านั่งทดสอบของคุณได้ดีเพียงใด ในขณะที่ความครอบคลุมฟังก์ชันจะวัดว่าฟังก์ชันการทำงานของการออกแบบนั้นครอบคลุมเพียงใด
  • Cobertura, JTest, Clover, Emma, ​​Kalistick เป็นเครื่องมือสำคัญในการครอบคลุมโค้ดบางส่วน
  • Code Coverage ช่วยให้คุณสร้างกรณีทดสอบเพิ่มเติมเพื่อเพิ่มความครอบคลุมได้
  • การครอบคลุมโค้ดไม่ได้ช่วยให้คุณพิจารณาว่าเราได้ทดสอบค่าที่เป็นไปได้ทั้งหมดของฟีเจอร์หรือไม่

สรุปโพสต์นี้ด้วย: