Code Εργαλείο Κάλυψης: Δοκιμή Δήλωσης, Υποκαταστήματος και Αποφάσεων

⚡ Έξυπνη Σύνοψη

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

  • 🎯 Ορισμός: Code Η κάλυψη ποσοτικοποιεί το ποσοστό του πηγαίου κώδικα που εκτελούν στην πραγματικότητα οι δοκιμές σας.
  • 📊 Μέθοδοι: Υπάρχουν πέντε μέθοδοι — δήλωση, απόφαση, διακλάδωση, συνθήκη και κάλυψη μηχανής πεπερασμένων καταστάσεων.
  • 🧩 Δήλωση έναντι Υποκαταστήματος: Η κάλυψη δηλώσεων ελέγχει τις γραμμές, ενώ η κάλυψη υποκαταστημάτων ελέγχει κάθε αποτέλεσμα απόφασης.
  • Code έναντι Λειτουργικού: Code Κώδικας που εφαρμόζεται για τα μέτρα κάλυψης· απαιτήσεις που καλύπτονται από τα λειτουργικά μέτρα κάλυψης.
  • Εργαλεία: Cobertura, OpenClover, EMMA και Sonar αυτοματοποιούν τη μέτρηση της κάλυψης.
  • 🤖 Βοήθεια AI: Τα εργαλεία τεχνητής νοημοσύνης δημιουργούν δοκιμές και αναδεικνύουν αυτόματα μη δοκιμασμένα κενά κάλυψης υψηλού κινδύνου.

Code Εκπαιδευτικό φυλλάδιο κάλυψης

Τι είναι Code Κάλυψη?

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

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

Γιατί να χρησιμοποιήσετε Code Δοκιμή Κάλυψης;

Ακολουθούν ορισμένοι κύριοι λόγοι για τη χρήση κάλυψης κώδικα:

  • Σας βοηθά να μετρήσετε την αποτελεσματικότητα της εφαρμογής των δοκιμών.
  • Προσφέρει μια ποσοτική μέτρηση των δοκιμών.
  • Καθορίζει τον βαθμό στον οποίο έχει δοκιμαστεί ο πηγαίος κώδικας.

Code Μέθοδοι Κάλυψης

Οι κύριες μέθοδοι κάλυψης κώδικα είναι οι εξής:

  • Κάλυψη δήλωσης
  • Κάλυψη απόφασης
  • Κάλυψη Υποκαταστήματος
  • Toggle Κάλυψη
  • Κάλυψη FSM

Κάλυψη δήλωσης

Κάλυψη δήλωσης είναι μια τεχνική ελέγχου λευκού κουτιού (white box testing) στην οποία όλες οι εκτελέσιμες εντολές στον πηγαίο κώδικα εκτελούνται τουλάχιστον μία φορά. Χρησιμοποιείται για τον υπολογισμό του αριθμού των εντολών στον πηγαίο κώδικα που έχουν εκτελεστεί. Ο κύριος σκοπός της Κάλυψης Δηλώσεων είναι να καλύψει όλες τις πιθανές διαδρομές, γραμμές και εντολές στον πηγαίο κώδικα.

Η κάλυψη δηλώσεων χρησιμοποιείται για την εξαγωγή σεναρίων με βάση τη δομή του υπό δοκιμή κώδικα.

Κάλυψη δήλωσης

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

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

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

Πηγή Code:

Prints (int a, int b) {                       ------------  Printsum is a function
    int result = a + b;
    If (result > 0)
        Print ("Positive", result)
    Else
        Print ("Negative", result)
    }                                        -----------   End of the source code

Σενάριο 1: Αν Α = 3, Β = 9

Σενάριο Κάλυψης Δήλωσης 1

Οι εντολές που σημειώνονται με κίτρινο χρώμα είναι αυτές που εκτελούνται σύμφωνα με το σενάριο. Αριθμός εκτελεσμένων εντολών = 5, Συνολικός αριθμός εντολών = 7, άρα Κάλυψη Δήλωσης = 5/7 = 71%.

Σενάριο 2: Αν Α = -3, Β = -9

Σενάριο Κάλυψης Δήλωσης 2

Οι εντολές που σημειώνονται με κίτρινο χρώμα είναι αυτές που εκτελούνται σύμφωνα με το σενάριο. Αριθμός εκτελεσμένων εντολών = 6, Συνολικός αριθμός εντολών = 7, άρα Κάλυψη Δήλωσης = 6/7 = 85%.

Συνολικά όμως, αν δείτε, όλες οι δηλώσεις καλύπτονται και από τα δύο σενάρια. Έτσι, μπορούμε να συμπεράνουμε ότι η συνολική κάλυψη των δηλώσεων είναι 100%.

Τι καλύπτεται από την κάλυψη δήλωσης;

  1. Αχρησιμοποίητες δηλώσεις
  2. Νεκρός Code
  3. Αχρησιμοποίητα Υποκαταστήματα
  4. Δηλώσεις που λείπουν

