Keyboard Shortcuts
ctrl + shift + ? :
Show all keyboard shortcuts
ctrl + g :
Navigate to a group
ctrl + shift + f :
Find
ctrl + / :
Quick actions
esc to dismiss
Likes
- Testdrivendevelopment
- Messages
Search
Re: [TDD] Does TDD ask me to 'forget' all I know about software design?
On Mon, Jan 21, 2013 at 11:47 AM, sh <shvfn@...> wrote:
Dear Listables,I highly recommend Josh Kerievsky's "Refactoring to Patterns" as it talks a lot about this aspect. I consider that book one of the jewels of the TDD literature. -Corey |
Re: [TDD] Does TDD ask me to 'forget' all I know about software design?
Bill Wake
I like Hill & Charlie's answers...
toggle quoted message
Show quoted text
I figure when I have a pre-conceived idea for the design, it's because at least some situations have pressures that make the "known" designs a good idea. When I have a theory about a pressure existing, I'll choose a test in that area and see if it reveals the stress point I think exists (and would be solved by my design idea). (Sometimes I'll find the design idea isn't worth it, other times it is.) It pays to be sensitive to the refactoring step, using it to create the needed concepts/objects/functions/whatevers. What I think all this does is let the generality I really need emerge, and leave the rest in reserve should it be needed in the future. It's not to say I've never just added a class I thought would be needed, but I think the emergence is interesting to watch & see what drives it. One of the things I really like about Kent Beck's TDD book is his use of the basic "currency" example, but he ended up with a different solution than what he'd usually created. --Bill Wake On Mon, Jan 21, 2013 at 12:47 PM, sh <shvfn@...> wrote:
Dear Listables, --
Bill Wake Industrial Logic, Inc. @IndustrialLogic Coaching | Training | Assessment | eLearning |
Re: [TDD] Does TDD ask me to 'forget' all I know about software design?
I'm not Matteo but I would either first test a score, or for tetris a line
toggle quoted message
Show quoted text
match, or for pong the angle of a bounce. On Jan 21, 2013 10:44 PM, "sh" <shvfn@...> wrote:
Matteo, |
Re: [TDD] Does TDD ask me to 'forget' all I know about software design?
Hi Stefan,
toggle quoted message
Show quoted text
Welcome! After Mike, there's little else to say but why would I let that stop me? :-) This may be a bit too philosophical for some people, but I think the tension you describe between your preconceptions and TDD is a big part of what makes it work. I've never started a project without preconceptions, either before I did TDD or now that I do it. Having preconceptions is normal and they are sometimes even useful. TDD does not rule out preconceptions. TDD _does_ tell us "Don't act on your preconceptions without first writing a test." So, when I start an application, especially in a domain where I've done work before, it's very likely that I have some ideas about the eventual structure of the application. I'm not wrong at that stage and I can still do TDD. But when I say "Since I know the eventual structure, I'll set it up right away" I have left the world of TDD and substituted a guess for actual knowledge. Fact is, I _don't_ 'know' the eventual structure - I merely have a good, educated guess about what it will be. And some percentage of the time, my initial guess won't end up being the best way to do it. So, as I program (i.e. write tests and make them pass) I hold in my mind the ideas that I started out with and constantly compare the emerging program with those ideas. Inevitably, the ideas change as the program develops. Just as software is easier to change than hardware, ideas in my brain should be easier to change than software. If they aren't, it's good exercise to try changing them a bit more. I think of this tension between "what I think I'll end up doing" and the emerging program as the twisted-up rubber band that turns my programming propeller. To keep that tension working for me, I don't want to drop my initial ideas, but merely to set them to one side for a while until they either come true or don't. Charlie On Mon, Jan 21, 2013 at 9:47 AM, sh <shvfn@...> wrote:
Dear Listables, |
Re: [TDD] Does TDD ask me to 'forget' all I know about software design?
The short answer is that yes, you do the next smallest step. I'm always
amazed how nice it is when I completely 'follow the rules' the process exists cause its useful and works. On Jan 21, 2013 9:28 PM, "Josue Barbosa dos Santos" <josuesantos@...> wrote: +1 |
Re: [TDD] Does TDD ask me to 'forget' all I know about software design?
sh
Matteo,
toggle quoted message
Show quoted text
hm, I'm not sure I understand. When you imagine a simple game (Pong, Tetris), what behaviour/class would you choose? Michael, thank you for this insight from your coders life. Perhaps I do worry to much. I question the method before even starting. OK, I'll try! Colin, Dave, Josue, I'll try to get a copy. "Growing" software sounds a lot like the aspect I am interested in. Thanks for the recommendation! Am 21.01.2013 20:28, schrieb Josue Barbosa dos Santos: +1 |
Re: [TDD] Does TDD ask me to 'forget' all I know about software design?
+1
On Mon, Jan 21, 2013 at 5:27 PM, Dave Rooney <daverooneyca@...> wrote: ** -- o, Dz� [Non-text portions of this message have been removed] |
Re: [TDD] Does TDD ask me to 'forget' all I know about software design?
+1
toggle quoted message
Show quoted text
Dave... On 13-01-21 2:20 PM, Colin Vipurs wrote:
|
Re: [TDD] Does TDD ask me to 'forget' all I know about software design?
I can heartily recommend reading "Growing Object Oriented Software: Guided
by Tests". ( ). It walks you through the entire process, and unlike alot of literature doesn't shy away from some of the more "hairy" problems. The entire book is pretty much an answer to your question On Mon, Jan 21, 2013 at 6:05 PM, Matteo Vaccari <vaccari@...> wrote: ** -- Maybe she awoke to see the roommate's boyfriend swinging from the chandelier wearing a boar's head. Something which you, I, and everyone else would call "Tuesday", of course. |
Re: [TDD] Does TDD ask me to 'forget' all I know about software design?
Michael Hill
Stefan...
TL;DR: Don't sweat it either way, start with your pre-TDD notion, pass a test, and refactor until you can't stand it anymore, and it will work out. For me, starting with TDD-as-I-grasped-it-then, I simply did not worry about evolution OR my preconceptions. With evolution, I assumed that just meant that I'd make my app better as time went by. Certainly I had had some experience with iterative approaches, and iterations were a lot like what I understood as design evolution. As for preconceptions, I'd say I was blithely unaware that anything like my preconceptions even existed, except as an abstraction. That is, I regarded my mental stance about things like what method goes where and how classes should interact as hard-earned geek skill, not even conceivably in collision with strong design, rather mostly just making up my definition of strong design! As my TDD chops got better, the steps I took got smaller and smaller, including the refactorings. By focusing so "micro" in my work, I began to create classes I'd never really met before. It sounds trivial, but I never created many "verb" classes before, like, say, a LineCleaner, or a WebWrapper. In fact, I had some sense that classes whose names ended with -er were "bad", altho they worked pretty well. My preconceptions bothered me, so I began to push well-factored code into the kinds of pre-TDD nouns (circled of course), that had been my wont before TDD. And what I found was just unbelievable: the code got worse, not better. Stuff I had labored painstakingly over, making my code tight, clean, correct, and easy to grasp, became ugly and clearly wrong. So i stopped worrying about it. And though it sounds like I'm an aspiring mystic, I'd say my current understanding is that I should make the code be the shape it wants to be in. For your case, then, my advice is this: don't even worry about those two factors, the evolution and the preconception. Just refactor until you're red in the face, every time. If, as I for one claim, the code will tell you what it wants to be, over time you'll get an ear for that telling, and you'll find yourself just getting stronger. I routinely start code using my old ideas. For instance, some variation of MVC in GUI apps. Then it's red-green-refactor-commit, and the real "right code" emerges quicker than I ever imagined would happen. Good luck with it! Hill |
Re: [TDD] Does TDD ask me to 'forget' all I know about software design?
On Mon, Jan 21, 2013 at 6:47 PM, sh <shvfn@...> wrote:
Dear Listables,... I would not start with that. I would more likely start with the test of a simple behaviour of the completed system. Then I'd build just as little as possible to make the test pass. Matteo |
Does TDD ask me to 'forget' all I know about software design?
sh
Dear Listables,
first post here. I hope, this hasn't been asked a thousand times... :) TL,DR first: What are your experiences regarding the evolutional aspect of TDD when it comes to systems? And how do you handle your own preconceptions about software design? Fulltext: Since I have some time at hand I want to develop a small game-engine in Haxe as a hobby project. I want to use a TDD approach, but I have some questions. Since I already coded several small games/experiments I have certain ideas about how a game engine should be structured. For example I expect to end up with - an engine class, - a scene or context - a renderer, - an event- or signal/slot-system, - an entity/component system - etc, etc. When I now start to write my first tests, I guess I start with the engine class. At some point I will introduce vertices and a render()-method, because I want to draw meshes to the screen. When it comes to that, how would you approach this task in a test driven way? Do you say to yourself "Hey, it will end up like that anyway, I introduce a new class named Renderer and write the next tests for this class."? Or do you take the next smallest step and add a method "renderVertices" to the engine class and refactor it out to a renderer, when the "rule" says so? (in this case separation of concerns?) Same thing for events or messages: I expect I will need a dispatcher and an interface for objects to register themselves as listeners to certain events. Do you try to "forget" such expectations when using TDD? When and how do you decide to introduce a new system? Do you always do it because "the tests say so" or because you know you need it? Does something like an eventSystem with listeners/dispatchers really "evolve" by just adding the right tests and refactoring? So: What are your experiences regarding the evolutional aspect of TDD? Should I just trust the method? And how do you handle your own preconceptions about software design? Best, Stefan |
Re: Arabic to Roman Numeral kata with commentary
Carlos Ble
Excellent screencast Corey! thanks for that :-)
My experience with this kind of complex-algorithms katas is that TDD is not enough to find the best solution. TDD helps when you already have the solution in your head. Then TDD and the TTP helps you write the minimun code to write the algorithm you are thinking of. Transforming "II" in "I" + convert(in_aragic -1) is an insightful idea, not just emerging design. So in these cases I try to do several spikes, use pencil and paper, think hard, and then test drive my solution towards the algorithm in my head. Because there is no obvious triangulation. This is the more effective way of solving the problem right for me. Cheers ;-) -- Carlos Ble www.CarlosBle.com <> - @carlosble Check out my book on TDD: www.dirigidoPorTests.com/el-libro Try my latest app for team productivity: www.liveTeamApp.com Need test doubles for python?: www.pyDoubles.org |
Submission extension XP2013 Vienna: Call for Research and Experience Papers
Extended submission deadline: 25.1.2013
The 14th International Conference on Agile Software Development is a leading conference on agile methods in software and information systems development. XP2013 will be located in Vienna, Austria June 3-7. This conference brings together industrial practitioners and researchers in the fields of information systems and software development, and examines latest theory, practical applications, and implications of agile methods. For more information visit . We allow submission as research papers as well as experience reports. Research papers =============== We are looking for original research, with implications for theory and practice. Motivation for research and discussion of the related work must be included, as well as a description of the research method applied. Full papers are limited to 15 pages and short papers to 8 pages. Experience reports ================== We are looking for experience reports sharing experiences about the business impact generated when introducing agile practices, and challenges to be overcome as well as horror stories on failures including lessons learned. Experience papers must be clearly marked as such so that they can be appropriately reviewed by the program committee. Concerning length and formatting, experience reports must follow the same rules and guidelines as research papers. If you would like to receive help from an experienced agile researcher to shepherd you in developing a submission, please contact the PC chairs (research@...) by the time indicated in the important dates list. Areas of interest ================= We are inviting innovative and high quality research papers as well as experience reports related to agile software development. Topics of particular interest in the conference include, but are not restricted to, the following: - Foundations and conceptual studies of and for agile methods - Living examples of agility in all areas - Current practices and future trends, agile evolution and revolution - Empirical studies and experiences - Experiments in software development and their relation to agile methods - Implications for industrial practice - Tools and techniques for agile development - Social and human aspects including teams - Forming agile organizations and its implications - Management and governance aspects - Measurement and metrics - Global software development and offshoring - Systems engineering and safety critical systems - Software- and systems architecture - Legacy systems - Usability - Using agile methods in education and research - Teaching agile methods in particular in an university context Presentation of accepted papers =============================== Accepted papers will either be presented within the research track or as part of the main conference track-depending on whether the implications of the contribution are mainly related to theory and/or practice. Authors of papers that are selected for presentations in the main conference track will be assigned a mentor who will advise and assist in adapting the presentation to suit a mixed audience of practitioners and researchers. Research Program Committee ========================== Hubert Baumeister, Technical University of Denmark, Denmark (co-chair) Barbara Weber, University of Innsbruck Austria (co-chair) Muhammad Ali Babar, IT University of Copenhagen, Denmark Robert Biddle, Carleton University, Canada Luigi Buglione, Engineering.IT / ETS, Italy Ivica Crnkovic, Mlardalen University, Sweden Simon Cromarty, Red Gate Software, UK Steven D. Fraser, Cisco Research, USA Torgeir Dingsoyr, SINTEF ICT, Norway Tore Dyb, SINTEF and Department of Informatic, University of Oslo, Norway Amr Elssamadisy, Gemba Systems, USA Juan Garbajosa, Universidad Politecnica de Madrid / Technical University of Madrid, Spain Alfredo Goldma, University of So Paulo, Brazil Des Greer, Queens University Belfast, Ireland Rashina Hoda, The University of Auckland, New Zealand Kirsi Korhonen NSN, Finland Pasi Kuvaja, University of Oulu, Finland Stig Larsson, Effective Change AB, Sweden Casper Lassenius, Aalto University, Finland Lech Madeyski, Wroclaw University of Technology, Poland Michele Marchesi, University of Cagliari, Italy Grigori Melnik Microsoft, Canada Alok Mishra, Atilim University, Turkey Nils Brede Moe, SINTEF ICT, Norway Ana Moreno, University Madrid, Spain Oscar Nierstrasz, University of Bern, Switzerland Maria Paasivaar, Helsinki University of Technology, Finland Jennifer Perez, Technical University of Madrid, Spain Kai Petersen, Blekinge Institute of Technology/Ericsson AB, Sweden Adam Porter, University of Maryland, USA Outi Salo, Nokia, Finland Helen Sharp, The Open University, UK Alberto Sillitti, Free University of Bolzano, Italy Darja Smite, Blekinge Institute of Technology, Sweden Giancarlo Succi, Free University of Bolzano/Bozen, Italy Marco Torchiano, Politecnico di Torino, Italy Stefan Van Baelen, iMinds, Belgium Xiaofeng Wang, Free University of Bozen-Bolzano, Italy Hironori Washizaki, Waseda University, Japan Werner Wild, EVOLUTION, Austria Laurie Williams, North Carolina State University, USA Agustin Yague, Universidad Politecnica de Madrid, Spain Submission instructions ======================= Papers should be submitted electronically as a self-contained PDF file using the EasyChair submission site: . Papers have to be written in English and formatted according to Springer's LNBIP format: . Papers not following the guidelines will be rejected. Important Dates =============== Deadline (extended): 25.1.2013 Feaddback to authors: 22.2.2013 Final version due: 8.3.2013 Conference: 3-7.6.2013 -- Hubert Baumeister Associate Professor Research program co-chair of XP2013 (research@...) www.imm.dtu.dk/~hub |
Re: [TDD] Sharable Examples of Good Testing
Mark Levison
The Apache Tika project turns out to be another good example of a Test
Driven Code base. I spent only an hour with it and already I have a fair understanding. I will using as an example good code next week. I gather (3rd hand) that its been worked on by about a dozen people since it began. Cheers Mark On Wed, Dec 19, 2012 at 5:51 AM, Esko Luontola <esko.luontola@...>wrote: ** -- Cheers Mark Levison Agile Pain Relief Consulting <> | Writing <> Proud Sponsor of Agile Tour Gatineau Ottawa <> Nov 28, Toronto <> 26 and Montreal <> 24 [Non-text portions of this message have been removed] |
Re: [TDD] Arabic to Roman Numeral kata with commentary
Hi Corey,
Thank you for sharing this. I played this kata months ago, but your kata is quite inspiring to me and I see some improvements I can make. I can't wait to replay it. J Regarding the TTP part, I agree with you that the case "convert 5 to V" is a simpler transformation than the case "convert 2 to II". But, if I first go with the latter case, it won't impact the entire algorithm transformation. In fact, I went with the case for convert 2 earlier than 5 (actually case for 3 and 4 came after 2) and wasn't blocked by this. I haven't found a kata like the word wrapper kata which will go into a trap if choosing a wrong order according to TTP. The most impressive part to me is your algorithm and how easy it is implemented in Ruby. In my previous exercise, my algorithm is to convert for each digit to roman number and combine them into one string. It's more complex than yours. My feeling is that the algorithm itself is sometime more related to your programming knowledge and skill but less related to whether you implement it in TDD or not. Anyway, I will play this kata again soon and try it with your algorithm. My original kata is posted at (in Java). Merry Christmas and Happy new year, Joseph From: testdrivendevelopment@... [mailto:testdrivendevelopment@...] On Behalf Of Corey Haines Sent: Tuesday, December 18, 2012 9:21 PM To: testdrivendevelopment Subject: [TDD] Arabic to Roman Numeral kata with commentary Hi, All, I recently posted a katacast of the arabic to roman numeral conversion kata with an audio commentary track over it. It is heavy TDD, plus uses bits of the transformation priority premise. ary.html Would love to hear any feedback from the list. Thanks! -Corey Haines |
Re: [TDD] Arabic to Roman Numeral kata with commentary
Thanks a lot, Alpar!
On Wed, Dec 19, 2012 at 3:06 AM, Gbos Alpr <jr_alpar@...> wrote: ** [Non-text portions of this message have been removed] |
Re: [TDD] Sharable Examples of Good Testing
john_s_ryan wrote on 18.12.2012 16:56:
I'm looking for some examples of software programs that are goodI'm publishing screencasts of implementing a couple of projects. There's well over 100 hours of programming with 100% TDD: Especially with the Jumi test runner project (), I'm recording all implementation work since day one. (I didn't record implementing my continuous delivery build pipeline, but I've written about the end result.) Based on my own standards I'm very happy with Jumi's quality. It's easier to avoid slipping to bad practices when you know that someone is watching everything you do. ;-) -- Esko Luontola www.orfjackal.net |
to navigate to use esc to dismiss