46
Scaffolding a legacy app with BDD scenarios using SpecFlow/Cucumber HUSTEF 2016, Budapest 24/10/2016 Gáspár Nagy coach • trainer • bdd addict • creator of specflow @gasparnagy • [email protected]

Scaffolding a legacy app with BDD scenarios using SpecFlow/Cucumber (HUSTEF 2016, Budapest, 24/10/2016)

Embed Size (px)

Citation preview

Scaffolding a legacy app with BDD scenarios using SpecFlow/Cucumber

HUSTEF 2016, Budapest24/10/2016

Gáspár Nagycoach • trainer • bdd addict • creator of specflow @gasparnagy • [email protected]

Copyright © Gaspar Nagy

bdd addict

given.when.then

CAUTION!

bddaddict.com

on the stage

Copyright © Gaspar Nagy

What is BDD?

Copyright © Gaspar Nagy

[HttpPost]public ActionResult Answer(int answer){

TriviaEntities db = new TriviaEntities();var question = db.FindQuestion(CurrentQuestion);

if (question.Type == QuestionType.Easy){

db.AddScore(question, user, 10);}else{

db.AddScore(question, user, 50);}

var model = new GameModel{ Score = db.GetScore(question, user) };

return View(model);}

implement

feedback

Classic model

Copyright © Gaspar Nagy

Scenario: Correct easy answer scores 10

Given I register a team

When I submit a correct easy answer

Then my score should be 10

CollaborationAutomation with

Cucumber/SpecFlow

BDD Process

Copyright © Gaspar Nagy

Test Driven Development

Failing test Make it pass

Make it clean

Copyright © Gaspar Nagy

TDD Cycle

Red Green

Refactor

Copyright © Gaspar Nagy

How can I apply this to legacy apps?

Copyright © Gaspar Nagy

Working with a legacy app is like renovating a house…

Renovation can be challenging…

Source: http://kadarkocka.blogspot.com/2011_08_01_archive.html

Copyright © Gaspar Nagy

My Story

The project was delivered in cooperation with TechTalk (www.techtalk.at)

It was modern…

Source: http://irodahaz.info

Complex domain…

106 failing (integration?) tests

Copyright © Gaspar Nagy

… and other challenges

• 17 GB test database

• 46 projects

• 300k lines of code

• >2 minutes build time

Copyright © Gaspar Nagy

What can I do with this?

Copyright © Gaspar Nagy

Source: Wikipedia

Copyright © Gaspar Nagy

The first change request

Deployment –Workflow

Change request

Source: http://irodahaz.info

We need to replace

that window up

there!

Copyright © Gaspar Nagy

0. Get the infrastructure ready

We need a healthy local dev and CI environment!

• Make a dummy test and get it running!

• Ignore/skip/delete unstable tests

• Setup the desired testing model (e.g. SpecFlow)

• Test core dependencies (e.g. “When I do something with the database”)

Get the infrastructure ready

Source: http://hfsaustralia.com.au/storage.html

Copyright © Gaspar Nagy

1. Capture current behavior

• Based on the way it was demoed to you

• Do not worry about automation

• Do not worry about details

• Do not worry about exact phrasing

Copyright © Gaspar Nagy

TDD Cycle

Red Green

Refactor

Copyright © Gaspar Nagy

1. Capture current behaviorRed

Copyright © Gaspar Nagy

2. Automate “Then” steps

• Feel free to hard-wire concrete data (IDs)!

Red

Copyright © Gaspar Nagy

3. Automate “When” with hard-wired data

• We have something to start with!

• (But its obviously nasty with “2347599”)

Green

Copyright © Gaspar Nagy

We’ve got a scaffolding!

Source: Wikipedia

Copyright © Gaspar Nagy

We need to get rid of the hard-wired data!

1

2

3

4

5

8

9

#6

7

Remove a bit of scaffolding

4. Pick off a bite!

1

2

3

4

5

8

9

#6

7

Aut

#

#’

Copyright © Gaspar Nagy

4. Pick off a biteRefactor

Copyright © Gaspar Nagy

Copyright © Gaspar Nagy

We have scaffolded our application for implementing this feature!

Copyright © Gaspar Nagy

5. Describe the new featureRed

Copyright © Gaspar Nagy

6. Automate and implement it

• You can even forget that your are maintaining a legacy app here…

Green

Copyright © Gaspar Nagy

7. Pick low hanging fruits

• We have developed an automation interface for a part of the application

• Can we use it to cover other usual cases?

Copyright © Gaspar Nagy

Red Green

Refactor

Copyright © Gaspar Nagy

Summary: The first change request

• We addressed the system through a new feature

• Ensured that the test infrastructure works

• Scaffolded the app with a test for the current behavior using hard wired data

• Refactored the automation to eliminate some parts of these data – taken apart a bit of the scaffolding

• Described and implemented the new feature

• Used the automation infrastructure for further tests

Copyright © Gaspar Nagy

The strategy also works for bugs

1. Capture current behavior

2. Describe bug as a scenario

3. Fix the bug

Copyright © Gaspar Nagy

Working on a legacy app does not mean that you cannot apply BDD process.

The scenarios can guide you to discover more and more from the application!

As you learn more, the scaffolding can be removed…

Copyright © Gaspar Nagy

Happy maintenance!

Gáspár Nagycoach • trainer • bdd addict • creator of specflow

@gasparnagy • [email protected]

Thank you!

bddaddict.com