skip to main content
Skip header Section
Test Driven Development: By ExampleNovember 2002
Publisher:
  • Addison-Wesley Longman Publishing Co., Inc.
  • 75 Arlington Street, Suite 300 Boston, MA
  • United States
ISBN:978-0-321-14653-3
Published:01 November 2002
Pages:
176
Skip Bibliometrics Section
Bibliometrics
Skip Abstract Section
Abstract

From the Book: Clean code that works is Ron Jeffries' pithy phrase. The goal is clean code that works, and for a whole bunch of reasons: Clean code that works is a predictable way to develop. You know when you are finished, without having to worry about a long bug trail. Clean code that works gives you a chance to learn all the lessons that the code has to teach you. If you only ever slap together the first thing you think of, you never have time to think of a second, better, thing. Clean code that works improves the lives of users of our software. Clean code that works lets your teammates count on you, and you on them. Writing clean code that works feels good.But how do you get to clean code that works Many forces drive you away from clean code, and even code that works. Without taking too much counsel of our fears, here's what we dodrive development with automated tests, a style of development called Test-Driven Development (TDD for short). In Test-Driven Development, you: Write new code only if you first have a failing automated test. Eliminate duplication. Two simple rules, but they generate complex individual and group behavior. Some of the technical implications are: You must design organically, with running code providing feedback between decisions You must write your own tests, since you can't wait twenty times a day for someone else to write a test Your development environment must provide rapid response to small changes Your designs must consist of many highly cohesive, loosely coupled components, just to make testing easy The two rules imply an order to the tasks ofprogramming: 1. Redwrite a little test that doesn't work, perhaps doesn't even compile at first 2. Greenmake the test work quickly, committing whatever sins necessary in the process 3. Refactoreliminate all the duplication created in just getting the test to work Red/green/refactor. The TDD's mantra. Assuming for the moment that such a style is possible, it might be possible to dramatically reduce the defect density of code and make the subject of work crystal clear to all involved. If so, writing only code demanded by failing tests also has social implications: If the defect density can be reduced enough, QA can shift from reactive to pro-active work If the number of nasty surprises can be reduced enough, project managers can estimate accurately enough to involve real customers in daily development If the topics of technical conversations can be made clear enough, programmers can work in minute-by-minute collaboration instead of daily or weekly collaboration Again, if the defect density can be reduced enough, we can have shippable software with new functionality every day, leading to new business relationships with customers So, the concept is simple, but what's my motivation Why would a programmer take on the additional work of writing automated tests Why would a programmer work in tiny little steps when their mind is capable of great soaring swoops of design Courage.Courage Test-driven development is a way of managing fear during programming. I don't mean fear in a bad way, pow widdle prwogwammew needs a pacifiew, but fear in the legitimate, this-is-a-hard-problem-and-I-can't-see-the-end-from-the-beginning sense. If pain is nature's way of saying Stop!, fear is nature's way of saying Be careful. Being careful is good, but fear has a host of other effects: Makes you tentative Makes you want to communicate less Makes you shy from feedback Makes you grumpy None of these effects are helpful when programming, especially when programming something hard. So, how can you face a difficult situation and: Instead of being tentative, begin learning concretely as quickly as possible. Instead of clamming up, communicate more clearly. Instead of avoiding feedback, search out helpful, concrete feedback. (You'll have to work on grumpiness on your own.) Imagine programming as turning a crank to pull a bucket of water from a well. When the bucket is small, a free-spinning crank is fine. When the bucket is big and full of water, you're going to get tired before the bucket is all the way up. You need a ratchet mechanism to enable you to rest between bouts of cranking. The heavier the bucket, the closer the teeth need to be on the ratchet. The tests in test-driven development are the teeth of the ratchet. Once you get one test working, you know it is working, now and forever. You are one step closer to having everything working than you were when the test was broken. Now get the next one working, and the next, and the next. By analogy, the tougher the programming problem, the less ground should be covered by each test. Readers of Extreme Programming Explained will notice a difference in tone between XP and TDD. TDD isn't an absolute like Extreme Programming. XP says, Here are things you must be able to do to be prepared to evolve further. TDD is a little fuzzier. TDD is an awareness of the gap between decision and feedback during programming, and techniques to control that gap. What if I do a paper design for a week, then test-drive the code Is that TDD Sure, it's TDD. You were aware of the gap between decision and feedback and you controlled the gap deliberately. That said, most people who learn TDD find their programming practice changed for good. Test Infected is the phrase Erich Gamma coined to describe this shift. You might find yourself writing more tests earlier, and working in smaller steps than you ever dreamed would be sensible. On the other hand, some programmers learn TDD and go back to their earlier practices, reserving TDD for special occasions when ordinary programming isn't making progress. There are certainly programming tasks that can't be driven solely by tests (or at least, not yet). Security software and concurrency, for example, are two topics where TDD is not sufficient to mechanically demonstrate that the goals of the software have been met. Security relies on essentially defect-free code, true, but also on human judgement about the methods used to secure the software. Subtle concurrency problems can't be reliably duplicated by running the code. Once you are finished reading this book, you should be ready to: Start simply Write automated tests Refactor to add design decisions one at a time This book is organized into three sections. An example of writing typical model code using TDD. The example is one I got from Ward Cunningham years ago, and have used many times since, multi-currency arithmetic. In it you will learn to write tests before code and grow a design organically. An example of testing more complicated logic, including reflection and exceptions, by developing a framework for automated testing. This example also serves to introduce you to the xUnit architecture that is at the heart of many programmer-oriented testing tools. In the second example you will learn to work in even smaller steps than in the first example, including the kind of self-referential hooha beloved of computer scientists. Patterns for TDD. Included are patterns for the deciding what tests to write, how to write tests using xUnit, and a greatest hits selection of the design patterns and refactorings used in the examples. I wrote the examples imagining a pair programming session. If you like looking at the map before wandering around, you may want to go straight to the patterns in Section 3 and use the examples as illustrations. If you prefer just wandering around and then looking at the map to see where you've been, try reading the examples through and refering to the patterns when you want more detail about a technique, then using the patterns as a reference. Several reviewers have commented they got the most out of the examples when they started up a programming environment and entered the code and ran the tests as they read. A note about the examples. Both examples, multi-currency calculation and a testing framework, appear simple. There are (and I have seen) complicated, ugly, messy ways of solving the same problems. I could have chosen one of those complicated, ugly, messy solutions to give the book an air of reality. However, my goal, and I hope your goal, is to write clean code that works. Before teeing off on the examples as being too simple, spend 15 seconds imagining a programming world in which all code was this clear and direct, where there were no complicated solutions, only apparently complicated problems begging for careful thought. TDD is a practice that can help you lead yourself to exactly that careful thought.

