[FitNesse|cucumber]FitNesse與cucumber行為驅動測試開發的典範
I was recently tasked with piloting a couple of design tools designed to help us with our development.
The first one was FitNesse, and the second Cucumber with Groovy.
The problem with “cutting edge” pieces of software tooling is that the tutorials are often up to the mercy of those who pioneered it. This is not always a good thing. In fact unless they are communicative experts its a bad thing; its a bad thing because the guys who come up with this magnificent software aren’t always the same as the guys who are able to write the best tutorials, and explain the simplest concepts (or see the need to).
Quote:
“FitNesse is a software development collaboration tool
Great software requires collaboration and communication. FitNesse is a tool for enhancing collaboration in software development.
FitNesse enables customers, testers, and programmers to learn what their software should do, and to automatically compare that to what it actually does do. It compares customers’ expectations to actual results.
It’s an invaluable way to collaborate on complicated problems (and get them right) early in development”
Well righto! thats right and its also correct, so what is it?
Well its this diagram and this is the truth:
So what is it? (Those who remember Cat in Red Dwarf a cult tv comedy classic )
In one sentence:
Its a wiki, that enables a BA to put in expected outputs given inputs, which plugs into an easily codable Java adaptor designed to plug the values into your system. (ah why didn’t you say so)
What do you need?
Developers willing to code adaptor classes that populate your business objects/services using setters and getters.
BA’s willing to use the wiki, and learn its own little language syntax.
Setup
Overall it was quite straightforwards to setup, I found the options were not amazingly intuitive but after a while I got the hang of it, and its nice to see the green filling in the boxes to show your adaptor (fixture) class is discovered and tests passed.
What is Cucumber and Groovy?
Well seems a little simpler from the outset but it has no wiki. The idea is:
1: Describe behaviour in plain text
2: Write a step definition in Ruby
3: Run and watch it fail
4. Write code to make the step pass
5. Run again and see the step pass
6. Repeat 2-5 until green like a cuke
7. Repeat 1-6 until the money runs out
Ah looks good except for the Ruby bit because I have Groovy, and that took long enough to get working. Good news comes in the form of cuke4duke which gets Cucumber to work with Groovy.
Fortunately the guy who did it had some examples underneath the tutorial (Aslak Hellesoy) and I was eventually able to piece together some command line prompt uses from elsewhere on the net.
So what is Cucumber and Groovy in my words?
Cucumber involves a form of structured english language in the form of a scenario or set of scenarios.
eg:
Feature: BMI Calculator Feature
In order to ensure that my BMI calculator
As a Moderately Overweight Developer
I want to run a cucumber test find out if it works or sucks
Scenario: Robert thorough
Given I have entered Robert as a name
And I have entered 5 in feet
And I have entered 9 in inches
And I have entered 190 in pounds
When I call calculateBMIService
Then the stored result should be 28.1
And the stones should be 13 Stones
Groovy then receives these instructions and using regex sneakily uses the JVM (without compilation need) to test the assertions.
eg.
Before() {
input = new com.rob.calculators.BMICalculatorInput();
output = new com.rob.calculators.BMICalculatorOutput();
bmiCalculator = new com.rob.calculators.BMICalculator();
}
Given(~"I have entered (.*) as a name") { String name ->
input.setName(name)
}
Setup
I found it a little trickier and slightly frustrating to setup in terms of command line stuff, but I eventually got there, configuration is the bane of me so this is where I am most likely to get frustrated and give up, but after I got there it seemed to behave itself!
and thats it.
What do I prefer? hmm JUnit, maybe thats because I am willing to sit with a BA/Tester/Person and write the unit tests so theres a bit of affinity bias there
I actually like them both, but I would say that Cucumber may edge it, for the domain language used will help slightly more in delivering business value, but I would expect both of these to evolve over the coming months and couple of years to something where both are better than either of them now. The only thing that put me off about the domain language of FitNesse was the use of “Fixtures”, quite obvious when you know but not when you don’t, remember its about selling this to those who are new to the product. If they had said the slightly more wordy “Custom Static Adaptor” then as a Java guy I’d know about it, and as it in my case is written in Java then thats the right domain terminology. They could have written “Custom Glue Code”, and I’d have had a better idea too, the name itself made me think that its another domain specific language with nuances I need to learn.
These are great great tools, made by extremely intelligent people (far more than myself) but often they dont have the time to sell it / package it / sugar coat it into something that will be found easy by all those invovled in using it, and by that I am talking business and BA’s.
Its one thing creating an expert tool/concept/idea, but if you can explain with examples in a really simple manner then it makes the job easier for people who come across the tool (who may not have fantastic communication/selling skills) who want to adopt agile and are also trying to sell to their bosses so they can get top down buy in.
In balance now I know them a little more I’d be comfortable with using them both, in fact I would try them both rather than reccomend one of them, each project team has a slightly different domain, and remember we are into writing really good software, whatever tool works best we use. If the company is “wiki-mad” and the requirements are less wordy and more calculative and the Java developers very enthusiastic then there is no reason FitNesse wont work well. If you already use Groovy it may be a mistake to go towards FitNesse, but still try both and see! Experiment!
轉載別人的文章註明了出處:http://blog.agile78.co.uk/?p=171
The first one was FitNesse, and the second Cucumber with Groovy.
The problem with “cutting edge” pieces of software tooling is that the tutorials are often up to the mercy of those who pioneered it. This is not always a good thing. In fact unless they are communicative experts its a bad thing; its a bad thing because the guys who come up with this magnificent software aren’t always the same as the guys who are able to write the best tutorials, and explain the simplest concepts (or see the need to).
Quote:
“FitNesse is a software development collaboration tool
Great software requires collaboration and communication. FitNesse is a tool for enhancing collaboration in software development.
FitNesse enables customers, testers, and programmers to learn what their software should do, and to automatically compare that to what it actually does do. It compares customers’ expectations to actual results.
It’s an invaluable way to collaborate on complicated problems (and get them right) early in development”
Well righto! thats right and its also correct, so what is it?
Well its this diagram and this is the truth:
So what is it? (Those who remember Cat in Red Dwarf a cult tv comedy classic )
In one sentence:
Its a wiki, that enables a BA to put in expected outputs given inputs, which plugs into an easily codable Java adaptor designed to plug the values into your system. (ah why didn’t you say so)
What do you need?
Developers willing to code adaptor classes that populate your business objects/services using setters and getters.
BA’s willing to use the wiki, and learn its own little language syntax.
Setup
Overall it was quite straightforwards to setup, I found the options were not amazingly intuitive but after a while I got the hang of it, and its nice to see the green filling in the boxes to show your adaptor (fixture) class is discovered and tests passed.
What is Cucumber and Groovy?
Well seems a little simpler from the outset but it has no wiki. The idea is:
1: Describe behaviour in plain text
2: Write a step definition in Ruby
3: Run and watch it fail
4. Write code to make the step pass
5. Run again and see the step pass
6. Repeat 2-5 until green like a cuke
7. Repeat 1-6 until the money runs out
Ah looks good except for the Ruby bit because I have Groovy, and that took long enough to get working. Good news comes in the form of cuke4duke which gets Cucumber to work with Groovy.
Fortunately the guy who did it had some examples underneath the tutorial (Aslak Hellesoy) and I was eventually able to piece together some command line prompt uses from elsewhere on the net.
So what is Cucumber and Groovy in my words?
Cucumber involves a form of structured english language in the form of a scenario or set of scenarios.
eg:
Feature: BMI Calculator Feature
In order to ensure that my BMI calculator
As a Moderately Overweight Developer
I want to run a cucumber test find out if it works or sucks
Scenario: Robert thorough
Given I have entered Robert as a name
And I have entered 5 in feet
And I have entered 9 in inches
And I have entered 190 in pounds
When I call calculateBMIService
Then the stored result should be 28.1
And the stones should be 13 Stones
Groovy then receives these instructions and using regex sneakily uses the JVM (without compilation need) to test the assertions.
eg.
Before() {
input = new com.rob.calculators.BMICalculatorInput();
output = new com.rob.calculators.BMICalculatorOutput();
bmiCalculator = new com.rob.calculators.BMICalculator();
}
Given(~"I have entered (.*) as a name") { String name ->
input.setName(name)
}
Setup
I found it a little trickier and slightly frustrating to setup in terms of command line stuff, but I eventually got there, configuration is the bane of me so this is where I am most likely to get frustrated and give up, but after I got there it seemed to behave itself!
and thats it.
What do I prefer? hmm JUnit, maybe thats because I am willing to sit with a BA/Tester/Person and write the unit tests so theres a bit of affinity bias there
I actually like them both, but I would say that Cucumber may edge it, for the domain language used will help slightly more in delivering business value, but I would expect both of these to evolve over the coming months and couple of years to something where both are better than either of them now. The only thing that put me off about the domain language of FitNesse was the use of “Fixtures”, quite obvious when you know but not when you don’t, remember its about selling this to those who are new to the product. If they had said the slightly more wordy “Custom Static Adaptor” then as a Java guy I’d know about it, and as it in my case is written in Java then thats the right domain terminology. They could have written “Custom Glue Code”, and I’d have had a better idea too, the name itself made me think that its another domain specific language with nuances I need to learn.
These are great great tools, made by extremely intelligent people (far more than myself) but often they dont have the time to sell it / package it / sugar coat it into something that will be found easy by all those invovled in using it, and by that I am talking business and BA’s.
Its one thing creating an expert tool/concept/idea, but if you can explain with examples in a really simple manner then it makes the job easier for people who come across the tool (who may not have fantastic communication/selling skills) who want to adopt agile and are also trying to sell to their bosses so they can get top down buy in.
In balance now I know them a little more I’d be comfortable with using them both, in fact I would try them both rather than reccomend one of them, each project team has a slightly different domain, and remember we are into writing really good software, whatever tool works best we use. If the company is “wiki-mad” and the requirements are less wordy and more calculative and the Java developers very enthusiastic then there is no reason FitNesse wont work well. If you already use Groovy it may be a mistake to go towards FitNesse, but still try both and see! Experiment!
轉載別人的文章註明了出處:http://blog.agile78.co.uk/?p=171
相關文章
- Windows建立Cucumber和Ruby測試環境Windows
- [原創]Fitnesse測試工具介紹及安裝
- 自動化測試工具Cucumber的簡單介紹,入門篇!
- Cucumber是如何工作的?
- Cucumber讀書筆記筆記
- 透過 Cucumber 學習 BDD
- 行為驅動開發在 Python 開發測試中的應用Python
- "測試"驅動開發
- 談“測試驅動的開發”
- 【敏捷開發】驅動測試開發敏捷
- 測試驅動開發(TDD)的思考
- 是否使用TDD(測試驅動開發)進行UI開發UI
- 小議測試驅動開發
- 行為驅動開發iOSiOS
- 基於測試驅動的iOS開發iOS
- 面向 C++ 的測試驅動開發C++
- Laravel 測試驅動開發 -- 正向單元測試Laravel
- TDD(測試驅動開發)死了嗎?
- 你這不是測試驅動開發
- 變異測試是測試驅動開發(TDD)的演變
- 使用Spring Boot REST API進行測試驅動開發Spring BootRESTAPI
- 測試驅動開發(TDD)例項演示
- 測試驅動開發到底好不好
- 測試開發之單元測試-禪道結合ZTF驅動單元測試執行
- 行為驅動開發(BDD)如何與領域驅動設計(DDD)結合?
- 測試驅動開發(TDD)實戰心得 - DeniMoka
- 測試驅動開發(TDD)跟敏捷開發有衝突敏捷
- 測試驅動開發在專案中的實踐
- 基於Python的測試驅動開發實戰Python
- 測試驅動的Rails開發系列之二——實體AI
- 拒絕測試驅動開發(TDD)的10個理由
- 測試驅動開發上的五大錯誤
- 行為驅動開發學習心得(一)
- Swift 進階開發指南:如何使用 Quick、Nimble 執行測試驅動開發(TDD)SwiftUI
- 測試驅動開發(TDD)總結——原理篇
- Kent Beck 的《測試驅動開發》(TDD) Money示例Ruby版
- 使用IdleTest進行TDD單元測試驅動開發演練(2)
- 使用IdleTest進行TDD單元測試驅動開發演練(1)