Προγραμματισμός

Πώς να αναλύσετε την κυκλωματική πολυπλοκότητα στον κώδικά σας

Υπάρχουν διάφοροι παράγοντες που μπορούν να συμβάλουν στην πολυπλοκότητα ενός τύπου ή μιας μεθόδου που σχετίζεται με έναν τύπο στον κώδικα της εφαρμογής σας. Η κυκλωματική πολυπλοκότητα είναι μια δημοφιλής μέτρηση που χρησιμοποιείται για τη μέτρηση της πολυπλοκότητας του προγράμματος. Με άλλα λόγια, είναι μια μέτρηση λογισμικού που παρέχει ένα ποσοτικό μέτρο της πολυπλοκότητας ενός προγράμματος.

Στην ουσία, η κυκλωματική πολυπλοκότητα είναι ένα μέτρο των γραμμικά ανεξάρτητων διαδρομών που είναι διαθέσιμες μέσω του προγράμματος σας. Η αξία του εξαρτάται πραγματικά από τον αριθμό των υποκαταστημάτων υπό όρους ή κατασκευών στον κώδικά σας. Επομένως, η κυκλωματική πολυπλοκότητα θα είναι υψηλή για μεθόδους που έχουν μεγάλο αριθμό δομικών συνθηκών (π.χ. e, διακόπτης / if / while / for / foreach δηλώσεις).

Το MSDN δηλώνει: "Η κυκλωματική πολυπλοκότητα μετρά τον αριθμό των γραμμικά ανεξάρτητων διαδρομών μέσω της μεθόδου, η οποία καθορίζεται από τον αριθμό και την πολυπλοκότητα των υπό όρους κλάδων. Μια χαμηλή κυκλωματική πολυπλοκότητα γενικά υποδεικνύει μια μέθοδο που είναι εύκολο να κατανοηθεί, να δοκιμαστεί και να διατηρηθεί.

Δείτε πώς υπολογίζεται η κυκλική πολυπλοκότητα:

CC = E - N + 1

Οπου,

Το CC υποδηλώνει κυκλωματική πολυπλοκότητα

Το E δηλώνει τον αριθμό των άκρων στο γράφημα

N δηλώνει τον αριθμό των κόμβων στο γράφημα

Σημειώστε ότι ένας κόμβος αντιπροσωπεύει τον λογικό κλάδο και ένα άκρο αντιπροσωπεύει τη συνδεδεμένη γραμμή μεταξύ των κόμβων. Παρεμπιπτόντως, όσο χαμηλότερη είναι η τιμή της κυκλωματικής πολυπλοκότητας μιας μεθόδου, τόσο ευκολότερη είναι η δοκιμή και η συντήρηση, εξ ου και το καλύτερο. Μπορείτε να επωφεληθείτε από την κυκλική πολυπλοκότητα για να υπολογίσετε την πολυπλοκότητα των μεθόδων, των τύπων και επίσης των ενοτήτων στην εφαρμογή σας.

Δεδομένου ότι η κυκλωματική πολυπλοκότητα δείχνει τις γραμμές ανεξάρτητης γραμμής, αν και το πρόγραμμα, τόσο μεγαλύτερη είναι η αξία της κυκλωματικής πολυπλοκότητας, τόσο περισσότερος αριθμός δοκιμαστικών περιπτώσεων θα χρειαζόσασταν για το πρόγραμμά σας - ο αριθμός των δοκιμαστικών περιπτώσεων που θα χρειαζόταν συνήθως θα ήταν ισοδύναμος με τον κυκλικό πολυπλοκότητα σε αυτήν την περίπτωση. Εάν η τιμή της κυκλωματικής πολυπλοκότητας είναι μικρότερη (μια τιμή μικρότερη ή ίση με 10 θεωρείται φοβερή), ο κώδικας θεωρείται ότι είναι καλά δομημένος, πολύ δοκιμή και διατηρήσιμος.

Πώς μπορώ να ελέγξω την κυκλική πολυπλοκότητα;