Δοκιμή κάλυψης απόφασης

Κάλυψη απόφασης είναι μια τεχνική ελέγχου λευκού κουτιού (white box testing) που αναφέρει τα αληθή ή ψευδή αποτελέσματα κάθε λογικής έκφρασης στον πηγαίο κώδικα. Ο στόχος του ελέγχου κάλυψης αποφάσεων είναι να καλύψει και να επικυρώσει όλο τον προσβάσιμο πηγαίο κώδικα, ελέγχοντας και διασφαλίζοντας ότι κάθε κλάδος κάθε πιθανού σημείου απόφασης εκτελείται τουλάχιστον μία φορά.

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

Δοκιμή κάλυψης απόφασης

Παράδειγμα Κάλυψης Απόφασης

Σκεφτείτε τον ακόλουθο κώδικα:

Demo(int a) {
    If (a > 5)
        a = a * 3
    Print (a)
    }

Σενάριο 1: Η τιμή του a είναι 2. Το αποτέλεσμα της απόφασης είναι «Όχι». Αν επιλεγεί το (a>5), τότε η Κάλυψη Απόφασης = 50%.

Σενάριο 2: Η τιμή του a είναι 6. Το αποτέλεσμα της απόφασης είναι «Ναι». Αν επιλεγεί (a>5), τότε η Κάλυψη Απόφασης = 50%.

Δοκιμαστική θήκη Η τιμή του Α Παραγωγή Κάλυψη απόφασης
1 2 2 50%
2 6 18 50%

Δοκιμή Κάλυψης Υποκαταστημάτων

Κάλυψη Υποκαταστήματος είναι μια μέθοδος ελέγχου λευκού κουτιού (white box testing method) στην οποία ελέγχεται κάθε αποτέλεσμα από μια ενότητα κώδικα (δήλωση ή βρόχος). Ο σκοπός της κάλυψης διακλαδώσεων είναι να διασφαλιστεί ότι κάθε συνθήκη απόφασης από κάθε διακλάδωση εκτελείται τουλάχιστον μία φορά. Βοηθά στη μέτρηση κλασμάτων ανεξάρτητων τμημάτων κώδικα και στον εντοπισμό τμημάτων που δεν έχουν διακλαδώσεις.

Για παράδειγμα, εάν τα αποτελέσματα είναι δυαδικά, πρέπει να ελέγξετε τα αποτελέσματα True και False.

Ο τύπος για τον υπολογισμό της Κάλυψης Υποκαταστημάτων:

Φόρμουλα Κάλυψης Υποκαταστήματος

Παράδειγμα Κάλυψης Υποκαταστημάτων

Για να μάθετε την κάλυψη υποκαταστήματος, εξετάστε το ίδιο παράδειγμα που χρησιμοποιήθηκε προηγουμένως. Η Κάλυψη Υποκαταστήματος θα λάβει επίσης υπόψη την άνευ όρων διακλάδωση.

Δοκιμαστική θήκη Η τιμή του Α Παραγωγή Κάλυψη απόφασης Κάλυψη Υποκαταστήματος
1 2 2 50% 33%
2 6 18 50% 67%

Πλεονεκτήματα κάλυψης υποκαταστημάτων:

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

Δοκιμή κάλυψης κατάστασης

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

Για παράδειγμα, εάν μια έκφραση έχει λογικές πράξεις όπως ΚΑΙ, Ή ή XOR, αυτό υποδεικνύει τις συνολικές πιθανότητες. Η κάλυψη συνθήκης δεν εγγυάται πλήρη κάλυψη αποφάσεων.

Ο τύπος για τον υπολογισμό της Κάλυψης Συνθήκης:

Φόρμουλα κάλυψης πάθησης

Για μια έκφραση με δύο τελεστέους, υπάρχουν τέσσερις πιθανοί συνδυασμοί: TT, FF, TF και FT. Θεωρήστε την είσοδο X=3, Y=4 (x β) ΛΑΘΟΣ, που δίνει Κάλυψη Συνθήκης 1/4 = 25%.

Κάλυψη μηχανών πεπερασμένης κατάστασης

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

Ποιος τύπος Code Κάλυψη προς επιλογή

Αυτή είναι σίγουρα η πιο δύσκολη απάντηση. Για να επιλέξει μια μέθοδο κάλυψης, ο δοκιμαστής πρέπει να ελέγξει εάν:

  • ο υπό δοκιμή κώδικας έχει ένα ή περισσότερα μη ανακαλυφθέντα ελαττώματα,
  • το κόστος της πιθανής ποινής,
  • το κόστος της χαμένης φήμης,
  • το κόστος των χαμένων πωλήσεων, και ούτω καθεξής.

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

Code Κάλυψη έναντι Λειτουργικής Κάλυψης

