Οδηγός κάλυψης κώδικα: Δοκιμή υποκαταστήματος, δήλωσης & απόφασης

Τι είναι η κάλυψη κωδικού;

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

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

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

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

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

Μέθοδοι Κάλυψης Κώδικα

Ακολουθούν κύριες μέθοδοι κάλυψης κώδικα

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

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

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

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

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

In Άσπρο Box Δοκιμές, ο ελεγκτής επικεντρώνεται στον τρόπο λειτουργίας του λογισμικού. Με άλλα λόγια, ο ελεγκτής θα επικεντρωθεί στην εσωτερική λειτουργία του πηγαίου κώδικα σχετικά με γραφήματα ροής ελέγχου ή διαγράμματα ροής.

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

Ας το καταλάβουμε αυτό με ένα παράδειγμα, πώς να υπολογίσετε την κάλυψη δηλώσεων.

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

Πηγαίος κώδικας:

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

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

Οι δηλώσεις που σημειώνονται με κίτρινο χρώμα είναι αυτές που εκτελούνται σύμφωνα με το σενάριο

Αριθμός εκτελεσμένων εντολών = 5, Συνολικός αριθμός εντολών = 7

Κάλυψη δήλωσης: 5/7 = 71%

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

Ομοίως θα δούμε το σενάριο 2,

Σενάριο 2:

Αν Α = -3, Β = -9

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

Οι δηλώσεις που σημειώνονται με κίτρινο χρώμα είναι αυτές που εκτελούνται σύμφωνα με το σενάριο.

Αριθμός εκτελεσμένων εντολών = 6

Συνολικός αριθμός δηλώσεων = 7

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

Κάλυψη δήλωσης: 6/7 = 85%

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

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

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

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

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

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

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

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

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

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

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

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

Σενάριο 1:

Η τιμή του είναι 2

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

Ο κωδικός που επισημαίνεται με κίτρινο θα εκτελεστεί. Εδώ ελέγχεται το αποτέλεσμα «Όχι» της απόφασης Εάν (α>5).

Κάλυψη απόφασης = 50%

Σενάριο 2:

Η τιμή του είναι 6

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

Ο κωδικός που επισημαίνεται με κίτρινο θα εκτελεστεί. Εδώ είναι επιλεγμένο το «Ναι» αποτέλεσμα της απόφασης Εάν (α>5).

Κάλυψη απόφασης = 50%

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

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

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

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

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

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

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

Για να μάθετε την κάλυψη υποκαταστημάτων, ας εξετάσουμε το ίδιο παράδειγμα που χρησιμοποιήθηκε νωρίτερα

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

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

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

Η Κάλυψη Υποκαταστήματος θα εξετάσει και το υποκατάστημα χωρίς όρους

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

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

Η δοκιμή κάλυψης κλάδου προσφέρει τα ακόλουθα πλεονεκτήματα:

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

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

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

Για παράδειγμα, εάν μια παράσταση έχει πράξεις Boolean όπως AND, OR, XOR, που υποδηλώνει συνολικές πιθανότητες.

Η κάλυψη συνθηκών δεν παρέχει εγγύηση για την πλήρη κάλυψη απόφασης.

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

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

Παράδειγμα:

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

Για την παραπάνω έκφραση, έχουμε 4 πιθανούς συνδυασμούς

  • TT
  • FF
  • TF
  • FT

Εξετάστε την ακόλουθη είσοδο

X = 3

Y = 4

ΑΛΗΘΙΝΗ Η κάλυψη κατάστασης είναι ¼ = 25%
A = 3

B = 4

(α>β) ΨΕΥΔΗΣ

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

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

Ποιος τύπος κάλυψης κωδικού να επιλέξετε

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

  • Ο υπό δοκιμή κώδικας έχει μεμονωμένα ή πολλαπλά ελαττώματα που δεν έχουν ανακαλυφθεί
  • κόστος της πιθανής ποινής
  • κόστος της χαμένης φήμης
  • κόστος χαμένης πώλησης κ.λπ.

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

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

Κάλυψη κώδικα Λειτουργική Κάλυψη
Η κάλυψη κώδικα σάς λέει πόσο καλά έχει ασκηθεί ο πηγαίος κώδικας από τον πάγκο δοκιμών σας. Η λειτουργική κάλυψη μετρά πόσο καλά έχει καλυφθεί η λειτουργικότητα του σχεδίου από τον πάγκο δοκιμών σας.
Μην χρησιμοποιείτε ποτέ προδιαγραφές σχεδίασης Χρησιμοποιήστε τις προδιαγραφές σχεδίασης
Έγινε από προγραμματιστές Έγινε από Testers

