Η ετήσια Παγκόσμια έκθεση ποιότητας Δημιουργήθηκε από τον Capgemini δείχνει ότι το 42% των ερωτηθέντων στην έρευνα καταγράφουν μια «έλλειψη επαγγελματικής εμπειρογνωμοσύνης» ως πρόκληση στην εφαρμογή δοκιμών στην ανάπτυξη Agile. Ενώ η έλευση του Ευκίνητος έχει φέρει την αυξημένη ταχύτητα των επαναλήψεων για την ανάπτυξη λογισμικού, σε ορισμένες περιπτώσεις, αυτό έχει κόστος στο κόστος.
Ο έντονος ανταγωνισμός πιέζει τις ομάδες να παρέχουν συνεχώς νέες ενημερώσεις προϊόντων, αλλά αυτό μερικές φορές έρχεται με το δικό του κόστος, συμπεριλαμβανομένης της μειωμένης προσοχής στις δοκιμές. Μερικοί, όπως ο Rob Mason, προχωρούν ακόμη περισσότερο και υποστηρίζουν ότι Η Agile σκοτώνει τις δοκιμές λογισμικού . Πρόσφατα, το Facebook άλλαξε το σύνθημά του από «γρήγορη κίνηση και διάσπαση πραγμάτων» σε «γρήγορη μετακίνηση με σταθερή υποδομή» σε μια προσπάθεια επίλυσης των πειρασμών να θυσιάσουν την ποιότητα.
Λοιπόν, πώς μπορούν οι δοκιμές να ενσωματωθούν καλύτερα στον νέο κόσμο της ανάπτυξης λογισμικού Agile; Ευέλικτη δοκιμή.
Οι παραδοσιακές δοκιμές είναι αρκετά δυσκίνητες και εξαρτώνται από πολλά έγγραφα. Το Agile testing είναι μια προσέγγιση στη διαδικασία δοκιμών που μιμείται τις αρχές της ανάπτυξης λογισμικού Agile με την οποία:
Τα τελευταία επτά χρόνια, μετέβαλα πολλές ομάδες στις δοκιμές Agile και δούλεψα δίπλα-δίπλα με δοκιμαστές για να βοηθήσω τις διαδικασίες τους να ταιριάζουν στη νέα μεθοδολογία. Σε αυτό το άρθρο, θα μοιραστώ μερικές από τις πιο σημαντικές συμβουλές που έχω μάθει στο δρόμο μου για καλύτερες δοκιμές Agile. Αν και είναι φυσικό να υπάρχει τριβή μεταξύ ταχύτητας και ποιότητας στις πρακτικές Agile, αυτό το άρθρο θα καλύψει μερικές τεχνικές που μπορούν να χρησιμοποιηθούν για την αύξηση της ποιότητας των δοκιμών χωρίς να διακυβεύεται η ευελιξία. Οι περισσότερες από τις προτάσεις που περιγράφονται εδώ θα απαιτήσουν συμμετοχή από την ομάδα, οπότε θα ήταν ωφέλιμο να συμμετέχουν τόσο προγραμματιστές όσο και δοκιμαστές στον προγραμματισμό.
Ένα ζήτημα με τις δοκιμές είναι η απουσία του κύκλου δοκιμής απελευθέρωσης, κανένα πρόγραμμα κυκλοφορίας ή παράτυπες αιτήσεις δοκιμών. Τα αιτήματα δοκιμών κατ 'απαίτηση δυσκολεύουν τη διαδικασία QA, ειδικά εάν οι υπεύθυνοι δοκιμών χειρίζονται πολλά έργα.
ποια αρχή gestalt της αντιληπτικής οργάνωσης επεξηγείται στο παρακάτω παράδειγμα;
Πολλές ομάδες κάνουν μόνο μία δόση μετά από κάθε σπριντ, κάτι που δεν είναι ιδανικό για έργα Agile. Η μετάβαση σε κυκλοφορίες μία φορά την εβδομάδα θα μπορούσε να είναι επωφελής, βαθμιαία μετάβαση σε πολλαπλές εκδόσεις την εβδομάδα. Στην ιδανική περίπτωση, οι εκδόσεις ανάπτυξης και οι δοκιμές πρέπει να πραγματοποιούνται καθημερινά, πράγμα που σημαίνει ότι οι προγραμματιστές ωθούν κώδικα στον χώρο αποθήκευσης κάθε μέρα και οι εκδόσεις προγραμματίζονται να εκτελούνται σε μια συγκεκριμένη ώρα. Για να προχωρήσει αυτό ένα βήμα παραπέρα, οι προγραμματιστές θα μπορούσαν να αναπτύξουν νέο κώδικα κατ 'απαίτηση. Για να το εφαρμόσουν αυτό, οι ομάδες μπορούν να χρησιμοποιήσουν μια διαδικασία συνεχούς ενοποίησης και συνεχούς ανάπτυξης (CI / CD). Το CI / CD περιορίζει την πιθανότητα αποτυχημένης έκδοσης την ημέρα μιας μείζονος κυκλοφορίας.
Όταν συνδυάζονται CI / CD και αυτοματοποιημένος έλεγχος, είναι δυνατή η έγκαιρη ανίχνευση κρίσιμων σφαλμάτων, επιτρέποντας στους προγραμματιστές να έχουν αρκετό χρόνο για να διορθώσουν κρίσιμα σφάλματα πριν από την προγραμματισμένη κυκλοφορία του προγράμματος-πελάτη. Μία από τις αρχές του Agile δηλώνει ότι το λογισμικό εργασίας είναι το κύριο μέτρο προόδου. Σε αυτό το πλαίσιο, ένας τυποποιημένος κύκλος απελευθέρωσης καθιστά τη διαδικασία δοκιμών πιο ευέλικτη.
Ένα από τα κοινά σημεία τριβής για δοκιμή είναι ο κώδικας να αναπτύσσεται σε ένα περιβάλλον σταδιοποίησης. Αυτή η διαδικασία εξαρτάται από την τεχνική υποδομή την οποία ενδέχεται να μην μπορεί να επηρεάσει η ομάδα σας. Ωστόσο, εάν υπάρχει κάποια ευελιξία, μπορούν να δημιουργηθούν εργαλεία για μη τεχνικά άτομα, όπως δοκιμαστές ή διαχειριστές έργων που θα τους επέτρεπαν να αναπτύξουν την ενημερωμένη βάση κώδικα για να δοκιμάσουν οι ίδιοι.
Για παράδειγμα, σε μία από τις ομάδες μου, χρησιμοποιήσαμε το Git για έλεγχο έκδοσης και το Slack για επικοινωνία. Οι προγραμματιστές δημιούργησαν ένα Slackbot που είχε πρόσβαση στο Git, σενάρια ανάπτυξης και μία εικονική μηχανή. Οι δοκιμαστές μπόρεσαν να κάνουν ping στο bot με ένα όνομα κλάδου που αποκτήθηκε από το GitHub ή το Jira και το έχουν αναπτύξει σε ένα περιβάλλον σταδιοποίησης.
Αυτή η εγκατάσταση ελευθέρωσε πολύ χρόνο για τους προγραμματιστές, μειώνοντας παράλληλα τα σπατάλη επικοινωνίας και τις συνεχείς διακοπές, όταν οι δοκιμαστές έπρεπε να ζητήσουν από τους προγραμματιστές να αναπτύξουν ένα υποκατάστημα για δοκιμή.
Δοκιμαστική ανάπτυξη (TDD) είναι ένας τύπος διαδικασίας ανάπτυξης λογισμικού που δίνει μεγάλη έμφαση στην ποιότητα. Παραδοσιακά, ένας προγραμματιστής γράφει κώδικα και στη συνέχεια κάποιος τον δοκιμάζει και αναφέρει εάν εντοπίστηκαν σφάλματα. Στο TDD, οι προγραμματιστές γράφουν πρώτα δοκιμές μονάδας πριν καν γράψουν οποιονδήποτε κώδικα που θα συμπληρώνει μια ιστορία χρήστη. Οι δοκιμές αρχικά αποτυγχάνουν έως ότου ο προγραμματιστής γράψει το ελάχιστο ποσό κώδικα για να περάσει τις δοκιμές. Μετά από αυτό, ο κωδικός αναδιαμορφώνεται για να πληροί τις απαιτήσεις ποιότητας της ομάδας.
Ανάπτυξη βάσει δοκιμής αποδοχής (ATDD) ακολουθεί μια παρόμοια λογική με την TDD αλλά, όπως υποδηλώνει το όνομα, επικεντρώνεται στις δοκιμές αποδοχής. Σε αυτήν την περίπτωση, οι δοκιμές αποδοχής δημιουργούνται πριν από την ανάπτυξη σε συνεργασία με προγραμματιστές, υπεύθυνους δοκιμών και αιτούντες (πελάτης, ιδιοκτήτης προϊόντος, αναλυτής επιχείρησης κ.λπ.). Αυτές οι δοκιμές βοηθούν όλους τους συμμετέχοντες στην ομάδα να κατανοήσουν τις απαιτήσεις του πελάτη προτού γραφτεί οποιοσδήποτε κωδικός.
Τεχνικές όπως το TDD και το ATDD κάνουν τις δοκιμές πιο ευέλικτες μετακινώντας τις διαδικασίες δοκιμών στα πρώτα στάδια του κύκλου ζωής ανάπτυξης. Κατά τη σύνταξη δοκιμαστικών σεναρίων από νωρίς, οι προγραμματιστές πρέπει να κατανοήσουν τις απαιτήσεις πολύ καλά. Αυτό ελαχιστοποιεί την άσκοπη δημιουργία κώδικα και επιλύει επίσης τυχόν αβεβαιότητες προϊόντος στην αρχή του κύκλου ανάπτυξης. Όταν οι ερωτήσεις προϊόντων ή οι συγκρούσεις εμφανίζονται μόνο στα μεταγενέστερα στάδια, ο χρόνος ανάπτυξης και το κόστος αυξάνονται.
Σε μια από τις ομάδες μου, είχαμε έναν προγραμματιστή που ήταν εξαιρετικά γρήγορος, ειδικά με μικρά χαρακτηριστικά. Θα έπαιρνε πολλά σχόλια κατά την αναθεώρηση κώδικα, αλλά ο κύριος Scrum και εγώ το γράψαμε ως έλλειψη εμπειρίας. Ωστόσο, καθώς άρχισε να κωδικοποιεί πιο περίπλοκα χαρακτηριστικά, τα προβλήματα έγιναν πιο εμφανή. Είχε αναπτύξει ένα μοτίβο μεταβίβασης κώδικα σε δοκιμές πριν να είναι πλήρως έτοιμος. Αυτό το μοτίβο αναπτύσσεται συνήθως όταν υπάρχει έλλειψη διαφάνειας στη διαδικασία ανάπτυξης - π.χ., δεν είναι σαφές πόσος χρόνος αφιερώνουν διαφορετικοί άνθρωποι σε μια δεδομένη εργασία.
Μερικές φορές, οι προγραμματιστές σπεύδουν τη δουλειά τους σε μια προσπάθεια να βγάλουν δυνατότητες το συντομότερο δυνατό και να 'αναθέσουν' την ποιότητα στους δοκιμαστές. Μια τέτοια ρύθμιση μετακινεί μόνο το εμπόδιο κάτω από το σπριντ. Η διασφάλιση ποιότητας (QA) είναι το πιο σημαντικό δίχτυ ασφαλείας που διαθέτει η ομάδα, αλλά αυτό μπορεί να σημαίνει ότι η ύπαρξη QA δίνει στους προγραμματιστές τη δυνατότητα να παραιτηθούν από την ποιότητα.
Πολλά μοντέρνα εργαλεία διαχείρισης έργου έχουν τις δυνατότητες παρακολούθησης της κίνησης των καρτών εργασίας σε έναν πίνακα Scrum ή Kanban. Στην περίπτωσή μας, χρησιμοποιήσαμε την Jira για να αναλύσουμε τι συνέβη με τα καθήκοντα του εν λόγω προγραμματιστή και κάναμε συγκρίσεις με άλλους προγραμματιστές της ομάδας. Ανακαλύψαμε ότι:
Έτσι, εκτός από τους δοκιμαστές που πρέπει να ξοδεύουν περισσότερο χρόνο στα καθήκοντά του, έπρεπε επίσης να το κάνουν πολλές φορές. Η αδιαφανής διαδικασία μας έδειξε ότι ο προγραμματιστής ήταν πολύ γρήγορος. Ωστόσο, αυτό αποδείχθηκε ψευδές όταν λάβαμε υπόψη τον χρόνο δοκιμής. Η μετακίνηση ιστοριών χρηστών εμπρός και πίσω δεν είναι προφανώς μια λιτή προσέγγιση.
τι είναι η έκθεση σε συναλλαγματικό κίνδυνο;
Για να επιλύσουμε αυτό, ξεκινήσαμε με μια ειλικρινή συζήτηση με αυτόν τον προγραμματιστή. Στην περίπτωσή μας, απλώς δεν γνώριζε πόσο βλαβερό ήταν το μοτίβο εργασίας του. Ήταν ακριβώς ο τρόπος που συνηθίζει να εργάζεται στην προηγούμενη εταιρεία του, η οποία είχε χαμηλότερες απαιτήσεις ποιότητας και μεγαλύτερη ομάδα δοκιμών. Μετά τη συνομιλία μας και με τη βοήθεια μερικών ζευγών προγραμματισμού ζευγών με τον κύριο Scrum μας, σταδιακά πέρασε σε μια προσέγγιση υψηλότερης ποιότητας στην ανάπτυξη. Λόγω των γρήγορων δυνατοτήτων κωδικοποίησης, ήταν ακόμα υψηλός παίκτης, αλλά το 'απόβλητο' της διαδικασίας QA έκανε την όλη δοκιμή πολύ πιο ευέλικτη.
Ο έλεγχος σε μη ευέλικτα έργα περιλαμβάνει δραστηριότητες όπως ανάλυση δοκιμών, σχεδιασμός δοκιμών και εκτέλεση δοκιμών. Αυτές οι δραστηριότητες είναι διαδοχικές και απαιτούν εκτενή τεκμηρίωση. Όταν μια εταιρεία μεταβαίνει στο Agile, τις περισσότερες φορές, η μετάβαση επικεντρώνεται κυρίως στους προγραμματιστές και όχι τόσο στους δοκιμαστές. Σταματούν να δημιουργούν εκτενή τεκμηρίωση (ένας πυλώνας παραδοσιακών δοκιμών) αλλά συνεχίζουν να εκτελούν χειροκίνητες δοκιμές. Ωστόσο, οι χειροκίνητες δοκιμές είναι αργές και συνήθως δεν μπορούν να αντεπεξέλθουν στους γρήγορους βρόχους ανατροφοδότησης του Agile.
Ο αυτοματοποιημένος έλεγχος είναι μια δημοφιλής λύση σε αυτό το πρόβλημα. Οι αυτοματοποιημένες δοκιμές διευκολύνουν τη δοκιμή νέων και μικρών δυνατοτήτων, καθώς ο κώδικας δοκιμής μπορεί να εκτελεστεί στο παρασκήνιο ενώ οι προγραμματιστές και οι υπεύθυνοι δοκιμών επικεντρώνονται σε άλλες εργασίες. Επιπλέον, καθώς οι δοκιμές εκτελούνται αυτόματα, η κάλυψη δοκιμών μπορεί να είναι πολύ μεγαλύτερη σε σύγκριση με τις μη αυτόματες προσπάθειες δοκιμών.
Οι αυτοματοποιημένες δοκιμές είναι κομμάτια κώδικα λογισμικού παρόμοια με τη βάση κώδικα που δοκιμάζεται. Αυτό σημαίνει ότι οι άνθρωποι που γράφουν αυτοματοποιημένες δοκιμές θα χρειαστούν τεχνικές δεξιότητες για να είναι επιτυχημένοι. Υπάρχουν πολλές διαφορετικές παραλλαγές του τρόπου εφαρμογής των αυτοματοποιημένων δοκιμών σε διαφορετικές ομάδες. Μερικές φορές οι ίδιοι οι προγραμματιστές αναλαμβάνουν το ρόλο των υπευθύνων δοκιμών και αυξάνουν τη βάση κώδικα δοκιμών με κάθε νέα δυνατότητα. Σε άλλες ομάδες, οι μη αυτόματες δοκιμαστές μαθαίνουν να χρησιμοποιούν εργαλεία αυτοματισμού δοκιμών ή προσλαμβάνεται ένας έμπειρος τεχνικός δοκιμαστής για την αυτοματοποίηση της διαδικασίας δοκιμής. Όποια διαδρομή κι αν ακολουθήσει η ομάδα, ο αυτοματισμός οδηγεί σε πολύ πιο ευέλικτες δοκιμές.
Με την ανάπτυξη λογισμικού που δεν είναι ευέλικτη, οι δοκιμαστές κατανέμονται συνήθως ανά πρόγραμμα. Ωστόσο, με την έλευση του Agile και του Scrum, έχει γίνει κοινό για τους ίδιους επαγγελματίες QA να λειτουργούν σε πολλά έργα. Αυτή η αλληλεπικαλυπτόμενη ευθύνη μπορεί να δημιουργήσει διενέξεις στα χρονοδιαγράμματα και να οδηγήσει σε υπεύθυνους δοκιμών να χάσουν κρίσιμες τελετές όταν ένας δοκιμαστής δίνει προτεραιότητα στη δοκιμή απελευθέρωσης μιας ομάδας από τη συνεδρία προγραμματισμού σπριντ της άλλης.
Ο λόγος για τον οποίο μερικές φορές οι υπεύθυνοι δοκιμών εργάζονται σε πολλά έργα είναι προφανής - σπάνια υπάρχει μια συνεχής ροή εργασιών για δοκιμές για να γεμίσει έναν ρόλο πλήρους απασχόλησης. Επομένως, μπορεί να είναι δύσκολο να πείσετε τους ενδιαφερόμενους να διαθέσουν έναν ειδικό πόρο δοκιμών σε μια ομάδα. Ωστόσο, υπάρχουν κάποιες εύλογες εργασίες που μπορεί να κάνει ένας υπεύθυνος δοκιμών για να καλύψει το χρόνο διακοπής του όταν δεν συμμετέχει σε δραστηριότητες δοκιμών.
Μια πιθανή ρύθμιση είναι να ζητήσει από τον υπεύθυνο δοκιμών να περάσει το σπριντ του εκτός λειτουργίας, βοηθώντας την ομάδα υποστήριξης πελατών. Αντιμετωπίζοντας συνεχώς τα προβλήματα που έχουν οι πελάτες, ο υπεύθυνος δοκιμών έχει καλύτερη κατανόηση της εμπειρίας του χρήστη και πώς να τη βελτιώσει. Είναι σε θέση να συνεισφέρουν στις συζητήσεις κατά τη διάρκεια των συνεδριών προγραμματισμού. Επιπλέον, γίνονται πιο προσεκτικοί κατά τη διάρκεια των δοκιμαστικών τους δραστηριοτήτων καθώς εξοικειώνονται καλύτερα με τον τρόπο που οι πελάτες χρησιμοποιούν πραγματικά το λογισμικό τους.
Μια άλλη τεχνική για τη διαχείριση των προτεραιοτήτων του υπεύθυνου δοκιμών είναι ουσιαστικά να τους κάνετε νέους διαχειριστές προϊόντων που πραγματοποιούν χειροκίνητες δοκιμές. Αυτή είναι επίσης μια βιώσιμη λύση για την πλήρωση του χρόνου εκτός καθηκόντων ενός δοκιμαστή, επειδή οι κατώτεροι διαχειριστές προϊόντων ξοδεύουν πολύ χρόνο δημιουργώντας απαιτήσεις για τις ιστορίες των χρηστών και επομένως έχουν οικεία γνώση των περισσότερων εργασιών.
Όπως έχουμε συζητήσει προηγουμένως, οι χειροκίνητες δοκιμές είναι συχνά κατώτερες από την αυτοματοποίηση. Σε αυτό το πλαίσιο, η ώθηση για αυτοματοποίηση μπορεί να συνδυαστεί με το να έχει ένας δοκιμαστής να αφιερώσει την πλήρη προσοχή του στην ομάδα και να αξιοποιήσει τον ελεύθερο χρόνο τους μαθαίνοντας να δουλεύει με εργαλεία αυτοματισμού δοκιμής όπως Σελήνιο .
Το να κάνεις τις δοκιμές πιο ευέλικτες είναι αναπόφευκτο που αντιμετωπίζουν πολλές ομάδες ανάπτυξης λογισμικού. Ωστόσο, η ποιότητα δεν πρέπει να διακυβεύεται υιοθετώντας μια «δοκιμή όσο πιο γρήγορα μπορείτε» νοοτροπία. Είναι επιτακτική ανάγκη η μετάβαση του Agile να περιλαμβάνει μια μετάβαση σε δοκιμές Agile και υπάρχουν μερικοί τρόποι για να επιτευχθεί αυτό:
Κάθε χρόνο, το λογισμικό βελτιώνεται και οι προσδοκίες των χρηστών αυξάνονται. Επιπλέον, καθώς οι πελάτες συνηθίζουν σε προϊόντα υψηλής ποιότητας από κορυφαίες μάρκες λογισμικού όπως η Google, η Apple και το Facebook, αυτές οι προσδοκίες μεταφέρονται και σε άλλα προϊόντα λογισμικού. Έτσι, η έμφαση στην ποιότητα είναι πιθανό να είναι ακόμη πιο σημαντική τα επόμενα χρόνια. Αυτές οι βελτιώσεις της δοκιμής και της συνολικής διαδικασίας ανάπτυξης μπορούν να κάνουν τις δοκιμές πιο ευέλικτες και να εξασφαλίσουν υψηλό επίπεδο ποιότητας προϊόντος.
Προγραμματισμός c++ για αρχάριους
Υπάρχουν μερικά επίπεδα δοκιμών που μπορούν να χρησιμοποιηθούν στο Agile: μονάδα, ολοκλήρωση, σύστημα και αποδοχή.
Η ευέλικτη δοκιμή είναι μια μετάβαση σε από τεκμηριωμένες διαδικασίες δοκιμών καταρράκτη σε πιο ευέλικτες και ευαίσθητες δοκιμές. Η δοκιμή Agile καλύπτει την ευέλικτη ανάπτυξη λογισμικού για να υποστηρίξει την ευέλικτη ομάδα στην παροχή μικρών αυξήσεων προϊόντων σε μικρότερα χρονικά διαστήματα.
Ένα πρόγραμμα δοκιμών μπορεί να χρησιμοποιηθεί στο Agile, αλλά θα πρέπει να είναι ένας γενικός οδηγός και όχι ένα άκαμπτο, αμετάβλητο έγγραφο που χρειάζεται πολύ χρόνο για να δημιουργηθεί. Η Agile προωθεί το λογισμικό εργασίας μέσω ολοκληρωμένης τεκμηρίωσης.
Μια ευέλικτη στρατηγική δοκιμών πρέπει να αναφέρει τον τρόπο με τον οποίο το λογισμικό δοκιμάζεται στην ευέλικτη ομάδα.