Ποιες είναι οι βασικές διαφορές μεταξύ TDD και BDD;




Test Driven Development ήταν η οργή στη ΝΕΤ κοινότητα τα τελευταία χρόνια. Πρόσφατα, έχω ακούσει grumblings στην ALT.NET κοινότητα για BDD. Τι είναι αυτό? Αυτό που το καθιστά διαφορετικό από TDD;
Καταλαβαίνω BDD να είναι πιο σχετικά με **τις προδιαγραφές** από **τη δοκιμή** . Συνδέεται με τομέα Driven Σχεδιασμού (δεν αγαπώ αυτά * DD αρκτικόλεξα;).


Αυτό συνδέεται με ένα συγκεκριμένο τρόπο για να γράψει τις ιστορίες των χρηστών, συμπεριλαμβανομένων των δοκιμών υψηλού επιπέδου. Ένα παράδειγμα από [τον Tom δέκα Thij](http://tomtenthij.nl/2008/1/25/rspec-plain-text-story-runner-on-a-fresh-rails-app) :



```
Story: User logging in
  As a user
  I want to login with my details
  So that I can get access to the site

Scenario: User uses wrong password

  Given a username 'jdoe'
  And a password 'letmein'

  When the user logs in with username and password

  Then the login form should be shown again

```

(Στο άρθρο του, ο Τομ πηγαίνει για να εκτελέσουν άμεσα αυτές τις προδιαγραφές δοκιμών σε Ruby.)


Ο Πάπας της BDD είναι [Dan Βορρά](http://dannorth.net/) . Θα βρείτε μια μεγάλη εισαγωγή στο έργο του [Εισαγωγή BDD](http://dannorth.net/introducing-bdd) άρθρο.


Θα βρείτε μια σύγκριση των BDD και TDD σε αυτό το [βίντεο](http://video.google.com/videoplay?docid=8135690990081075324) . Επίσης, μια άποψη για BDD ως «TDD γίνει σωστά» από τον [Jeremy D. Miller](http://codebetter.com/blogs/jeremy.miller/archive/2007/09/06/bdd-tdd-and-the-other-double-d-s.aspx)


**25 του Μαρτίου 2013 ενημέρωση**


Το παραπάνω βίντεο έχει λείψει για κάποιο διάστημα. Εδώ είναι μια πρόσφατη από Llewellyn Falco, [BDD vs TDD (εξηγείται)](https://www.youtube.com/watch?v=mT8QDNNhExg) . Θεωρώ εξήγηση του σαφής και στο σημείο.
όπως το περιγράφεις μοιάζει με bug για τον lightdm. ίσως να είναι κάτι μικρό και να θέλει απλώς κάποια ρύθμιση (ψάξε μέσα στο /etc για τον lightdm) αλλά θα έλεγα απλά δοκίμασε άλλον dm. είχα κακή εμπειρία με τον lightdm παλιότερα. έχω εξαιρετική εμπειρία τελευταία με τον sddm (όταν πρωτοβγήκε ήταν χ… επανέρχομαι και πάλι στο θέμα που άνοιξα.

διάβασα το παρακάτω σχετικά με το gdm στο [archwiki](https://wiki.archlinux.org/index.php/gdm#gdm_ignore_wayland_and_use_x.org_by_default):

wayland requires kernel mode setting (kms) running in order to work, and on some machines the gdm process start earlier than kms, resulting in gdm unable to see wayland and working only with [x.org](http://x.org).

προ… [εικόνα] petrosmpam:

πιθανολογώ οτι φταίει το nemo άρα.

τώρα που το λες έχω ξανακούσει παλιότερα για προβλήματα στις αντιγραφές με τον nemo (δεν είχα εγώ τέτοια για τον απλό λόγο ότι δεν χρησιμοποιώ mint/cinnamon/nemo). αν υπάρχει τέτοιο bug η κοινότητα τού mint/cinnamon θα έπρεπε να το έχει … εντάξει, όλα καλά. το θέμα λύθηκε. η απορία όμως έμεινε.

**τι έκανα:text

άλλαξα τα repos σε testing. αυταααα… ευχαριστώ όλους για την συμπαράσταση!! ευχαριστώ και το [linux-user.gr](http://linux-user.gr) γιατί υπάρχει. [@stergios](/u/stergios) καλοσωρισες στην παρεα μας.

μπορεις να δοκιμασεις καποια αλλη ιστοσελιδα πχ το <https://vimeo.com> ή το [ted talks](https://www.ted.com/talks)

ο λογος γιατι προτεινω διαφορετικες ιστοσελιδες ειναι για να δω αν ειναι θεμα του browser ή αν ειναι θεμα καποιου codec που μπορει να λοιπει απο το συστημα σου.

παραλληλα ανοι… ναι, σου το λέει ότι βασίζεται στον πυρήνα linux 5.4 που είναι διαθέσιμος και στον 20.04. αυτό σε καμία περίπτωση δεν σημαίνει ότι βασίζεται στο ubuntu 20.04.

οι διανομές linux δεν είναι ενιαίο σύστημα αλλά αποτελείται από διάφορα τμήματα τα οποία μπορείς να αλλάζεις σε κάποιο βαθμό. δες :

… νομίζω ότι ο 5.13 δεν είναι ακόμη σταθερός(είναι σε στάδιο rc εκδόσεων απ’ ότι βλέπω) κι έτσι εκτός του ότι δεν είναι βέβαιο ότι θα λυθεί το πρόβλημά σου μπορεί να δημιουργηθούν και άλλα περισσότερα. καλύτερα νομίζω είναι(αφού όπως γράφεις το πρόβλημα δημιουργήθηκε μετά την τελευταία αναβάθμιση του … λοιπόν, τσάμπα σας ταλαιπωρώ…

έφταιγε το καλώδιο, αλλά (μη χαίρεστε :stuck\_out\_tongue: ), το καλώδιο στον τοίχο…

κάτι τρέχει με το εσωτερικό που φεύγει από το χώρο μου και πάει στο γενικό switch.

δοκίμασα 4 διαφορετικά καλώδια και με όλα είχα το ίδιο θέμα. επειδή όμως ήθελα να ελέγξω και το cat 6… εδώ ταιριάζει η παροιμία με την ολόκληρη πίτα και τον χορτάτο σκύλο. σε καθημερινή γλώσσα, θα ήθελες ο display server να κάνει ταυτόχρονα δύο εντελώς διαφορετικά πράγματα, και μάλιστα σε ένα περιβάλλον που έχει σχεδιαστεί κυρίως για χρήση τερματικού (και πρακτικά καταλήγει αχταρμάς τερματικού και gu… Κάνατε πολύ καλή δουλειά στο να συνοψίσετε τι είναι φοβερό στο Node.js. Η αίσθησή μου είναι ότι το Node.js είναι ιδιαίτερα κατάλληλο για εφαρμογές όπου θα θέλατε να διατηρήσετε μια μόνιμη σύνδεση από το πρόγραμμα περιήγησης πίσω στον διακομιστή. Χρησιμοποιώντας μια τεχνική γνωστή ως ["long-polling"](https://en.wikipedia.org/wiki/Push_technology#Long_polling), μπορείτε να γράψετε μια εφαρμογή που στέλνει ενημερώσεις στον χρήστη σε πραγματικό χρόνο. Η πραγματοποίηση long polling σε πολλούς από τους γίγαντες του διαδικτύου, όπως το [Ruby on Rails](https://en.wikipedia.org/wiki/Ruby_on_Rails) ή το [Django](https://en.wikipedia.org/wiki/Django_%28web_framework%29), θα δημιουργούσε τεράστιο φόρτο στον διακομιστή, επειδή κάθε ενεργός πελάτης τρώει μια διεργασία του διακομιστή. Αυτή η κατάσταση ισοδυναμεί με επίθεση [tarpit](https://en.wikipedia.org/wiki/Tarpit_(networking)). Όταν χρησιμοποιείτε κάτι όπως το Node.js, ο διακομιστής δεν έχει ανάγκη να διατηρεί ξεχωριστά νήματα για κάθε ανοιχτή σύνδεση. 


Αυτό σημαίνει ότι μπορείτε να δημιουργήσετε μια [εφαρμογή συνομιλίας με βάση το πρόγραμμα περιήγησης](https://github.com/rivalslayer/node_chat) σε Node.js που δεν χρειάζεται σχεδόν καθόλου πόρους συστήματος για να εξυπηρετεί πολλούς πελάτες. Κάθε φορά που θέλετε να κάνετε αυτού του είδους τη μακροχρόνια αναζήτηση, το Node.js είναι μια εξαιρετική επιλογή. 


Αξίζει να αναφέρουμε ότι και η Ruby και η Python έχουν εργαλεία για να κάνουν κάτι τέτοιο ([eventmachine](http://rubyeventmachine.com/) και [twisted](https://twistedmatrix.com/trac/), αντίστοιχα), αλλά ότι το Node.js το κάνει εξαιρετικά καλά, και από την αρχή. Η JavaScript είναι εξαιρετικά καλά τοποθετημένη σε ένα μοντέλο ταυτόχρονης λειτουργίας βασισμένο σε callback, και υπερέχει εδώ. Επίσης, η δυνατότητα σειριοποίησης και αποσειριοποίησης με JSON εγγενές τόσο στον πελάτη όσο και στον διακομιστή είναι αρκετά έξυπνη.


Ανυπομονώ να διαβάσω άλλες απαντήσεις εδώ, αυτή είναι μια φανταστική ερώτηση.


Αξίζει να επισημάνουμε ότι το Node.js είναι επίσης εξαιρετικό για καταστάσεις στις οποίες θα επαναχρησιμοποιήσετε πολύ κώδικα σε όλο το χάσμα πελάτη/εξυπηρετητή. Το [Meteor framework](https://meteor.com) το κάνει αυτό πολύ εύκολο, και πολλοί άνθρωποι προτείνουν ότι αυτό μπορεί να είναι το μέλλον της ανάπτυξης ιστοσελίδων. Μπορώ να πω από την εμπειρία μου ότι είναι πολύ διασκεδαστικό να γράφεις κώδικα στο Meteor, και ένα μεγάλο μέρος αυτού είναι να ξοδεύεις λιγότερο χρόνο σκεπτόμενος πώς θα αναδομήσεις τα δεδομένα σου, ώστε ο κώδικας που εκτελείται στο πρόγραμμα περιήγησης να μπορεί εύκολα να τα χειριστεί και να τα μεταβιβάσει πίσω.


Εδώ είναι ένα άρθρο για το Pyramid και το long-polling, το οποίο αποδεικνύεται ότι είναι πολύ εύκολο να ρυθμιστεί με λίγη βοήθεια από το gevent: [*TicTacToe και Long Polling με την Pyramid*](http://michael.merickel.org/2011/6/21/tictactoe-and-long-polling-with-pyramid/).