Εργαλεία κάλυψης κώδικα

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

Όνομα εργαλείου Descriptιόν
Cobertura Είναι ένα εργαλείο κάλυψης ανοιχτού κώδικα. Μετρά την κάλυψη δοκιμής οργανώνοντας μια βάση κώδικα και αναλύει ποιες γραμμές κώδικα εκτελούνται και ποιες δεν εκτελούνται όταν εκτελείται η δοκιμαστική σουίτα.
Τριφύλλι Το Clover μειώνει επίσης τον χρόνο δοκιμής εκτελώντας μόνο τις δοκιμές που καλύπτουν τον κώδικα εφαρμογής που τροποποιήθηκε από την προηγούμενη έκδοση.
DevPartner Το DevPartner επιτρέπει στους προγραμματιστές να αναλύουν Java κώδικας για την ποιότητα και την πολυπλοκότητα του κώδικα.
Emma Το EMMA υποστηρίζει κάλυψη κλάσεων, μεθόδου, γραμμής και μπλοκ βάσης, συγκεντρωτικού αρχείου προέλευσης, κλάσης και μεθόδου.
Kalistick Το Kaistick είναι μια εφαρμογή τρίτου μέρους που αναλύει τους κωδικούς με διαφορετικές οπτικές γωνίες.
CoView και CoAnt Το Λογισμικό Κωδικοποίησης είναι ένα εργαλείο κάλυψης κώδικα για μετρήσεις, δημιουργία εικονικών αντικειμένων, δυνατότητα δοκιμής κώδικα, κάλυψη διαδρομής και κλάδου κ.λπ.
Bullseye για C++ Το BulseyeCoverage είναι ένα εργαλείο κάλυψης κωδικών για C++ και C.
Sonar Το Sonar είναι ένα εργαλείο κάλυψης ανοιχτού κώδικα που σας βοηθά να διαχειριστείτε την ποιότητα του κώδικα.

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

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

Σύνοψη

  • Η κάλυψη κώδικα είναι ένα μέτρο που περιγράφει τον βαθμό στον οποίο έχει δοκιμαστεί ο πηγαίος κώδικας του προγράμματος
  • Σας βοηθά να μετρήσετε την αποτελεσματικότητα της εφαρμογής της δοκιμής
  • Πέντε μέθοδοι κάλυψης κωδικών είναι 1.) Κάλυψη δήλωσης 2.) Κάλυψη κατάστασης 3) Κάλυψη υποκαταστήματος 4) Toggle Κάλυψη 5) Κάλυψη FSM
  • Η κάλυψη δήλωσης περιλαμβάνει την εκτέλεση όλων των εκτελέσιμων δηλώσεων στον πηγαίο κώδικα τουλάχιστον μία φορά
  • Η κάλυψη απόφασης αναφέρει τα αληθή ή ψευδή αποτελέσματα κάθε έκφρασης Boole
  • Στην κάλυψη υποκαταστήματος, κάθε αποτέλεσμα από μια ενότητα κώδικα δοκιμάζεται
  • Το Conditional θα αποκαλύψει πώς αξιολογούνται οι μεταβλητές ή οι υποεκφράσεις στη δήλωση υπό όρους
  • Η κάλυψη μηχανών πεπερασμένης κατάστασης είναι σίγουρα ο πιο περίπλοκος τύπος μεθόδου κάλυψης κώδικα
  • Για να επιλέξει μια μέθοδο κάλυψης, ο ελεγκτής πρέπει να ελέγξει το κόστος της πιθανής ποινής, τη χαμένη φήμη, την απώλεια πώλησης κ.λπ.
  • Η κάλυψη κώδικα σάς λέει πόσο καλά έχει ασκηθεί ο πηγαίος κώδικας από τον πάγκο δοκιμών σας, ενώ η Λειτουργική κάλυψη μετρά πόσο καλά έχει καλυφθεί η λειτουργικότητα του σχεδίου
  • Cobertura, JTest, Clover, Emma, ​​Kaistick είναι λίγα σημαντικά εργαλεία κάλυψης κώδικα
  • Το Code Coverage σάς επιτρέπει να δημιουργήσετε επιπλέον δοκιμαστικές περιπτώσεις για να αυξήσετε την κάλυψη
  • Η κάλυψη κώδικα δεν σας βοηθά να προσδιορίσετε εάν δοκιμάσαμε όλες τις πιθανές τιμές μιας δυνατότητας