Trasas Steve - Effects of TDD

22
ΤΡΑΣΑΣ ΣΤΗΒ [email protected] .gr Effects of Test-Driven Development: A Comparative Analysis of Empirical Studies Simo Mäkinen and Jürgen Münch Department of Computer Science, University of Helsinki, Finland

Transcript of Trasas Steve - Effects of TDD

Page 1: Trasas Steve  - Effects of TDD

ΤΡΑΣΑΣ ΣΤΗΒ[email protected]

Effects of Test-Driven Development: A Comparative Analysis of Empirical

Studies

Simo Mäkinen and Jürgen MünchDepartment of Computer Science,

University of Helsinki, Finland

Page 2: Trasas Steve  - Effects of TDD

Test Driven Development

1. Fail

2. Pass3.

Refactor

Write a test that fails

Write the minimum amount of code to make it pass

Improve the existing code

Page 3: Trasas Steve  - Effects of TDD

• Τι γνωρίζουμε για τα αποτελέσματα της χρήσης του TDD;

• Με ποιο τρόπο αλλάζει η διαδικασία ανάπτυξης λογισμικού;

• Ο στόχος αυτής της εργασίας είναι να διερευνήσει τις

επιδράσεις του TDD

• Ολοκληρωμένη ανασκόπηση της βιβλιογραφίας και ανάλυση

εμπειρικών μελετών

• Σχηματίστηκαν 9 χαρακτηριστικά ποιότητας χρησιμοποιώντας

τα δεδομένα των πειραμάτων και μελετήθηκαν με λεπτομέρεια

Εισαγωγή

Page 4: Trasas Steve  - Effects of TDD

• Λέξεις κλειδιά αναζήτησης: test driven development, test driven,

test first programming, test first

• Ιστοσελίδες αναζήτησης : Institute of Electrical Engineers (IEEE),

Association of Computer Machinery (ACM), Springer, Elsevier

• Μετά την εφαρμογή κριτηρίων ποιότητας και συνάφειας

επιλέχθηκαν 19 δημοσιεύσεις για ανάλυση

• Τα πορίσματα των μελετών χρησιμοποιήθηκαν για την

δημιουργία των χαρακτηριστικών ποιότητας

Μεθοδολογία

Page 5: Trasas Steve  - Effects of TDD

Πίνακας χαρακτηριστικών ποιότητας

Page 6: Trasas Steve  - Effects of TDD

• Στο TDD τα tests γράφονται πρώτα άρα λιγότερα τμήματα του

κώδικα μένουν μη τεσταρισμένα, συνεπώς υπάρχουν λιγότερα

λάθη

• IBM: μόνο τα μισά λάθη συγκριτικά, 4 λάθη/1000 γραμμές κωδ.,

ίδιος αριθμός σοβαρών λαθών

• Microsoft: μείωση λαθών 60-90% συγκριτικά με παρόμοια έργα

• Σε ακαδημαϊκά πειράματα το TDD ήταν οριακά καλύτερο ή η

επιθεώρηση του κώδικα ήταν αποτελεσματικότερη στην

ανίχνευση λαθών

1. Πυκνότητα και αριθμός λαθών (defect density)

Page 7: Trasas Steve  - Effects of TDD

Cohesion

Coupling

Productivity

Maintainabilty

Effort

Size

Complexity

External Quality

Defects

-2 -1 0 1 2 3 4 5 6 7 8

PositiveNegativeNeutral or Inconclu-sive

Επιδράσεις του TDD

Page 8: Trasas Steve  - Effects of TDD

• Περιγράφει μεμονωμένα συστατικά κώδικα και την εσωτερική

τους δομή

• Κυκλωματική πολυπλοκότητα (McCabe)

• M = E − N + 2 = 9 – 8 + 2 = 3, όπου Ε=

αριθμός ακμών και Ν= αριθμός κόμβων

• Παρατηρείται μείωση και στα πειράματα στη

βιομηχανία (πιο συνεκτικές κλάσεις, λιγότερο

πολύπλοκες μέθοδοι) και στην εκπαίδευση (λιγότερο

πολύπλοκες κλάσεις, συνήθως μικρές διαφορές)