Code Κάλυψη Λειτουργική Κάλυψη
Σας λέει πόσο καλά έχει εφαρμοστεί ο πηγαίος κώδικας από το δοκιμαστικό σας κέντρο. Μετράει πόσο καλά έχει καλυφθεί η λειτουργικότητα του σχεδιασμού από τον πάγκο δοκιμών σας.
Δεν χρησιμοποιεί ποτέ προδιαγραφές σχεδιασμού. Χρησιμοποιεί μια προδιαγραφή σχεδιασμού.
Εκτελείται από προγραμματιστές. Πραγματοποιήθηκε από δοκιμαστές.

Code Εργαλεία Κάλυψης

Ακολουθεί μια λίστα με σημαντικά εργαλεία κάλυψης κώδικα:

Όνομα εργαλείου Περιγραφή
Cobertura Ένα εργαλείο κάλυψης κώδικα ανοιχτού κώδικα. Μετρά την κάλυψη των δοκιμών οργανώνοντας μια βάση κώδικα και αναλύοντας ποιες γραμμές κώδικα εκτελούνται και ποιες όχι όταν εκτελείται η σουίτα δοκιμών.
Τριφύλλι Τριφύλλι (OpenClover) μειώνει επίσης τον χρόνο δοκιμών εκτελώντας μόνο τις δοκιμές που καλύπτουν τον κώδικα εφαρμογής που τροποποιήθηκε από την προηγούμενη έκδοση.
DevPartner Το DevPartner επιτρέπει στους προγραμματιστές να αναλύουν Java κώδικα για την ποιότητα και την πολυπλοκότητα του κώδικα.
Emma Το EMMA υποστηρίζει κάλυψη κλάσης, μεθόδου, γραμμής και βασικού μπλοκ, συγκεντρωτικά σε επίπεδα αρχείου πηγαίου κώδικα, κλάσης και μεθόδου.
Kalistick Το Kalistick είναι μια εφαρμογή τρίτου μέρους που αναλύει τον κώδικα από διαφορετικές οπτικές γωνίες.
CoView και CoAnt Ένα εργαλείο κάλυψης κώδικα για μετρήσεις, δημιουργία ψεύτικων αντικειμένων, δυνατότητα δοκιμής κώδικα, κάλυψη διαδρομών και κλάδων και πολλά άλλα.
Bullseye για C++ Το BullseyeCoverage είναι ένα εργαλείο κάλυψης κώδικα για C++ και C.
Sonar Το Sonar είναι ένα εργαλείο κάλυψης ανοιχτού κώδικα που σας βοηθά να διαχειρίζεστε την ποιότητα του κώδικα.

Πλεονεκτήματα και μειονεκτήματα χρήσης Code Κάλυψη

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

Συχνές Ερωτήσεις

Πολλές ομάδες στοχεύουν στο 70 έως 80% ως πρακτικό στόχο. Η επίτευξη του 100% σπάνια είναι οικονομικά αποδοτική. Εστιάζουν στην κάλυψη κρίσιμης λογικής υψηλού κινδύνου αντί να κυνηγούν έναν μόνο αριθμό σε ολόκληρη τη βάση κώδικα.

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

Code Η κάλυψη μετρά πόσο εκτελείται ο πηγαίος κώδικας κατά τη διάρκεια των δοκιμών. Η κάλυψη των δοκιμών είναι ευρύτερη, tracνα ελέγξετε πόσο καλά αντιμετωπίζουν οι δοκιμές τις απαιτήσεις, τα χαρακτηριστικά και τους κινδύνους. Code Η κάλυψη είναι ένα στοιχείο που εισάγεται στη συνολική κάλυψη των δοκιμών.

Όχι. Μπορείτε να φτάσετε σε 100% κάλυψη δήλωσης αφήνοντας τα κλαδιά μη δοκιμασμένα, όπως για παράδειγμα μια διαδρομή "else" που λείπει. Η κάλυψη κλαδιού (απόφασης) είναι ισχυρότερη επειδή ενσωματώνει την κάλυψη δήλωσης και ασκεί κάθε αποτέλεσμα.

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

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

OpenClover Μετρά την κάλυψη δηλώσεων, κλάδων και μεθόδων και συλλέγει πάνω από 20 μετρήσεις. Cobertura, ΕΜΜΑ, και JaCoCo υπάρχουν άλλες ευρέως χρησιμοποιούμενες δωρεάν επιλογές για Java έργα.

Η Τροποποιημένη Κάλυψη Συνθήκης/Απόφασης απαιτεί κάθε συνθήκη σε μια απόφαση να επηρεάζει ανεξάρτητα το αποτέλεσμα. Είναι αυστηρότερη από την κάλυψη υποκαταστήματος και επιβάλλεται για λογισμικό κρίσιμο για την ασφάλεια, όπως τα αεροηλεκτρονικά, σύμφωνα με το πρότυπο DO-178C.

Συνοψίστε αυτήν την ανάρτηση με: