31
St. Louis Code Camp May 6 th , 2005 Achieving Customer Zen with Fitnesse and .NET Cory Foy http:// www.cornetdesign.com Fitnesse and .NET Achieving Customer Zen With Fitnesse

Cory Foy St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

Embed Size (px)

Citation preview

Page 1: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2005

Achieving Customer Zen with Fitnesse and .NET Cory Foyhttp://www.cornetdesign.com

Fitnesse and .NET

Achieving Customer Zen With Fitnesse

Page 2: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

Overview

• The problem with customers…

• Figuring out what customers want

• Executable Specifications

• How Fitnesse can help

• Fitnesse Demos

• Wrap-up

Page 3: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

The Customer Problem

If we don’t take care of the customers, maybe they’ll stop bugging us

Page 4: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

The Customer Problem

• Customers aren’t developers

• Developers aren’t (usually) customers

• Customers don’t know what they want until they see it

Page 5: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

What Customers Want

• How do we show customers what they want?– In a way they can understand– In a way that elicits immediate feedback– In a way that allows them to explore– Without building entire system

Page 6: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

What Customers Want

• Mock-Ups– Screen grabs– Sketches on paper or whiteboard– Visio Diagrams– Good for initial discussions– Allows customer to explore in some fashion– Hard to keep up with the latest state of the

system

Page 7: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

What Customers Want

• Prototyping– Make a throw away version– Allows customer interaction at a more

concrete level– More expensive than mock-ups– Customers may not understand difference

between prototype and real system– May be hard to keep up with the real system

Page 8: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

What Customers Want

• Frequent Releases– Shows customer what is finished– Shows customer the current state of the

system– Hard for customer to explore with– Customer has to wait for release to play with

new version– Customer can only explore GUI elements

Page 9: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

What Customers Want

• Need something between prototype and actual release

• Ties domain concepts to code• Proves when feature is done – in a

repeatable fashion• Customer-centric and developer friendly• Ties as closely as possible to the real

system

Page 10: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

Executable Specifications

• A way of modeling specifications in a way that allows them to be executed to prove the system meets the spec

• Abstract State Model– Any algorithm can be modeled at its natural

abstraction level by an appropriate ASM– By being able to run the model, you can

validate the algorithm

Page 11: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

Executable Specifications

• The appropriate abstraction level for business problems is usually a business (or domain) specific language

• By allowing the domain language to be executable, users get fast feedback

• Domain concepts can be translated directly into code

Page 12: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

How Fitnesse Helps

• Which is clearer?• This?

[Test]public void CreateRoomAddsRoomToRoomList(){ Assert.AreEqual(0, chatApp.AvailableRooms.Count); chatApp.CreateRoom(“aRoom”, “aUser”); Assert.AreEqual(1, chatApp.AvailableRooms.Count); Room room = chatApp.AvailableRooms.GetRoomByName(“aRoom”); Assert.AreEqual(1, room.UserCount); Assert.IsTrue(room.Users.Contains(“aUser”));}

Page 13: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

How Fitnesse Helps

• Or this?

user enters username of John

user enters room name of Basketball

user presses Create

list of rooms

room name user count user list

Basketball 1 John

Page 14: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

How Fitnesse Helps

• So what is this magical Fitnesse?– Two pieces

• FIT (Framework for Integration Tests)• Fitnesse

– Allows specifications to be written in HTML, Excel or Wiki format

– Can use any language underneath (runners for .NET, Java, Python, Ruby and others)

Page 15: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

How Fitnesse Helps

• Fitnesse– Uses Wiki format– Allows collaborative efforts between

customers and developers– Is about communication first, testing second– Easy to use syntax– Straightforward to hook to the system being

tested

Page 16: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

How Fitnesse Helps

• Different Types of Tables– ColumnFixture– RowFixture– DoFixture– ActionFixture– Custom Fixtures– Many others

Page 17: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

How Fitnesse Helps

• Helps solve 3 major problems– Communication– Agility– Balance

• Side effect benefits– Regression tests– Domain concepts exposed

Page 18: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

Chat Application Demo

• Chat Application– Customer wants a simple chat application

where users can create rooms and join existing ones

– Specifications are being captured into Fitnesse fixtures and hooked to the system under test

Page 19: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

Chat Application Demo

• Specification ExampleChatTests.Application

start ChatTests.Application

list of rooms

room name user count user list

user enters username of John

user enters room name of Basketball

user presses Create

list of rooms

room name user count user list

Basketball 1 John

Page 20: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

Chat Application Demo

• Customer found a hole in the specification by writing Fitnesse tests

• When the last user leaves, the room should be deleted

Page 21: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

Chat Application Demo

• Because the domain concepts are translated into code, the developers can quickly write the corresponding unit test

Page 22: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

Chat Application Demo

• And then get the unit test to pass by writing the code

Page 23: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

Chat Application Demo

• And because Fitnesse ties into the system under test, we can see our change meets the specification immediately

Page 24: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

Business Rules Demo

• The table based nature of Fitnesse is excellent for communicating Business Rules

• If you can capture the concepts in a table form, you can write it in Fitnesse

Page 25: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

Business Rules Demo

• Business Holidays– Different businesses have different days which

they may count as holidays– Interfacing with them may mean having to

know what holiday applies to what business– Sounds like a good Fitnesse test!

Page 26: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

Business Rules Demo

• Fitnesse Test and Code

Page 27: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

Business Rules Demo

• Shipping Charges– Online store with shopping cart– Shipping Charges are based on order

amounts– Customers get free shipping if they are over a

set amount, or if they have preferred customer status

Page 28: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

Business Rules Demo

• We want an initial user list we can reuse throughout our tests

Page 29: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

Business Rules Demo

• Our other fixtures can now make use of our setup code

Page 30: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

Wrap-up

• Focus on using Fitnesse to communicate with your customers first

• Then use Fitnesse as a regression testing tool

• Having Fitnesse tests shouldn’t be an excuse not to write unit tests

Page 31: Cory Foy  St. Louis Code Camp May 6 th, 2005 Achieving Customer Zen with Fitnesse and.NET Fitnesse and.NET Achieving Customer

St. Louis Code CampMay 6th, 2006

Achieving Customer Zen with Fitnesse and .NET

Cory Foy ([email protected])http://www.cornetdesign.com

Wrap-up

• Fitnesse Resources– Fit for Developing Software by Rick Mugridge

and Ward Cunningham– Fitnesse website (http://www.fitnesse.org)– Fitnesse mailing list (

http://groups.yahoo.com/group/fitnesse)– Fitnesse tutorials (http://

www.cornetdesign.com)