My journey
as a developer
Or how I learnt to release high quality software frequently
1
Fast coding
2
Feeling proud!
3
No automated tests
4
Lots of manual testing
“Software and cathedrals are much the
same – we first build them, then we
pray.”
- Samuel T. Redwine, Jr.
5
No confidence in the releases
6
A fair few bugs
7
No regression suite
8
Maintenance was a nightmare
“Don’t use hands to do things that can
be efficiently done by the computer.”
– Tom Duff
9
Enter unit testing!
10
Code first
11
If manual testing is hard and time
consuming, automate it!
Code first is hard
12
Adding tests after the code is
implemented without unit testing in
mind is hard!
Test first works better
13
What’s this TDD everyone talks about?
No TDD
14
So much better
15
• Easier to write unit tests
• A lot less manual testing
• Faster releases
• Easier maintenance
There were still a few bugs!
16
Tdd: not a silver bullet
17
Unit tests cover a lot of things; but a lot
of bugs happen in interaction between
units.
Integration Testing
to the rescue
18
Test a few things together
19
If the bug is in interactions, test the units
together
Caught a lot of bugs
20
And the automation was a lot tighter
There were still UI related bugs!
21
Automated UI Testing
22
Test it end to end
23
Automated UI tests run through
everything end to end!
Demo – UI Automation
24
But now business can’t read my test cases
25
No manual testing means
No test cases which means
Hard to verify behavior by the business which
means
Programmers could write the wrong thing
Self testing code: no silver bullet
26
• You misunderstand the requirements
• You write the wrong test
• You write the wrong code to pass the wrong
test
• You have a green test suite
• But you’ve implemented the wrong thing
“The most important single aspect of
software development is to be clear
about what you are trying to build.”
– Bjarne Stroustrup
27
BDD to the rescue
28
Behavior Driven Development
29
bridges the communication gap
Behavior Driven Development Benefits
30
• Getting verification from BAs
• Automated regression suite defined by BAs
• Always up-to-date software requirements
• YAGNI
Demo – BDD
31
Acceptance Test Driven Development
32
BDD + UI Automation => AWESOME
But this is so slow to run. I’m bored!!
33
Enter
Continuous Integration
34
Continuous Integration
35
• Integrate the code frequently
• Build the code on each commit
• Run the fast tests on each commit
• Run the slow tests on schedules
CI Rules
36
• Fixing red CI is the highest priority
• If you break the build, you do push
ups
• No one pulls from a red build
• No one pushes to a red build
“If it hurts, do it more frequently, and
bring the pain forward.”
– Jez Humble
37
Enter
Continuous Delivery
38
Push to production continuously
39
If everything is tested and verified
properly, then you can push it to
production at any time!
Demo – CI & CD
40
It feels good
41
And the guys who wanted my tests to fail
42
THANK YOU
Mehdi Khalili
Senior Consultant @ ThoughtWorks
www.mehdi-khalili.com
@MehdiKhalili

My journey as a developer

Editor's Notes

  • #17 TDD haters loved it
  • #28 Wife to programmer husband: “Dear, please, go to the nearby grocery store to buy some bread. Also, if they have eggs, buy 6.” Husband: “O.K. hun.” Twenty minutes later the husband comes back bringing 6 loaves of bread. Wife: “Dear, why on earth did you buy 6 loaves of bread?” Husband: “They had eggs.”
  • #38 Wife to programmer husband: “Dear, please, go to the nearby grocery store to buy some bread. Also, if they have eggs, buy 6.” Husband: “O.K. hun.” Twenty minutes later the husband comes back bringing 6 loaves of bread. Wife: “Dear, why on earth did you buy 6 loaves of bread?” Husband: “They had eggs.”