Τι είναι το Concurrency Testing στο Software Testing;

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

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

  • 👥 Επίσης λέγεται: Δοκιμή πολλαπλών χρηστών, επειδή η ενεργοποίηση είναι η ταυτόχρονη πρόσβαση και όχι μόνο ο μεγάλος όγκος.
  • 🎯 Τι στοχεύει: Κοινόχρηστες εγγραφές βάσης δεδομένων, κοινόχρηστες ενότητες και κοινόχρηστος κώδικας εφαρμογής που έχουν πρόσβαση περισσότερες από μία συνεδρίες.
  • 🔒 Τι μετρά: Επίπεδα αδιεξόδου, κλειδώματος, μονού νήματος κώδικα και περιορισμένης πρόσβασης σε κοινόχρηστους πόρους.
  • 🧭 Πώς λειτουργεί: Προσδιορίστε ροές επιρρεπείς σε ταυτόχρονη χρήση, ορίστε έναν στόχο ταυτόχρονης χρήσης, δημιουργήστε σενάρια για πραγματικές ενέργειες και, στη συνέχεια, αυξήστε σταδιακά τους χρήστες.
  • 🐞 Κατηγορίες ελαττωμάτων: Συνθήκες αγώνα, αδιέξοδα, χαμένες ενημερώσεις, αλλοίωση δεδομένων και έλλειψη νημάτων.
  • ⚠️ Ειλικρινή όρια: Ο μη ντετερμινισμός, οι ασύγχρονες επανακλήσεις και μια μη πληροφοριακή στοίβα κλήσεων καθιστούν δύσκολη την αναπαραγωγή των αποτυχιών.

Τι είναι ο έλεγχος ταυτόχρονης λειτουργίας σε δοκιμές λογισμικού με πολλαπλούς ταυτόχρονους χρήστες;

Τι είναι το Concurrency Testing;

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

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

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

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

Γιατί Δοκιμή Συνδυασμού

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

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

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

Πώς να εκτελέσετε δοκιμές ταυτοχρονισμού

Ο έλεγχος ταυτόχρονης εκτέλεσης ακολουθεί μια επαναλήψιμη ακολουθία. Τα παρακάτω βήματα ξεκινούν από το sco.ping προς επίλυση.

  • Βήμα 1) Προσδιορίστε ροές επιρρεπείς στην ταυτόχρονη ροή. Αναζητήστε κοινόχρηστη κατάσταση: ταυτόχρονες συνδέσεις, κράτηση θέσης ή αποθέματος, ενημερώσεις υπολοίπου, μαζικές εργασίες εγγραφής στον ίδιο πίνακα και οποιοδήποτε στοιχείο μονού νήματος στη διαδρομή.
  • Βήμα 2) Ορίστε έναν στόχο ταυτόχρονης λειτουργίας. Αποφασίστε πόσοι χρήστες πρέπει να ενεργήσουν την ίδια στιγμή, βάσει των πραγματικών κορυφώσεων χρήσης και όχι βάσει ενός στρογγυλού αριθμού.
  • Βήμα 3) Σχεδιάστε τις δοκιμαστικές περιπτώσεις. Κάθε περίπτωση δοκιμής Συνδυάζει τον κοινόχρηστο πόρο, τις ανταγωνιστικές ενέργειες και την αναμενόμενη τελική κατάσταση — για παράδειγμα, δύο συνεδρίες που αποσύρονται από έναν λογαριασμό δεν πρέπει να είναι και οι δύο επιτυχείς.
  • Βήμα 4) Δημιουργήστε ένα σενάριο και επιλέξτε το εργαλείο. Απαιτείται μια γεννήτρια φορτίου που δημιουργεί διαμορφώσιμους εικονικούς χρήστες. JMeter είναι η κοινή επιλογή ανοιχτού κώδικα και οι ρυθμίσεις ομάδας νημάτων αντιστοιχίζονται απευθείας σε σενάρια ταυτόχρονης λειτουργίας.
  • Βήμα 5) Ramp σταδιακά. Αύξηση ταυτόχρονων χρηστών σε στάδια αντί για άλμαping στον στόχο, έτσι ώστε το επίπεδο στο οποίο ξεκινά η διεκδίκηση να είναι ορατό.
  • Βήμα 6) Παρακολούθηση και ανάλυση. Αναμονή κλειδώματος ρολογιού, διασπορά χρόνου απόκρισης, ποσοστά σφαλμάτων και αποκλεισμός βάσης δεδομένων μαζί — ένα ελάττωμα ταυτόχρονης λειτουργίας συχνά εμφανίζεται ως ανωμαλία χρονισμού πριν εμφανιστεί ως σφάλμα.
  • Βήμα 7) Επίλυση και επανεκτέλεση. Διορθώστε την αιτία συγχρονισμού, δημιουργίας ευρετηρίου ή κλειδώματος και, στη συνέχεια, επαναλάβετε την ίδια εκτέλεση για να επιβεβαιώσετε ότι η συμπεριφορά άλλαξε αντί να μετακινηθεί.

Συνήθη ελαττώματα ταυτοχρονισμού

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

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

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

Παράδειγμα Δοκιμής Συνδυασμού

Φανταστείτε ένα ηλεκτρονικό κατάστημα που διαθέτει την τελευταία μονάδα ενός προϊόντος σε απόθεμα. Δύο αγοραστές ανοίγουν το προϊόν την ίδια στιγμή και πατούν και οι δύο το κουμπί Αγορά.

  • Σενάριο: Δύο συνεδρίες διαβάζουν απόθεμα = 1, και οι δύο περνούν τον έλεγχο διαθεσιμότητας και και οι δύο γράφουν απόθεμα = 0.
  • Αναμενόμενο Αποτέλεσμα: Η μία παραγγελία επιβεβαιώνεται, η άλλη λαμβάνει μήνυμα ότι το απόθεμα είναι εκτός αποθέματος και το απόθεμα δεν γίνεται ποτέ αρνητικό.
  • Ένδειξη ελαττώματος: Και οι δύο παραγγελίες επιβεβαιώνονται ή το απόθεμα φτάνει στο -1, γεγονός που δείχνει ότι ο έλεγχος διαθεσιμότητας και η μείωση δεν εκτελούνται ως ένα ατομικό βήμα.
  • Παραλλαγές που αξίζει να δοκιμάσετε: Οι ίδιες δύο συνεδρίες επεξεργασίας μιας εγγραφής προφίλ, δύο εγκρίσεις του ίδιου αιτήματος και μια μαζική εργασία ενημέρωσης του πίνακα ενώ ένας χρήστης αποθηκεύει.

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

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

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

Μειονεκτήματα των δοκιμών ταυτόχρονης χρήσης

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

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

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

Όχι. Δοκιμή φόρτωσης Μετράει τη συμπεριφορά κάτω από τον αναμενόμενο όγκο με την πάροδο του χρόνου. Οι δοκιμές ταυτόχρονης λειτουργίας στοχεύουν την ίδια στιγμή, επομένως ένα ελάττωμα μπορεί να εμφανιστεί μόνο με δύο χρήστες εάν και οι δύο αγγίξουν μία κοινόχρηστη εγγραφή.

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

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

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

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

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

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

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

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