Extract from Ken Schawber, Project Management with scrum, 2004:
“Common sense is a combination of experience, training, humility, wit, and intelligence. People employing Scrum apply common sense every time they find the work is veering off the
path leading to the desired results. Yet most of us are so used to using prescriptive processes—those that say “do this, then do that, and then do this”—that we have learned to
disregard our common sense and instead await instructions.”
Agile does not scale -> Applying common sense does not scale
Agile does not work for fixed cost projects -> Applying common sense does not work for fixed cost projects
Agile is not for complex projects -> Applying common sense is not for complex projects
Agile is not for junior members -> Applying common sense is not for junior members
Agile is prescriptive -> Applying common sense is prescriptive
Agile does not apply to all projects -> Applying common sense does not apply to all projects
I’ll bring some more… Just a start…
Sometimes, not everything can be automated. So how can you optimise your manual regression testing so the test suite can be run quickly and is easy to maintain? I have used the tips below and it is turning out to be very effective!
- Make your tests UI independant:
Exemple: instead of *click on the button “Save” to save your data*, write *Save your data*. This is a minute difference with a big impact: if you change the title of the button or change from a button to a drop down list, the second test is still valid, the first one is invalid.
Testing requires common sense and intelligence: having your tests UI independant means you need to get your brain work a bit more on the first time you run the test, the second time it gets faster and the third time, you just know what to do.
Also, tests are simpler to read and far easier to maintain!
- Make your tests business focused:
Because of the history in your company, tests might be written with lots of details such as “The pop-up should open” but this is pointless as the pop-up exists because there is business workfow behind so by writing tests that represent business workflows, the test will fail if the pop-up does not open even if you don’t check explicitly this is the case.
- Combine tests that are similar and find the path that tests most cases:
Let’s say you have 2 tests testing these 4 cases:
- A -> B -> C
- B-> C ->D
- Can’t you have a test that does A->B->C->D?
- And if you write a new test: B->D->E then why not having only A->B->C->D->E?
- Use consistent way of writting tests:
One way is to use the Given/When/Then pattern:
- (Given) some context
- (When) some action is carried out
- (Then) a particular set of observable consequences should obtain
- Add as many verfications as possible with the tests:
The purpose of the tests is to find defects if any so add as many verification as possible including verifying impact on data and other screens.
Conclusion: I have used the tips above, based on BDD principals for most, and this has been very effective: we can run more tests, validate more cases and still have not that many tests to run that are easy to maintain. Indirectly, your tests could be now automated quite easily!
For the last 3 years, implementing scrum or just being agile, I have had lots of concerns reg. test strategies issued by test managers for my projects: I felt they did not take into account the specifics of the product and they turned into copy/paste test plans of previous projects.
Since we are talking about delivering working software, as a project manager/scrum master, I started writing the test strategies, approaches and test plans with support of the scrum teams for my projects. I got slightly lucky because before that I had read some books about testing inc. “Agile Testing” by Lisa Crispin and one about ISQTB so about testing and certification and some articles, especially Mike Cohn’s Forgotten Layer of the Test Automation Pyramid. Testing is now a interesting discipline thanks to numerous clever tools and techniques like BDD.
My whole goal was to make sure the test strategy and its implementation were tailored to the project and was fit-for-purpose for the project. There is a learning curve for the team to come up with the test strategy: writing a good test strategy requires thinking, lots of discussions and an understanding of what the product is as well as a knowledge of different tools and techniques.
A test strategy, like design, is “intentional yet emergent” to quote Mike Cohn: you may have to adapt it based on the lessons learned in the first sprints.
So , testing with all activities emcompassed under this name, should be part of the remit of responsibilities of the scrum teams! You build it, you test it and you run it!
- Rename “agile” to “common sense”
- What matters is the quality of the team…
- Go for simplicity, make it a habit
- Get trained but not by anybody
- Not everybody can be agile in the timeframe of your project
- Do completeness from the first user story
- Software test strategy: make it the responsibility of the team
- Rename “Scrum Master” to “Scrum facilitator”
- Think big, start very small
- Use ideas and concepts that provide a holistic approach
- Mono-tasking: art of getting things done
- Learn, learn and learn
1. Rename “agile” to “common sense”
•“Agile cannot apply to all projects!” becomes: “Common sense does not apply to all projects”… “Could you repeat that?”
•“Agile is just a fad” becomes “Common sense is just a fad!”… “Oups! Is it?”
“Agile” may not be the right word, so use a more meaningful word ?
2. “What really matter is the quality of the team
•… The rest is just an optimisation”
•Having worked for a great team using waterfall, we just became agile because:
–They were Highly Skilled engineers
–They were Quality-focused
–They had Common sense
Fundamentally, this is all about the quality of team
3. Go for simplicity, make it a habit
•People like the abstract world, mainly because it feels better: “Wow, you are doing complicated stuff!”
–Use examples, models, rewrite and rethink until you have captured the essence of business needs
•Good user stories are more than “As a … I want … so that…” but they are a still a good conversation!
–If you don’t understand something, this “something” might be your problem soon
–Dare aim for simplicity and be very concrete (use examples)
Simplicity is an art
4. Get trained but not by anybody
•Agile is about not compromising on Quality so get the right trainers i.e. aim for the best!
•Mike Cohn and Ken Rubin are very good
Quality in each and every aspect!
5. Not everybody can be agile in the timeframe of your project
•“Common sense is anything but common”: you have to acknowledge some people will be obstacles so if this is your project, better out of your way that in your way!
Agile is not for everybody, be tough!
6. Do completeness from the first user story
•Your Definition of Done is the key success of your project
•So make sure that even for the first user story, you have tackled your non-functional requirements
–Add tests to measure performance, data quality, load testing etc
Is your first story really, really shippable if you had to ship it?
7. Software test strategy: make it the responsibility of the team
Mainly because of historical reasons, software design and software development are the responsibility of the dev team and software testing of the test team headed by a test manager who is the person to come up with the test strategy, although test engineers are now part of the scrum team.
With new techniques and tools are appearing (e.g. BDD), new ideas or ideas are evolving (see testing quadrants by Lisa Crispin or the Forgotten Layer of the Test Automation Pyramid by Mike Cohn, “test engineering” requires a tailored approach to your project including a good understanding of the product, the requirements (user stories) and the design (taking testing into consideration when designing your product helps get a better design): and who is most capable to provide that approach? Yes, the team! As design is emergent, testing is too.
Tailor your test strategy: make it the responsibility of the team, they will provide the right one!
8. Rename “Scrum Master” to “Scrum team facilitator”
•I understand scrum master is the master of the scrum process/framework but some people really only hear “Master”
•The scrum master is a team facilitator: find the people who have facilitating skills to be your scrum masters!
Look for facilitators to help your teams!
9. Thing big, start very small
•Always keep the big picture in mind and implement small user stories first
•Engineers always under estimate the effort so ask them to do the simplest thing that can work and help them do it well
Really, don’t hesitate to do less and do it well
10. Use ideas and concepts that provide a holistic approach
•User stories, BDD et DDD have lots in common:
–Based on conversation
–Reflect business inputs
–Supplement each other
•All together provides a cohesive approach
Holistic approach = coherent people
11. Mono-tasking: art of getting things done
•Too often, engineers get involved in doing too many things at once
•Limit work in progress (WIP) in your « in progress » column of tasks
Mono-tasking is great discipline
12. Learn, learn, learn
•New concepts are coming along, BDD, DDD, FDD etc: don’t be afraid: behind these concepts, there are simple ideas
•Learning new things and once you have passed the learning curve will motivate you!
Nobody was born an agile coach…
In a nutshell , Apply common sense and use simplification to drive change!
User stories express (business) needs through a conversation and a confirmation, stored on a card
The conversation allows to the team to understand what the (business) domain is, naturally defining a common language: this helps provide a software design that reflects the business domain: DDD, Domain Design Driven.
The confirmation could include (lots of) examples that validate business needs. These acceptance criteria will be needed by the PO for approval and for building a customer test suite (UAT): BDD, Behaviour Driven Development.
In a nutshell, when we discuss user stories (requirements), we build a language and contexts. Instead of reinventing the wheel, we match our design of the solution and the tests to this language and contexts – simple!
This picture below aims to summarise “interaction” between User stories, DDD and BBD.