การครอบคลุมโค้ดคืออะไรและคุณวัดได้อย่างไร
ฉันถูกถามคำถามนี้เกี่ยวกับการครอบคลุมรหัสการทดสอบอัตโนมัติของเรา ดูเหมือนจะเป็นเช่นนั้นนอกเหนือจากเครื่องมืออัตโนมัติมันเป็นศิลปะมากกว่าวิทยาศาสตร์ มีตัวอย่างจริง ๆ ของวิธีใช้การครอบคลุมโค้ดหรือไม่?
การครอบคลุมโค้ดคืออะไรและคุณวัดได้อย่างไร
ฉันถูกถามคำถามนี้เกี่ยวกับการครอบคลุมรหัสการทดสอบอัตโนมัติของเรา ดูเหมือนจะเป็นเช่นนั้นนอกเหนือจากเครื่องมืออัตโนมัติมันเป็นศิลปะมากกว่าวิทยาศาสตร์ มีตัวอย่างจริง ๆ ของวิธีใช้การครอบคลุมโค้ดหรือไม่?
คำตอบ:
การครอบคลุมโค้ดเป็นการวัดจำนวนบรรทัด / บล็อก / ส่วนโค้งของโค้ดของคุณในขณะที่การทดสอบอัตโนมัติกำลังทำงานอยู่
การครอบคลุมรหัสถูกรวบรวมโดยใช้เครื่องมือพิเศษในการวัดไบนารีเพื่อเพิ่มการติดตามการโทรและทำการทดสอบอัตโนมัติเต็มรูปแบบกับผลิตภัณฑ์เครื่องมือ เครื่องมือที่ดีจะช่วยให้คุณไม่เพียงร้อยละของรหัสที่ถูกดำเนินการ แต่ยังช่วยให้คุณสามารถเจาะเข้าไปในข้อมูลและดูว่าบรรทัดของรหัสที่ถูกดำเนินการในระหว่างการทดสอบ
ทีมของเราใช้Magellan - ชุดเครื่องมือครอบคลุมรหัส หากคุณเป็นร้านค้า. NET Visual Studio มีเครื่องมือในการรวบรวมความครอบคลุมโค้ด คุณสามารถม้วนเครื่องมือที่กำหนดเองได้เช่นบทความนี้อธิบาย
หากคุณเป็นร้าน C ++ Intel มีเครื่องมือบางอย่างที่ใช้งานได้กับ Windows และ Linux แม้ว่าฉันจะไม่ได้ใช้ก็ตาม ฉันเคยได้ยินว่ามีเครื่องมือ gcov สำหรับ GCC แต่ฉันไม่รู้อะไรเกี่ยวกับมันและไม่สามารถให้ลิงก์แก่คุณได้
สำหรับวิธีที่เราใช้ - การครอบคลุมโค้ดเป็นหนึ่งในเกณฑ์การออกของเราสำหรับแต่ละเหตุการณ์ เรามีตัวชี้วัดการครอบคลุมโค้ดสามประการ - ความครอบคลุมจากการทดสอบหน่วย (จากทีมพัฒนา) การทดสอบสถานการณ์ (จากทีมทดสอบ) และการครอบคลุมแบบรวม
BTW ในขณะที่การครอบคลุมโค้ดเป็นตัวชี้วัดที่ดีว่าคุณกำลังทำการทดสอบเท่าไหร่ แต่ก็ไม่จำเป็นต้องเป็นตัวชี้วัดที่ดีว่าคุณกำลังทดสอบผลิตภัณฑ์ของคุณดีแค่ไหน มีตัวชี้วัดอื่น ๆ ที่คุณควรใช้พร้อมกับการครอบคลุมโค้ดเพื่อให้มั่นใจในคุณภาพ
โดยทั่วไปการครอบคลุมรหัสจะทดสอบว่าจำนวนรหัสของคุณครอบคลุมภายใต้การทดสอบ ดังนั้นหากคุณมีการครอบคลุมโค้ด 90% หมายความว่ามีโค้ด 10% ที่ไม่ครอบคลุมในการทดสอบ ฉันรู้ว่าคุณอาจคิดว่า 90% ของรหัสครอบคลุม แต่คุณต้องมองจากมุมที่แตกต่าง คุณกำลังหยุดรับรหัสครอบคลุม 100% อะไร
ตัวอย่างที่ดีคือ:
if(customer.IsOldCustomer())
{
}
else
{
}
ตอนนี้ในรหัสข้างต้นมีสองเส้นทาง / สาขา หากคุณกดสาขา "YES" อยู่ตลอดเวลาคุณจะไม่ครอบคลุมส่วนอื่นและจะแสดงในผลลัพธ์การครอบคลุมรหัส นี่เป็นสิ่งที่ดีเพราะตอนนี้คุณรู้ว่าสิ่งที่ไม่ครอบคลุมและคุณสามารถเขียนการทดสอบเพื่อให้ครอบคลุมส่วนอื่น หากไม่มีรหัสครอบคลุมคุณก็แค่นั่งระเบิดเวลาเพื่อระเบิด
NCoverเป็นเครื่องมือที่ดีในการวัดความครอบคลุมรหัส
เพียงจำไว้ว่าการมี "การครอบคลุมรหัส 100%" ไม่ได้หมายความว่าทุกอย่างผ่านการทดสอบอย่างสมบูรณ์ - ในขณะที่มันหมายถึงทุกบรรทัดของการทดสอบนั้นไม่ได้หมายความว่าพวกเขาจะถูกทดสอบในทุกสถานการณ์ (ทั่วไป) ..
ฉันจะใช้การครอบคลุมรหัสเพื่อเน้นบิตของรหัสที่ฉันควรจะเขียนทดสอบ ตัวอย่างเช่นหากเครื่องมือการครอบคลุมโค้ดใด ๆ ที่แสดง myImportantFunction () ไม่ได้ถูกเรียกใช้งานในขณะที่ใช้การทดสอบหน่วยปัจจุบันของฉันพวกเขาน่าจะได้รับการปรับปรุง
โดยทั่วไปการครอบคลุมรหัส 100% ไม่ได้หมายความว่ารหัสของคุณสมบูรณ์แบบ ใช้เป็นแนวทางในการเขียนการทดสอบที่ครอบคลุมมากขึ้น (หน่วย -)
x
และส่งคืนx/x
และคุณรันการทดสอบโดยใช้ my_func (2) คุณจะได้รับความครอบคลุม 100% (เนื่องจากโค้ดของฟังก์ชันจะถูกเรียกใช้) แต่คุณพลาดปัญหาใหญ่ไปเมื่อพารามิเตอร์ 0 คือ นั่นคือคุณยังไม่ได้ทดสอบสถานการณ์ที่จำเป็นทั้งหมดแม้จะครอบคลุม 100%
การรวมคะแนนสองสามคะแนนกับคำตอบก่อนหน้านี้จำนวนมาก:
การครอบคลุมโค้ดหมายถึงชุดทดสอบของคุณครอบคลุมซอร์สโค้ดของคุณดีเพียงใด กล่าวคืออะไรคือขอบเขตของรหัสที่มาที่ครอบคลุมโดยชุดของกรณีทดสอบ
ดังที่กล่าวไว้ในคำตอบข้างต้นมีเกณฑ์การครอบคลุมต่าง ๆ เช่นเส้นทาง, เงื่อนไข, ฟังก์ชั่น, งบ, ฯลฯ แต่เกณฑ์เพิ่มเติมที่จะครอบคลุมคือ
หมายเหตุ: การวิเคราะห์รหัสแบบคงที่จะค้นหาว่ามีรหัสที่ไม่สามารถเข้าถึงได้หรือรหัสแขวนเช่นรหัสไม่ครอบคลุมโดยการเรียกฟังก์ชั่นอื่น ๆ และยังคุ้มครองคงที่อื่น ๆ แม้ว่าการวิเคราะห์รหัสคงที่รายงานว่าครอบคลุมรหัส 100% แต่ก็ไม่ได้ให้รายงานเกี่ยวกับชุดการทดสอบของคุณหากการทดสอบครอบคลุมรหัสที่เป็นไปได้ทั้งหมด
รหัสครอบคลุมได้รับการอธิบายอย่างดีในคำตอบก่อนหน้า นี่เป็นคำตอบที่มากกว่าในส่วนที่สองของคำถาม
เราใช้เครื่องมือสามตัวเพื่อพิจารณาความครอบคลุมของรหัส
เราใช้เครื่องมือเหล่านี้เพื่อ
การครอบคลุมรหัสเป็นเพียงการวัดรหัสที่ทดสอบ มีเกณฑ์ความครอบคลุมที่หลากหลายซึ่งสามารถวัดได้ แต่โดยทั่วไปแล้วจะเป็นเส้นทาง, เงื่อนไข, ฟังก์ชั่นและข้อความต่าง ๆ ภายในโปรแกรมที่จัดทำเนื้อหาครอบคลุมทั้งหมด การวัดความครอบคลุมรหัสเป็นเพียงเปอร์เซ็นต์ของการทดสอบที่ดำเนินการตามเกณฑ์ความครอบคลุมแต่ละข้อ
เท่าที่ฉันจะติดตามการทดสอบครอบคลุมหน่วยในโครงการของฉันฉันใช้เครื่องมือวิเคราะห์รหัสคงที่เพื่อติดตาม
สำหรับ Perl มีโมดูลDevel :: Cover ที่ยอดเยี่ยมซึ่งฉันใช้เป็นประจำกับโมดูลของฉัน
หากการสร้างและการติดตั้งได้รับการจัดการโดย Module :: Build คุณสามารถเรียกใช้./Build testcover
เพื่อรับไซต์ HTML ที่ดีที่จะบอกคุณครอบคลุมต่อย่อยบรรทัดและเงื่อนไขด้วยสีที่สวยงามทำให้ง่ายต่อการดูว่าเส้นทางของรหัสใดที่ไม่ครอบคลุม
ในคำตอบก่อนหน้าครอบคลุมรหัสได้รับการอธิบายอย่างดี ฉันแค่เพิ่มความรู้ที่เกี่ยวข้องกับเครื่องมือหากคุณกำลังทำงานiOS
และOSX
แพลตฟอร์ม Xcode ให้ความสะดวกในการทดสอบและตรวจสอบความครอบคลุมรหัส
ลิงค์อ้างอิง:
https://medium.com/zendesk-engineering/code-coverage-and-xcode-6b2fb8756a51
ทั้งสองเป็นลิงก์ที่มีประโยชน์สำหรับการเรียนรู้และสำรวจการครอบคลุมโค้ดด้วย Xcode
สำหรับ PHP คุณควรดู Github จาก Sebastian Bergmann
จัดให้มีการรวบรวมการประมวลผลและฟังก์ชันการแสดงผลสำหรับข้อมูลการครอบคลุมโค้ด PHP