Οι νεότερες εκδόσεις του Visual Studio παρέχουν υποστήριξη για τον υπολογισμό της κυκλωματικής πολυπλοκότητας χρησιμοποιώντας το Visual Studio IDE. Μπορείτε να υπολογίσετε μετρήσεις κώδικα για ολόκληρη τη λύση ή για τα έργα που έχετε επιλέξει. Όταν το εκτελείτε, το παράθυρο Code Metrics Results θα σας δείξει τα αποτελέσματα ανάλυσης κώδικα που είναι οργανωμένα σε δείκτη συντηρησιμότητας, κυκλωματική πολυπλοκότητα, βάθος κληρονομικότητας, ζεύξη κλάσης και επίσης τις γραμμές κώδικα Σε αυτήν την ανάρτηση θα διερευνήσουμε την Κυκλωματική Πολυπλοκότητα και θα παρουσιάσω μια συζήτηση για τα άλλα σημεία σε μια μεταγενέστερη ανάρτηση εδώ

Τώρα, ανατρέξτε στο απόσπασμα κώδικα που δίνεται παρακάτω.

ιδιωτικό κενό DisplayMessage (string string)

       {

Κονσόλα.WriteLine (str);

       }

Όταν υπολογίζετε την κυκλωματική πολυπλοκότητα για τη μέθοδο DisplayMessage χρησιμοποιώντας το Visual Studio, δείχνει την τιμή ως 1. Τώρα, σκεφτείτε αυτήν τη μέθοδο που περιέχει έναν έλεγχο για να δείτε εάν η παράμετρος που μεταβιβάστηκε στη μέθοδο ως όρισμα είναι μηδενική ή κενή.

ιδιωτικό κενό DisplayTextMessage (συμβολοσειρά str)

       {

εάν (! string.IsNullOrEmpty (str))

Κονσόλα.WriteLine (str);

       }

Εάν εκτελέσετε ξανά τις Μετρήσεις κώδικα για τη λύση, θα παρατηρήσετε ότι η κυκλωματική πολυπλοκότητα για τη μέθοδο DisplayTextMessage είναι 2.

Πώς μπορώ να μειώσω την κυκλωματική πολυπλοκότητα στον κώδικα;

Αν και σε ορισμένες περιπτώσεις, είναι δύσκολο να υιοθετήσετε μια συγκεκριμένη στρατηγική για τη μείωση της κυκλωματικής πολυπλοκότητας στον κώδικά σας, καθώς οι υπό κατασκευή δομές μπορεί να οφείλονται στο ότι είναι εγγενείς στο πρόβλημά σας, μπορείτε να υιοθετήσετε διάφορες στρατηγικές για να επιτύχετε χαμηλότερη τιμή κυκλωματικής πολυπλοκότητας. Οι δύο προσεγγίσεις που πρέπει να ακολουθήσετε για να μετριάσετε την υψηλή κυκλωματική πολυπλοκότητα είναι μέσω δοκιμών μονάδας και αναδιαμόρφωσης κώδικα. Ενώ οι δοκιμές μονάδας θα σας βοηθήσουν να ελαχιστοποιήσετε τους κινδύνους, θα πρέπει να αξιοποιήσετε το refactoring κώδικα για να κάνετε τον κώδικά σας λιγότερο περίπλοκο, πιο εύκολο στη δοκιμή και τη συντήρηση.

Μπορείτε να μειώσετε την κυκλωματική πολυπλοκότητα στο πρόγραμμά σας αντικαθιστώντας τις κατασκευές υπό όρους με πολυμορφισμό. Κατά τη χρήση του πολυμορφισμού, μπορείτε να προσθέσετε μεγάλη ευελιξία στον κώδικά σας - ο κώδικάς σας γίνεται πιο δοκιμή και μπορείτε να προσθέσετε, να επεξεργαστείτε ή ακόμη και να αφαιρέσετε συνθήκες χωρίς μεγάλη αλλαγή στον κώδικά σας. Ουσιαστικά, όσο μικρότερη είναι η αξία της κυκλικής πολυπλοκότητας, τόσο πιο εύκολος είναι ο αναγνώστης, ο έλεγχος και η συντήρησή σας. Σε ορισμένες περιπτώσεις, θα συνιστούσα να επωφεληθείτε από τα πρότυπα σχεδιασμού συμπεριφοράς, όπως το σχέδιο σχεδιασμού στρατηγικής για να μειώσετε την κυκλωματική πολυπλοκότητα στον κώδικά σας.

$config[zx-auto] not found$config[zx-overlay] not found