Cited By

  1. ACM
    Berente N, Kormylo C and Rosenkranz C (2024). Test-Driven Ethics for Machine Learning, Communications of the ACM, 67:5, (45-47), Online publication date: 1-May-2024.
  2. Mafi Z and Mirian-Hosseinabadi S (2024). Regression test selection in test-driven development, Automated Software Engineering, 31:1, Online publication date: 1-May-2024.
  3. ACM
    Kim K, Ghatpande S, Kim D, Zhou X, Liu K, Bissyandé T, Klein J and Le Traon Y (2023). Big Code Search: A Bibliography, ACM Computing Surveys, 56:1, (1-49), Online publication date: 31-Jan-2024.
  4. ACM
    Ren W Gamification in Test-Driven Development Practice Proceedings of the 2nd International Workshop on Gamification in Software Development, Verification, and Validation, (38-46)
  5. ACM
    Garfinkel S and Stewart J (2023). Sharpening Your Tools, Communications of the ACM, 66:8, (44-52), Online publication date: 1-Aug-2023.
  6. Ren W and Barrett S (2023). Test‐driven development, engagement in activity, and maintainability, IET Software, 17:4, (509-525), Online publication date: 27-Jul-2023.
  7. ACM
    Fiebig T Crisis, Ethics, Reliability & a measurement.network Proceedings of the Applied Networking Research Workshop, (44-50)
  8. van Spaendonck P Efficient Dynamic Model Based Testing Formal Techniques for Distributed Objects, Components, and Systems, (173-188)
  9. Aljedaani W, Mkaouer M, Peruma A and Ludi S Do the Test Smells Assertion Roulette and Eager Test Impact Students' Troubleshooting and Debugging Capabilities? Proceedings of the 45th International Conference on Software Engineering: Software Engineering Education and Training, (29-39)
  10. Buffardi K Cognitive Reflection in Software Verification and Testing Proceedings of the 45th International Conference on Software Engineering: Software Engineering Education and Training, (1-10)
  11. Calais P and Franzini L Test-Driven Development Benefits beyond Design Quality: Flow State and Developer Experience Proceedings of the 45th International Conference on Software Engineering: New Ideas and Emerging Results, (106-111)
  12. Wang X, Xiao L, Yu T, Woepse A and Wong S (2023). From Inheritance to Mockito: An Automatic Refactoring Approach, IEEE Transactions on Software Engineering, 49:4, (2791-2814), Online publication date: 1-Apr-2023.
  13. ACM
    Garfinkel S and Stewart J (2023). Sharpening Your Tools, Queue, 21:1, (30-56), Online publication date: 28-Feb-2023.
  14. ACM
    Lonati V, Brodnik A, Bell T, Csizmadia A, De Mol L, Hickman H, Keane T, Mirolo C and Monga M What We Talk About When We Talk About Programs Proceedings of the 2022 Working Group Reports on Innovation and Technology in Computer Science Education, (117-164)
  15. Jones W, Gun P and Foumani M An MVP Approach to Developing Complex Hybrid Simulation Models Proceedings of the Winter Simulation Conference, (1176-1187)
  16. ACM
    Robe P, Kuttal S, AuBuchon J and Hart J Pair programming conversations with agents vs. developers: challenges and opportunities for SE community Proceedings of the 30th ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering, (319-331)
  17. ACM
    Fuksa M ViMoTest Proceedings of the 25th International Conference on Model Driven Engineering Languages and Systems: Companion Proceedings, (189-194)
  18. ACM
    Liu Y, Nie P, Legunsen O and Gligoric M Inline Tests Proceedings of the 37th IEEE/ACM International Conference on Automated Software Engineering, (1-13)
  19. ACM
    Romano S, Zampetti F, Baldassarre M, Di Penta M and Scanniello G Do Static Analysis Tools Affect Software Quality when Using Test-driven Development? Proceedings of the 16th ACM / IEEE International Symposium on Empirical Software Engineering and Measurement, (80-91)
  20. Rodler P (2022). One step at a time, Knowledge-Based Systems, 251:C, Online publication date: 5-Sep-2022.
  21. ACM
    Chen H, Miao Y, Chen L, Sun H, Xu H, Liu L, Zhang G and Wang W Software-defined network assimilation Proceedings of the ACM SIGCOMM 2022 Conference, (281-297)
  22. ACM
    Kang H, Nguyen T, Le B, Păsăreanu C and Lo D Test mimicry to assess the exploitability of library vulnerabilities Proceedings of the 31st ACM SIGSOFT International Symposium on Software Testing and Analysis, (276-288)
  23. Persiani S, Daquino M and Peroni S A Programming Interface for Creating Data According to the SPAR Ontologies and the OpenCitations Data Model The Semantic Web, (305-322)
  24. ACM
    Hofbauer M, Bachhuber C, Kuhn C and Steinbach E Teaching software engineering as programming over time Proceedings of the 4th International Workshop on Software Engineering Education for the Next Generation, (51-58)
  25. Papis B, Grochowski K, Subzda K and Sijko K (2022). Experimental Evaluation of Test-Driven Development With Interns Working on a Real Industrial Project, IEEE Transactions on Software Engineering, 48:5, (1644-1664), Online publication date: 1-May-2022.
  26. ACM
    Arab M, LaToza T, Liang J and Ko A An Exploratory Study of Sharing Strategic Programming Knowledge Proceedings of the 2022 CHI Conference on Human Factors in Computing Systems, (1-15)
  27. Chatley R, Donaldson A and Mycroft A The Next 7000 Programming Languages Computing and Software Science, (250-282)
  28. Baldassarre M, Caivano D, Fucci D, Romano S and Scanniello G (2022). Affective reactions and test-driven development, Journal of Systems and Software, 185:C, Online publication date: 1-Mar-2022.
  29. Pike M, Lee B and Towey D (2022). TAFFIES: Tailored Automated Feedback Framework for Developing Integrated and Extensible Feedback Systems, SN Computer Science, 3:2, Online publication date: 1-Mar-2022.
  30. Fernández-Izquierdo A and García-Castro R (2022). Ontology verification testing using lexico-syntactic patterns, Information Sciences: an International Journal, 582:C, (89-113), Online publication date: 1-Jan-2022.
  31. ACM
    Chioteli E, Batas I and Spinellis D Does Unit-Tested Code Crash? A Case Study of Eclipse Proceedings of the 25th Pan-Hellenic Conference on Informatics, (260-264)
  32. ACM
    Wang X, Xiao L, Yu T, Woepse A and Wong S An automatic refactoring framework for replacing test-production inheritance by mocking mechanism Proceedings of the 29th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, (540-552)
  33. Espinoza-Arias P, Garijo D and Corcho O (2021). Crossing the chasm between ontology engineering and application development, Web Semantics: Science, Services and Agents on the World Wide Web, 70:C, Online publication date: 1-Jul-2021.
  34. Koo Y, Kim S and Ha Y (2021). OpenCL-Darknet: implementation and optimization of OpenCL-based deep learning object detection framework, World Wide Web, 24:4, (1299-1319), Online publication date: 1-Jul-2021.
  35. Tan S, Hu C, Li Z, Zhang X and Zhou Y GitHub-OSS fixit Proceedings of the 43rd International Conference on Software Engineering: Joint Track on Software Engineering Education and Training, (1-10)
  36. Eloe N (2021). Teach like a git, Journal of Computing Sciences in Colleges, 36:6, (27-36), Online publication date: 1-Apr-2021.
  37. Fisher M, Mascardi V, Rozier K, Schlingloff B, Winikoff M and Yorke-Smith N (2020). Towards a framework for certification of reliable autonomous systems, Autonomous Agents and Multi-Agent Systems, 35:1, Online publication date: 1-Apr-2021.
  38. ACM
    kaneshige Y, Satake S, Kanda T and Imai M How to Overcome the Difficulties in Programming and Debugging Mobile Social Robots? Proceedings of the 2021 ACM/IEEE International Conference on Human-Robot Interaction, (361-369)
  39. ACM
    Kroll J Outlining Traceability Proceedings of the 2021 ACM Conference on Fairness, Accountability, and Transparency, (758-771)
  40. Roman A and Mnich M (2021). Test-driven development with mutation testing – an experimental study, Software Quality Journal, 29:1, (1-38), Online publication date: 1-Mar-2021.
  41. Santos A, Vegas S, Oivo M and Juristo N (2021). Comparing the results of replications in software engineering, Empirical Software Engineering, 26:2, Online publication date: 1-Mar-2021.
  42. Güncan D and Onay Durdu P (2020). A user‐centered behavioral software development model, Journal of Software: Evolution and Process, 33:2, Online publication date: 14-Feb-2021.
  43. ACM
    Ciancarini P, Masyagin S and Succi G Software design as story telling: reflecting on the work of Italo Calvino Proceedings of the 2020 ACM SIGPLAN International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software, (195-208)
  44. ACM
    Nascimento N, Santos A, Sales A and Chanin R Behavior-Driven Development Proceedings of the XXXIV Brazilian Symposium on Software Engineering, (41-46)
  45. ACM
    Reginaldo F and Santos G Challenges in Agile Transformation Journey Proceedings of the XXXIV Brazilian Symposium on Software Engineering, (11-20)
  46. Şerban C, Niculescu V and Vescan A Attaining competences in software quality oriented design based on cyclic learning 2020 IEEE Frontiers in Education Conference (FIE), (1-9)
  47. ACM
    Silva L and Vilain P LCCSS Proceedings of the 14th Brazilian Symposium on Software Components, Architectures, and Reuse, (91-100)
  48. ACM
    Pereira G, Nunes I and Pimenta M Test-case-based Code Navigation in Dynamically Typed Programming Languages Proceedings of the 14th Brazilian Symposium on Software Components, Architectures, and Reuse, (81-90)
  49. Kussmaul C Patterns in activity models for process oriented guided inquiry learning (POGIL) Proceedings of the 27th Conference on Pattern Languages of Programs, (1-18)
  50. Parsai A and Demeyer S (2020). Comparing mutation coverage against branch coverage in an industrial setting, International Journal on Software Tools for Technology Transfer (STTT), 22:4, (365-388), Online publication date: 1-Aug-2020.
  51. ACM
    Liem C and Panichella A Oracle Issues in Machine Learning and Where to Find Them Proceedings of the IEEE/ACM 42nd International Conference on Software Engineering Workshops, (483-488)
  52. ACM
    Nascimento N, Santos A, Sales A and Chanin R Behavior-Driven Development Proceedings of the IEEE/ACM 42nd International Conference on Software Engineering Workshops, (109-116)
  53. ACM
    Edmison B and Edwards S Turn up the heat! Proceedings of the ACM/IEEE 42nd International Conference on Software Engineering: Software Engineering Education and Training, (34-44)
  54. Krings S, Körner P, Dunkelau J and Rutenkolk C A Verified Low-Level Implementation of the Adaptive Exterior Light and Speed Control System Rigorous State-Based Methods, (382-397)
  55. Truscan D, Ahmad T and Tran C Applying Test-Driven Development for Improved Feedback and Automation of Grading in Academic Courses on Software Development Frontiers in Software Engineering Education, (310-323)
  56. Medeiros H, Vilain P, Mylopoulos J and Jacobsen H SolUnit Proceedings of the 29th Annual International Conference on Computer Science and Software Engineering, (264-273)
  57. ACM
    Ziegler A, Geus J, Heinloth B, Hönig T and Lohmann D (2019). Honey, I Shrunk the ELFs, ACM Transactions on Embedded Computing Systems, 18:5s, (1-23), Online publication date: 31-Oct-2019.
  58. Tarasov A Assessing Job Satisfaction of Software Engineers Using GQM Approach Software Technology: Methods and Tools, (121-135)
  59. Grano G, Palomba F, Di Nucci D, De Lucia A and Gall H (2019). Scented since the beginning, Journal of Systems and Software, 156:C, (312-327), Online publication date: 1-Oct-2019.
  60. Palomba F and Zaidman A (2019). The smell of fear: on the relation between test smells and flaky tests, Empirical Software Engineering, 24:5, (2907-2946), Online publication date: 1-Oct-2019.
  61. ACM
    Fazzolino R and Rodrigues G Feature-Trace Proceedings of the XXXIII Brazilian Symposium on Software Engineering, (332-336)
  62. Wiecher C, Greenyer J and Korte J Test-driven scenario specification of automotive software components Proceedings of the 22nd International Conference on Model Driven Engineering Languages and Systems, (12-17)
  63. Meixner K, Winkler D and Biffl S Supporting Domain Experts by using Model-Based Equivalence Class Partitioning for Efficient Test Data Generation 2019 24th IEEE International Conference on Emerging Technologies and Factory Automation (ETFA), (134-141)
  64. ACM
    Koyuncu A, Liu K, Bissyandé T, Kim D, Monperrus M, Klein J and Le Traon Y iFixR: bug report driven program repair Proceedings of the 2019 27th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, (314-325)
  65. Danglot B, Vera-Pérez O, Baudry B and Monperrus M (2019). Automatic test improvement with DSpot, Empirical Software Engineering, 24:4, (2603-2635), Online publication date: 1-Aug-2019.
  66. ACM
    De Bleser J, Di Nucci D and De Roover C SoCRATES Proceedings of the Tenth ACM SIGPLAN Symposium on Scala, (22-26)
  67. ACM
    Grano G A new dimension of test quality: assessing and generating higher quality unit test cases Proceedings of the 28th ACM SIGSOFT International Symposium on Software Testing and Analysis, (419-423)
  68. Rodler P and Eichholzer M On the Usefulness of Different Expert Question Types for Fault Localization in Ontologies Advances and Trends in Artificial Intelligence. From Theory to Practice, (360-375)
  69. ACM
    Szabo C and Pointon M Final Year Students' Approaches to Implementing Complex Distributed Systems Proceedings of the 2019 ACM Conference on Innovation and Technology in Computer Science Education, (217-223)
  70. ACM
    Losada B, López-Gil J and Urretavizcaya M Improving Agile Software Development Methods by means of User Objectives Proceedings of the XX International Conference on Human Computer Interaction, (1-4)
  71. Udupi S, Urdahl J, Stoffel D and Kunz W (2019). Exploiting Hardware Unobservability for Low-Power Design and Safety Analysis in Formal Verification-Driven Design Flows, IEEE Transactions on Very Large Scale Integration (VLSI) Systems, 27:6, (1262-1275), Online publication date: 1-Jun-2019.
  72. Gergely T, Balogh G, Horváth F, Vancsics B, Beszédes Á and Gyimóthy T (2019). Differences between a static and a dynamic test-to-code traceability recovery method, Software Quality Journal, 27:2, (797-822), Online publication date: 1-Jun-2019.
  73. Spadini D, Aniche M, Bruntink M and Bacchelli A (2019). Mock objects for testing java systems, Empirical Software Engineering, 24:3, (1461-1498), Online publication date: 1-Jun-2019.
  74. Matthies C, Huegle J, Dürschmid T and Teusner R Attitudes, beliefs, and development data concerning agile software development practices Proceedings of the 41st International Conference on Software Engineering: Software Engineering Education and Training, (158-169)
  75. Ríos J, Kopec-Harding K, Eraslan S, Page C, Haines R, Jay C and Embury S A methodology for using GitLab for software engineering learning analytics Proceedings of the 12th International Workshop on Cooperative and Human Aspects of Software Engineering, (3-6)
  76. De Bleser J, Di Nucci D and De Roover C Assessing diffusion and perception of test smells in scala projects Proceedings of the 16th International Conference on Mining Software Repositories, (457-467)
  77. Spadini D, Palomba F, Baum T, Hanenberg S, Bruntink M and Bacchelli A Test-driven code review Proceedings of the 41st International Conference on Software Engineering, (1061-1072)
  78. Tarasov A Impact of lifestyle and working process organization on the job satisfaction level of software engineers Proceedings of the 41st International Conference on Software Engineering: Companion Proceedings, (177-179)
  79. Florea R and Stray V A global view on the hard skills and testing tools in software testing Proceedings of the 14th International Conference on Global Software Engineering, (133-141)
  80. ACM
    Medeiros H, Vilain P and Pereira V Reducing the execution time of unit tests of smart contracts in blockchain platforms Proceedings of the XV Brazilian Symposium on Information Systems, (1-8)
  81. ACM
    Craig M, Petersen A and Campbell J Answering the Correct Question Proceedings of the ACM Conference on Global Computing Education, (72-77)
  82. ACM
    Kim M and Lee E A novel approach to automatic query reformulation for IR-based bug localization Proceedings of the 34th ACM/SIGAPP Symposium on Applied Computing, (1752-1759)
  83. Mens T, Decan A and Spanoudakis N (2019). A method for testing and validating executable statechart models, Software and Systems Modeling (SoSyM), 18:2, (837-863), Online publication date: 1-Apr-2019.
  84. López-Fernández J, Garmendia A, Guerra E and Lara J (2019). An example is worth a thousand words, Software and Systems Modeling (SoSyM), 18:2, (961-993), Online publication date: 1-Apr-2019.
  85. ACM
    Kazerouni A, Shaffer C, Edwards S and Servant F Assessing Incremental Testing Practices and Their Impact on Project Outcomes Proceedings of the 50th ACM Technical Symposium on Computer Science Education, (407-413)
  86. ACM
    Buffardi K, Valdivia P and Rogers D Measuring Unit Test Accuracy Proceedings of the 50th ACM Technical Symposium on Computer Science Education, (578-584)
  87. ACM
    Oka A, Masuhara H and Aotani T Live, synchronized, and mental map preserving visualization for data structure programming Proceedings of the 2018 ACM SIGPLAN International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software, (72-87)
  88. ACM
    Zaytsev V An industrial case study in compiler testing (tool demo) Proceedings of the 11th ACM SIGPLAN International Conference on Software Language Engineering, (97-102)
  89. ACM
    Warner J, Lafreniere B, Fitzmaurice G and Grossman T ElectroTutor Proceedings of the 31st Annual ACM Symposium on User Interface Software and Technology, (435-446)
  90. ACM
    Fucci D, Romano S, Baldassarre M, Caivano D, Scanniello G, Turhan B and Juristo N A longitudinal cohort study on the retainment of test-driven development Proceedings of the 12th ACM/IEEE International Symposium on Empirical Software Engineering and Measurement, (1-10)
  91. ACM
    Stratis P, Yaneva V and Rajan A Assessing the effect of data transformations on test suite compilation Proceedings of the 12th ACM/IEEE International Symposium on Empirical Software Engineering and Measurement, (1-10)
  92. ACM
    Bijlsma A, Passier H, Pootjes H and Stuurman S Integrated Test Development Proceedings of the 7th Computer Science Education Research Conference, (9-20)
  93. Alquraan A, Takruri H, Alfatafta M and Al-Kiswany S An analysis of network-partitioning failures in cloud systems Proceedings of the 13th USENIX conference on Operating Systems Design and Implementation, (51-68)
  94. de Oliveira C, Canedo E, Faria H, Amaral L and Bonifácio R Improving Student’s Learning and Cooperation Skills Using Coding Dojos (In the Wild!) 2018 IEEE Frontiers in Education Conference (FIE), (1-8)
  95. Fan X Orchestrating Agile Sprint Reviews in Undergraduate Capstone Projects 2018 IEEE Frontiers in Education Conference (FIE), (1-8)
  96. ACM
    Fazzolino R, de Faria H, Amaral L, Canedo E, Rodrigues G and Bonifácio R Assessing Agile Testing Practices for Enterprise Systems Proceedings of the III Brazilian Symposium on Systematic and Automated Software Testing, (29-38)
  97. Nezhad A, Lukkien J and Mak R Behavior-driven Development for Real-time Embedded Systems 2018 IEEE 23rd International Conference on Emerging Technologies and Factory Automation (ETFA), (59-66)
  98. Karpov Y, Karpov L and Smetanin Y (2018). Adaptation of General Concepts of Software Testing to Neural Networks, Programming and Computing Software, 44:5, (324-334), Online publication date: 1-Sep-2018.
  99. Bouraqadi N and Mason D (2018). Test-driven development for generated portable Javascript apps, Science of Computer Programming, 161:C, (2-17), Online publication date: 1-Sep-2018.
  100. Akerele O (2018). System dynamics modelling of the impact of agile practice on the quality of continuous delivery projects, Innovations in Systems and Software Engineering, 14:3, (183-208), Online publication date: 1-Sep-2018.
  101. Borle N, Feghhi M, Stroulia E, Greiner R and Hindle A (2018). Analyzing the effects of test driven development in GitHub, Empirical Software Engineering, 23:4, (1931-1958), Online publication date: 1-Aug-2018.
  102. ACM
    Blasquez I and Leblanc H Experience in learning test-driven development: space invaders project-driven Proceedings of the 23rd Annual ACM Conference on Innovation and Technology in Computer Science Education, (111-116)
  103. ACM
    Ju A and Fox A TEAMSCOPE: measuring software engineering processes with teamwork telemetry Proceedings of the 23rd Annual ACM Conference on Innovation and Technology in Computer Science Education, (123-128)
  104. Karac I and Turhan B (2018). What Do We (Really) Know about Test-Driven Development?, IEEE Software, 35:4, (81-85), Online publication date: 1-Jul-2018.
  105. Munari S, Valle S and Vardanega T Microservice-Based Agile Architectures: An Opportunity for Specialized Niche Technologies Reliable Software Technologies – Ada-Europe 2018, (158-174)
  106. ACM
    Kessel M and Atkinson C Integrating reuse into the rapid, continuous software engineering cycle through test-driven search Proceedings of the 4th International Workshop on Rapid Continuous Software Engineering, (8-11)
  107. ACM
    Grano G, Scalabrino S, Gall H and Oliveto R An empirical investigation on the readability of manual and generated test cases Proceedings of the 26th Conference on Program Comprehension, (348-351)
  108. ACM
    Li B, Vendome C, Linares-Vásquez M and Poshyvanyk D Aiding comprehension of unit test cases and test suites with stereotype-based tagging Proceedings of the 26th Conference on Program Comprehension, (52-63)
  109. ACM
    Russo D, Taccogna G, Ciancarini P, Messina A and Succi G Contracting agile developments for mission critical systems in the public sector Proceedings of the 40th International Conference on Software Engineering: Software Engineering in Society, (47-56)
  110. ACM
    Tosun A, Ahmed M, Turhan B and Juristo N On the effectiveness of unit tests in test-driven development Proceedings of the 2018 International Conference on Software and System Process, (113-122)
  111. ACM
    Lundene K and Mohagheghi P How autonomy emerges as agile cross-functional teams mature Proceedings of the 19th International Conference on Agile Software Development: Companion, (1-5)
  112. Holzworth D, Huth N, Fainges J, Brown H, Zurcher E, Cichota R, Verrall S, Herrmann N, Zheng B and Snow V (2018). APSIM Next Generation, Environmental Modelling & Software, 103:C, (43-51), Online publication date: 1-May-2018.
  113. Haisjackl C, Soffer P, Lim S and Weber B (2018). How do humans inspect BPMN models, Software and Systems Modeling (SoSyM), 17:2, (655-673), Online publication date: 1-May-2018.
  114. Dimanidis A, Chatzidimitriou K and Symeonidis A A Natural Language Driven Approach for Automated Web API Development Companion Proceedings of the The Web Conference 2018, (1869-1874)
  115. ACM
    Videla A Lector in Codigo or the role of the reader Companion Proceedings of the 2nd International Conference on the Art, Science, and Engineering of Programming, (180-186)
  116. ACM
    Tsukamoto K, Maezawa Y and Honiden S AutoPUT Proceedings of the 33rd Annual ACM Symposium on Applied Computing, (1944-1951)
  117. ACM
    Buchwald H Subject-Orientation and Agility Proceedings of the 10th International Conference on Subject-Oriented Business Process Management, (1-7)
  118. ACM
    Gestwicki P Design and Evaluation of an Undergraduate Course on Software Development Practices Proceedings of the 49th ACM Technical Symposium on Computer Science Education, (221-226)
  119. ACM
    Börstler J, Störrle H, Toll D, van Assema J, Duran R, Hooshangi S, Jeuring J, Keuning H, Kleiner C and MacKellar B "I know it when I see it" Perceptions of Code Quality Proceedings of the 2017 ITiCSE Conference on Working Group Reports, (70-85)
  120. ACM
    Hsieh C, Ye S, Hua R and Huang S Development and Analysis of Synchronization Detection Framework in TDD Proceedings of the 2018 2nd International Conference on Management Engineering, Software Engineering and Service Sciences, (167-171)
  121. ACM
    da R. Rodrigues P, Franz L, Cheiran J, da Silva J and Bordin A Coding Dojo as a transforming practice in collaborative learning of programming Proceedings of the XXXI Brazilian Symposium on Software Engineering, (348-357)
  122. ACM
    Nascimento L and Travassos G Software Knowledge Registration Practices at Software Innovation Startups Proceedings of the XXXI Brazilian Symposium on Software Engineering, (234-243)
  123. ACM
    Polito G, Ducasse S and Fabresse L First-Class Undefined Classes for Pharo Proceedings of the 12th edition of the International Workshop on Smalltalk Technologies, (1-8)
  124. Cheresharov S, Krushkov H, Stoyanov S and Popchev I (2017). Modules for Rapid Application Development of Web-Based Information Systems (RADWIS), Cybernetics and Information Technologies, 17:3, (109-127), Online publication date: 1-Sep-2017.
  125. Bettini L and Damiani F (2017). Xtraitj, Journal of Systems and Software, 131:C, (419-441), Online publication date: 1-Sep-2017.
  126. Naumchev A and Meyer B (2017). Seamless requirements, Computer Languages, Systems and Structures, 49:C, (119-132), Online publication date: 1-Sep-2017.
  127. Fucci D, Erdogmus H, Turhan B, Oivo M and Juristo N (2017). A Dissection of the Test-Driven Development Process: Does It Really Matter to Test-First or to Test-Last?, IEEE Transactions on Software Engineering, 43:7, (597-614), Online publication date: 1-Jul-2017.
  128. ACM
    Dietrich J, Sui L, Rasheed S and Tahir A On the construction of soundness oracles Proceedings of the 6th ACM SIGPLAN International Workshop on State Of the Art in Program Analysis, (37-42)
  129. Chen L (2017). Continuous Delivery, Journal of Systems and Software, 128:C, (72-86), Online publication date: 1-Jun-2017.
  130. Bowes D, Hall T, Petrić J, Shippey T and Turhan B How good are my tests? Proceedings of the 8th Workshop on Emerging Trends in Software Metrics, (9-14)
  131. Spadini D, Aniche M, Bruntink M and Bacchelli A To mock or not to mock? Proceedings of the 14th International Conference on Mining Software Repositories, (402-412)
  132. Laukkarinen T, Kuusinen K and Mikkonen T DevOps in regulated software development Proceedings of the 39th International Conference on Software Engineering: New Ideas and Emerging Results Track, (15-18)
  133. Roopa M, Sankarasubbiah C and Mani V Usable software at the end of each takt Proceedings of the 12th International Conference on Global Software Engineering, (116-120)
  134. ACM
    Mikami H, Sakamoto D and Igarashi T Micro-Versioning Tool to Support Experimentation in Exploratory Programming Proceedings of the 2017 CHI Conference on Human Factors in Computing Systems, (6208-6219)
  135. ACM
    Hermans F and Aldewereld M Programming is Writing is Programming Companion Proceedings of the 1st International Conference on the Art, Science, and Engineering of Programming, (1-8)
  136. ACM
    Oka A, Masuhara H, Imai T and Aotani T Live Data Structure Programming Companion Proceedings of the 1st International Conference on the Art, Science, and Engineering of Programming, (1-7)
  137. ACM
    Wang R, Azab A, Enck W, Li N, Ning P, Chen X, Shen W and Cheng Y SPOKE Proceedings of the 2017 ACM on Asia Conference on Computer and Communications Security, (612-624)
  138. ACM
    Edmison B, Edwards S and Pérez-Quiñones M Using Spectrum-Based Fault Location and Heatmaps to Express Debugging Suggestions to Student Programmers Proceedings of the Nineteenth Australasian Computing Education Conference, (48-54)
  139. Paul J (2016). Test-driven approach in programming pedagogy, Journal of Computing Sciences in Colleges, 32:2, (53-60), Online publication date: 1-Dec-2016.
  140. López-Fernández J, Guerra E and de Lara J (2016). Combining unit and specification-based testing for meta-model validation and verification, Information Systems, 62:C, (104-135), Online publication date: 1-Dec-2016.
  141. ACM
    Longo D, Vilain P, da Silva L and Mello R A web framework for test automation Proceedings of the 18th International Conference on Information Integration and Web-based Applications and Services, (458-467)
  142. Urdahl J, Udupi S, Ludwig T, Stoffel D and Kunz W Properties first? A new design methodology for hardware, and its perspectives in safety analysis 2016 IEEE/ACM International Conference on Computer-Aided Design (ICCAD), (1-8)
  143. Häser F, Felderer M and Breu R (2016). Is business domain language support beneficial for creating test case specifications, Information and Software Technology, 79:C, (52-62), Online publication date: 1-Nov-2016.
  144. ACM
    Chabot M, Pierre L and Nabais-Moreno A A requirement driven testing method for multi-disciplinary system design Proceedings of the ACM/IEEE 19th International Conference on Model Driven Engineering Languages and Systems, (396-405)
  145. ACM
    Munro D, Calitz A and Vogts D AARemu Proceedings of the Annual Conference of the South African Institute of Computer Scientists and Information Technologists, (1-9)
  146. ACM
    Richenhagen J, Rumpe B, Schloßer A, Schulze C, Thissen K and von Wenckstern M Test-driven semantical similarity analysis for software product line extraction Proceedings of the 20th International Systems and Software Product Line Conference, (174-183)
  147. ACM
    Fucci D, Scanniello G, Romano S, Shepperd M, Sigweni B, Uyaguari F, Turhan B, Juristo N and Oivo M An External Replication on the Effects of Test-driven Development Using a Multi-site Blind Analysis Approach Proceedings of the 10th ACM/IEEE International Symposium on Empirical Software Engineering and Measurement, (1-10)
  148. Lübke D and van Lessen T (2016). Modeling Test Cases in BPMN for Behavior-Driven Development, IEEE Software, 33:5, (15-21), Online publication date: 1-Sep-2016.
  149. ACM
    Öqvist J, Hedin G and Magnusson B Extraction-Based Regression Test Selection Proceedings of the 13th International Conference on Principles and Practices of Programming on the Java Platform: Virtual Machines, Languages, and Tools, (1-10)
  150. ACM
    Passier H, Bijlsma L and Bockisch C Maintaining Unit Tests During Refactoring Proceedings of the 13th International Conference on Principles and Practices of Programming on the Java Platform: Virtual Machines, Languages, and Tools, (1-6)
  151. ACM
    Tufano M, Palomba F, Bavota G, Di Penta M, Oliveto R, De Lucia A and Poshyvanyk D An empirical investigation into the nature of test smells Proceedings of the 31st IEEE/ACM International Conference on Automated Software Engineering, (4-15)
  152. ACM
    Bouraqadi N and Mason D Mocks, Proxies, and Transpilation as Development Strategies for Web Development Proceedings of the 11th edition of the International Workshop on Smalltalk Technologies, (1-6)
  153. ACM
    Palomba F, Panichella A, Zaidman A, Oliveto R and De Lucia A Automatic test case generation: what if test code quality matters? Proceedings of the 25th International Symposium on Software Testing and Analysis, (130-141)
  154. ACM
    Tang T, Smith R, Rixner S and Warren J Data-Driven Test Case Generation for Automated Programming Assessment Proceedings of the 2016 ACM Conference on Innovation and Technology in Computer Science Education, (260-265)
  155. ACM
    Romano S, Fucci D, Scanniello G, Turhan B and Juristo N Results from an Ethnographically-informed Study in the Context of Test Driven Development Proceedings of the 20th International Conference on Evaluation and Assessment in Software Engineering, (1-10)
  156. Bissi W, Serra Seca Neto A and Emer M (2016). The effects of test driven development on internal quality, external quality and productivity, Information and Software Technology, 74:C, (45-54), Online publication date: 1-Jun-2016.
  157. Riesco A and Rodríguez-Hortalá J Temporal Random Testing for Spark Streaming Proceedings of the 12th International Conference on Integrated Formal Methods - Volume 9681, (393-408)
  158. Keet C and Ławrynowicz A Test-Driven Development of Ontologies Proceedings of the 13th International Conference on The Semantic Web. Latest Advances and New Domains - Volume 9678, (642-657)
  159. ACM
    Anwar A, Kamel A and Ahmed E Agile Adoption Case Study, Pains, Challenges & Benefits Proceedings of the 2nd Africa and Middle East Conference on Software Engineering, (60-65)
  160. ACM
    Estácio B, Zieris F, Prechelt L and Prikladnicki R On the randori training dynamics Proceedings of the 9th International Workshop on Cooperative and Human Aspects of Software Engineering, (44-47)
  161. ACM
    Palomba F, Di Nucci D, Panichella A, Oliveto R and De Lucia A On the diffusion of test smells in automatically generated test code Proceedings of the 9th International Workshop on Search-Based Software Testing, (5-14)
  162. ACM
    Luo Q, Poshyvanyk D, Nair A and Grechanik M FOREPOST Proceedings of the 38th International Conference on Software Engineering Companion, (593-596)
  163. Çulha D (2016). Applying competition-based learning to agile software engineering, Computer Applications in Engineering Education, 24:3, (382-387), Online publication date: 1-May-2016.
  164. ACM
    Scanniello G, Romano S, Fucci D, Turhan B and Juristo N Students' and professionals' perceptions of test-driven development Proceedings of the 31st Annual ACM Symposium on Applied Computing, (1422-1427)
  165. ACM
    Pachulski Camara B and Graciotto Silva M A Strategy to Combine Test-Driven Development and Test Criteria to Improve Learning of Programming Skills Proceedings of the 47th ACM Technical Symposium on Computing Science Education, (443-448)
  166. Onggo B and Karatas M Agent-based model of maritime search operations Proceedings of the 2015 Winter Simulation Conference, (254-265)
  167. Chiş A, Denker M, Gîrba T and Nierstrasz O (2015). Practical domain-specific debuggers using the Moldable Debugger framework, Computer Languages, Systems and Structures, 44:PA, (89-113), Online publication date: 1-Dec-2015.
  168. Gestwicki P (2015). Teaching game programming with PlayN, Journal of Computing Sciences in Colleges, 31:1, (90-97), Online publication date: 1-Oct-2015.
  169. ACM
    Ulrich A Sustainable Architectures Proceedings of the 2015 European Conference on Software Architecture Workshops, (1-2)
  170. ACM
    Mitrović D, Ivanović M and Budimac Z Test-driven development of web and enterprise agents Proceedings of the 7th Balkan Conference on Informatics Conference, (1-5)
  171. Javdani Gandomani T and Ziaei Nafchi M (2015). An empirically-developed framework for Agile transition and adoption, Journal of Systems and Software, 107:C, (204-219), Online publication date: 1-Sep-2015.
  172. ACM
    Xiong Y, Hao D, Zhang L, Zhu T, Zhu M and Lan T Inner oracles: input-specific assertions on internal states Proceedings of the 2015 10th Joint Meeting on Foundations of Software Engineering, (902-905)
  173. ACM
    Beller M, Gousios G, Panichella A and Zaidman A When, how, and why developers (do not) test in their IDEs Proceedings of the 2015 10th Joint Meeting on Foundations of Software Engineering, (179-190)
  174. ACM
    Yue T, Ali S and Zhang M RTCM: a natural language based, automated, and practical test case generation framework Proceedings of the 2015 International Symposium on Software Testing and Analysis, (397-408)
  175. ACM
    Parsai A, Murgia A, Soetens Q and Demeyer S Mutation testing as a safety net for test code refactoring Scientific Workshop Proceedings of the XP2015, (1-7)
  176. Tahir A and MacDonell S Combining dynamic analysis and visualization to explore the distribution of unit test suites Proceedings of the Sixth International Workshop on Emerging Trends in Software Metrics, (21-30)
  177. Padhye R, Dhoolia P, Mani S and Sinha V Smart programming playgrounds Proceedings of the 37th International Conference on Software Engineering - Volume 2, (607-610)
  178. Yoon Y and Myers B Supporting selective undo in a code editor Proceedings of the 37th International Conference on Software Engineering - Volume 1, (223-233)
  179. ACM
    Fucci D, Turhan B and Oivo M On the effects of programming and testing skills on external quality and productivity in a test-driven development context Proceedings of the 19th International Conference on Evaluation and Assessment in Software Engineering, (1-6)
  180. Carretero J, Distefano S, Petcu D, Pop D, Rauber T, Runger G and Singh D (2015). Energy-efficient Algorithms for Ultrascale Systems, Supercomputing Frontiers and Innovations: an International Journal, 2:2, (77-104), Online publication date: 6-Apr-2015.
  181. ACM
    Anslow C and Maurer F An Experience Report at Teaching a Group Based Agile Software Development Project Course Proceedings of the 46th ACM Technical Symposium on Computer Science Education, (500-505)
  182. ACM
    Bradshaw M Ante Up Proceedings of the 46th ACM Technical Symposium on Computer Science Education, (488-493)
  183. ACM
    Blaheta D Unci Proceedings of the 46th ACM Technical Symposium on Computer Science Education, (475-480)
  184. ACM
    Brambilla M, Brutschy A, Dorigo M and Birattari M (2014). Property-Driven Design for Robot Swarms, ACM Transactions on Autonomous and Adaptive Systems, 9:4, (1-28), Online publication date: 14-Jan-2015.
  185. Besson F, Moura P, Kon F and Milojicic D (2015). Bringing Test-Driven Development to web service choreographies, Journal of Systems and Software, 99:C, (135-154), Online publication date: 1-Jan-2015.
  186. Unterholzner M (2014). Improving refactoring tools in Smalltalk using static type inference, Science of Computer Programming, 96:P1, (70-83), Online publication date: 15-Dec-2014.
  187. Rilee M and Clune T Towards test driven development for computational science with pFUnit Proceedings of the 2nd International workshop on Software Engineering for High Performance Computing in Computational Science and Engineering, (20-27)
  188. ACM
    Pham R, Kiesling S, Liskin O, Singer L and Schneider K Enablers, inhibitors, and perceptions of testing in novice software teams Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering, (30-40)
  189. Jörges S and Steffen B Back-To-Back Testing of Model-Based Code Generators Part I of the Proceedings of the 6th International Symposium on Leveraging Applications of Formal Methods, Verification and Validation. Technologies for Mastering Change - Volume 8802, (425-444)
  190. ACM
    LaToza T, Towne W, Adriano C and van der Hoek A Microtask programming Proceedings of the 27th annual ACM symposium on User interface software and technology, (43-54)
  191. Dibble C and Gestwicki P (2014). Refactoring code to increase readability and maintainability, Journal of Computing Sciences in Colleges, 30:1, (41-51), Online publication date: 1-Oct-2014.
  192. ACM
    Bettini L and Damiani F Generic traits for the Java platform Proceedings of the 2014 International Conference on Principles and Practices of Programming on the Java platform: Virtual machines, Languages, and Tools, (5-16)
  193. ACM
    Fucci D, Turhan B and Oivo M Impact of process conformance on the effects of test-driven development Proceedings of the 8th ACM/IEEE International Symposium on Empirical Software Engineering and Measurement, (1-10)
  194. ACM
    Molotnikov Z, Völter M and Ratiu D Automated domain-specific C verification with mbeddr Proceedings of the 29th ACM/IEEE International Conference on Automated Software Engineering, (539-550)
  195. Guerra E, Moura P, Besson F, Rebouças A and Kon F Patterns for testing distributed systems interaction Proceedings of the 21st Conference on Pattern Languages of Programs, (1-8)
  196. Guerra E, Aniche M, Gerosa M and Yoder J Preparing for a test driven development session Proceedings of the 21st Conference on Pattern Languages of Programs, (1-12)
  197. ACM
    Politz J, Krishnamurthi S and Fisler K In-flow peer-review of tests in test-first programming Proceedings of the tenth annual conference on International computing education research, (11-18)
  198. ACM
    Buffardi K and Edwards S Responses to adaptive feedback for software testing Proceedings of the 2014 conference on Innovation & technology in computer science education, (165-170)
  199. ACM
    Rajlich V Software evolution and maintenance Future of Software Engineering Proceedings, (133-144)
  200. ACM
    Omar C, Aldrich J and Gerkin R Collaborative infrastructure for test-driven scientific model validation Companion Proceedings of the 36th International Conference on Software Engineering, (524-527)
  201. ACM
    Beck F, Gulan S, Biegel B, Baltes S and Weiskopf D RegViz: visual debugging of regular expressions Companion Proceedings of the 36th International Conference on Software Engineering, (504-507)
  202. ACM
    Fucci D Understanding the dynamics of test-driven development Companion Proceedings of the 36th International Conference on Software Engineering, (690-693)
  203. ACM
    Fucci D, Turhan B and Oivo M Conformance factor in test-driven development Proceedings of the 18th International Conference on Evaluation and Assessment in Software Engineering, (1-4)
  204. ACM
    Souza C and Figueiredo E How do programmers use optional typing? Proceedings of the 13th international conference on Modularity, (109-120)
  205. Collier N and Ozik J Test-driven agent-based simulation development Proceedings of the 2013 Winter Simulation Conference: Simulation: Making Decisions in a Complex World, (1551-1559)
  206. Guerra E, Yoder J, Aniche M and Gerosa M Test-driven development step patterns for designing objects dependencies Proceedings of the 20th Conference on Pattern Languages of Programs, (1-15)
  207. ACM
    Heinonen K, Hirvikoski K, Luukkainen M and Vihavainen A Learning agile software engineering practices using coding dojo Proceedings of the 14th annual ACM SIGITE conference on Information technology education, (97-102)
  208. Khamis M and Nagi K (2013). Designing multi-agent unit tests using systematic test design patterns-(extended version), Engineering Applications of Artificial Intelligence, 26:9, (2128-2142), Online publication date: 1-Oct-2013.
  209. Tamisier T, Karski P and Feltz F Visualization of Unit and Selective Regression Software Tests Proceedings of the 10th International Conference on Cooperative Design, Visualization, and Engineering - Volume 8091, (227-230)
  210. ACM
    Bettini L and Damiani F Pure trait-based programming on the Java platform Proceedings of the 2013 International Conference on Principles and Practices of Programming on the Java Platform: Virtual Machines, Languages, and Tools, (67-78)
  211. Atkinson C, Kessel M and Schumacher M On the Synergy between Search-Based and Search-Driven Software Engineering Proceedings of the 5th International Symposium on Search Based Software Engineering - Volume 8084, (239-244)
  212. ACM
    Buffardi K and Edwards S Effective and ineffective software testing behaviors by novice programmers Proceedings of the ninth annual international ACM conference on International computing education research, (83-90)
  213. ACM
    Samimi H, Hicks R, Fogel A and Millstein T Declarative mocking Proceedings of the 2013 International Symposium on Software Testing and Analysis, (246-256)
  214. ACM
    Vihavainen A, Vikberg T, Luukkainen M and Pärtel M Scaffolding students' learning using test my code Proceedings of the 18th ACM conference on Innovation and technology in computer science education, (117-122)
  215. ACM
    Utting I, Tew A, McCracken M, Thomas L, Bouvier D, Frye R, Paterson J, Caspersen M, Kolikant Y, Sorva J and Wilusz T A fresh look at novice programmers' performance and their teachers' expectations Proceedings of the ITiCSE working group reports conference on Innovation and technology in computer science education-working group reports, (15-32)
  216. Yu J, Han J, Gunarso S and Versteeg S A business protocol unit testing framework for web service composition Proceedings of the 25th international conference on Advanced Information Systems Engineering, (17-34)
  217. Dick M, Drangmeister J, Kern E and Naumann S Green software engineering with agile methods Proceedings of the 2nd International Workshop on Green and Sustainable Software, (78-85)
  218. Hsieh C, Tsai C and Cheng Y Test-duo Proceedings of the 8th International Workshop on Automation of Software Test, (89-92)
  219. Diepenbeck M, Soeken M, Große D and Drechsler R Towards automatic scenario generation from coverage information Proceedings of the 8th International Workshop on Automation of Software Test, (82-88)
  220. Greiler M, Zaidman A, Deursen A and Storey M Strategies for avoiding text fixture smells during software evolution Proceedings of the 10th Working Conference on Mining Software Repositories, (387-396)
  221. Callaú O Supporting incremental programming with ghosts Proceedings of the 2013 International Conference on Software Engineering, (1429-1431)
  222. Kuhn A On extracting unit tests from interactive live programming sessions Proceedings of the 2013 International Conference on Software Engineering, (1241-1244)
  223. Janzen D, Clements J and Hilton M An evaluation of interactive test-driven labs with WebIDE in CS0 Proceedings of the 2013 International Conference on Software Engineering, (1090-1098)
  224. Polikarpova N, Furia C, Pei Y, Wei Y and Meyer B What good are strong specifications? Proceedings of the 2013 International Conference on Software Engineering, (262-271)
  225. Fidge C, Hogan J and Lister R What vs. how Proceedings of the Fifteenth Australasian Computing Education Conference - Volume 136, (97-106)
  226. Bowen J, Reeves S and Schweer A A tale of two studies Proceedings of the Fourteenth Australasian User Interface Conference - Volume 139, (81-89)
  227. ACM
    Itkonen J Test-driven lecturing Proceedings of the 12th Koli Calling International Conference on Computing Education Research, (141-142)
  228. Guerra E Fundamental test driven development step patterns Proceedings of the 19th Conference on Pattern Languages of Programs, (1-15)
  229. ACM
    Taeumel M, Steinert B and Hirschfeld R The VIVIDE programming environment Proceedings of the ACM international symposium on New ideas, new paradigms, and reflections on programming and software, (117-126)
  230. ACM
    Luukkainen M, Vihavainen A and Vikberg T Three years of design-based research to reform a software engineering curriculum Proceedings of the 13th annual conference on Information technology education, (209-214)
  231. ACM
    Vihavainen A, Luukkainen M and Kurhila J Multi-faceted support for MOOC in programming Proceedings of the 13th annual conference on Information technology education, (171-176)
  232. ACM
    McNely B, Gestwicki P, Burke A and Gelms B Articulating everyday actions Proceedings of the 30th ACM international conference on Design of communication, (95-104)
  233. Wilkerson J (2012). A Source Code Change Impact Analysis Algorithm for Iterative Software Development, International Journal of Decision Support System Technology, 4:4, (60-75), Online publication date: 1-Oct-2012.
  234. ACM
    Geletka F, Samuelis L and Vojtko J Evaluation of tools for automated unit testing for applications in OSGi Proceedings of the Fifth Balkan Conference in Informatics, (295-297)
  235. ACM
    Buffardi K Understanding and persuading adherence to test-driven development Proceedings of the ninth annual international conference on International computing education research, (155-156)
  236. ACM
    Hilton M and Janzen D On teaching arrays with test-driven learning in WebIDE Proceedings of the 17th ACM annual conference on Innovation and technology in computer science education, (93-98)
  237. Brambilla M, Pinciroli C, Birattari M and Dorigo M Property-driven design for swarm robotics Proceedings of the 11th International Conference on Autonomous Agents and Multiagent Systems - Volume 1, (139-146)
  238. Pham R, Holzmann H, Schneider K and Brüggemann C Beyond plain video recording of GUI tests Proceedings of the 7th International Workshop on Automation of Software Test, (103-109)
  239. Estefó P Restructuring unit tests with TestSurgeon Proceedings of the 34th International Conference on Software Engineering, (1632-1634)
  240. Lemos O, Ferrari F, Silveira F and Garcia A Development of auxiliary functions: should you be agile? an empirical assessment of pair programming and test-first programming Proceedings of the 34th International Conference on Software Engineering, (529-539)
  241. Ressia J, Bergel A and Nierstrasz O Object-centric debugging Proceedings of the 34th International Conference on Software Engineering, (485-495)
  242. Grechanik M, Fu C and Xie Q Automatically finding performance problems with feedback-directed learning software testing Proceedings of the 34th International Conference on Software Engineering, (156-166)
  243. ACM
    Gestwicki P The entity system architecture and its application in an undergraduate game development studio Proceedings of the International Conference on the Foundations of Digital Games, (73-80)
  244. Soeken M, Wille R and Drechsler R Assisted behavior driven development using natural language processing Proceedings of the 50th international conference on Objects, Models, Components, Patterns, (269-287)
  245. ACM
    Bulej L, Bureš T, Keznikl J, Koubková A, Podzimek A and Tůma P Capturing performance assumptions using stochastic performance logic Proceedings of the 3rd ACM/SPEC International Conference on Performance Engineering, (311-322)
  246. ACM
    Watanabe W, Fortes R and Dias A Using acceptance tests to validate accessibility requirements in RIA Proceedings of the International Cross-Disciplinary Conference on Web Accessibility, (1-10)
  247. ACM
    Hammond S and Umphress D Test driven development Proceedings of the 50th Annual Southeast Regional Conference, (158-163)
  248. ACM
    Majchrzak T and Simon A Using spring Roo for the test-driven development of Web applications Proceedings of the 27th Annual ACM Symposium on Applied Computing, (664-671)
  249. ACM
    Luukkainen M, Vihavainen A and Vikberg T A software craftsman's approach to data structures Proceedings of the 43rd ACM technical symposium on Computer Science Education, (439-444)
  250. ACM
    Edwards S, Shams Z, Cogswell M and Senkbeil R Running students' software tests against each others' code Proceedings of the 43rd ACM technical symposium on Computer Science Education, (221-226)
  251. Kappel G, Langer P, Retschitzegger W, Schwinger W and Wimmer M Model transformation by-example Conceptual Modelling and Its Theoretical Foundations, (197-215)
  252. Archanjo G and Von Zuben F (2012). Genetic programming for automating the development of data management algorithms in information technology systems, Advances in Software Engineering, 2012, (4-4), Online publication date: 1-Jan-2012.
  253. ACM
    Barzilay O Example embedding Proceedings of the 10th SIGPLAN symposium on New ideas, new paradigms, and reflections on programming and software, (137-144)
  254. ACM
    Kats L, Vermaas R and Visser E Integrated language definition testing Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications, (139-154)
  255. ACM
    Kats L, Vermaas R and Visser E (2011). Integrated language definition testing, ACM SIGPLAN Notices, 46:10, (139-154), Online publication date: 18-Oct-2011.
  256. Younessi H, Pawlak R and Cuesta C Towards a development framework based on behavior recombination Proceedings of the 2011th Confederated international conference on On the move to meaningful internet systems, (632-636)
  257. ACM
    Goldman M, Little G and Miller R Real-time collaborative coding in a web IDE Proceedings of the 24th annual ACM symposium on User interface software and technology, (155-164)
  258. ACM
    Goldman M Role-based interfaces for collaborative software development Proceedings of the 24th annual ACM symposium adjunct on User interface software and technology, (23-26)
  259. ACM
    Arts T, Seijas P and Thompson S Extracting QuickCheck specifications from EUnit test cases Proceedings of the 10th ACM SIGPLAN workshop on Erlang, (62-71)
  260. ACM
    Gotovos A, Christakis M and Sagonas K Test-driven development of concurrent programs using concuerror Proceedings of the 10th ACM SIGPLAN workshop on Erlang, (51-61)
  261. Kollanus S Critical issues on test-driven development Proceedings of the 12th international conference on Product-focused software process improvement, (322-336)
  262. Trujillo M, Oktaba H, Pino F and Orozco M Applying agile and lean practices in a software development project into a CMMI organization Proceedings of the 12th international conference on Product-focused software process improvement, (17-29)
  263. ACM
    Bowen J and Reeves S UI-driven test-first development of interactive systems Proceedings of the 3rd ACM SIGCHI symposium on Engineering interactive computing systems, (165-174)
  264. Pančur M and Ciglarič M (2011). Impact of test-driven development on productivity, code and tests, Information and Software Technology, 53:6, (557-573), Online publication date: 1-Jun-2011.
  265. ACM
    Arcoverde R, Garcia A and Figueiredo E Understanding the longevity of code smells Proceedings of the 4th Workshop on Refactoring Tools, (33-36)
  266. ACM
    Borg R and Kropp M Automated acceptance test refactoring Proceedings of the 4th Workshop on Refactoring Tools, (15-21)
  267. ACM
    Birkhölzer T, Chiniforooshan Esfahani H, Dickmann C, Vaupel J and Ast S Goal-driven evaluation of process fragments using weighted dependency graphs Proceedings of the 2011 International Conference on Software and Systems Process, (184-188)
  268. ACM
    Goldman M, Little G and Miller R Collabode Proceedings of the 4th International Workshop on Cooperative and Human Aspects of Software Engineering, (65-68)
  269. Lazzarini Lemos O, Bajracharya S, Ossher J, Masiero P and Lopes C (2011). A test-driven approach to code search and its application to the reuse of auxiliary functionality, Information and Software Technology, 53:4, (294-306), Online publication date: 1-Apr-2011.
  270. ACM
    Bird C, Murphy B, Nagappan N and Zimmermann T Empirical software engineering at Microsoft Research Proceedings of the ACM 2011 conference on Computer supported cooperative work, (143-150)
  271. ACM
    Vihavainen A, Paksula M and Luukkainen M Extreme apprenticeship method in teaching programming for beginners Proceedings of the 42nd ACM technical symposium on Computer science education, (93-98)
  272. ACM
    Jalote P and Gupta A Using global pairs for reducing software development time Proceedings of the 4th India Software Engineering Conference, (115-118)
  273. Medina N, Burella J, Rossi G, Grigera J and Luna E An incremental approach for building accessible and usable web applications Proceedings of the 11th international conference on Web information systems engineering, (564-577)
  274. Medina N, Burella J, Rossi G, Grigera J and Luna E An Incremental Approach for Building Accessible and Usable Web Applications 11th International Conference on Web Information Systems Engineering --- WISE 2010 - Volume 6488, (564-577)
  275. ACM
    Cao L, Ramesh B and Abdel-Hamid T (2010). Modeling dynamics in agile software development, ACM Transactions on Management Information Systems, 1:1, (1-26), Online publication date: 1-Dec-2010.
  276. ACM
    Xie T, Tillmann N, de Halleux J and Schulte W Future of developer testing Proceedings of the FSE/SDP workshop on Future of software engineering research, (415-420)
  277. ACM
    Grechanik M, Jones J, Orso A and van der Hoek A Bridging gaps between developers and testers in globally-distributed software development Proceedings of the FSE/SDP workshop on Future of software engineering research, (149-154)
  278. ACM
    Badreddin O and Lethbridge T A study of applying a research prototype tool in industrial practice Proceedings of the eighteenth ACM SIGSOFT international symposium on Foundations of software engineering, (353-356)
  279. ACM
    Xie T, de Halleux J, Tillmann N and Schulte W Teaching and training developer-testing techniques and tool support Proceedings of the ACM international conference companion on Object oriented programming systems languages and applications companion, (175-182)
  280. ACM
    Sindhgatta R, Narendra N and Sengupta B Software evolution in agile development Proceedings of the ACM international conference companion on Object oriented programming systems languages and applications companion, (105-114)
  281. ACM
    Arts T and Thompson S From test cases to FSMs Proceedings of the 9th ACM SIGPLAN workshop on Erlang, (1-12)
  282. Dillon E, Power G and Grant F Experimental testing in the future internet PERIMETER project Proceedings of the Third future internet conference on Future internet, (30-39)
  283. ACM
    Lappalainen V, Itkonen J, Isomöttönen V and Kollanus S ComTest Proceedings of the fifteenth annual conference on Innovation and technology in computer science education, (63-67)
  284. ACM
    Tu S, Oh S, Kale R, Kallem A and Tankashala S Developing verification-driven learning cases Proceedings of the fifteenth annual conference on Innovation and technology in computer science education, (58-62)
  285. ACM
    Thompson E From phenomenography study to planning teaching Proceedings of the fifteenth annual conference on Innovation and technology in computer science education, (13-17)
  286. ACM
    Soetens Q, Ebraert P and Demeyer S Avoiding bugs pro-actively by change-oriented programming Proceedings of the 1st Workshop on Testing Object-Oriented Systems, (1-7)
  287. Pěchouček M, Jakob M and Novák P Towards simulation-aided design of multi-agent systems Proceedings of the 8th international conference on Programming Multi-Agent Systems, (3-21)
  288. ACM
    Rivas S, Francisco M and Gulías V Property driven development in Erlang, by example Proceedings of the 5th Workshop on Automation of Software Test, (75-78)
  289. ACM
    LaToza T and Myers B On the importance of understanding the strategies that developers use Proceedings of the 2010 ICSE Workshop on Cooperative and Human Aspects of Software Engineering, (72-75)
  290. ACM
    Guimarães M and Rito-Silva A Towards real-time integration Proceedings of the 2010 ICSE Workshop on Cooperative and Human Aspects of Software Engineering, (56-63)
  291. ACM
    Goldman M and Miller R Test-driven roles for pair programming Proceedings of the 2010 ICSE Workshop on Cooperative and Human Aspects of Software Engineering, (13-20)
  292. ACM
    Goldman M Test-driven roles for pair programming Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 2, (515-516)
  293. ACM
    Robles Luna E, Burella J, Grigera J and Rossi G A flexible tool suite for change-aware test-driven development of web applications Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 2, (297-298)
  294. ACM
    Salger F and Engels G Knowledge transfer in global software development Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 2, (211-214)
  295. ACM
    Hummel O Facilitating the comparison of software retrieval systems through a reference reuse collection Proceedings of 2010 ICSE Workshop on Search-driven Development: Users, Infrastructure, Tools and Evaluation, (17-20)
  296. ACM
    Hazzan O and Dubinsky Y A HOT --- Human, Organizational and Technological --- framework for a software engineering course Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 1, (559-566)
  297. Bonaventura M, Wainer G and Castro R Advanced IDE for modeling and simulation of discrete event systems Proceedings of the 2010 Spring Simulation Multiconference, (1-8)
  298. ACM
    Sakamoto K, Washizaki H, Wada T and Fukazawa Y A pattern for reconstructing test code based on test coverage Proceedings of the 1st Asian Conference on Pattern Languages of Programs, (1-4)
  299. Smith B, Williams L and Austin A Idea Proceedings of the Second international conference on Engineering Secure Software and Systems, (192-200)
  300. ACM
    Bagge A, David V and Haveraaen M (2009). The axioms strike back, ACM SIGPLAN Notices, 45:2, (15-24), Online publication date: 1-Feb-2010.
  301. Madeyski L (2010). The impact of Test-First programming on branch coverage and mutation score indicator of unit tests, Information and Software Technology, 52:2, (169-184), Online publication date: 1-Feb-2010.
  302. Peleska J Integrated and automated abstract interpretation, verification and testing of c/c++ modules Concurrency, Compositionality, and Correctness, (277-299)
  303. Smith B and Williams L (2009). Should software testers use mutation analysis to augment a test set?, Journal of Systems and Software, 82:11, (1819-1832), Online publication date: 1-Nov-2009.
  304. ACM
    Rayside D, Milicevic A, Yessenov K, Dennis G and Jackson D Agile specifications Proceedings of the 24th ACM SIGPLAN conference companion on Object oriented programming systems languages and applications, (999-1006)
  305. ACM
    Janes A and Succi G To pull or not to pull Proceedings of the 24th ACM SIGPLAN conference companion on Object oriented programming systems languages and applications, (889-894)
  306. ACM
    Bagge A, David V and Haveraaen M The axioms strike back Proceedings of the eighth international conference on Generative programming and component engineering, (15-24)
  307. Motogna S, Lazăr I, Pârv B and Czibula I (2009). An Agile MDA Approach for Service-Oriented Components, Electronic Notes in Theoretical Computer Science (ENTCS), 253:1, (95-110), Online publication date: 1-Oct-2009.
  308. Giner P and Pelechano V Test-Driven Development of Model Transformations Proceedings of the 12th International Conference on Model Driven Engineering Languages and Systems, (748-752)
  309. Chimiak-Opoka J OCLLib, OCLUnit, OCLDoc Proceedings of the 12th International Conference on Model Driven Engineering Languages and Systems, (665-669)
  310. Soltenborn C and Engels G Towards Test-Driven Semantics Specification Proceedings of the 12th International Conference on Model Driven Engineering Languages and Systems, (378-392)
  311. ACM
    Svensson H Implementing an LTL-to-Büchi translator in Erlang Proceedings of the 8th ACM SIGPLAN workshop on ERLANG, (63-70)
  312. ACM
    Christensen H (2009). A story-telling approach for a software engineering course design, ACM SIGCSE Bulletin, 41:3, (60-64), Online publication date: 25-Aug-2009.
  313. ACM
    Szeder G Unit testing for multi-threaded Java programs Proceedings of the 7th Workshop on Parallel and Distributed Systems: Testing, Analysis, and Debugging, (1-8)
  314. ACM
    Christensen H A story-telling approach for a software engineering course design Proceedings of the 14th annual ACM SIGCSE conference on Innovation and technology in computer science education, (60-64)
  315. Robles Luna E, Grigera J and Rossi G Bridging Test and Model-Driven Approaches in Web Engineering Proceedings of the 9th International Conference on Web Engineering, (136-150)
  316. Bartlett R Integration strategies for Computational Science & Engineering software Proceedings of the 2009 ICSE Workshop on Software Engineering for Computational Science and Engineering, (35-42)
  317. Heroux M and Willenbring J Barely sufficient software engineering Proceedings of the 2009 ICSE Workshop on Software Engineering for Computational Science and Engineering, (15-21)
  318. Hayes J, Dekhtyar A and Janzen D Towards traceable test-driven development Proceedings of the 2009 ICSE Workshop on Traceability in Emerging Forms of Software Engineering, (26-30)
  319. Bianculli D, Ghezzi C and Pautasso C Embedding continuous lifelong verification in service life cycles Proceedings of the 2009 ICSE Workshop on Principles of Engineering Service Oriented Systems, (99-102)
  320. Barzilay O, Hazzan O and Yehudai A Characterizing Example Embedding as a software activity Proceedings of the 2009 ICSE Workshop on Search-Driven Development-Users, Infrastructure, Tools and Evaluation, (5-8)
  321. Wloka J, Ryder B, Tip F and Ren X Safe-commit analysis to facilitate team software development Proceedings of the 31st International Conference on Software Engineering, (507-517)
  322. ACM
    Armstrong R and Mayo J Leveraging complexity in software for cybersecurity Proceedings of the 5th Annual Workshop on Cyber Security and Information Intelligence Research: Cyber Security and Information Intelligence Challenges and Strategies, (1-4)
  323. Labib C, Hasanein E and Hegazy O (2009). Early development of graphical user interface (GUI) in agile methodologies, Journal of Computational Methods in Sciences and Engineering, 9:1,2S2, (239-249), Online publication date: 1-Apr-2009.
  324. ACM
    Vejandla P and Sherrell L Why an AI research team adopted XP practices Proceedings of the 47th Annual Southeast Regional Conference, (1-4)
  325. ACM
    Lazzarini Lemos O, Bajracharya S, Ossher J, Masiero P and Lopes C Applying test-driven code search to the reuse of auxiliary functionality Proceedings of the 2009 ACM symposium on Applied Computing, (476-482)
  326. ACM
    Adams J (2009). Test-driven data structures, ACM SIGCSE Bulletin, 41:1, (143-147), Online publication date: 4-Mar-2009.
  327. ACM
    Proulx V (2009). Test-driven design for introductory OO programming, ACM SIGCSE Bulletin, 41:1, (138-142), Online publication date: 4-Mar-2009.
  328. ACM
    Adams J Test-driven data structures Proceedings of the 40th ACM technical symposium on Computer science education, (143-147)
  329. ACM
    Proulx V Test-driven design for introductory OO programming Proceedings of the 40th ACM technical symposium on Computer science education, (138-142)
  330. ACM
    Caspersen M and Kolling M (2009). STREAM, ACM Transactions on Computing Education, 9:1, (1-29), Online publication date: 1-Mar-2009.
  331. ACM
    Kim H, Choi B and Yoon S Performance testing based on test-driven development for mobile applications Proceedings of the 3rd International Conference on Ubiquitous Information Management and Communication, (612-617)
  332. Ricca F, Torchiano M, Di Penta M, Ceccato M and Tonella P (2009). Using acceptance tests as a support for clarifying requirements, Information and Software Technology, 51:2, (270-283), Online publication date: 1-Feb-2009.
  333. ACM
    Jiau H and Chen J (2009). Test code differencing for test-driven refactoring automation, ACM SIGSOFT Software Engineering Notes, 34:1, (1-10), Online publication date: 31-Jan-2009.
  334. Daniel B and Boshernitsan M Predicting Effectiveness of Automatic Testing Tools Proceedings of the 23rd IEEE/ACM International Conference on Automated Software Engineering, (363-366)
  335. Peleska J A Unified Approach to Abstract Interpretation, Formal Verification and Testing of C/C++ Modules Proceedings of the 5th international colloquium on Theoretical Aspects of Computing, (3-22)
  336. Sakakibara M, Sakurai K and Komiya S An Assertion Mechanism for Software Unit Testing to Remain Unaffected by Program ModificationThe Mechanism to Eliminate Dependency from/to Unnecessary Object Proceedings of the 2008 conference on Knowledge-Based Software Engineering: Proceedings of the Eighth Joint Conference on Knowledge-Based Software Engineering, (125-134)
  337. ACM
    Desai C, Janzen D and Savage K (2008). A survey of evidence for test-driven development in academia, ACM SIGCSE Bulletin, 40:2, (97-101), Online publication date: 1-Jun-2008.
  338. ACM
    Henkel J, Reichenbach C and Diwan A (2008). Developing and debugging algebraic specifications for Java classes, ACM Transactions on Software Engineering and Methodology, 17:3, (1-37), Online publication date: 1-Jun-2008.
  339. ACM
    McDaid K, Rust A and Bishop B Test-driven development Proceedings of the 4th international workshop on End-user software engineering, (25-29)
  340. ACM
    Masticola S and Gall M Vision Proceedings of the 3rd international workshop on Automation of software test, (79-84)
  341. Bloch S (2008). Teach Scheme, reach Java, Journal of Computing Sciences in Colleges, 23:5, (65-67), Online publication date: 1-May-2008.
  342. ACM
    Sauvé J and Abath Neto O Teaching software development with ATDD and easyaccept Proceedings of the 39th SIGCSE technical symposium on Computer science education, (542-546)
  343. ACM
    Janzen D and Saiedian H Test-driven learning in early programming courses Proceedings of the 39th SIGCSE technical symposium on Computer science education, (532-536)
  344. ACM
    Sauvé J and Abath Neto O (2008). Teaching software development with ATDD and easyaccept, ACM SIGCSE Bulletin, 40:1, (542-546), Online publication date: 29-Feb-2008.
  345. ACM
    Janzen D and Saiedian H (2008). Test-driven learning in early programming courses, ACM SIGCSE Bulletin, 40:1, (532-536), Online publication date: 29-Feb-2008.
  346. Olsina L, Rossi G, Garrido A, Distante D and Canfora G Incremental quality improvement in web applications using web model refactoring Proceedings of the 2007 international conference on Web information systems engineering, (411-422)
  347. Van Rompaey B, Du Bois B, Demeyer S and Rieger M (2007). On The Detection of Test Smells, IEEE Transactions on Software Engineering, 33:12, (800-817), Online publication date: 1-Dec-2007.
  348. ACM
    Lemos O, Bajracharya S, Ossher J, Morla R, Masiero P, Baldi P and Lopes C CodeGenie Proceedings of the 22nd IEEE/ACM International Conference on Automated Software Engineering, (525-526)
  349. ACM
    Lazzarini Lemos O, Bajracharya S and Ossher J CodeGenie: Companion to the 22nd ACM SIGPLAN conference on Object-oriented programming systems and applications companion, (917-918)
  350. Allison C (2007). The simplest unit test tool that could possibly work, Journal of Computing Sciences in Colleges, 23:1, (183-189), Online publication date: 1-Oct-2007.
  351. Szala & and Madeyski L The impact of test-driven development on software development productivity Proceedings of the 14th European conference on Software Process Improvement, (200-211)
  352. Damm L and Lundberg L Quality impact of introducing component-level test automation and test-driven development Proceedings of the 14th European conference on Software Process Improvement, (187-199)
  353. ACM
    Kicillof N, Grieskamp W, Tillmann N and Braberman V Achieving both model and code coverage with automated gray-box testing Proceedings of the 3rd international workshop on Advances in model-based testing, (1-11)
  354. Madeyski L On the effects of pair programming on thoroughness and fault-finding effectiveness of unit tests Proceedings of the 8th international conference on Product-Focused Software Process Improvement, (207-221)
  355. Au O, Stone R and Cooke J Precise scenarios Proceedings of the 6th international conference on Integrated formal methods, (21-36)
  356. ACM
    Tremblay G, Malenfant B, Salah A and Zentilli P (2007). Introducing students to professional software construction, ACM SIGCSE Bulletin, 39:3, (176-180), Online publication date: 25-Jun-2007.
  357. ACM
    Miller J and Smith M (2007). A TDD approach to introducing students to embedded programming, ACM SIGCSE Bulletin, 39:3, (33-37), Online publication date: 25-Jun-2007.
  358. ACM
    Tremblay G, Malenfant B, Salah A and Zentilli P Introducing students to professional software construction Proceedings of the 12th annual SIGCSE conference on Innovation and technology in computer science education, (176-180)
  359. ACM
    Miller J and Smith M A TDD approach to introducing students to embedded programming Proceedings of the 12th annual SIGCSE conference on Innovation and technology in computer science education, (33-37)
  360. Van Dijk I and Wijnands R Test driving the wrong car Proceedings of the 8th international conference on Agile processes in software engineering and extreme programming, (250-252)
  361. Madeyski L and Biela W Empirical evidence principle and joint engagement practice to introduce XP Proceedings of the 8th international conference on Agile processes in software engineering and extreme programming, (141-144)
  362. Lanubile F and Mallardo T Inspecting automated test code Proceedings of the 8th international conference on Agile processes in software engineering and extreme programming, (115-122)
  363. Deng C, Wilson P and Maurer F FitClipse Proceedings of the 8th international conference on Agile processes in software engineering and extreme programming, (93-100)
  364. Hummel O and Atkinson C Supporting agile reuse through extreme harvesting Proceedings of the 8th international conference on Agile processes in software engineering and extreme programming, (28-37)
  365. ACM
    Dionisio J, Dickson C, August S, Dorin P and Toal R (2007). An open source software culture in the undergraduate computer science curriculum, ACM SIGCSE Bulletin, 39:2, (70-74), Online publication date: 1-Jun-2007.
  366. Hedberg H, Iivari N, Rajanen M and Harjumaa L Assuring Quality and Usability in Open Soruce Software Development Proceedings of the First International Workshop on Emerging Trends in FLOSS Research and Development
  367. Nguyen D, Perini A and Tonella P A goal-oriented software testing methodology Proceedings of the 8th international conference on Agent-oriented software engineering VIII, (58-72)
  368. ACM
    Araújo B, Rocha A, Xavier A, Muniz A and Garcia F Web-based tool for automatic acceptance test execution and scripting for programmers and customers Proceedings of the 2007 Euro American conference on Telematics and information systems, (1-4)
  369. Ruiz A and Price Y (2007). Test-Driven GUI Development with TestNG and Abbot, IEEE Software, 24:3, (51-57), Online publication date: 1-May-2007.
  370. Ambler S (2007). Test-Driven Development of Relational Databases, IEEE Software, 24:3, (37-43), Online publication date: 1-May-2007.
  371. Dohmke T and Gollee H (2007). Test-Driven Development of a PID Controller, IEEE Software, 24:3, (44-50), Online publication date: 1-May-2007.
  372. Vodde B and Koskela L (2007). Learning Test-Driven Development by Counting Lines, IEEE Software, 24:3, (74-79), Online publication date: 1-May-2007.
  373. Andrea J (2007). Envisioning the Next Generation of Functional Testing Tools, IEEE Software, 24:3, (58-66), Online publication date: 1-May-2007.
  374. ACM
    Parveen T, Tilley S and Gonzalez G A case study in test management Proceedings of the 45th annual southeast regional conference, (82-87)
  375. Corriveau J Testable requirements for offshore outsourcing Proceedings of the 1st international conference on Software engineering approaches for offshore and outsourced development, (27-43)
  376. ACM
    Prior J, Robertson T and Leaney J Technology designers as technology users Proceedings of the 18th Australia conference on Computer-Human Interaction: Design: Activities, Artefacts and Environments, (353-356)
  377. ACM
    Elbaum S, Chin H, Dwyer M and Dokulil J Carving differential unit test cases from system test cases Proceedings of the 14th ACM SIGSOFT international symposium on Foundations of software engineering, (253-264)
  378. Turnu I, Melis M, Cau A, Setzu A, Concas G and Mannaro K (2006). Modeling and simulation of open source development using an agile practice, Journal of Systems Architecture: the EUROMICRO Journal, 52:11, (610-618), Online publication date: 1-Nov-2006.
  379. ACM
    Tobin-Hochstadt S and Felleisen M Interlanguage migration Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications, (964-974)
  380. ACM
    Caspersen M and Kölling M A novice's process of object-oriented programming Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications, (892-900)
  381. Engels G, Güldali B and Lohmann M Towards model-driven unit testing Proceedings of the 2006 international conference on Models in software engineering, (182-192)
  382. ACM
    Bhat T and Nagappan N Evaluating the efficacy of test-driven development Proceedings of the 2006 ACM/IEEE international symposium on Empirical software engineering, (356-363)
  383. Jansson P, Jeuring J, Cabenda L, Engels G, Kleerekoper J, Mak S, Overeem M and Visser K Testing properties of generic functions Proceedings of the 18th international conference on Implementation and application of functional languages, (217-234)
  384. ACM
    Ševčíková H, Borning A, Socha D and Bleek W Automated testing of stochastic systems Proceedings of the 2006 international symposium on Software testing and analysis, (215-224)
  385. ACM
    Andrews J, Haldar S, Lei Y and Li F Tool support for randomized unit testing Proceedings of the 1st international workshop on Random testing, (36-45)
  386. ACM
    Mayer P and Lübke D Towards a BPEL unit testing framework Proceedings of the 2006 workshop on Testing, analysis, and verification of web services and applications, (33-42)
  387. Talby D, Hazzan O, Dubinsky Y and Keren A (2006). Agile Software Testing in a Large-Scale Project, IEEE Software, 23:4, (30-37), Online publication date: 1-Jul-2006.
  388. Runeson P (2006). A Survey of Unit Testing Practices, IEEE Software, 23:4, (22-29), Online publication date: 1-Jul-2006.
  389. Tillmann N and Schulte W (2006). Unit Tests Reloaded, IEEE Software, 23:4, (38-47), Online publication date: 1-Jul-2006.
  390. Damm L and Lundberg L (2006). Results from introducing component-level test automation and Test-Driven Development, Journal of Systems and Software, 79:7, (1001-1014), Online publication date: 1-Jul-2006.
  391. Rust A, Bishop B and McDaid K Test-Driven development Proceedings of the 7th international conference on Extreme Programming and Agile Processes in Software Engineering, (209-210)
  392. Ziółkowski B and Drake G Rolling the DICE® for agile software projects Proceedings of the 7th international conference on Extreme Programming and Agile Processes in Software Engineering, (114-122)
  393. Madeyski L The impact of pair programming and test-driven development on package dependencies in object-oriented design — an experiment Proceedings of the 7th international conference on Product-Focused Software Process Improvement, (278-289)
  394. ACM
    Kobayashi O, Kawabata M, Sakai M and Parkinson E Analysis of the interaction between practices for introducing XP effectively Proceedings of the 28th international conference on Software engineering, (544-550)
  395. ACM
    Sauvé J, Abath Neto O and Cirne W EasyAccept Proceedings of the 2006 international workshop on Automation of software test, (111-117)
  396. ACM
    Artho C and Biere A Advanced unit testing Proceedings of the 2006 international workshop on Automation of software test, (92-98)
  397. Kou H and Johnson P Automated recognition of low-level process Proceedings of the 2006 international conference on Software Process Simulation and Modeling, (322-333)
  398. Runeson P, Andersson C, Thelin T, Andrews A and Berling T (2006). What Do We Know about Defect Detection Methods?, IEEE Software, 23:3, (82-90), Online publication date: 1-May-2006.
  399. ACM
    Janzen D and Saiedian H (2006). Test-driven learning, ACM SIGCSE Bulletin, 38:1, (254-258), Online publication date: 31-Mar-2006.
  400. ACM
    Waite W (2006). The compiler course in today's curriculum, ACM SIGCSE Bulletin, 38:1, (87-91), Online publication date: 31-Mar-2006.
  401. ACM
    Janzen D and Saiedian H Test-driven learning Proceedings of the 37th SIGCSE technical symposium on Computer science education, (254-258)
  402. ACM
    Waite W The compiler course in today's curriculum Proceedings of the 37th SIGCSE technical symposium on Computer science education, (87-91)
  403. Thompson E, Hunt L and Kinshuk K Exploring learner conceptions of programming Proceedings of the 8th Australasian Conference on Computing Education - Volume 52, (205-211)
  404. Thompson E Using a subject area model as a learning improvement model Proceedings of the 8th Australasian Conference on Computing Education - Volume 52, (197-203)
  405. Paige R and Brooke P Agile formal method engineering Proceedings of the 5th international conference on Integrated Formal Methods, (109-128)
  406. ACM
    Edwards J Subtext Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, (505-518)
  407. ACM
    Allowatt A and Edwards S IDE Support for test-driven development and automated grading in both Java and C++ Proceedings of the 2005 OOPSLA workshop on Eclipse technology eXchange, (100-104)
  408. ACM
    Melnik G and Maurer F The practice of specifying requirements using executable acceptance tests in computer science courses Companion to the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, (365-370)
  409. ACM
    Wilkinson H, Prieto M and Romeo L Arithmetic with measurements on dynamically-typed object-oriented languages Companion to the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, (292-300)
  410. ACM
    Patton J Finding the forest in the trees Companion to the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, (266-274)
  411. ACM
    Edwards J (2005). Subtext, ACM SIGPLAN Notices, 40:10, (505-518), Online publication date: 12-Oct-2005.
  412. ACM
    Liew C (2005). Teaching software development skills early in the Curriculum through software engineering, ACM SIGCSE Bulletin, 37:3, (133-137), Online publication date: 1-Sep-2005.
  413. ACM
    Sherriff M, Nagappan N, Williams L and Vouk M (2005). Early estimation of defect density using an in-process Haskell metrics model, ACM SIGSOFT Software Engineering Notes, 30:4, (1-6), Online publication date: 1-Jul-2005.
  414. Martin R (2005). The Test Bus Imperative, IEEE Software, 22:4, (65-67), Online publication date: 1-Jul-2005.
  415. ACM
    Liew C Teaching software development skills early in the Curriculum through software engineering Proceedings of the 10th annual SIGCSE conference on Innovation and technology in computer science education, (133-137)
  416. Amyot D, Roy J and Weiss M UCM-Driven testing of web applications Proceedings of the 12th international conference on Model Driven, (247-264)
  417. Cau A, Concas G, Melis M and Turnu I Evaluate XP effectiveness using simulation modeling Proceedings of the 6th international conference on Extreme Programming and Agile Processes in Software Engineering, (48-56)
  418. Mugridge R and Cunningham W Agile test composition Proceedings of the 6th international conference on Extreme Programming and Agile Processes in Software Engineering, (137-144)
  419. Olivé A Conceptual schema-centric development Proceedings of the 17th international conference on Advanced Information Systems Engineering, (1-15)
  420. Lui K and Chan K A road map for implementing extreme programming Proceedings of the 2005 international conference on Unifying the Software Process Spectrum, (474-481)
  421. ACM
    Sherriff M, Nagappan N, Williams L and Vouk M Early estimation of defect density using an in-process Haskell metrics model Proceedings of the 1st international workshop on Advances in model-based testing, (1-6)
  422. ACM
    Proulx V and Cashorali T (2005). Calculator problem and the design recipe, ACM SIGPLAN Notices, 40:3, (4-11), Online publication date: 1-Mar-2005.
  423. Erdogmus H, Morisio M and Torchiano M (2005). On the Effectiveness of the Test-First Approach to Programming, IEEE Transactions on Software Engineering, 31:3, (226-237), Online publication date: 1-Mar-2005.
  424. Saff D and Ernst M (2004). Continuous Testing in Eclipse, Electronic Notes in Theoretical Computer Science (ENTCS), 107:C, (103-117), Online publication date: 12-Dec-2004.
  425. ACM
    Edwards J (2004). Example centric programming, ACM SIGPLAN Notices, 39:12, (84-91), Online publication date: 1-Dec-2004.
  426. ACM
    Marick B (2004). Methodology work is ontology work, ACM SIGPLAN Notices, 39:12, (64-72), Online publication date: 1-Dec-2004.
  427. Nelson C and Kim J Integration of software engineering techniques through the use of architecture, process, and people management Proceedings of the First international conference on Rapid Integration of Software Engineering Techniques, (1-10)
  428. ACM
    Turnu I, Melis M, Cau A, Marchesi M and Setzu A Introducing TDD on a free libre open source software project Proceedings of the 2004 workshop on Quantitative techniques for software agile process, (59-65)
  429. ACM
    Socha D Aikido and software engineering Proceedings of the 2004 ACM workshop on Interdisciplinary software engineering research, (4-7)
  430. ACM
    de Souza C, Redmiles D, Cheng L, Millen D and Patterson J (2004). How a good software practice thwarts collaboration, ACM SIGSOFT Software Engineering Notes, 29:6, (221-230), Online publication date: 1-Nov-2004.
  431. ACM
    de Souza C, Redmiles D, Cheng L, Millen D and Patterson J How a good software practice thwarts collaboration Proceedings of the 12th ACM SIGSOFT twelfth international symposium on Foundations of software engineering, (221-230)
  432. ACM
    Williams L (2004). On the need for a process for making reliable quality comparisons with industrial data, ACM SIGSOFT Software Engineering Notes, 29:5, (1-4), Online publication date: 1-Sep-2004.
  433. ACM
    Saff D and Ernst M An experimental evaluation of continuous testing during development Proceedings of the 2004 ACM SIGSOFT international symposium on Software testing and analysis, (76-85)
  434. ACM
    Saff D and Ernst M (2004). An experimental evaluation of continuous testing during development, ACM SIGSOFT Software Engineering Notes, 29:4, (76-85), Online publication date: 1-Jul-2004.
  435. Hollingsworth J and Powell D Explicitly and implicitly teaching Java best practices across the undergraduate curriculum Proceedings of the 2004 international symposium on Information and communication technologies, (262-267)
  436. Nagappan N Toward a Software Testing and Reliability Early Warning Metric Suite Proceedings of the 26th International Conference on Software Engineering, (60-62)
  437. ACM
    Bonér J What are the key issues for commercial AOP use Proceedings of the 3rd international conference on Aspect-oriented software development, (5-6)
  438. ACM
    Edwards S Using software testing to move students from trial-and-error to reflection-in-action Proceedings of the 35th SIGCSE technical symposium on Computer science education, (26-30)
  439. ACM
    Edwards S (2004). Using software testing to move students from trial-and-error to reflection-in-action, ACM SIGCSE Bulletin, 36:1, (26-30), Online publication date: 1-Mar-2004.
  440. Weber D and Phillips M An architecture for multi-view information overlays Proceedings of the 2004 Australasian symposium on Information Visualisation - Volume 35, (9-15)
  441. Marré M and Bertolino A (2003). Using Spanning Sets for Coverage Testing, IEEE Transactions on Software Engineering, 29:11, (974-984), Online publication date: 1-Nov-2003.
  442. ACM
    Andrianoff S, Levine D, Gewand S and Heissenberger G A testing-based framework for programming contests Proceedings of the 2003 OOPSLA workshop on eclipse technology eXchange, (94-98)
  443. ACM
    Nagappan N, Williams L and Vouk M "Good enough" software reliability estimation plug-in for Eclipse Proceedings of the 2003 OOPSLA workshop on eclipse technology eXchange, (30-34)
  444. ACM
    Meszaros G Agile regression testing using record & playback Companion of the 18th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, (353-360)
  445. ACM
    Edwards S Teaching software testing Companion of the 18th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, (318-319)
  446. ACM
    Edwards S Rethinking computer science education from a test-first perspective Companion of the 18th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, (148-155)
  447. ACM
    Rasala R (2003). Embryonic object versus mature object, ACM SIGCSE Bulletin, 35:3, (89-93), Online publication date: 1-Sep-2003.
  448. ACM
    Mugridge R, Nataraj M and Singh D Emerging user interfaces through first-class viewers Proceedings of the 4th Annual Conference of the ACM Special Interest Group on Computer-Human Interaction, (75-80)
  449. ACM
    Rasala R Embryonic object versus mature object Proceedings of the 8th annual conference on Innovation and technology in computer science education, (89-93)
  450. Freese T Software configuration management for test-driven development Proceedings of the 4th international conference on Extreme programming and agile processes in software engineering, (431-432)
  451. Mugridge R Challenges in teaching test driven development Proceedings of the 4th international conference on Extreme programming and agile processes in software engineering, (410-413)
  452. Steinberg D Using instructor written acceptance tests using the fit framework Proceedings of the 4th international conference on Extreme programming and agile processes in software engineering, (378-385)
  453. Rinaldi A and Benedicenti L Building standard ERP software packages using self-developed agile methodologies Proceedings of the 4th international conference on Extreme programming and agile processes in software engineering, (366-368)
  454. Freese T Inline method considered helpful Proceedings of the 4th international conference on Extreme programming and agile processes in software engineering, (271-278)
  455. Mugridge R, MacDonald B and Roop P A customer test generator for web-based systems Proceedings of the 4th international conference on Extreme programming and agile processes in software engineering, (189-197)
  456. Nickell E and Smith I Three patterns in java unit testing Proceedings of the 4th international conference on Extreme programming and agile processes in software engineering, (170-179)
  457. Hedin G, Bendix L and Magnusson B Coaching coaches Proceedings of the 4th international conference on Extreme programming and agile processes in software engineering, (154-160)
  458. Gelowitz C, Sloman I, Benedicenti L and Paranjape R Real-time extreme programming Proceedings of the 4th international conference on Extreme programming and agile processes in software engineering, (63-72)
  459. Freese T Towards software configuration management for test-driven development Proceedings of the 2001 ICSE Workshops on SCM 2001, and SCM 2003 conference on Software configuration management, (267-273)
  460. Maximilien E and Williams L Assessing test-driven development at IBM Proceedings of the 25th International Conference on Software Engineering, (564-569)
  461. Rasmusson J (2003). Introducing XP into Greenfield Projects, IEEE Software, 20:3, (21-28), Online publication date: 1-May-2003.
  462. Williams L (2003). Guest Editor's Introduction, IEEE Software, 20:3, (16-20), Online publication date: 1-May-2003.
  463. ACM
    George B and Williams L An initial investigation of test driven development in industry Proceedings of the 2003 ACM symposium on Applied computing, (1135-1139)
  464. Carter J and Gardner W BHive: Towards Behaviour-Driven Development Supported by B-Method 2016 IEEE 17th International Conference on Information Reuse and Integration (IRI), (249-256)
  465. Niculescu V, Şerban C and Vescan A Does Cyclic Learning have Positive Impact on Teaching Object-Oriented Programming? 2019 IEEE Frontiers in Education Conference (FIE), (1-9)
  466. Hu Z, Song Y and Gehringer E A Test-Driven Approach to Improving Student Contributions to Open-Source Projects 2019 IEEE Frontiers in Education Conference (FIE), (1-9)
