Traditional approaches to quality and risk management involve quality gates, change control boards, feature freeze and code freeze milestones, and independent QA or Test groups. These approaches stabilize quality at by sacrificing agility.
Yet buggy fragile code is even more dangerous for Agile teams where so much is changing so often. Quality and risk management are critically important for agility.
This leads to the inevitable question: if the traditional approaches to quality and risk management don't work in an Agile context, what does?
Practices vary across organizations, but all successful teams emphasize the same underlying principles of fast feedback, high visibility, collaboration, and alignment. This talk examines various approaches Agile teams have taken to increase quality, mitigate risk, and ultimately ensure they are delivering the highest possible value for their stakeholders.
3. Quality Attributes (“…ilities”)
Internal
makes software
development more
predictable & efficient
Maintainability
Reusability
Portability
Integrity
Consistency
Testability
Modifiability
External
improves the value of the
software to an external
customer or user
Dependability
Reliability
Security
Usability
Accessibility
Scalability
Performance
ElisabethHendrickson@testobsessed
4. Risks Distilled
Costs too much time or money
Fails to deliver needed value
Causes loss
ElisabethHendrickson@testobsessed
5. Four Big Factors in Risk
Ambiguity
Dependencies
Assumptions
Capacity
ElisabethHendrickson@testobsessed
7. What Agility Looks Like
Frequent delivery of value
At a sustainable pace
While adapting to the
changing needs of the
business
ElisabethHendrickson@testobsessed
16. Practice: Test First
Test Driven
Development
(TDD)
Acceptance Test
Driven
Development
(ATDD)
Behavior Driven
Development
(BDD)
ElisabethHendrickson@testobsessed
23. Version All Technical Assets *WITH* the Code
Unit Tests
Production
Code
Source Control Repository
(Plus All
other
technical
assets)
Test
“Fixture”
Code
Acceptance
Tests
ElisabethHendrickson@testobsessed
24. Tested is Part of Done
Tested =
+
Checked Explored
ElisabethHendrickson@testobsessed
25. Practice: Exploratory Testing
Simultaneously…
learning about the software
while designing tests
and executing them as micro-experiments
using observations from the last test to
inform the next
all in a session guided by a charter
ElisabethHendrickson@testobsessed
26. Exploratory Charters
Explore < feature, interaction, etc. >
With < resources, constraints, etc. >
To discover < information >
ElisabethHendrickson@testobsessed
27. Bugs
Requirements
Practice: Single Stream of Work
Backlog
Story
Story
Story
Story
Story
Story
Story
Story
Story
Story
THIS
NOT THIS
ElisabethHendrickson@testobsessed
28. Feedback Loops
Local Unit Tests Secs-
Mins
Mins
CI Build
Mins-
Hrs
System Regression
Hrs-
Days
Exploratory Testing
ElisabethHendrickson@testobsessed
29. Tighten Feedback Loops (Example)
Code
Review
Check in
on Private
Branch
Unit Test
Merge Unit Test
System
Test
System
Test in
Local Env
Check into
Master
Run local
tests
CI Runs All
Tests
Pair
BEFORE: days - weeks
AFTER: mins - hours
ElisabethHendrickson@testobsessed
30. Four Big Factors in Risk
Ambiguity
Dependencies
Assumptions
Capacity
ElisabethHendrickson@testobsessed
Define Acceptance Criteria for Stories. Test First.
Integrate Continuously. Tighten Feedback Loops.
Deliver Frequently. Create Visibility.
Collaborate. Have a Single Stream of Work. Work to Done.
31. Agile Mitigates Risks
Costs too much time or money
Fails to deliver needed value
Causes loss
Fail Fast.
Deliver Frequently.
Explore. Learn. Iterate.
ElisabethHendrickson@testobsessed