background preloader

Test Driven Development

Facebook Twitter

What’s in a Story? [This article has been translated into Korean by HongJoo Lee, French by Philippe Poumaroux, Spanish by Adrian Moya, Russian by Denis Oleynik, and German by Julia Kadauke.]

What’s in a Story?

Behaviour-driven development is an “outside-in” methodology. It starts at the outside by identifying business outcomes, and then drills down into the feature set that will achieve those outcomes. Each feature is captured as a “story”, which defines the scope of the feature along with its acceptance criteria. This article introduces the BDD approach to defining and identifying stories and their acceptance criteria. Introduction Software delivery is about writing software to achieve business outcomes. Usually, the business outcomes are too coarse-grained to be used to directly write software (where do you start coding when the outcome is “save 5% of my operating costs”?) This, then, is the role of a Story. The structure of a story. Painless Functional Specifications - Part 1: Why Bother?

By Joel Spolsky Monday, October 02, 2000 When The Joel Test first appeared, one of the biggest sore points readers reported had to do with writing specs.

Painless Functional Specifications - Part 1: Why Bother?

It seems that specs are like flossing: everybody knows they should be writing them, but nobody does. Bookshelf v7.7: Functional Test Cases. Functional Test Cases Functional test cases test a common business operation or scenario.

Bookshelf v7.7: Functional Test Cases

Table 3 shows some examples of functional test cases. Step by Step guide to Test Case Development. Test case in simple terms refers to a documentation which specifies input, pre-conditions, set of execution steps and expected result.

Step by Step guide to Test Case Development

Top 13 Tips for Writing Effective Test Cases. Test cases are very important for any project as this is the first step in any testing cycle, and if anything goes wrong at this step, the impacts get extrapolated as you move forward in the software testing life-cycle.

Top 13 Tips for Writing Effective Test Cases

Knowing how to write good test cases is extremely important for you as a testing resource and believe you me, it doesn’t take too much of your effort and time! You just need to follow certain guidelines while writing test cases or as they call it – follow “test case writing best practices.” In this article, I am going to talk about some simple yet effective tips which you could use for writing effective test cases. Test case writing is an activity which has a great impact on the testing phase and this makes test cases an important part of the test execution process!

So, writing test cases which are effective as well as reusable is very important; good test cases save a lot of time in the later stages of testing (really!) #1. Let’s take an example! #2. . #3. . #4. Writing Test Cases for Functional Testing » Game-based learning. What is a Test Case?

Writing Test Cases for Functional Testing » Game-based learning

In software testing, a test case is an ordered sequence of inputs with conditions and variables that determine whether a piece of an application is functioning properly. In functional testing, test cases are used to test the application’s interface and determine how an application and the user interact. Refactoring BDD scenarios. On December 16th I attended a Madriagil meetup.

Refactoring BDD scenarios

This time we talked about Behaviour Driven Development (BDD). @Laura_Morillo gave us a short introduction to BDD. @plagelao and @ecomba were connected by Skype from Eden headquarters in Winchester. Enrique shared his experience with BDD giving us some examples of test scenarios from Eden projects. Then we had a look at sample scenarios I prepared for the session. The application was created not from a customer business need, but to demonstrate BDD vocabulary, scenarios and steps and their mappings to an executable code. Whose domain is it anyway? The brittleness of tests or specs is a recurring topic in BDD (or acceptance test-driven development, specification-by-example, or whatever you choose to call the thing where you write acceptance criteria, automate them and then make the application match).

Whose domain is it anyway?

This is a tricky area, and there are probably as many styles of defining and grouping acceptance criteria as there are teams automating them. The aspect I want to focus on in this article is domain language, because there’s a failure mode I encounter surprisingly often, which seems to have a common root cause. Here’s an example: Specification by Example versus Behaviour Driven Development.

Personally I favour the phrase “Specification by Example” over the more commonly used term “Behaviour Driven Development” (BDD).

Specification by Example versus Behaviour Driven Development

BehaviourDrivenDevelopment - BDD Wiki. Specification-Driven Development. In the last couple of years, there's been a lot of debate in the community on the philosophy behind TDD and where to put the emphasis - even to the point of debating whether the acronym stands for Test-Driven Development or Test-Driven Design.

Specification-Driven Development