Contributors

Recommendations

Anne Gunn

“Recommended, with reservations” is the rating my Cooks Illustrated magazine gives to products that can be used to get good food on the table, but that don’t quite meet the highest standards. I fear that’s the rating I have to give to Kent Beck’s new book on test driven design (TDD). I’m willing to concede, however, that the problem may be as much with my high expectations for this book as with the book itself. TDD is an elaboration on chapter 18 in Beck’s previous book, “Extreme Programming Explained” (XPE). I think XPE is a great book; reading it changed how I work every day. But it covers a lot of ground, and the material on testing, while inspiring, is sparse. I was pretty excited when I heard Beck had a new book out, focused entirely on the unit testing methods of XP. The motto at the top of the XPE chapter on testing serves the TDD book as well: “We will write tests before we code, minute by minute. We will preserve these tests forever and run them all together frequently.” I’ve been lucky enough to be working lately on a project with a unit test framework. I’ve had days where I lived up to the motto. But I can affirm that testing-first and testing-always is harder than it sounds, especially when working with a substantial pre-existing code base. I was eager to have some of my real world (read: maintenance and enhancement) questions answered. Unfortunately for me, the book’s approach to the material is still pretty introductory and evangelical. Part 1 is a long, conversational example, using TDD to work up a Java multi-currency money-handling object. Beck’s intent is to give the reader the feel of some actual TDD work sessions, where the reader is his pair in a pair-programming environment. He also pushes hard on using the test driven approach as a way to build good design into code, without necessarily doing a lot of detailed design work up front. If you’ve read about test-first programming or unit-test frameworks, but haven’t had a chance to try them yet, this section could help you get enough of a feel to decide to take the plunge. If you are teaching new programmers, however, you could use this part as an assigned reading to convince them about how small they should be willing to work. I took a Java course at my local junior college last year, and the primary problem I saw novice programmers having was typing in way too much code, and then trying to get it to work. Beck’s relationship with his unit test framework is much like the one I’ve developed with my compiler. I’ll compile every line or two when I’m working on something hard, every few lines when I think the code is simple. But don’t be drinking a cup of coffee the first time you get to a description of Beck’s approach to “first make it run, then make it right:” you might choke. His “Fake It” technique is really no more than an extension of the stub-writing approach we all use, but it’s a radical extension. Part 2 is another TDD example, this time using Python to construct a simple unit test framework. I’m sure this is the section that Beck refers to in the introduction, where he says that some reviewers got a lot more out of the examples when they fired up a development environment and coded along with the book. It not being my week to learn Python or build my own xUnit framework, I didn’t get much out of this section. If you do want a Python tutorial, or you do want to understand how the xUnit framework functions under the hood, coding along with this section may be exactly what you need. Part 3, “Patterns for Test-Driven Development,” contains a wide-ranging set of observations on how to build and use unit tests and on refactoring. This is the section that will give the book a permanent place on my bookshelf, but even it is uneven in level and quality. The “Broken Test” tip for how to jumpstart your next programming section is a treat, and one I’ve already started using. The TDD-oriented list of refactorings, while no replacement for Martin Fowler’s excellent book on the subject, is certainly a handy top-ten list. I’ll be gnawing on the similarities, differences, and uses of value objects, null objects, and mock objects for a long time. The oracular pronouncement against singletons got me nowhere at all, however, and the “cheap desk, nice chair” tip would be better replaced with a bibliography pointing to, among other things, the many other good books that discuss productive coding environments in more detail. Online Computing Reviews Service

