Τι είναι η Ανάπτυξη Καθοδηγούμενη από Δοκιμές;

Χρησιμοποίησε τη μεθοδολογία TDD και το σύνολο δοκιμών που σου δίνεται για να λύσεις ασκήσεις


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

Στο Exercism, τα τεστ είναι οι απαιτήσεις!

Όλες οι Ασκήσεις Εξάσκησης στις οποίες δουλεύεις (εκείνες που δεν σου διδάσκουν μια νέα έννοια) έχουν κάποιες οδηγίες που περιγράφουν με γενικούς όρους τι πρέπει να κάνεις. Από τον σχεδιασμό τους, αυτές οι οδηγίες δεν λαμβάνουν υπόψη λεπτομέρειες υλοποίησης που αφορούν τη συγκεκριμένη γλώσσα προγραμματισμού, επειδή τις μοιράζονται και οι πάνω από 70 γλωσσικές διαδρομές του Exercism. Κάποιες διαδρομές προσθέτουν πιο συγκεκριμένες λεπτομέρειες για σένα, αλλά δεν το κάνουν όλες.

Όταν ξεκινάς να δουλεύεις σε μια Άσκηση Εξάσκησης, διάβασε προσεκτικά τις οδηγίες. Θα σου δώσουν μια γενική εικόνα για το πώς να υλοποιήσεις μια λύση. Αλλά θα πρέπει να διαβάσεις τα τεστ για να καταλάβεις τις πλήρεις και ακριβείς απαιτήσεις:

  • Πρέπει το αποτέλεσμα να είναι ένα συγκεκριμένο είδος δομής δεδομένων;
  • Πρέπει το αποτέλεσμα να είναι ταξινομημένο με κάποια σειρά;
  • Πώς αναμένεται να χειρίζεσαι τις εξαιρέσεις; Και ούτω καθεξής.

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

Πώς εφαρμόζει το Exercism το TDD;

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

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

Δουλεύοντας στον διαδικτυακό επεξεργαστή

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

Όταν αποτυγχάνουν πολλά τεστ, ο ιστότοπος αρχικά εμφανίζει μόνο τα αποτελέσματα της πρώτης αποτυχίας. Μπορείς να κάνεις κλικ και στις άλλες αποτυχίες για να τις αναπτύξεις! Μερικές φορές το πρώτο αποτέλεσμα μπορεί να μην είναι το πιο κατατοπιστικό.

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

Δουλεύοντας τοπικά

Πολλές διαδρομές χρησιμοποιούν τεστ που έχουν «παραλειφθεί» στα αρχεία τεστ τους. Αρχικά, μόνο το πρώτο τεστ είναι «ενεργό» και τα υπόλοιπα είναι ανενεργά (το πώς γίνεται αυτό διαφέρει από διαδρομή σε διαδρομή). Όταν τρέχεις τη σουίτα τεστ στο περιβάλλον σου, τρέχει μόνο το πρώτο τεστ. Το κάνουμε αυτό για να σε ενθαρρύνουμε να ακολουθήσεις αυτή τη ροή εργασίας:

  1. Πριν προσθέσεις νέο κώδικα, τρέξε τη σουίτα τεστ: θα πρέπει να δεις ένα τεστ να αποτυγχάνει.
  2. Πρόσθεσε τόσο μόνο κώδικα όσο χρειάζεται για να περάσει το τεστ.
  3. Τρέξε τη σουίτα τεστ.
  4. Αν το τεστ εξακολουθεί να αποτυγχάνει, επανάλαβε το βήμα 2.
  5. Μόλις περάσει το τεστ, αναδιαμόρφωσε τον κώδικά σου όπως θέλεις, φροντίζοντας να περνούν ακόμα όλα τα ενεργά τεστ. Η αναδιαμόρφωση μπορεί να περιλαμβάνει:
    • την αφαίρεση τυχόν διπλότυπου κώδικα,
    • τον χωρισμό μεγάλων συναρτήσεων σε μικρότερες,
    • την προσθήκη σχολίων, κ.λπ.
  6. Κάνε άρση παράλειψης στο επόμενο τεστ και επανάλαβε από το βήμα 1.

Επανάλαβε αυτά τα βήματα μέχρι να άρεις την παράλειψη από όλα τα τεστ. Μόλις περνούν όλα τα τεστ, συγχαρητήρια, έχεις λύσει την άσκηση!

Το πώς ακριβώς γίνεται η «άρση παράλειψης» (ή η ενεργοποίηση) των τεστ εξαρτάται από τη διαδρομή. Σε κάποιες διαδρομές, μπορεί να είναι το να σχολιάσεις ή να αφαιρέσεις μια σημείωση. Σε άλλες, μπορεί να είναι η αλλαγή ενός χαρακτηριστικού από true σε false. Πάρε τον χρόνο σου να διαβάσεις την τεκμηρίωση της διαδρομής σου· θα σου εξηγήσει αυτές τις λεπτομέρειες.

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

Γιατί έχει νόημα η Ανάπτυξη Καθοδηγούμενη από Τεστ

Αν και μπορεί να φαίνεται σαν «το κάρο πριν από το άλογο», υπάρχουν αρκετοί καλοί λόγοι για τους οποίους μπορεί να θέλεις να γράψεις μοναδιαία τεστ πριν γράψεις τον κώδικα υλοποίησης.

  1. Σχεδίαση. Σε αναγκάζει να σκεφτείς πρώτα τη διεπαφή του προγράμματός σου (πώς εκθέτει τη λειτουργικότητά του στον κόσμο), αντί να πέσεις κατευθείαν στο πώς θα υλοποιήσεις τον κώδικα. Το να έχεις μια καλά σχεδιασμένη (και ελέγξιμη!) διεπαφή είναι συχνά πιο σημαντικό από το να έχεις μια αποδοτική υλοποίηση.

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

  3. Λιγότερη δουλειά. Αν ακολουθήσεις έναν σφιχτό κύκλο όπου γράφεις ένα τεστ, μετά γράφεις τον κώδικα που υλοποιεί αυτό το τεστ και μετά γράφεις το επόμενο τεστ, ο κώδικάς σου καταλήγει να μεγαλώνει οργανικά. Αυτό συχνά (αν και όχι πάντα) οδηγεί σε λιγότερη χαμένη προσπάθεια· καταλήγεις να γράφεις όλον τον κώδικα που χρειάζεσαι και κανέναν από τον κώδικα που δεν χρειάζεσαι.

Περαιτέρω ανάγνωση