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

Μετρήστε την ποιότητα του κώδικα .Net με το NDepend

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

Τα εργαλεία ανάλυσης στατικού κώδικα χρησιμοποιούνται για τη μέτρηση της ποιότητας του κώδικα σε μια εφαρμογή χωρίς να χρειάζεται να εκτελέσουν την εφαρμογή. Υπάρχουν πολλά εργαλεία ανάλυσης στατικού κώδικα για το .Net. Σε αυτά περιλαμβάνονται τα FxCop, StyleCop, ReSharper, CodeIt.Right, NDepend κ.λπ. Αυτό το άρθρο παρουσιάζει μια συζήτηση για το πώς μπορούμε να χρησιμοποιήσουμε το NDepend για να απεικονίσουμε την ποιότητα του κώδικα και να υιοθετήσουμε μέτρα για τη βελτίωσή του.

Τι είναι το NDepend και γιατί το χρησιμοποιείτε;

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

Το NDepend αποθηκεύει τα αποτελέσματα κάθε ανάλυσης, ώστε να μπορείτε να συγκρίνετε τα αποτελέσματα αφού βελτιώσετε την κάλυψη του κώδικα ή την ποιότητα του κώδικα. Μπορεί να εκτελεστεί τόσο ως αυτόνομη εφαρμογή όσο και ως επέκταση στο Visual Studio. Και μπορείτε να επωφεληθείτε από την επέκταση NDepend Azure DevOps για να ενσωματώσετε το NDepend με τα έργα σας στο Azure.

Τα παρακάτω είναι μερικά από τα εντυπωσιακά χαρακτηριστικά του NDepend:

  • Μεγάλο σύνολο κανόνων κώδικα για έλεγχο της συμμόρφωσης
  • Πολλά γραφήματα και διαγράμματα για την προβολή μετρήσεων κώδικα
  • Ενσωματώνεται όμορφα με το Visual Studio 2010, 2012, 2013, 2015 και 2017
  • Σας δίνει τη δυνατότητα να εξερευνήσετε τις εξαρτήσεις μεταξύ των ενοτήτων
  • Παρέχει CQLinq (Code Query over LINQ) για προσαρμογή της ανάλυσης
  • Μετρά την κάλυψη κώδικα
  • Προσδιορίζει τον δύσκολο στη συντήρηση κώδικα και εκτιμά το τεχνικό χρέος
  • Δημιουργεί διαγράμματα τάσεων

Ξεκινώντας με το NDepend

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

Μόλις αποσυμπιέσετε το αρχείο .zip του προγράμματος εγκατάστασης NDepend, θα βρείτε τα ακόλουθα αρχεία μέσα:

  1. NDepend.Console - χρησιμοποιείται για ενσωμάτωση στη διαδικασία κατασκευής
  2. NDepend.PowerTools - μια συλλογή στατικών αναλυτών ανοιχτού κώδικα
  3. NDepend.VisualStudioExtension.Installer - εγκαθιστά την επέκταση Visual Studio για NDepend
  4. VisualNDepend - ένας πελάτης GUI για το NDepend

Μπορείτε να εγκαταστήσετε την επέκταση του Visual Studio του NDepend με έναν από τους ακόλουθους δύο τρόπους:

  1. Εκτελέστε το NDepend.VisualStudioExtension.Installer
  2. Εκτελέστε το VisualNDepend και επιλέξτε "Εγκατάσταση Visual Studio Extension"

Μόλις εγκατασταθεί η Επέκταση του Visual Studio για το NDepend, μπορείτε να αξιοποιήσετε τις μετρήσεις, τους κανόνες, τις αναφορές, τα γραφήματα, τα αποτελέσματα του αναλυτή και τα εργαλεία μέσα από το Visual Studio IDE. Μπορείτε επίσης να επωφεληθείτε από το Visual NDepend για να αναλύσετε τις λύσεις και τα έργα σας χωρίς να χρειάζεται να ξεκινήσετε το Visual Studio.

Η επέκταση Visual Studio για το NDepend είναι διαθέσιμη για το Visual Studio 2010 έως το Visual Studio 2017. Σημειώστε ότι το χρησιμοποιώ με το Visual Studio 2017.

Ανάλυση πηγαίου κώδικα με το NDepend

