Κέρδη:
- Ικανότητα αναγνώρισης των τριών προσώπων ψευδο-εμπιστοσύνης (μη διεκδικητική, αυτοεπιβεβλημένη, ασήμαντη επιβεβαίωση) και εφαρμογή αντιδότων
- Δυνατότητα χρήσης δοκιμών μετάλλαξης και βαθμολογίας μετάλλαξης ως ακριβέστερο μέτρο ποιότητας από το ποσοστό κάλυψης με το εργαλείο ή το χέρι
- Δυνατότητα τοποθέτησης της τεχνητής νοημοσύνης ως κόκκινης ομάδας ενάντια στις δοκιμές και το κυνήγι για δοκιμαστικά κενά χωρίς να πέσετε στην παγίδα επαίνου
Στο επίκεντρο αυτής της ενότητας υπάρχει μια επαναλαμβανόμενη προειδοποίηση: ένα πράσινο λαμπερό δοκιμαστικό πάνελ δεν αποτελεί ένδειξη ποιότητας. Εάν οι δοκιμές σας δίνουν αυτοπεποίθηση, πρέπει να ξέρετε αν αυτή η εμπιστοσύνη είναι πραγματική ή ψεύτικη. Στην εποχή της τεχνητής νοημοσύνης (AI), αυτή η ερώτηση είναι πιο κρίσιμη από ποτέ, επειδή η τεχνητή νοημοσύνη είναι ικανή να παράγει ρευστές, ομαλές αλλά κούφιες δοκιμές. Η ψευδής εμπιστοσύνη — το να πιστεύει κανείς ότι το λογισμικό είναι σωστό επειδή τα τεστ είναι πράσινα, ενώ στην πραγματικότητα τα τεστ δεν επαληθεύουν τίποτα— είναι το πιο επικίνδυνο πράγμα που μπορεί να συμβεί σε μια ομάδα QA. γιατί δεν κρύβει ότι δεν υπάρχουν σφάλματα, αλλά ότι δεν μπορείτε να δείτε τα σφάλματα. Αυτή η ενότητα συνδυάζει τη φιλοσοφία επικύρωσης ολόκληρης της ενότητας σε έναν κλάδο: τη δοκιμή των δοκιμών σας.
Το χρυσό πρότυπο για τη μέτρηση της ποιότητας των δοκιμών: δοκιμή μετάλλαξης
Ο πιο ισχυρός τρόπος για να κατανοήσουμε εάν ένα τεστ προστατεύει πραγματικά ή όχι είναι ο έλεγχος μετάλλαξης (δοκιμή μετάλλαξης - μια τεχνική που παράγει σκόπιμες μικρές παραμορφώσεις/μεταλλάξεις στον πηγαίο κώδικα και μετρά εάν τα τεστ ανιχνεύουν αυτές τις παραμορφώσεις). Η λογική είναι απλή: αν σκόπιμα σπάσετε τον κώδικα (κάνοντας το + σε -, το > σε >=, το αληθές σε λάθος), μια καλή δοκιμαστική σουίτα θα πρέπει να συλλάβει αυτή τη διαφθορά και να γίνει κόκκινο. Εάν δεν συμβαίνει, αυτή η διαταραχή είναι μια μετάλλαξη που επιβίωσε - επομένως οι δοκιμές σας δεν διατηρούν αυτή τη συμπεριφορά.
Βαθμολογία μετάλλαξης = θανάτωση μετάλλαξης / ολική μετάλλαξη. Ένα πακέτο με κάλυψη γραμμής 90% μπορεί να έχει βαθμολογία μετάλλαξης 40%. Αυτό υποδεικνύει ότι οι γραμμές λειτουργούν αλλά η συμπεριφορά δεν επαληθεύεται. Η βαθμολογία μετάλλαξης είναι ένα πολύ πιο ειλικρινές μέτρο ποιότητας από την ποσοστιαία κάλυψη.
Συμβουλή: Υπάρχουν εργαλεία αυτόματης μετάλλαξης (PIT/Pitest για Java, Stryker για JavaScript/TypeScript, Stryker.NET για .NET, mutmut για Python). Αυτά δημιουργούν αυτόματα και δοκιμάζουν εκατοντάδες μεταλλάξεις. Εάν δεν έχετε εργαλείο, ακόμη και η χειροκίνητη μέθοδος "break the code test" είναι ανεκτίμητη για κρίσιμες λειτουργίες.
Τα τρία πρόσωπα της ψευδοεμπιστοσύνης και το αντίδοτό της
Μορφή ψευδο-καταπιστεύματος
σύμπτωμα
αντίδοτο
Δοκιμή χωρίς ισχυρισμό
Ο κώδικας λειτουργεί, τίποτα δεν επικυρώνεται
Αληθινός ισχυρισμός σε κάθε δοκιμή. δοκιμή με μετάλλαξη
τεστ αυτοεπιβεβαίωσης
Αναμενόμενο = έξοδος κώδικα
Υπολογίστε την αναμενόμενη τιμή ανεξάρτητα
Ασήμαντο ισχυρισμό
"not null", "200 επέστρεψε"
Επικύρωση επιχειρηματικού κανόνα/πραγματικού αποτελέσματος
Πλάνη μεγάλου εύρους
90% γραμμές, χαμηλή προστασία
Δείτε το σκορ μετάλλαξης
Εύθραυστη ανοχή δοκιμής
«Κόλλησα πάλι, πέρασε»
Βασική αιτία + ντετερμινιστικός έλεγχος
Χρήση AI ως «κόκκινη ομάδα»
Η τεχνητή νοημοσύνη μπορεί να δημιουργήσει ψευδο-εμπιστοσύνη και να είναι ένας ισχυρός σύμμαχος στο κυνήγι της. Χρησιμοποιήστε την τεχνητή νοημοσύνη ως κόκκινη ομάδα ενάντια στις δικές σας δοκιμές: ρωτήστε "γράψτε κώδικα που περνάει αυτές τις δοκιμές αλλά είναι λάθος" ή "βρείτε μια ανατροπή που θα ξεγελάσει αυτές τις δοκιμές". Εάν η τεχνητή νοημοσύνη βρει κενά στις δοκιμές σας, αυτά τα κενά είναι πραγματικοί κίνδυνοι.
Προσοχή: Μην ρωτήσετε το AI "Είναι καλή η ποιότητα της δοκιμής μου;" και πάρτε την απάντηση "ναι, υπέροχο" ως διαβεβαίωση. Το AI τείνει να είναι ευγενικό. Αντίθετα, προκαλέστε το AI σε μια συγκεκριμένη εργασία: «δημιουργήστε ένα σφάλμα που περνάει αυτές τις δοκιμές». Εάν μπορεί να το παράγει, οι δοκιμές σας είναι τυφλές σε αυτό το σφάλμα.
Ισοδύναμες μεταλλάξεις και όρια της βαθμολογίας
Η δοκιμή μετάλλαξης είναι ισχυρή, αλλά έχει μια σύλληψη: ορισμένες μεταλλάξεις δεν αλλάζουν καθόλου τη συμπεριφορά του κώδικα. Αυτές ονομάζονται ισοδύναμες μεταλλάξεις (ισοδύναμο μεταλλαγμένο — κατεστραμμένος κώδικας, μετάλλαξη που παράγει ακριβώς το ίδιο αποτέλεσμα με το αρχικό). Για παράδειγμα, η αλλαγή της αρχικής τιμής μιας μεταβλητής που δεν χρησιμοποιείται ποτέ δεν επηρεάζει την έξοδο. Κανένα τεστ δεν μπορεί και δεν πρέπει να το πιάσει αυτό. Επομένως, η βαθμολογία μετάλλαξης 100% είναι συχνά αδύνατη στην πράξη και δεν είναι ο στόχος. Η εξάλειψη ισοδύναμων μεταλλάξεων με το χέρι είναι εντάσεως εργασίας. Μην διαβάζετε λοιπόν το σκορ μετάλλαξης ως απόλυτο σκορ εξέτασης, αλλά ως ειλικρινή δείκτη του "προστατεύουν πραγματικά τα τεστ μου;"
Η πρακτική προσέγγιση είναι η εξής: αντί να εκτελείτε συνεχώς δοκιμές μεταλλάξεων σε ολόκληρη τη βάση κώδικα, εκτελέστε το σε μονάδες που περιέχουν τον υψηλότερο κίνδυνο και τους πιο πολύπλοκους επιχειρηματικούς κανόνες. Εξετάστε τις σωζόμενες μεταλλάξεις σε αυτές τις ενότητες μία προς μία. Εάν είναι πραγματικό κενό, προσθέστε ένα τεστ. αν πρόκειται για ισοδύναμη μετάλλαξη, σημειώστε την με αιτιολόγηση και περάστε. Η τεχνητή νοημοσύνη μπορεί να πραγματοποιήσει αρχικό έλεγχο για να αξιολογήσει εάν μια μετάλλαξη που έχει επιβιώσει είναι ισοδύναμη. αλλά την τελική απόφαση την παίρνετε εσείς που ξέρετε τι κάνει ο κώδικας.
Προσοχή: Η δοκιμή μετάλλαξης είναι υπολογιστικά ακριβή (όλα τα σχετικά τεστ επαναλαμβάνονται για κάθε μετάλλαξη). Επομένως, μια κοινή και λογική στρατηγική είναι να το προγραμματίζετε ως εβδομαδιαίο ή προέκδοση σε βάθος ελέγχου για κρίσιμες ενότητες, αντί για κάθε συγχώνευση.
Αδύναμη προτροπή / Ισχυρή προτροπή
Αδύναμος: "Είναι επαρκείς οι εξετάσεις μου;"
Ισχυρή: "Λειτουργήστε ως κόκκινη ομάδα για αυτήν τη συνάρτηση και τη σουίτα δοκιμών. (1) Δημιουργήστε 8 μεταλλάξεις στον κώδικα που μπορούν να θανατωθούν (αντικατάσταση τελεστή, μετατόπιση ορίων, αναστροφή συνθήκης, αντικατάσταση τιμής επιστροφής). ένα παράδειγμα κώδικα που περνάει όλες αυτές τις δοκιμές αλλά παραβιάζει τον επιχειρηματικό κανόνα Κώδικας+δοκιμές: [επικόλληση]"
Ισχυρή προτροπή. Τοποθετεί την τεχνητή νοημοσύνη ως εξεταστή που ξεπερνά τις δοκιμές, όχι ως μηχανή επαίνου.
Τέσσερα πρότυπα με δυνατότητα αντιγραφής
1) Χειροκίνητος έλεγχος μετάλλαξης:
Δημιουργήστε 8 σημαντικές μεταλλάξεις (μικρές σκόπιμες διακοπές) για αυτόν τον κωδικό: αντικατάσταση αριθμητικού τελεστή, όριο σύγκρισης (> έναντι >=), λογική αντιστροφή, επιστροφή/σταθερή αντικατάσταση, παράβλεψη συνθήκης. Για κάθε μετάλλαξη, προβλέψτε ποιο από τα διαθέσιμα τεστ θα την πιάσει ή όχι. Κώδικας+δοκιμές: [επικόλληση]
2) Δολοφονία της μετάλλαξης που επιβίωσε:
Η ακόλουθη αναφορά δοκιμής μετάλλαξης περιέχει σωζόμενες (μη συλληφθείσες) μεταλλάξεις: [λίστα/αναφορά]. Για καθένα, γράψτε ένα ελάχιστο τεστ που θα σκοτώσει αυτήν τη μετάλλαξη (ο κωδικός θα γίνει κόκκινος όταν σπάσει με αυτόν τον τρόπο). Σχολιάστε ποια συμπεριφορά επιβεβαιώνει το τεστ.
3) Κόκκινη ομάδα — η εξέταση αίματος:
Μπορείτε να γράψετε κώδικα που ΠΕΡΙΕΧΕΙ ΟΛΕΣ τις ακόλουθες δοκιμές, αλλά παραβιάζει τον ακόλουθο επιχειρηματικό κανόνα: [επιχειρηματικός κανόνας]. Εάν ναι, ποιο κενό σε αυτές τις δοκιμές το επιτρέπει αυτό; Προσθέστε το τεστ που θα κλείσει αυτό το κενό. Δοκιμές: [επικόλληση]
4) Επιθεώρηση ποιότητας δοκιμής:
Ελέγξτε αυτή τη σουίτα δοκιμών για ποιότητα. Σημειώστε για κάθε δοκιμή:- Υπάρχει αληθινός ισχυρισμός ή είναι στηρίγματα;- Είναι η αναμενόμενη τιμή ανεξάρτητη, προέρχεται από κώδικα;- Επαληθεύει τον επιχειρηματικό κανόνα ή κάτι ασήμαντο; Τέλος δώστε μια εκτιμώμενη "πραγματική βαθμολογία ισχυρισμού" και τα 3 πιο αδύναμα τεστ. Δοκιμές: [επικόλληση]
τρεις μίνι θήκες
Περίπτωση 1 — Κάλυψη 92%, βαθμολογία μετάλλαξης 38%. Μία ομάδα βασίστηκε σε υψηλή κάλυψη. Όταν διεξήχθη η δοκιμή μετάλλαξης με το Stryker, η βαθμολογία ήταν 38%: οι περισσότερες από τις μεταλλάξεις που παράγονται επέζησαν. Αυτό ήταν απόδειξη ότι οι δοκιμές δεν εκτελούσαν τις γραμμές και επαλήθευαν τη συμπεριφορά. Η ομάδα επένδυσε τρεις εβδομάδες στην ποιότητα των δοκιμών. Η βαθμολογία μετάλλαξης αυξήθηκε στο 81% και δύο πραγματικά σφάλματα υπολογισμού εντοπίστηκαν από αυτά τα ενισχυμένα τεστ στην επόμενη έκδοση.
Περίπτωση 2 — Η τεχνητή νοημοσύνη ξεγέλασε το τεστ. Με ένα πρότυπο "κόκκινη ομάδα", ένας ειδικός ζήτησε από την τεχνητή νοημοσύνη κωδικό που πέρασε τις υπάρχουσες δοκιμές αλλά παραβίασε τον κανόνα της έκπτωσης. Η τεχνητή νοημοσύνη έγραφε κωδικό που επέστρεφε πάντα μια έκπτωση μηδέν — και όλες οι δοκιμές παρέμειναν πράσινες επειδή κανένα τεστ δεν επαλήθευε την πραγματική τιμή έκπτωσης. Διαπιστώθηκε το κενό, προστέθηκαν πραγματικοί ισχυρισμοί.
Περίπτωση 3 — Η παγίδα επαίνου. Ένας νεαρός ελεγκτής ρώτησε την AI, "Είναι καλά τα τεστ μου;" και ανακουφίστηκε όταν άκουσε την απάντηση, "Πολύ περιεκτικό". Ο ανώτερος συνάδελφός του υποβλήθηκε σε έλεγχο των ίδιων δοκιμών χρησιμοποιώντας το πρότυπο "έλεγχος ποιότητας δοκιμής". Αποδείχθηκε ότι 12 από τις 20 δοκιμές ήταν ντεκόρ (χωρίς ισχυρισμούς ή σκουπίδια). Η σωστή ερώτηση έφερε τη σωστή απάντηση.
Συνήθη λάθη
- Λανθασμένα περιθώρια ποιότητας. Βασιζόμενοι σε υψηλή κάλυψη σειρών και δεν εξετάζουν καθόλου τη βαθμολογία μετάλλαξης.
- Εμπιστευόμαστε τον έπαινο του AI. Ρωτώντας "Είναι καλές οι εξετάσεις σου;" και θεωρώντας τη θετική απάντηση ως βεβαιότητα.
- Εξαγωγή της αναμενόμενης τιμής από τον κώδικα. Δοκιμές αυτοεπαλήθευσης που επιβεβαιώνουν τον ελαττωματικό κωδικό.
- Να είστε ικανοποιημένοι με ασήμαντους ισχυρισμούς. Επιταγές που δεν επικυρώνουν τον πραγματικό κανόνα, όπως "not null", "200 επέστρεψε".
- Αγνοώντας τις επιζώντες μεταλλάξεις. Αγνοώντας ό,τι δεν καταγράφηκε στην αναφορά μετάλλαξης.
- Ούτε να προσπαθήσετε να κάνετε χειροκίνητη μετάλλαξη κρίσιμου κώδικα. Παράβλεψη του βήματος "διάσπαση του κώδικα και δοκιμή" εάν το εργαλείο δεν είναι διαθέσιμο.
Συνοπτικά
Η ψευδο-εμπιστοσύνη πιστεύει ότι το λογισμικό είναι σωστό επειδή τα τεστ είναι πράσινα. ενώ οι δοκιμές μπορεί να μην επιβεβαιώσουν τίποτα. Ο χρυσός κανόνας για τη μέτρηση αυτού είναι ο έλεγχος μετάλλαξης: η σκόπιμη παραβίαση του κώδικα και η μέτρηση του αν τα τεστ τον πιάνουν. Η βαθμολογία μετάλλαξης είναι ένα πολύ πιο ειλικρινές μέτρο ποιότητας από την ποσοστιαία κάλυψη. Η τεχνητή νοημοσύνη παράγει και ψευδο-εμπιστοσύνη και γίνεται μια ισχυρή κόκκινη ομάδα στο κυνήγι της — ρωτήστε «δημιουργήστε ένα σφάλμα που περνάει αυτές τις δοκιμές». Δοκιμάστε τις δοκιμές σας: αληθινός ισχυρισμός, ανεξάρτητη αναμενόμενη τιμή, επικύρωση επιχειρηματικών κανόνων και σκοτωμένες μεταλλάξεις.
Εργασία εφαρμογής
Εισαγάγετε μια συνάρτηση που περιέχει έναν επιχειρηματικό κανόνα και τις δοκιμές του από το δικό σας έργο. Εάν είναι δυνατόν, εκτελέστε ένα εργαλείο μετάλλαξης (Stryker/Pitest/mutmut) και μετρήστε το σκορ μετάλλαξης. Εάν δεν υπάρχει εργαλείο, δημιουργήστε τουλάχιστον 8 μεταλλάξεις με το πρότυπο "manual mutation control" και δοκιμάστε τις χειροκίνητα. Για κάθε επιζούσα μετάλλαξη, γράψτε ένα νέο τεστ με το πρότυπο "kill surviving mutation". Τέλος, με το μοτίβο της «κόκκινης ομάδας», δείτε αν το AI μπορεί να παράγει κώδικα που ξεγελά τις δοκιμές σας. Αναφέρετε τη βαθμολογία έναρξης και λήξης μετάλλαξης (ή αλιευμένου/συνολικού ποσοστού μετάλλαξης).
λίστα ελέγχου
- [ ] Αξιολόγησα την ποιότητα του τεστ με βάση τη βαθμολογία μετάλλαξης, όχι την κάλυψη.
- [ ] Έκανα δοκιμή μετάλλαξης (είτε με εργαλείο είτε με μη αυτόματο τρόπο) για κρίσιμο κώδικα.
- [ ] Έγραψα νέα τεστ για κάθε σωζόμενη μετάλλαξη.
- [ ] Χρησιμοποίησα την τεχνητή νοημοσύνη ως την κόκκινη ομάδα και έψαξα για κενά στις δοκιμές μου.
- [ ] Δεν έλαβα τον έπαινο του AI "οι δοκιμές σας είναι καλές" ως καθησυχασμό.
- [ ] Έλεγξα ότι κάθε δοκιμή επαληθεύει τον πραγματικό ισχυρισμό, την ανεξάρτητη αναμενόμενη αξία και τον επιχειρηματικό κανόνα.