2. Πολυπλοκότητα (Complexity)

Page 9: Trasas Steve  - Effects of TDD

Cohesion

Coupling

Productivity

Maintainabilty

Effort

Size

Complexity

External Quality

Defects

-2 -1 0 1 2 3 4 5 6 7 8

PositiveNegativeNeutral or Inconclu-sive

Επιδράσεις του TDD

Page 10: Trasas Steve  - Effects of TDD

• Αναφέρονται στο βαθμό εξάρτησης μεταξύ 2 συστατικών

(σύζευξη) και στο βαθμό εσωτερικής λειτουργικής συνάφειας

μεταξύ των τμημάτων ενός συστατικού (συνοχή-συνεκτικότητα)

• Σχετικά μικρή αναφορά στα πειράματα

• Σε 2 πειράματα (βιομηχανία, εκπαίδευση) η σύζευξη φαινόταν

ότι ήταν μεγαλύτερη με TDD

• Η συνοχή σε πείραμα φάνηκε να είναι λίγο χαμηλότερη

• Γενικά ασαφή συμπεράσματα

3. Σύζευξη και Συνοχή (Coupling and Cohesion)

Page 11: Trasas Steve  - Effects of TDD

Cohesion

Coupling

Productivity

Maintainabilty

Effort

Size

Complexity

External Quality

Defects

-2 -1 0 1 2 3 4 5 6 7 8

PositiveNegativeNeutral or Inconclu-sive

Επιδράσεις του TDD

Page 12: Trasas Steve  - Effects of TDD

• Μία μετρική μεγέθους είναι οι γραμμές κώδικα

• TDD: σημαντική ποσότητα αυτοματοποιημένων unit tests

• Test source code lines / non-test source code lines

• Microsoft: 0.89 = test code lines/production code lines,

0.39 για μεγαλύτερα έργα

• IBM: 0.48

• Σε κάποιες περιπτώσεις οι κλάσεις και οι μέθοδοι ήταν μικρότερες

• Οι επαγγελματίες προγραμματιστές γενικά μπορεί να γράφουν

κώδικα (non-test) μικρότερου μεγέθους με TDD

4. Μέγεθος (Size)

Page 13: Trasas Steve  - Effects of TDD

Cohesion

Coupling

Productivity

Maintainabilty

Effort

Size

Complexity

External Quality

Defects

-2 0 2 4 6 8 10 12

PositiveNegativeNeutral or Inconclu-sive

Επιδράσεις του TDD

Page 14: Trasas Steve  - Effects of TDD

• Μετρική που δείχνει την προσπάθεια που απαιτείται σε μια

συγκεκριμένη εργασία προγραμματισμού (σχετίζεται με τη

διάρκεια)

• Microsoft, IBM: οι project manager εκτίμησαν 15-30%

μεγαλύτερη διάρκεια ανάπτυξης

• Σε άλλη μελέτη: +3500 ώρες, έργο 6 μηνών

• Σε ακαδημαϊκό πείραμα υπήρξε λιγότερη προσπάθεια στην αρχή

• Δεν πρέπει να μετράμε την προσπάθεια μόνο στα αρχικά στάδια

ανάπτυξης αλλά και στην αναδόμηση και την συντήρηση

5. Προσπάθεια (Effort)

Page 15: Trasas Steve  - Effects of TDD

Cohesion

Coupling

Productivity

Maintainabilty

Effort

Size

Complexity

External Quality

Defects

-6 -4 -2 0 2 4 6 8 10 12

PositiveNegativeNeutral or Inconclu-sive

Επιδράσεις του TDD

Page 16: Trasas Steve  - Effects of TDD

• Σχετίζεται με:o Την ευκολία εύρεσης του κώδικα που θέλει αλλαγή

o Την προσπάθεια για να γίνει η αλλαγή

o Η αυτοπεποίθηση ότι όλα λειτουργούν καλά μετά την αλλαγή

• Σημαντικό εύρημα σε μελέτη ήταν ότι ενώ στην ανάπτυξη με

TDD η προσπάθεια ήταν μεγαλύτερη, μετά την έκδοση του

λογισμικού η συντήρηση ήταν ξεκάθαρα ευκολότερη και

