How many testers?How many devs?How many managers?Non- New- Old-timer- Agilists?
Iterations imply incremental developmentChange can result in a negative feedback loop - ENTROPYOr a positive one – EXERCISEWe have to address this. It’s not easy, until it becomes easy. At first, we’d rather not check the oil…
Teams get Uncompromising Quality and Adaptability viaTDD
We’re talking about a single coding event (story?) and it’s test. If the coding cycle is months, then the delay could be months.The developer will have forgotten. The BA/PO may have forgotten, too!<done with anim and closing gap> Where do we gain value from testing? Running the test, or writing it?
If you have to think about how you’d interact with the product, what are you doing? [Analysis]This is the final detailed analysis of a story before AND WHILE it’s being implemented. JIT Analysis!
Tells you when a task is done, and done correctly.Reduces defects by detecting regression failures immediately.Much less time troubleshooting and re-testing.Relieves the Agilist’s Dilemma.Old NO notes:Each test is used to clarify what needs to be doneThe test then tells us when we got it rightSimultaneously, it tells us that we are done with that partEach test remains as an individual investment in the behavior and the quality of the designThe suite of tests preserves all prior behavior while we address design, allowing for Emergent DesignsThe test cases are documentation of the intentions, uses, and interfaces of the production codeFor DevelopersBugs are easier and faster to fix while they’re freshBugs are found and fixed before other dependent code is writtenFewer returns from QA, more time spent on developing not fixingFor TestersSpend more time on more critical testing (not finding and validating defects)For the Whole TeamDaily measurable progressProduct health and flexibilitySanity in the workplace and enjoyable work
Developers don’t spend the minute to look for and clean up a new bit of code duplication.inexperienced coaches who confuse the developer-style TDD with the team ATDDwaffling over the use of TDD, which limits its effectiveness
“approximately 40% fewer defects” Laurie Williams for ACM
Story 15 years old, at least (Phoenix).Truck stuck.Fire dept and others arrive and try to figure out what to do.Anecdotally, a young man walks up and says “Why not deflate the tires?”Developers can think about a problem and come up with a possible solution.BUT…first specify the question (Jeopardy-style)
Microsoft and IBM…
This is how we usually see our software. We point-click-type-point-click-type.Anything wrong with this?<click>
Test what’s important. This is not unit-testing. Think of it as conceptual coverage. What if you didn’t know (or care) what section of CODE you’re testing, but what STORY (BUSINESS VALUE).Not “Test the database” but “Test that user data gets stored safely and accurately.”Not “test the 3rd party web service connection” but “Test that we interact correctly with our partners.”
Testing can’t be INCONCEIVABLE. Turing showed us that there’s no magic. Just about any test can be automated. Some vendors have added impossible-to-test magic back in (fat GUIs), but the agile/testing community is forcing even the giants (Sun, Microsoft) to rethink their architectures.And it’s often quite possible, and legitimate, to circumvent the magic. Sometimes we have to reconsider: What is the essence of this test???
Translator between business object and what the Fit test is expecting to see. Adapter/Proxy, but it could match exactly. Usually some bit of translation required.
The word “error” in the cell tells Fit that the cell gets a PASSING grade if the call throws an exception.
Create “setup” tables where necessary.
If you use something like TortoiseSVN, then be sure to use the TortoiseSVN context menu consistently to rearrange things.
Recall that we have a setup file at the top level in my testsYou can put tables into these setup.html files<click> to animate order of execution
Replacement for using ColumnFixture with a dummy column
Replacement for ActionFixtureIf first, a “flow” style is allowed on the page…
“Flow” style allows other fixtures anywhere after DoFixture is invoked.Actions themselves can be tested for errors by preceding the action with a “reject” or “not” cell.
Each test remains as an individual investment in the behavior and the quality of the design
In other words, design classes and methods so they do not have to change.Misinterpreted as “Subclass to enhance”, perhaps resulting in decades of inappropriate object designThankfully the GoF pointed out our mistake in Design Patterns
Yeah, but in separate steps. Rather than hacking it in, TDD encourages us to alter design without altering behavior, then adding behavior.
Google, Yahoo, MapQuest, and some others…Map is accessing some interface, plus it’s doing a lot of stuff with that data
VersionOne Survey Results (2008)
Survey asked people: Please try to estimate SPECIFIC
IMPROVEMENTS you have actually realized from implementing Agile
Improvement Noted >10% >=25%
Increased productivity 89% 56%
Reduced software defects 84% 56%
Accelerated time-to-market 83% 54%
Reduced cost 65% 30%
Source: VersionOne 2008 State of Agile Development Survey
NOTE: All 2008 data is within 2% of 2007 data implying these numbers are
not one-time anomolies
Biggest causes of agile project failure:
Company philosophy or culture could not be overcome – 23%
Lack of experience with agile – 21%
Agile is a Proven Approach
Some Agile Companies (there are MANY more)