21
Buzzwords! or what is this agile thing anyway…

What is this agile thing anyway

Embed Size (px)

Citation preview

Buzzwords! or what is this agile thing anyway…

Waterfall

Problems• communication

• quality

• performance

• functionality

• development speed

Agile

The agile manifesto (2001)

• Individuals and interactions over processes and tools

• Working software over comprehensive documentation

• Customer collaboration over contract negotiation

• Responding to change over following a plan

Core agile concepts• Short Iterations (2 weeks on average)

• Plan only for next iteration

• Code released at end of every iteration

• Customer feedback at end of every iteration

• Change allowed!

XP• Pair programming

• Shared code ownership

• TDD

• YAGNI or the simplest thing that could possibly work

• Design/architecture only as needed

• Write stories on index cards

• A story is a placeholder for a conversation

Scrum• Scrum Master enforces scrum rules

• Product Owner maintains product backlog

• Sprint (iteration by another name)

• Sprint planning meeting - estimate stories & commit to stories for iteration

• Planning poker

• Daily standup

• End-of-sprint retrospective

Kanban/Lean

• Good for reactive teams

• Work is a stream not an iteration

• Blockers block - stop the line

• Remove bottlenecks to speed up flow

Unit tests

• Test method in isolation

• Mock or stub dependencies as appropriate

• Easy to isolate errors

• Use lots of these, they should be quick

example unit test

(fact "worn treasure is worn" (def treasure {:id 1 :type "wearable" :name "hat"}) (def player {:id 1 :name "bob" :treasure [treasure]}) (treasure-worn? player treasure) => true (provided (models/worn-treasure-by-player-id 1) => [treasure] ) )

Integration/Acceptance Tests

• Test integration of all parts of system

• Typically through interacting with a web browser

• hard to isolate errors

• slow to run - use less of these

example integration test it ‘successful login' do

@driver.get 'http://the-internet.herokuapp.com/login'

@driver.find_element(id: 'username').send_keys('username')

@driver.find_element(id: 'password').send_keys('password')

@driver.find_element(id: 'login').submit

@driver.find_element(css: '.flash.success').displayed?.should be_true

end

tdd• write tests first

• build system so it is testable

• you know you are done when your tests pass

• can refactor with confidence

• much harder to add tests later

Continuous Integration

• Automated tests run on checkin

• Mixture of unit and integration tests

• Ensures new functionality doesn’t conflict with existing functionality

• If break build - all checkins stop until problem fixed

bdd

bdd

• test behaviour first

• then add unit tests

• you know you are done when all your tests pass

Cucumber example• Background:

• Given I have chosen some items to buy

• And I am about to enter my credit card details

• Scenario: Credit card number too short

• When I enter a card number that's only 15 digits long

• And all the other details are correct

• And I submit the form

• Then the form should be redisplayed

• And I should see a message advising me of the correct number of digits

ddd• Read this book! Domain Driven Design by Eric Evans

(2004)

• Architecture of code should reflect domain

• Domain language = customer language

• Articles and pixies not controllers and services

• Bounded context

• Context map

devops

• Read this book! The Phoenix Project by Gene Kim, Kevin Behr & George Spafford

• Communication

• Shared goals between dev & ops

• Shared ownership

Questions?