Για να ξεκινήσετε την ανάλυση του πηγαίου κώδικα, μπορείτε να κάνετε κλικ στο "Ανάλυση λύσεων VS και έργων VS". Οι άλλες διαθέσιμες επιλογές είναι «Ανάλυση. Συγκροτήματα καθαρού σε φάκελο», «Ανάλυση ενός συνόλου συγκροτημάτων .Net» και «Σύγκριση 2 εκδόσεων μιας βάσης κώδικα». Αυτή η τελευταία επιλογή σάς επιτρέπει να συγκρίνετε δύο εκδόσεις - ένα ωραίο χαρακτηριστικό!

Για λόγους απλότητας, θα χρησιμοποιώ τον πηγαίο κώδικα από ένα από τα πρόσφατα άρθρα μου εδώ ("Πώς να χρησιμοποιήσω το Lamar στο ASP.Net Core"). Μόλις κάνετε κλικ στο "Ανάλυση λύσεων VS και έργων VS", θα εμφανιστεί ένα νέο παράθυρο όπως φαίνεται στο Σχήμα 1 παρακάτω.

Τώρα μπορείτε να κάνετε κλικ στο «Αναζήτηση» και να καθορίσετε το αρχείο λύσης του έργου που θέλετε να αναλύσει η NDepend.

Τέλος, κάντε κλικ στο "Ανάλυση ενός ενιαίου συγκροτήματος .Net" για να ξεκινήσετε την ανάλυση όπως φαίνεται στο σχήμα 3 παρακάτω.

Αυτό θα εκτελέσει ανάλυση κώδικα στο επιλεγμένο έργο. Όταν ολοκληρωθεί η ανάλυση, το NDepend θα εμφανίσει ένα παράθυρο με τις ακόλουθες επιλογές:

  • Προβολή πίνακα ελέγχου NDepend
  • Εμφάνιση αλληλεπιδραστικού γραφήματος NDepend
  • Κανόνες κώδικα ανεξάρτητου προγράμματος περιήγησης
  • Κλείσιμο του διαλόγου

Ας επιλέξουμε να δούμε τον πίνακα ελέγχου NDepend. Δείτε πώς φαίνεται η έξοδος:

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

NΑξαρτώμενα χαρακτηριστικά

Γράφημα εξάρτησης και πίνακας εξάρτησης

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

Διαγράμματα τάσεων

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

Κυκλωματική πολυπλοκότητα

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

Ερώτημα χρησιμοποιώντας CQLinq

Το CQLinq είναι ένα από τα πιο εντυπωσιακά χαρακτηριστικά του NDepend. Το CQLinq σάς δίνει τη δυνατότητα να κάνετε ερώτημα .Net code χρησιμοποιώντας το LINQ. Μπορείτε να επωφεληθείτε από το CQLinq για να ζητήσετε κώδικα χρέους, ζητήματα, κανόνες και πύλες ποιότητας.

Ας δούμε ένα παράδειγμα. Το ακόλουθο ερώτημα CQLinq εμφανίζει τα ονόματα μεθόδων και την κυκλωματική πολυπλοκότητα των μη αφηρημένων μεθόδων που έχουν κυκλωματική πολυπλοκότητα μεγαλύτερη από 20, ταξινομημένα με φθίνουσα σειρά της τιμής της κυκλωματικής πολυπλοκότητας.

από το m στο Application.Methods

όπου m.CyclomaticComplexity> = 20 &&! m.IsAb Abstract

κατά παραγγελία m.CyclomaticComplexity φθίνουσα

επιλέξτε νέο {m, m.CyclomaticComplexity}

Εδώ είναι ένα άλλο παράδειγμα ενός ερωτήματος CQLinq. Αυτό όταν εκτελεστεί θα εμφανίσει τα ονόματα των μεθόδων που έχουν περισσότερες από 100 γραμμές κώδικα.

από m στις μεθόδους όπου m.NbLinesOfCode> 100 επιλέξτε m

Για να μάθετε περισσότερα για το CQLinq, μπορείτε να ανατρέξετε στην τεκμηρίωση NDependen εδώ.

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

Εάν θέλετε έναν εξαιρετικό πόρο για την εκμάθηση του NDepend, προτείνω ανεπιφύλακτα το μάθημα Pluralsight "Practical NDepend" του Eric Dietrich.

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