Other people don't like the emphasis on tests, since that makes TDD sound like a Testing discipline, and not a Development discipline. Instead, they prefer terms like Example-Driven Design/Development (EDD) or even Design by Example (DbE). This view seems to me to be particularly prevalent in Microsoft, where there's a rather sharp distinction between developers and testers (job titles to the contrary) - I guess that's one of the reasons why xUnit.net (a project initiated by Microsoft employees) uses the attribute Fact instead of Test or TestMethod. For people used to SCRUM or other agile methodologies, this distinction is more blurred, and they also seem to accept the T in TDD more willingly.

To me, the tests are also important. Specification by example notes. BDD with intent. Charles Simonyi introduced himself at a recent workshop with the words: “I was at Xerox PARC in the 70s, Microsoft in the 80s, and working on intentional software in the 90s”. He wasn’t showing off, he was just there. He pioneered WYSIWYG, created Microsoft Word, Excel and Access (as a data visualization tool), championed OO and invented metaprogramming. What this tells me is that when Charles Simonyi thinks he is on to something, it’s probably worth listening. (Ok, I’ll forgive him szHungarian notation.) For the last 15 years, Charles has been on to intentional programming. BDD is like TDD if… I’ve noticed a number of people recently declaring that BDD really is just TDD, such as Robert Martin on Twitter and Ron Jeffries on the XP list.

I can understand where this mindset comes from and I’d like to offer my perspective. Is BDD the same as TDD? Yes. If you’re a programmer, and your entire team is programmers, and all your stakeholders are programmers and you have a single Subject Matter Expert embedded in the team. Which was true of the Chrysler C3 team and other early XP teams. BDD is the same thing but for a broader audience: testers, analysts, project and program managers, multiple SMEs covering multiple interrelated domains.

It can be argued that the team shouldn’t be anything other than programmers – in the polyglot roles of tester, analyst, etc. – in which case BDD and TDD again collapse into the same space. BDD by example. Tl;dr: Send us your examples of real world BDD. Read on to find out why. The panel. BDD – TDD done well? Someone on the XP thread suggested, “BDD is just TDD done well with different words.” Here’s my take. An application is the end-product, and the value of the application is delivered through its behaviour, as perceived through its user interface.

BDD uses descriptions of behaviour and executable examples (or exemplars; examples carefully chosen to illustrate a particular behaviour). These exemplars, whether in code or plain English, are an aid to communication, to driving a clean, simple design, to understanding the domain, to focusing on and delivering the business value, and to giving everyone involved clarity and confidence that the value is being delivered. Is doing the above merely ‘doing TDD well’? Here are some of the practices I use in BDD. Behavior Driven Development — behave 1.2.5 documentation. Behavior-driven development (or BDD) is an agile software development technique that encourages collaboration between developers, QA and non-technical or business participants in a software project. It was originally named in 2003 by Dan North as a response to test-driven development (TDD), including acceptance test or customer test driven development practices as found in extreme programming.

It has evolved over the last few years. On the “Agile specifications, BDD and Testing eXchange” in November 2009 in London, Dan North gave the following definition of BDD: BDD is a second-generation, outside–in, pull-based, multiple-stakeholder, multiple-scale, high-automation, agile methodology. It describes a cycle of interactions with well-defined outputs, resulting in the delivery of working, tested software that matters. BDD vs TDD: A Behavior-Driven Development Example. Testing. It often gets left to the last minute, then cut because you’re out of time, over-budget, or whatever else. Management wonders why developers can’t just “get it right the first time”, and developers (especially on large systems) can be taken off-guard when different stakeholders describe different parts of the system, like the story of the blind men describing an elephant.

It’s inevitable, however, that the first step in every project is a discussion about the behaviors of the software or feature to be built. A client or business person comes up to someone on the development team and explains what they want. Sometimes these interactions come in form of an Agile user story. Introducing BDD. Test Behavior, Not Implementation. While I was reading the Ruby Pickaxe book I came across an example of Unit Testing which – in my opinion – is testing implementation rather than behavior. This particular example was used to explain Duck Typing in Ruby, but I think it illustrates that it’s pretty easy to write tests which end up testing the wrong thing.

Test First. 8th Light. In the first Is TDD Dead? Hangout, at time 30:25 @dhh makes a remarkable statement: "...you're not done until you also have tests for a piece of functionality -- I'm completely on board with that. " I think we can extrapolate from @dhh's statement that he believes that having tests for a piece of functionality is a matter of professionalism. It's not hard to understand why. The benefits provided by a good test suite are enormous. Well designed tests are small isolated snippets of code that call into the system being tested, expecting certain results.