What is this agile thing anyway

21
Buzzwords! or what is this agile thing anyway…

Transcript of What is this agile thing anyway

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?