ฉันได้ศึกษาความซับซ้อนของวงจร (McCabe) และความสามารถในการเข้าถึงซอฟต์แวร์ของ uni เมื่อเร็ว ๆ นี้ วันนี้อาจารย์ของฉันบอกว่าไม่มีความสัมพันธ์กันระหว่างตัวชี้วัดสองตัว แต่เป็นกรณีนี้จริงหรือ
จริงๆแล้วทั้งใช่และไม่ใช่
ก่อนอื่นเพื่อเตือนให้คุณทราบว่าตัวชี้วัด McCabe สำหรับความซับซ้อนของวงจรถูกคำนวณบนกราฟควบคุมการไหลที่คุณสรุปซอร์สโค้ดของคุณเป็นกราฟกำกับด้วยบล็อกพื้นฐานหรือข้อความสั่งเป็นโหนดและการเปลี่ยนระหว่างพวกเขา หรือในกรณีที่มีการกระโดดและลูปปรับอากาศ) เป็นขอบ ความซับซ้อนของวัฏจักรที่นี่สามารถคร่าวๆได้ (หากคุณพิจารณาว่าโปรแกรมทั้งหมดของคุณไม่มีโค้ดที่แยกได้นั่นคือกราฟของคุณเชื่อมต่ออยู่) ซึ่งถูกมองว่าเป็นความแตกต่างระหว่างจำนวนขอบและจำนวนโหนด
CC = E - N
ปัญหาการเข้าถึงได้เป็นปัญหาที่พบบ่อยในทฤษฎีกราฟที่สามารถแสดงในทางที่กำหนด: สองโหนด A และ B คือโหนด B สามารถเข้าถึงได้จากโหนด A คือหนึ่งสามารถเข้าถึง B เริ่มต้นจาก A และตามขอบของกราฟที่ถูกต้อง ทิศทาง? ดังนั้นจึงเป็นตัวชี้วัดอีกครั้งที่ใช้กับกราฟการไหลของการควบคุมและไม่ใช่ในรหัส
มีหลายวิธีที่จะใช้ปัญหานี้จะเป็นกราฟการควบคุมการไหล วิธีหนึ่งเรียกว่า "การวิเคราะห์ความสามารถในการเข้าถึงตัวแปร" ซึ่งหมายความว่าสำหรับตัวแปรที่กำหนดการวิเคราะห์จะกำหนดว่าค่ายังคงมีอยู่ในบางจุดของโปรแกรม (เทคนิคนี้เรียกว่าการแบ่งส่วนในการวิเคราะห์ซอฟต์แวร์) ฉันยังพบเพียงบางบทความที่ใช้คำนี้ (และโดยทั่วไปปัญหาการเชื่อมเงิน) สำหรับการใช้งานแบบมัลติเธรด
โดยทั่วไปเราสามารถเห็นความสัมพันธ์ระหว่าง CC และความสามารถในการเชื่อมโยง: เมื่อเพิ่ม CC อัตราส่วนของขอบเหนือโหนดก็จะเพิ่มขึ้นและแม้กระทั่งในกรณีของกราฟกำกับที่ทิศทางของขอบก็มีความสำคัญเช่นกัน ในที่สุดจำนวนของขอบนำไปสู่การเพิ่มขึ้นของเส้นทางที่มีอยู่ในกราฟและเพื่อเพิ่มความสามารถในการเข้าถึงทั้งผ่านการเชื่อมต่อโดยตรงหรือโดยอ้อมระหว่างโหนด ดังนั้นคำตอบคือใช่ที่นี่
ในอีกด้านหนึ่งความคิดเกี่ยวกับการเข้าถึงได้ในสภาพแวดล้อมแบบมัลติเธรดจำเป็นต้องมีการวิเคราะห์สิ่งที่เรียกว่า supergraph - และนี่ก็ไม่ใช่เรื่องเล็กน้อย การเพิ่ม CC (เรียกว่า " ความซับซ้อนในการซิงโครไนซ์ ") อาจนำไปสู่ความน่าจะเป็นในการหยุดชะงักในซอฟต์แวร์ที่สูงขึ้นและลดความสามารถในการเข้าถึงของโหนด / ส่วนรหัสบางอย่าง ดังนั้น"ไม่" เป็นคำตอบที่ถูกต้องที่นี่เช่นกัน