λιγότερο χρονοβόρα

• Λίγες εμπειρικές μελέτες αναφέρονται στην συντηρησιμότητα

6. Συντηρησιμότητα (Maintainability)

Page 17: Trasas Steve  - Effects of TDD

Cohesion

Coupling

Productivity

Maintainabilty

Effort

Size

Complexity

External Quality

Defects

-6 -4 -2 0 2 4 6 8 10 12

PositiveNegativeNeutral or Inconclu-sive

Επιδράσεις του TDD

Page 18: Trasas Steve  - Effects of TDD

• Σε αυτή την εργασία η εξωτερική ποιότητα αναφέρεται σε

ποιοτικές και υποκειμενικές πληροφορίες, οι οποίες δεν

μετατρέπονται εύκολα σε ποσοτικές μετρικές

• Όταν έδειξαν σε πελάτες λογισμικό που αναπτύχθηκε με TDD,

δεν αντιλήφθηκαν κάποια αλλαγή στην ποιότητα

• Οι επαγγελματίες προγραμματιστές πίστευαν ότι παράγουν

ποιοτικότερο κώδικα με TDD

• Οι φοιτητές είχαν την αίσθηση ότι βελτιώθηκε η δυνατότητα

ελέγχου του προγράμματος τους (testability) αλλά μειώθηκε η

εμπιστοσύνη τους στον σχεδιασμό του συστήματος

7. Εξωτερική Ποιότητα (External Quality)

Page 19: Trasas Steve  - Effects of TDD

Cohesion

Coupling

Productivity

Maintainabilty

Effort

Size

Complexity

External Quality

Defects

-6 -4 -2 0 2 4 6 8 10 12

PositiveNegativeNeutral or Inconclu-sive

Επιδράσεις του TDD

Page 20: Trasas Steve  - Effects of TDD

• Παραγωγικότητα= έργο/προγραμματιστή

• Σε εμπειρικές μελέτες στη βιομηχανία η παραγωγικότητα ήταν

ελαφρώς χαμηλότερη και οι προγραμματιστές πίστευαν ότι

οφείλεται στις πρακτικές του TDD

• Σε αρκετά πειράματα με φοιτητές η παραγωγικότητα ήταν

παρόμοια ή λίγο υψηλότερη χρησιμοποιώντας TDD

• Γενικά, φοιτητές και επαγγελματίες έγραφαν τον κώδικα ελέγχου

3 φορές γρηγορότερα (150 LOC/h) από τον κώδικα της

εφαρμογής

8. Παραγωγικότητα (Productivity)

Page 21: Trasas Steve  - Effects of TDD

Cohesion

Coupling

Productivity

Maintainabilty

Effort

Size

Complexity

External Quality

Defects

-6 -4 -2 0 2 4 6 8 10 12

PositiveNegativeNeutral or Inconclu-sive

Επιδράσεις του TDD

Page 22: Trasas Steve  - Effects of TDD

• Beck, K.: Test-Driven Development: By Example. Addison-Wesley (2003)

• Jeffries, R., Melnik, G.: Guest Editors’ Introduction: TDD–The Art of Fearless Programming. IEEE Software 24(3) (May-June 2007) 24–30

• Turhan, B., Layman, L., Diep, M., Erdogmus, H., Shull, F.: How Effective is Test-Driven Development. In Oram, A., Wilson, G., eds.: Making Software: What Really Works, and Why We Believe It. O’Reilly (2010) 207–219

• Rafique, Y., Misic, V.: The Effects of Test-Driven Development on External Quality and Productivity: A Meta Analysis. IEEE Transactions on Software Engineering 39(6) (2013) 835–856

• Williams, L., Maximilien, E., Vouk, M.: Test-Driven Development as a Defect-Reduction Practice. In: Proceedings of the 14th International Symposium on Software Reliability Engineering. ISSRE 2003 (November 2003) 34–45

• Wilkerson, J., Nunamaker, J.J., Mercer, R.: Comparing the Defect Reduction Benefits of Code Inspection and Test-Drive Development. IEEE Transactions on Software Engineering 38(3) (May-June 2012) 547–560

ΤΕΛΟΣ