คำถามติดแท็ก cyclomatic-complexity

4
'ความซับซ้อนตามวัฏจักรของโค้ดของฉันหมายถึงอะไร
ฉันใหม่สำหรับการวิเคราะห์โค้ดแบบสแตติก แอปพลิเคชันของฉันมีความซับซ้อนตามวัฏจักร 17,754 แอปพลิเคชันนั้นมีรหัสเพียง 37,672 บรรทัด มันถูกต้องหรือไม่ที่จะบอกว่าความซับซ้อนนั้นสูงตามบรรทัดของโค้ด? อะไรคือความซับซ้อนของวงจรที่บอกกับฉัน?

7
หลีกเลี่ยงวิธีที่ซับซ้อนเกินไป - Cyclomatic Complexity
ไม่แน่ใจว่าจะไปเกี่ยวกับวิธีการนี้เพื่อลดความซับซ้อนของวัฏจักร โซนาร์รายงาน 13 ขณะที่ 10 คาดว่าจะเป็น ฉันแน่ใจว่าไม่มีอะไรเป็นอันตรายต่อการออกจากวิธีการนี้เหมือนเดิมอย่างไรก็ตามเพียงแค่ท้าทายฉันว่าจะทำตามกฎของ Sonar อย่างไร ความคิดใด ๆ ที่จะได้รับการชื่นชมอย่างมาก public static long parseTimeValue(String sValue) { if (sValue == null) { return 0; } try { long millis; if (sValue.endsWith("S")) { millis = new ExtractSecond(sValue).invoke(); } else if (sValue.endsWith("ms")) { millis = new ExtractMillisecond(sValue).invoke(); } else if (sValue.endsWith("s")) …

2
ความซับซ้อนของวงจรเมื่อเรียกวิธีเดียวกันหลาย ๆ ครั้ง
ขอบคุณสำหรับคำถามที่รีวิวรหัสฉันได้มีความขัดแย้งเล็กน้อย (ซึ่งเป็นโอกาสที่จะเรียนรู้บางสิ่งบางอย่าง) เกี่ยวกับสิ่งที่ซับซ้อน Cyclomatic สำหรับรหัสด้านล่าง public static void main(String[] args) { try { thro(); thro(); thro(); thro(); thro(); thro(); thro(); } catch (NullPointerException e) { } } private static Random random = new Random(); public static void thro() throws NullPointerException { if (random.nextBoolean()) throw new NullPointerException(); System.out.println("No crash this time"); …

6
วิธีการวนซ้ำลดความซับซ้อนของวงจรและปรับปรุงการสนับสนุนหรือไม่
วิธีการทำซ้ำอย่างเช่นพบได้ทั่วไปในภาษาสมัยใหม่เช่น C #, JavaScript และ (หวังว่า) ใน Java 8 ลดความซับซ้อนของวงจรที่มีต่อความเข้าใจและการสนับสนุนของโค้ดหรือไม่? ตัวอย่างเช่นใน C # เราอาจมีรหัสต่อไปนี้: List<String> filteredList = new List<String>(); foreach (String s in originalList){ if (matches(s)){ filteredList.add(s); } } สิ่งนี้มีความซับซ้อนตามวัฏจักรของ 2 เราสามารถเขียนใหม่นี้ได้อย่างง่ายดายในฐานะ: List<String> filteredList = originalList.where(s => matches(s)); ซึ่งมีความซับซ้อนตามวัฏจักรของ 0 สิ่งนี้ส่งผลให้มีรหัสที่สนับสนุนได้จริงหรือไม่ มีการวิจัยจริงในหัวข้อนี้หรือไม่?

3
ทำความเข้าใจกับความซับซ้อนของวัฏจักร
ฉันเพิ่งเจอCyclomatic Complexityและฉันต้องการพยายามทำความเข้าใจให้ดีขึ้น อะไรคือตัวอย่างการเขียนโปรแกรมเชิงปฏิบัติของปัจจัยต่าง ๆ ที่นำไปสู่การคำนวณความซับซ้อน โดยเฉพาะสำหรับสมการวิกิพีเดียM = E − N + 2Pฉันต้องการเข้าใจความหมายของคำศัพท์แต่ละข้อต่อไปนี้ให้ดีขึ้น: E = จำนวนขอบของกราฟ N = จำนวนโหนดของกราฟ P = จำนวนขององค์ประกอบที่เชื่อมต่อ ฉันสงสัยว่าทั้งEหรือNอาจเป็นจำนวนคะแนนการตัดสินใจ (ถ้า, ถ้า, สำหรับ, foreach, ฯลฯ ) ในบล็อกของรหัส แต่ฉันไม่แน่ใจว่าที่ใดหรือสิ่งอื่น ๆ ที่มีความหมาย ฉันเดาด้วยว่าPหมายถึงการเรียกใช้ฟังก์ชั่นและอินสแตนซ์ของคลาส แต่ไม่มีคำจำกัดความที่ชัดเจนที่ฉันเห็น หากใครบางคนสามารถส่องแสงเพิ่มอีกนิดด้วยตัวอย่างโค้ดที่ชัดเจนของแต่ละอันมันจะช่วยได้ จากการติดตาม Cyclomatic Complexity มีความสัมพันธ์โดยตรงกับจำนวนการทดสอบหน่วยที่จำเป็นสำหรับการครอบคลุมเส้นทาง 100% หรือไม่? ตัวอย่างเช่นวิธีการที่มีความซับซ้อน 4 บ่งบอกว่าจำเป็นต้องมีการทดสอบ 4 บทเพื่อครอบคลุมวิธีการดังกล่าวหรือไม่? ในที่สุดการแสดงออกปกติส่งผลกระทบต่อความซับซ้อนของวัฏจักรและถ้าเป็นเช่นนั้นได้อย่างไร

7
ทำไมความซับซ้อนของวงจรจึงมีความสำคัญสำหรับวิธีการเดียว?
ฉันกำลังใช้SonarLint สำหรับ Eclipseตั้งแต่เมื่อเร็ว ๆ นี้และมันช่วยฉันได้มาก อย่างไรก็ตามมันทำให้ฉันมีคำถามเกี่ยวกับความซับซ้อนของวัฏจักร SonarLint ถือว่า CC ที่ยอมรับได้ของ 10 และมีบางกรณีที่ฉันเกินกว่านั้นประมาณ 5 หรือ 6 หน่วย ชิ้นส่วนเหล่านั้นเกี่ยวข้องกับตัวทำแผนที่ที่ค่าอาศัยตัวแปรที่แตกต่างกันตัวอย่างเช่น ฟิลด์ A อาศัยสตริง sA; ฟิลด์ B อาศัยสตริง sB; ฟิลด์ C อาศัย String sC; ฯลฯ ... ฉันไม่มีทางเลือกอื่นที่วางifสำหรับแต่ละฟิลด์ นี่ไม่ใช่ตัวเลือกของฉัน (โชคดี) แต่เป็นระบบที่ซับซ้อนและมีอยู่แล้วที่ฉันไม่สามารถเปลี่ยนแปลงได้ด้วยตัวเอง หลักของคำถามของฉันคือเหตุผลที่มันเป็นสิ่งสำคัญมากที่จะได้มีซีซีสูงเกินไปในวิธีการเดียว ? หากคุณย้ายเงื่อนไขบางอย่างของคุณในวิธีย่อยอย่างน้อยหนึ่งวิธีเพื่อลดความซับซ้อนมันไม่ลดค่าใช้จ่ายโดยรวมของฟังก์ชั่นของคุณมันเป็นเพียงการเคลื่อนย้ายปัญหาที่อื่นฉันเดา? (ขออภัยในความผิดพลาดเล็กน้อยหากมี) แก้ไข คำถามของฉันไม่ได้อ้างถึงความซับซ้อนของวัฏจักรโลก แต่มีเพียงความซับซ้อนของวิธีการเดียวและวิธีการแยก (ฉันมีเวลาคร่าวๆอธิบายสิ่งที่ฉันหมายถึงขอโทษ) ฉันถามว่าเพราะเหตุใดจึงอนุญาตให้แบ่งเงื่อนไขของคุณเป็นวิธีที่เล็กกว่าถ้ามันยังเป็นของ 'วิธีสุดยอด' ซึ่งจะดำเนินการทุกวิธีย่อยจึงเพิ่มความซับซ้อนให้อัลกอริทึม อย่างไรก็ตามลิงค์ที่สอง ( เกี่ยวกับ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.