Testers and Coders - Blurring the Lines

Preview:

Citation preview

TESTERS AND CODERS:BLURRING THE LINES

Noam KfirConsultant & Trainernoam@kfir.cc | http://noam.kfir.cc | @NoamKfir

NOAM KFIR• Consultant and Trainer

• Telerik Developer Expert• Ranorex Professional• ISTQB Reviewer• Agile Practitioners Meetup Co-

organizer

• Specialize in test automation forboth testers and coders• Ranorex, Selenium…• TDD, BDD, Unit & Integration Testing…• JavaScript, C#…

TESTERS AND CODERSMUST LEARN FROM EACH OTHER

BULWORTH

a little warning about language

BUT WHY?

Mutual respect

Effective Collaborati

onQuality

MANIFESTO FOR AGILE SOFTWARE DEVELOPMENT

We are uncovering better ways of developingsoftware by doing it and helping others do it.Through this work we have come to value:

Individuals and interactions over processes and tools

Working software over comprehensive documentation

Customer collaboration over contract negotiationResponding to change over following a plan

That is, while there is value in the items onthe right, we value the items on the left more.

http://agilemanifesto.org/

AGILE PROGRAMINĖS ĮRANGOS KŪRIMO MANIFESTAS

Kurdami programinę įrangą ir padėdami ją kurti kitiems,mes randame geresnius būdus tai daryti.

Dirbdami mes vertiname:

Žmones ir jų bendravimą labiau nei procesus ir įrankiusVeikiančią programinę įrangą labiau nei išsamią

dokumentacijąBendradarbiavimą su klientu labiau nei derybas dėl

kontraktųReagavimą į pokyčius labiau nei plano vykdymą

Be abejo, teiginiai dešinėje svarbūs,tačiau mes labiau vertiname teiginius kairėje.

http://agilemanifesto.org/iso/lt/manifesto.html

PRINCIPLES BEHIND THE AGILE MANIFESTO

1. Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

2. Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.

3. Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.

4. Business people and developers must work together daily throughout the project.

5. Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.

6. The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.

7. Working software is the primary measure of progress.

8. Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

9. Continuous attention to technical excellence and good design enhances agility.

10. Simplicity--the art of maximizing the amount of work not done--is essential.

11. The best architectures, requirements, and designs emerge from self-organizing teams.

12. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.http://agilemanifesto.org/principles.html

QUALITY

WE’RE MISSING SOMETHING…

Why do we need Agile to begin with?

QUALITY

satisfy the

customer

working software

technical

excellence

good design

simplicity …

ROLES & RESPONSIBILITIES

WE’RE MISSING SOMETHING ELSE…

It’s a bit more subtle…

ROLES & RESPONSIBILITIES

we customers

business people

developers

individuals teams sponsor

s users

THE CHICKEN AND THE PIG

A Pig and a Chicken are walking down the road.

Chicken: Hey Pig, I was thinking we should open a restaurant!Pig: Hm, maybe, what would we call it?Chicken: How about 'ham-n-eggs'?

Pig: No thanks. I'd be committed, but you'd only be involved.

https://en.wikipedia.org/wiki/The_Chicken_and_the_Pig

WE ARE ALL DEVELOPERS

Programmers

(Coders)

Quality Profession

als(Testers)

Designers

Architects Product Managers

Support😎

DEVELOPERS == PROGRAMMERS

• Everybody else is just support• Reflected in culture, salaries, work

conditions, growth potential, personal relations, etc.

• Do you participate in every important meeting: spec, planning, daily…?

• Fight entrenched perceptions• Do not use “developers” as an eponym

TAKE DOWN THE WALL

•Between coding and testing teams•And within cross-functional teams

• Focus on “individuals and interactions” and “face-to-face conversations”• Be kind, insistent and professional, not aggressive

• The organization is a facilitator for change• Responsible for culture, work conditions, personal mindsets, involvement…• Change your place of work…

DISSONANCE PARADIGMS

THE ANNOYING BUGGER PARADIGM

• Testers seen as incompetent

• Unexpected environments and configurations considered improper usage

• Trivial issues considered pedantic, annoying, critical or even insulting

• Testers faulted for “no repros” – their inability to reproduce bugs

• Testers considered solely responsible for bugsAnnoying

Buggerincompet

ent

THE OUT IN THE COLD PARADIGM

• Testers generally seen as nonessential

