flexing your agile muscle - agile technical concepts explained

64
Agile Technical Practices Sandy Mamoli @smamol www.nomad8.com

Upload: sandy-mamoli

Post on 18-Nov-2014

4.940 views

Category:

Technology


0 download

DESCRIPTION

Continuous integration, acceptance test driven development (ATDD), specification by example and continuous deployment: The list of have-to-know concepts is growing and you have this nagging feeling that you should really get started so you won’t miss out on the fun. Learn what basic Agile technical concepts mean, understand how you can benefit from using them and get ideas for how you might get started. Also, you will be able to explain to your boss or project manager why Agile technical concepts are well worth the investment. This session will keep things on a strictly conceptual level - so whether you’re a developer or an interested manager please come along.

TRANSCRIPT

Page 1: Flexing your Agile Muscle - Agile Technical Concepts Explained

Agile Technical Practices

Sandy Mamoli

@smamolwww.nomad8.com

Page 2: Flexing your Agile Muscle - Agile Technical Concepts Explained

unit testingacceptance testing

continuous integration

load testingrefactoring

TDD

pair programming

user stories

whole team

collective code ownership

coding standards

Page 3: Flexing your Agile Muscle - Agile Technical Concepts Explained

Quality

• Overview of Agile

• Agile Acceptance Testing

• Deployment pipeline (CI)

Page 4: Flexing your Agile Muscle - Agile Technical Concepts Explained

Agile

Page 5: Flexing your Agile Muscle - Agile Technical Concepts Explained

What is Agile?

• Software development framework

• Based on adaptive planning

• Used since 1995 (Scrum)

Page 6: Flexing your Agile Muscle - Agile Technical Concepts Explained
Page 7: Flexing your Agile Muscle - Agile Technical Concepts Explained

Responding to change

In Changed Form

Not Wanted Anymore

As Defined

In Changed Form Not Wanted Anymore As Defined

Features: 6 months

Standish  Group,  Chaos  Report

Page 8: Flexing your Agile Muscle - Agile Technical Concepts Explained

How does it work?

Page 9: Flexing your Agile Muscle - Agile Technical Concepts Explained

Incrementing one bit at a time

51 2 3 4

© Jeff Patton, all rights reserved, www.AgileProductDesign.com

Page 10: Flexing your Agile Muscle - Agile Technical Concepts Explained

Vertical slices - feedback & innovation

© Johnathan Rasmussen, The Agile Samurai

Page 11: Flexing your Agile Muscle - Agile Technical Concepts Explained

Working, shippable software

Page 12: Flexing your Agile Muscle - Agile Technical Concepts Explained

Build important things first

Page 13: Flexing your Agile Muscle - Agile Technical Concepts Explained

Technical excellence

Page 14: Flexing your Agile Muscle - Agile Technical Concepts Explained

Continuous improvement

Page 15: Flexing your Agile Muscle - Agile Technical Concepts Explained

Agile Quality

Page 16: Flexing your Agile Muscle - Agile Technical Concepts Explained

Cost of bugs

Page 17: Flexing your Agile Muscle - Agile Technical Concepts Explained

0

37.5

75.0

112.5

150.0

A more scientific way of saying this ...

1x 5x 10x20x

50x

>150

Reqs Design Code DevT AccT OpsSource: Standish Group

Page 18: Flexing your Agile Muscle - Agile Technical Concepts Explained

Agile Testing Quadrants

Agile Acceptance TestFunctional TestStory Test

Unit Tests

Page 19: Flexing your Agile Muscle - Agile Technical Concepts Explained

The dev’s view

unit testing

acceptance testing

exploratory testing

Page 20: Flexing your Agile Muscle - Agile Technical Concepts Explained

User Stories

Page 21: Flexing your Agile Muscle - Agile Technical Concepts Explained

“incrementing” builds one bit at a time

51 2 3 4

© Jeff Patton, all rights reserved, www.AgileProductDesign.com

Page 22: Flexing your Agile Muscle - Agile Technical Concepts Explained

Story&ID:&

Descrip/on:

photographerAs&a&...

I&want&to&...

So&that&...make some photo albums private

I can have a backup of my personalphotos online

Priority:

Size:

high

13

Photo album privacy

Page 23: Flexing your Agile Muscle - Agile Technical Concepts Explained

