what is mutation testing
Αυτό το σεμινάριο εξηγεί τι είναι το Mutation Testing, πώς να το εκτελέσετε και το Mutation Testing types με παραδείγματα:
Τι είναι η δοκιμή μετάλλαξης;
Η δοκιμή μετάλλαξης είναι μια τεχνική δοκιμής βασισμένη σε σφάλματα όπου παραλλαγές ενός προγράμματος λογισμικού υπόκεινται στο σύνολο δεδομένων δοκιμής. Αυτό γίνεται για να προσδιοριστεί η αποτελεσματικότητα του σετ δοκιμής στην απομόνωση των αποκλίσεων.
Ακούγεται λίγο περίπλοκο, έτσι δεν είναι;
Τι θα μάθετε:
Δοκιμή μετάλλαξης
Το Mutation Testing (MT) προχωρά πολύ, από τη δεκαετία του '70 όπου προτάθηκε για πρώτη φορά ως σχολικό έργο. Διαγράφηκε καθώς ήταν πολύ απαιτητική. Ωστόσο, καθώς οι άνθρωποι συνέχισαν να αναπτύσσουν πιο προηγμένους υπολογιστές, αργά επέστρεψε και είναι τώρα μία από τις πιο δημοφιλείς τεχνικές δοκιμών.
Ορισμός δοκιμής μετάλλαξης
Το MT είναι επίσης γνωστό ως δοκιμές βάσει σφαλμάτων, μετάλλαξη προγράμματος, δοκιμές βάσει σφαλμάτων, ή ανάλυση μετάλλαξης .
Όπως υποδηλώνει το όνομα, ο έλεγχος μετάλλαξης είναι ένας τύπος δοκιμής λογισμικού που βασίζεται σε αλλαγές ή μεταλλάξεις. Οι μικροσκοπικές αλλαγές εισάγονται στον πηγαίο κώδικα για να ελέγξουν εάν οι καθορισμένες περιπτώσεις δοκιμής μπορούν να ανιχνεύσουν σφάλματα στον κώδικα.
Η ιδανική περίπτωση είναι ότι καμία από τις δοκιμαστικές περιπτώσεις δεν πρέπει να περάσει. Εάν η δοκιμή περάσει, τότε σημαίνει ότι υπάρχει κάποιο σφάλμα στον κώδικα. Λέμε ότι έμεινε ο μεταλλάκτης (η τροποποιημένη έκδοση του κώδικα μας). Εάν η δοκιμή αποτύχει, τότε δεν υπάρχει σφάλμα στον κώδικα και ο μεταλλάκτης σκοτώθηκε. Στόχος μας είναι να σκοτώσουμε όλους τους μεταλλάκτες.
Η δοκιμή μετάλλαξης βοηθά επίσης να δοκιμάσετε την ποιότητα των καθορισμένων περιπτώσεων δοκιμής ή των δοκιμαστικών σουιτών με μια προσπάθεια να γράψετε πιο αποτελεσματικές περιπτώσεις δοκιμών. Όσο περισσότεροι μεταλλάκτες μπορούμε να σκοτώσουμε, τόσο υψηλότερη είναι η ποιότητα των δοκιμών μας.
Έννοιες δοκιμής μετάλλαξης
Προτού συζητήσουμε περαιτέρω τις δοκιμές μετάλλαξης, ας διερευνήσουμε μερικές έννοιες που θα συναντήσουμε.
# 1) Μεταλλάξεις: Είναι απλώς η μεταλλαγμένη έκδοση του πηγαίου κώδικα. Είναι ο κωδικός που περιέχει τις μικρές αλλαγές. Όταν τα δεδομένα δοκιμής εκτελούνται μέσω του μεταλλάκτη, θα πρέπει ιδανικά να μας δώσει διαφορετικά αποτελέσματα από τον αρχικό πηγαίο κώδικα. Οι μεταλλάκτες καλούνται επίσης μεταλλαγμένα προγράμματα .
Υπάρχουν διαφορετικοί τύποι μεταλλάξεων. Αυτά είναι τα εξής:
- Επιβίωσε μεταλλάκτες: Όπως έχουμε αναφέρει, αυτά είναι τα μεταλλάγματα που είναι ακόμα ζωντανά μετά την εκτέλεση δεδομένων δοκιμής μέσω των αρχικών και μεταλλαγμένων παραλλαγών του πηγαίου κώδικα. Αυτά πρέπει να σκοτωθούν. Είναι επίσης γνωστοί ως ζωντανοί μεταλλάκτες.
- Σκοτωμένοι μεταλλάκτες: Πρόκειται για μεταλλάξεις που σκοτώνονται μετά από έλεγχο μετάλλαξης. Τα λαμβάνουμε όταν έχουμε διαφορετικά αποτελέσματα από την αρχική και μεταλλαγμένη έκδοση του πηγαίου κώδικα.
- Ισοδύναμοι μεταλλάκτες: Αυτά σχετίζονται στενά με τα ζωντανά μεταλλάγματα, καθώς είναι «ζωντανά» ακόμη και μετά την εκτέλεση δεδομένων δοκιμής μέσω αυτών. Αυτό που τους διαφοροποιεί από τους άλλους είναι ότι έχουν το ίδιο νόημα με τον αρχικό πηγαίο κώδικα, παρόλο που μπορεί να έχουν διαφορετική σύνταξη.
# 2) Μεταλλάκτες / τελεστές μετάλλαξης: Αυτά είναι που καθιστούν δυνατή τις μεταλλάξεις, είναι στο «κάθισμα του οδηγού». Βασικά καθορίζουν το είδος της αλλαγής ή της αλλαγής που πρέπει να κάνουν στον πηγαίο κώδικα ώστε να υπάρχει μια μεταλλαγμένη έκδοση. Μπορούν να αναφέρονται ως σφάλματα ή κανόνες μετάλλαξης .
# 3) Βαθμολογία μετάλλαξης: Αυτή είναι μια βαθμολογία με βάση τον αριθμό των μεταλλαγμένων.
Υπολογίζεται χρησιμοποιώντας τον παρακάτω τύπο:
Σημειώστε ότι, ισοδύναμοι μεταλλάκτες δεν λαμβάνονται υπόψη κατά τον υπολογισμό της βαθμολογίας μετάλλαξης. Η βαθμολογία μετάλλαξης είναι επίσης γνωστή ως επάρκεια μετάλλαξης . Στόχος μας πρέπει να είναι να επιτύχουμε υψηλό σκορ μετάλλαξης.
Πώς να κάνετε δοκιμές μετάλλαξης
Βήμα 1: Ας γράψουμε τη δοκιμαστική μονάδα Jasmine.
Test Σουίτα (Γιασεμί)
describe('User', function() { it('should compare the two numbers from user input', function(){ expect(20).toBeGreaterThan(5); }) });
Βήμα 2: Γράψτε τον αρχικό κωδικό.
Αρχικός κωδικός (Javascript)
const user_info = () => { mother_age = parseInt(prompt('Enter mother's age')) daughter_age = parseInt(prompt('Enter daughter's age')) if (mother_age > daughter_age) { alert(`Daughter's age is ${daughter_age}. Mother's age is ${mother_age}. Welcome to the Mother-Daughter program`) } else { alert(`Daughter's age: ${daughter_age}, is more than mother's age: ${mother_age}. Please enter correct ages`) } } user_info();
Βήμα # 3: Στη συνέχεια, θα εκτελέσουμε τη δοκιμή μέσω του αρχικού κώδικα για να διασφαλίσουμε ότι δεν έχουμε αποτύχει στις δοκιμές από την αρχή. Πρέπει να έχουμε κάποια έξοδο που να δηλώνει ότι έχουμε πράγματι γράψει ένα τεστ με μηδενικές αποτυχίες.
Για παράδειγμα:
τελείωσε σε 0,019s 1 προδιαγραφή, 0 αποτυχίες, τυχαία με το σπόρο 31435
Το αποτέλεσμα του αρχικού κώδικα:
Daughter's age is 5. Mother's age is 20. Welcome to the Mother-Daughter program
Βήμα # 4: Εισαγάγετε το μετάλλαγμα. Σε αυτήν την περίπτωση, αλλάζουμε το μεγαλύτερος από τελεστής (mother_age> daughter_age) σε α μικρότερο από τελεστής (mother_age) Κωδικός μετάλλαξης (Javascript) Βήμα # 5: Στη συνέχεια εκτελούμε τον έλεγχο μέσω του κωδικού μετάλλαξης. Ακολουθούν τα αποτελέσματα των δοκιμών: τελείωσε σε 0,017s 1 προδιαγραφή, 0 αποτυχίες, τυχαία με το σπόρο 89555 Αποτέλεσμα κωδικού μετάλλαξης: Βήμα # 6: Συγκρίνετε τα αποτελέσματα από την αρχική έκδοση και την έκδοση μετάλλαξης. Σε αυτήν την περίπτωση, είναι διαφορετικά, ακόμα κι αν χρησιμοποιήθηκε η ίδια δοκιμαστική σουίτα. Επομένως, σκοτώσαμε τον μεταλλάκτη μας. Επομένως, η δοκιμαστική σουίτα είναι καλή. Υπάρχουν διάφοροι τύποι μεταλλάξεων. Αυτά εξηγούνται παρακάτω. Εδώ, παρουσιάζουμε μια μετάλλαξη αλλάζοντας την παράμετρο και / ή τις σταθερές τιμές, συνήθως με +/- 1. Παράδειγμα: Αρχικός κώδικας (Javascript) Εάν ο παραπάνω κώδικας προοριζόταν να πολλαπλασιάσει τους ζυγούς αριθμούς όπου Εγώ<4 , τότε η μετάλλαξη τιμής θα σήμαινε την αλλαγή της αρχικοποίησης σε ας i = 1 . Παράδειγμα: Κωδικός μετάλλαξης (Javascript) Εδώ, διαγράφουμε ή αντιγράφουμε μια δήλωση σε ένα μπλοκ κώδικα. Θα μπορούσαμε επίσης να αναδιατάξουμε τις δηλώσεις σε ένα μπλοκ κώδικα. Σε ένα μπλοκ if-else, για παράδειγμα, θα μπορούσαμε να διαγράψουμε το άλλο μέρος ή ακόμα και ολόκληρο το μπλοκ if-else. Παράδειγμα: Αρχικός κώδικας (Javascript) Παράδειγμα: Κωδικός μετάλλαξης (Javascript) Ο στόχος εδώ είναι ο κώδικας που λαμβάνει αποφάσεις, για παράδειγμα, συγκρίσεις αξίας. Μπορούμε να αλλάξουμε > έως< όπως στο παράδειγμα του προγράμματος Μητέρας-Κόρης. Άλλοι χειριστές που μπορούμε να αλλάξουμε περιλαμβάνουν τα εξής: Τα πλεονεκτήματα του Mutation Testing (MT) περιλαμβάνουν: Τα μειονεκτήματα του Mutation Testing (MT) περιλαμβάνουν: Τα εργαλεία είναι βολικά για να επιταχύνουν τη διαδικασία παραγωγής μεταλλαγμένων. Εδώ είναι μερικά εργαλεία που μπορούμε να χρησιμοποιήσουμε στο MT: Stryker, Jumble, PIT και Insure ++. Ας μάθουμε από ένα παράδειγμα: Ας πούμε, υπάρχει ένας ιστότοπος νοσοκομείου που επιτρέπει στους νέους χρήστες να εγγραφούν. Διαβάζει την ημερομηνία γέννησης ή την ηλικία του ασθενούς. Εάν είναι μεγαλύτερη από 14, ορίζει έναν γενικό ιατρό ως τον κύριο γιατρό τους. Για να γίνει αυτό, επικαλείται τη λειτουργία «γενικού ιατρού» που βρίσκει τον διαθέσιμο γιατρό. Τώρα, μπορεί να υπάρχει άλλη λειτουργικότητα. Ίσως, ασθενείς κάτω των 13 ετών να ανατεθούν σε παιδίατρο και ούτω καθεξής. Αλλά θα πάρουμε μόνο την υπόθεση ηλικίας άνω των 14 ετών. Αυτό μπορεί να μοιάζει με τον κώδικα: 1) Διαβάστε την ηλικία Λάβετε υπόψη ότι οι παραπάνω γραμμές κώδικα δεν είναι συγκεκριμένες για καμία γλώσσα προγραμματισμού και δεν θα εκτελεστούν. Είναι απλώς υποθετικό. Ως ελεγκτής, εάν το σύνολο δεδομένων μου είναι 14, 15, 0, 13 - ορισμένοι τυχαίοι αριθμοί. Ο στόχος είναι να ελέγξετε εάν το σύνολο δεδομένων των 4 τιμών (14, 15, 0 και 3) είναι κατάλληλο για τον εντοπισμό όλων των πιθανών προβλημάτων με αυτόν τον κώδικα. Διαβάστε επίσης => Συμβουλές για το σχεδιασμό δεδομένων δοκιμής πριν από την εκτέλεση των δοκιμαστικών σας περιπτώσεων Πώς επιτυγχάνεται αυτό το Mutation Testing; Πρώτα απ 'όλα, δημιουργείτε μεταλλάξεις - παραλλαγές του προγράμματος. Ένας μεταλλάκτης δεν είναι παρά ένα πρόγραμμα που γράφεται ως απόκλιση. Περιέχει ένα αυτοπροσαρμοσμένο σφάλμα. Παραδείγματα είναι: Αυτές οι αντικαταστάσεις καλούνται επίσης «Χειριστές μετάλλαξης». Επιτρέψτε μου να σας δείξω παραδείγματα: Mutant # 1: Σχεσιακός χειριστήςαντικατάσταση 1) Διαβάστε την ηλικία Μετάλλαξη # 2: 1) Διαβάστε την ηλικία Μετάλλαξη # 3: 1) Διαβάστε την ηλικία Μετάλλαξη # 4: 1) Διαβάστε την ηλικία Mutant # 5: Κατάργηση δήλωσης 1) Διαβάστε την ηλικία Μετάλλαξη # 6: Εισαγωγή απόλυτης τιμής 1) Διαβάστε την ηλικία Μετάλλαξη # 7: Λανθασμένη σύνταξη 1) Διαβάστε την ηλικία Mutant # 8: Κάνει το ίδιο πράγμα με το αρχικό τεστ 1) Διαβάστε την ηλικία Μόλις δημιουργηθούν όλοι οι μεταλλάκτες. Υποβάλλονται στο σύνολο δεδομένων δοκιμής. Το σύνολο μας είναι 14, 15, 0 και 13. Ποιο από αυτά τα μεταλλάγματα θα βρει το σύνολο δεδομένων μας; Μάθετε στον παρακάτω πίνακα: (Κάντε κλικ στην εικόνα για μεγέθυνση) Όπως μπορείτε να δείτε, η τιμή δεδομένων 14 εντοπίζει αστοχίες όταν εκτελείται, Mutant 2, 3 και 4. Ή, 14 σκοτώνει μεταλλάκτες 2, 3 & 4. Όμως, είναι αναποτελεσματικό έναντι, 1, 6 και 8. Εάν το σύνολο δεδομένων σας σκοτώνει όλους τους μεταλλάκτες, είναι αποτελεσματικό. Διαφορετικά, συμπεριλάβετε περισσότερα ή καλύτερα δεδομένα δοκιμών. Δεν είναι απαραίτητο για κάθε τιμή στο σύνολο δεδομένων να σκοτώνει όλους τους μεταλλάκτες. Αλλά μαζί, πρέπει να σκοτώσουν όλους.Για παράδειγμα:14 σκοτώνει 2, 3 και 4. 15 σκοτώνει 1, 2 και 4. Και ούτω καθεξής. Τι γίνεται με τα 5, 7 και 8; Μετάλλαξη # 5 - είναι η παρουσία προγράμματος που θα αποτύχει ανεξάρτητα από οποιαδήποτε τιμή δεδομένων που δίνετε. Αυτό συμβαίνει επειδή δεν θα κάνει προγραμματισμό τόσο για έγκυρες όσο και για μη έγκυρες τιμές. Μετάλλαξη # 7 - θα είναι ένα σφάλμα μεταγλώττισης. Ή στην περίπτωση μιας γλώσσας σεναρίου ένα σφάλμα που θα αποτρέψει την εκτέλεση. Μετάλλαξη # 8 - είναι το ίδιο με το κύριο πρόγραμμα. Όπως μπορείτε να δείτε, τα παραπάνω μεταλλάγματα δεν είναι καθόλου χρήσιμα. Επομένως, οι μεταλλάξεις που πρέπει να αποφεύγονται είναι: Σκέφτεστε, εάν χρειάζεται τόσο μεγάλη προσπάθεια, τι θα συμβεί όταν πρέπει να δοκιμάσω μεγάλα δείγματα κώδικα; Η δοκιμή μετάλλαξης βασίζεται σε δύο πράγματα: Ετσι, εστιάζει στη μικρότερη μονάδα κώδικα και δίνει την πίστη του στην ικανότητα του προγραμματιστή να κλιμακώσει τις δοκιμές μετάλλαξης σε μεγαλύτερα προγράμματα. Αυτό το σεμινάριο κάλυψε τον ορισμό, τους τύπους και τα βήματα δοκιμών μετάλλαξης για την εκτέλεση αυτής της δοκιμής λεπτομερώς με παραδείγματα. Ελπίζουμε να απολαύσατε την ανάγνωση και την εκμάθηση αυτής της ενδιαφέρουσας τεχνικής δοκιμών - Mutation Testing. Σχετικά με τον Συγγραφέα: Αυτό το άρθρο γράφτηκε από το μέλος της ομάδας STH Swati S. Μοιραστείτε τα σχόλια, τις ερωτήσεις και τις σκέψεις σας παρακάτω. const user_info = () =>{ mother_age = parseInt(prompt('Enter mother's age')) daughter_age = parseInt(prompt('Enter daughter's age')) if (mother_age
Daughter's age: 5, is more than mother's age: 20. Please enter correct ages
Τύποι δοκιμών μετάλλαξης
# 1) Μεταβολή τιμής
let arr = (2,3,4,5) for(let i=0; i
let arr = (2,3,4,5) for(let i=1; i
# 2) Μετάλλαξη δήλωσης
let arr = (2,3,4,5) for(let i=0; i
let arr = (2,3,4,5) for(let i=0; i
# 3) Μετάλλαξη απόφασης
Αρχικός χειριστής Μεταλλαγμένος χειριστής 1 <= > = δύο > = == 3 === == 4 και ή 5 || &&
Εργαλεία δοκιμής μετάλλαξης
Περισσότερα για τη δοκιμή μετάλλαξης
δύο) Εάν η ηλικία> 14
3) Γιατρός = Γενικός Ιατρός ()
4) Τέλος εαν
2) Εάν ηλικία με<’
3) Γιατρός = Γενικός Ιατρός ()
4) Τερματισμός εάν
2) Εάν η ηλικία = 14 'Αλλαγή> με ='
3) Γιατρός = Γενικός Ιατρός ()
4) Τερματισμός εάν
2) Εάν η ηλικία> = 14 «Αλλαγή του> με> =»
3) Γιατρός = Γενικός Ιατρός ()
4) Τερματισμός εάν
2) Εάν ηλικία με<=’
3) Γιατρός = Γενικός Ιατρός ()
4) Τερματισμός εάν
2) Εάν η ηλικία = 14
3) «κατάργηση της δήλωσης ανάθεσης γιατρού»
4) Τερματισμός εάν
2) Εάν η ηλικία> 14 ετών
3) Γιατρός = Mr.X (Απόλυτη εισαγωγή αξίας - ας πούμε ότι το X είναι παιδίατρος)
4) Τερματισμός εάν
2) Εάν η ηλικία %% 14 (λανθασμένη σύνταξη)
3) Γιατρός = Γενικός Ιατρός ()
4) Τερματισμός εάν
2) Εάν η ηλικία> 14 & ηλικία> 14 'σημαίνει το ίδιο πράγμα με την ηλικία> 14'
3) Γιατρός = Γενικός Ιατρός ()
4) Τερματισμός εάν
Σημεία προς σημείωση
ποιος είναι υπεύθυνος για την επιχειρηματική αξία που παρέχεται από μια ομάδα scrum;
συμπέρασμα
Συνιστώμενη ανάγνωση