Webinar on Mode Agile: Making Static Content a Thing of PAST
What is this agile thing anyway
-
Upload
lisa-van-gelder -
Category
Software
-
view
114 -
download
1
Transcript of What is this agile thing anyway
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
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