Trasas Steve - Effects of TDD

Post on 14-Apr-2017

49 views 0 download

Transcript of Trasas Steve - Effects of TDD

ΤΡΑΣΑΣ ΣΤΗΒstrasas@it.teithe.gr

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

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

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

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

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

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

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

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

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

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

Εισαγωγή

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

test first programming, test first

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

Association of Computer Machinery (ACM), Springer, Elsevier

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

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

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

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

Μεθοδολογία

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

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

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

λάθη

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

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

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

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

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

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

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

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

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

τους δομή

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

• 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)

Cohesion

Coupling

Productivity

Maintainabilty

Effort

Size

Complexity

External Quality

Defects

-2 0 2 4 6 8 10 12

PositiveNegativeNeutral or Inconclu-sive

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

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

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

διάρκεια)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

εφαρμογής

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

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

• 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

ΤΕΛΟΣ