Paul Strooper

This book provides a tutorial-style introduction to test-driven development, which is an approach to software development based around writing test cases first, making those test cases work, and then refactoring the code. Proponents of this methodology claim that this leads to ?clean code that works.? Although test-driven development is closely associated with extreme programming (this relationship is briefly discussed), the focus of this book is on the role of testing to drive the design and development process. Two practice-based examples are presented in the book, as well as a set of patterns that are used in those examples. The examples are in Java and Python, and the book requires readers to have some maturity with object-oriented design and programming. The first example, which is the core of the first 17 chapters, presents the test-driven development of a multi-currency arithmetic package. The example is used to introduce the ideas behind test-driven development and the supporting JUnit testing framework. Each chapter describes one small step in the typical test-driven development cycle, which consists of adding a test case that does not work (red), making the test case work quickly (green), and cleaning up the resulting code mainly by eliminating duplication (refactor). The author demonstrates how several iterations of the red-green-refactor cycle lead to a program that is well designed and works. Chapter 17 briefly reviews the status of the final program, and presents some statistics about it and the process that was followed. Example number two, covered in chapters 18 through 24, develops a framework for automated unit testing based on the xUnit architecture. It is developed in Python, and there is an explanation of some of Python?s features to assist in understanding the example. The example is more complicated, partially because the developed testing framework itself is used to test the developed code. Unlike the first example, this example is not completed. Chapter 24 concludes the example with a brief retrospective, but no data is presented on the final code or development process. The third part, containing chapters 25 through 32, presents patterns for test-driven development that were used in the book. It includes some general patterns for test-driven development in chapter 25, patterns for the red phase in chapter 26, patterns for test writing techniques in chapter 27, for the green phase in chapter 28, for using the xUnit framework in chapter 29, for design in chapter 30, and for the refactor phase in chapter 31. Most patterns are presented as questions, followed by brief answers and discussions. Illustrating examples are presented for some of the patterns. The book concludes in chapter 32 with some general questions and issues regarding the application of test-driven development in various situations. One of the most notable aspects of the book is the writing style, which is extremely ?chatty.? While some people might enjoy this style, I found it distracting; it makes the text more bulky than necessary. Regarding the content of the book, I believe that it is intended to sell readers on the idea of test-driven development, and to assist those that use test-driven development in becoming better at it. I believe the book has partially succeeded in the second role, but I do not think it will succeed in the first. For the first example, the author presents many small, straightforward steps, interspersed with one more complicated step (covered in chapter 12), which, as the author admits, requires a ?flash of insight.? I am not convinced that taking many such small steps will eventually lead to clean, working code, nor am I convinced that the ?flash of insight? will come at the right time in the design and development process. In other words, test-driven development may lead developers to flounder in long cycles of red-green-refactor without getting much closer to a clean, working design and code. (I am more worried about the ¿clean¿ than the ¿working¿ here.) For those people interested in improving their test-driven development skills, the two examples in the book present a wealth of practical tips and experience from one of the experts in the field. The steps used in the examples are small and explained well. The patterns presented in the third part are also useful, but a better link could have been made between the patterns and where they are used in the examples (some of this can be deduced from the index, but not systematically). Moreover, the patterns are mostly those used in the examples, and it would have been nice if reference(s) to ¿the comprehensive treatment found elsewhere¿ mentioned by the author had been included. Overall, while I believe the book does a good job as a tutorial on test-driven development, it is not a convincing advocate for this approach. Online Computing Reviews Service