Acceptance(Criteria

1. I can set the privacy of photo albums2. I can see my private albums3. My private albums are not visible to others

Page 24: Flexing your Agile Muscle - Agile Technical Concepts Explained

Agile Acceptance Testing

Page 25: Flexing your Agile Muscle - Agile Technical Concepts Explained

Agile Testing Quadrants

Agile Acceptance TestFunctional TestStory Test

Unit Tests

Page 26: Flexing your Agile Muscle - Agile Technical Concepts Explained

Acceptance tests

• Check that the implementation matches the intent

• Focus on shared understanding by developers, testers and business people

• End to end

Page 27: Flexing your Agile Muscle - Agile Technical Concepts Explained

Scenarios

• Create a new private album

• Make a public album private

• Make a private album public

<vertical slices through the acceptance criteria>

Page 28: Flexing your Agile Muscle - Agile Technical Concepts Explained

Examples

Given I create an album named “My holiday”

When I choose to make it private

Then I can see the album “My holiday”

But Kai cannot see the album

Page 29: Flexing your Agile Muscle - Agile Technical Concepts Explained

Examples

Given ... <something we accept to be true>

When ...<indicates the event in a scenario>

Then ...<indicates the expected outcome>

Page 30: Flexing your Agile Muscle - Agile Technical Concepts Explained
Page 31: Flexing your Agile Muscle - Agile Technical Concepts Explained
Page 32: Flexing your Agile Muscle - Agile Technical Concepts Explained

<Melomel API>

Page 33: Flexing your Agile Muscle - Agile Technical Concepts Explained

Cucumber

• Features

• Scenarios

• Steps

• Cucumber command

Page 34: Flexing your Agile Muscle - Agile Technical Concepts Explained
Page 35: Flexing your Agile Muscle - Agile Technical Concepts Explained

cucumber: example

Page 36: Flexing your Agile Muscle - Agile Technical Concepts Explained

Featurescucumber: example

Page 37: Flexing your Agile Muscle - Agile Technical Concepts Explained

Scenarioscucumber: example

Page 38: Flexing your Agile Muscle - Agile Technical Concepts Explained

Stepscucumber: example

Page 39: Flexing your Agile Muscle - Agile Technical Concepts Explained

Cucumber commandcucumber: example

Page 40: Flexing your Agile Muscle - Agile Technical Concepts Explained

Cucumber commandcucumber: example

Page 41: Flexing your Agile Muscle - Agile Technical Concepts Explained

Cucumber commandcucumber: example

Page 42: Flexing your Agile Muscle - Agile Technical Concepts Explained

Good practices

• Hide unnecessary detail

• Make tests independent

• Don’t test absolutely everything

Page 43: Flexing your Agile Muscle - Agile Technical Concepts Explained

Scenario: transfer money (imperative)  Given I have $100 in checking

  And I have $20 in savings

  When I go to the transfer form

  And I select "Checking" from "Source Account"

  And I select "Savings" from "Target Account"

  And I fill in "Amount" with "15"  And I press "Execute Transfer"  Then I should see that I have $85 in checking  And I should see that I have $35 in savings

Declarative vs. imperative style

Page 44: Flexing your Agile Muscle - Agile Technical Concepts Explained

Declarative vs. imperative style

Scenario: transfer money (declarative)  Given I have $100 in checking  And I have $20 in savings  When I transfer $15 from checking to savings  Then I should have $85 in checking 

Page 45: Flexing your Agile Muscle - Agile Technical Concepts Explained

Make tests independent

• Maintenance

• Where did it fail?

• Parallelise

Page 46: Flexing your Agile Muscle - Agile Technical Concepts Explained

Don’t test absolutely everything

Unit Tests

Acceptance Tests

GUI Tests

Page 47: Flexing your Agile Muscle - Agile Technical Concepts Explained

Why I like ATDD

• Ensures the intent is well understood

• Ensures the implementation matches the intent

• Ensures the implementation keeps matching the intent

Page 48: Flexing your Agile Muscle - Agile Technical Concepts Explained

Living documentation

Page 49: Flexing your Agile Muscle - Agile Technical Concepts Explained

Unit testing

Page 50: Flexing your Agile Muscle - Agile Technical Concepts Explained

Agile Testing Quadrants

Agile Acceptance TestFunctional TestStory Test

Unit Tests

Page 51: Flexing your Agile Muscle - Agile Technical Concepts Explained

Unit tests

• Check that the program behaves as the developer thinks it should

• Tend to be focussed on the structural (internal) quality of the code

• Hard for testers and business people to understand

Page 52: Flexing your Agile Muscle - Agile Technical Concepts Explained

• FlexUnit

• MXUnit

Unit tests/TDD

Page 53: Flexing your Agile Muscle - Agile Technical Concepts Explained

Deployment Pipeline

Page 54: Flexing your Agile Muscle - Agile Technical Concepts Explained

Agile Testing Quadrants

Agile Acceptance TestFunctional TestStory Test

Unit Tests

Page 55: Flexing your Agile Muscle - Agile Technical Concepts Explained

As often as possible to get early and instant feedback

Page 56: Flexing your Agile Muscle - Agile Technical Concepts Explained

Deployment pipeline

Deployment pipeline: Jez Humble, www.continuousdelivery.com

Page 57: Flexing your Agile Muscle - Agile Technical Concepts Explained

Agile deployment pipeline

Deployment pipeline: Jez Humble, www.continuousdelivery.com

Page 58: Flexing your Agile Muscle - Agile Technical Concepts Explained

• Create deployable artifacts

• Or fail fast and notify the team

• Triggered by CI server

• 5 minutes or less to run

• Jenkins, TeamCity, etc

Deployment pipeline: Commit stage

Page 59: Flexing your Agile Muscle - Agile Technical Concepts Explained

Continuous integration is a practice not a tool

• Commit regularly (at least once a day)

• Fix any broken build immediately

• Write automated tests

Page 60: Flexing your Agile Muscle - Agile Technical Concepts Explained

• Verify acceptance criteria have been met

• Verify business value

• Run in parallel

• Refactor

Deployment pipeline: Acceptance test stage

Page 61: Flexing your Agile Muscle - Agile Technical Concepts Explained

How to get started

• Create a walking skeleton with placeholders

• Automate the build and deploy process

• Automate unit tests and code analysis

• Automate acceptance tests

• Evolve the pipeline

Page 62: Flexing your Agile Muscle - Agile Technical Concepts Explained

Recommended reading

++

Page 63: Flexing your Agile Muscle - Agile Technical Concepts Explained

Call to action

• Work on Melomel & Cucumber

• Participate in CI projects (Jenkins)

• Steal from Ruby on Rails :-)

Page 64: Flexing your Agile Muscle - Agile Technical Concepts Explained

Contact meSandy Mamoli

@[email protected]