• Not “builders”, so can’t contribute much• Can never reach full coverage, so collaboration considered wasteful• Insightful feedback reported as defects often ignored• Testing seen as mundane and repetitive, lacking creativity

• Often unappreciated and regarded as insignificant and unskilledOut in

the Cold

nonessential

THE NECESSARY EVIL PARADIGM

• Testers seen as gatekeepers, a safety net, a necessary evil• Often seen as the last line of defense, and become the only line of

defense

• Responsible for the impossible feat of catching every bug before it gets to production… and inevitably ruins the company

• Sign-offs may entail repercussions

• Don’t want them, but can’t live without them…

Necessary Evil

lone gatekee

per

PARADIGM SHIFTS

ANNOYING BUGGER REVISITED

• Testers accepted as quality experts

• Bugs reported and evaluated by consensus• The team tracks down “no repros” together

• Testers share authority and collaborate with coders and other team members

Annoying

Buggerincompet

entquality expert

OUT IN THE COLD REVISITED

• Testers accepted as active collaborators

• Quality perspective expected in every meeting• Feedback given face-to-face• Prioritized coverage preferred to full coverage as system evolves• Reliance on automation and tooling grows

• Testing recognized as creative, challenging and essentialOut in the Cold

nonessential

active collaborat

or

NECESSARY EVIL REVISITED

• Testers accepted as full-fledged team members

• Testers are no longer lone gatekeepers• The “last link” in the chain no longer blamed for everybody else’s

failures• Everybody takes responsibility together

• Safety net provided by proper planning, tools and collaboration• Automation and reflection replace sign-offs and repercussions

Necessary Evil

lone gatekee

perteam

member

TESTERS ARE DEVELOPERS

Annoying

Buggerincompet

entquality expert

Out in the Cold

nonessential

active collaborat

or

Necessary Evil

lone gatekeep

erteam

member

EVOLUTION

Agile testing is finally catching up with Agile programming

CONVERGING ROLES

Coders are writing testsTesters are writing code

MANY PARALLELS AND SIMILARITIES

• Reliance on tests• Iterative work patterns• Focus on preventing regressions• Verifying correctness• …

• Solving problems• Creativity• Satisfaction

NOT ENOUGH SHARING

• Coders and testers both have rich tomes of knowledge• Each has its own culture, educational material, best practices,

heroes, career paths, tools, humor…

• They are slowly converging, but not benefitting from each other’s maturity

INEFFECTIVE CONVERGENCE

Coders are writing poor testsTesters are writing poor code

CODERS MUST IMPROVE THEIR TESTING SKILLS

SOME SYMPTOMS

Overlapping tests

Wholes in coverage

Only one or two types

of test

Missing boundary

value tests

Unhandled exceptions

Swallowed exceptions No repros

Consistent difficulty

debugging

Obvious use cases untested

All tests in one file

Legacy code black

holes

High cyclomatic complexity

TESTING SKILLS

Boundary analysis and equivalence partitioningTest design techniquesExploratory testingAssessing risk and prioritizing tests

TESTERS MUST IMPROVE THEIR CODING SKILLS

SOME SYMPTOMS

Scripts Magic strings

Buggy test code

Unreadable code

Not reusable

Purely imperative

Parameterless

functionsOne test machine

Different languages

Lack of structure

Require interventio

nNo

modularity

CODING SKILLS

Apply SOLID principles and design patternsRefactor (safely!)Write atomic, resilient maintainable testsBe lazy (in a good way…)

EL IMINATEPROGRAMMERS

ANDTESTERS

We need a

voluntaryfree-spiritedopen-endedprogram of

procreative racial deconstructionMetaphorically…

DECONSTRUCTING CULTURE

Take down the wallAll pigs are developersBreak the dissonance paradigms• quality experts, active collaborators,

team members

DECONSTRUCTING COLLABORATION

Motivate individuals to take ownership of expertise• Let individuals self-select areas of expertiseBuild up cross-functional and self-organizing teamsEncourage face-to-face conversations

DECONSTRUCTING SKILLS

Train all developers together• On an ongoing basisShare knowledge and skills across professional boundaries• Teach the rudiments of each role to all developers

Encourage pairing as needed• To solve problems and to train

QUALITYIS A SHARED RESPONSIBILITY!

SpecializationCollaboration

Common ground

QUESTIONS?

Testers and Coders: Blurring the Lines

Noam KfirConsultant & Trainernoam@kfir.cc | http://noam.kfir.cc | @NoamKfir