Puneet Singh Lamba

The most important benefit of test-driven development (TDD) is that it forces developers to design object interfaces from the caller's perspective, which is the only perspective that should matter. A test is essentially a statement of intent. Therefore, in what Beck terms the initial red state, the test fails because only the intent exists. The implementation is missing. The developer then creates a stubbed implementation (Beck refers to this as faking), causing the test to pass. This is the green state. The third and final state, refactor, is the process of tuning functional code to make it more efficient and elegant. Of course, refactoring eventually breaks the system. Therefore, it is critical to have a suite of tests that can fail to indicate a broken system. A failed test returns the development process to the red state. Since the tests will catch any break in functionality, the developer is free to refactor without the usual associated apprehensiveness. The red/green/refactor cycle, of course, continues until the intended functionality is both complete and efficient. In the book's afterword, Martin Fowler notes that TDD (also known as test-first programming) results in a sort of "rapid unhurriedness" because it helps to break the problem down into individual tests, which then evolve through the red/green/refactor cycle. Fowler compares programming without TDD to juggling several balls (design, functionality, testing) all at once. TDD, he says, is the equivalent of focusing on one ball at a time: write the test (interface design), make the test pass (interface implementation or functionality), refactor (improve the design of the implementation code), and run the test (testing). Beck echoes the sentiment. Speaking of the reduction in stress he has experienced since adopting TDD, he writes, "No longer did I have to worry about everything at once." The tests and the code, therefore, evolve together, with the tests leading the code by a very small fraction [1]. The book also serves as a gentle introduction to Python, which has unit test-friendly language elements, such as the "pass" keyword to facilitate the stubbing of classes and methods. Part 2 of the book is the real gem. It leads the reader through the development of a JUnit framework using Python. The language, however, is not a barrier toward understanding the basic concepts of what a unit-testing framework must minimally offer. Beck recommends motivated developers to roll their own unit test framework in order to gain mastery over a tool they are likely to use several times a day. Beck's eccentricity permeates nearly every page, including when he asks the reader if she or he ever noticed that speculation and specification "come from the same [language] root." Beck recommends test isolation, and warns against test coupling (where two tests share objects and/or data creation). As he points out, test coupling can cause tests that run later in the sequence to report false results (both pass and fail). Clearly, the ultimate objective of TDD is to shorten the life cycle of as many bugs as possible by catching them early in the development cycle. To that end, Beck writes, "I've just been test driving development long enough that I can recover from most of my mistakes faster than you can recognize I've made them." Beck acknowledges that there is no scientific evidence that TDD reduces software defects, but claims overwhelming anecdotal evidence. A point that Beck alludes to in the last chapter is that TDD ensures that all of the code is by definition both testable and loosely coupled, to facilitate independent testing. A corollary of the above is that it is typically not feasible to retrofit tests for existing code because the code, as written, is not always testable. Since TDD requires that code only be written to make tests pass, and since tests are written only to represent use cases that the system must handle, it follows that the design of the system is not intended to be psychic about the functionality to follow. TDD's minimalism, with respect to design and infrastructure, will appear counterintuitive to those of us who grew up on a diet of big upfront design that is broad and flexible, in anticipation of possible system behaviors expected in the future. XP and TDD turn the age-old advice on its head, and suggest instead that the design should be the simplest, barest possible design needed to get the job done for the case at hand. Online Computing Reviews Service

Access critical reviews of Computing literature here

Become a reviewer for Computing Reviews.