SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Downloaden Sie, um offline zu lesen
5 WAYS TO
REVOLUTIONIZE
YOUR SOFTWARE
TESTING
By Dr. James Whittaker
uring serious ship mode time, people often lose sight of the big picture
and concentrate solely on the day-to-day details of finding and resolving
bugs. Always being one to buck such trends, I’ve come up for air and am
offering five insights that will revolutionize the way you test and, I hope, make
your team more effective.
INSIGHT 1 •• There are two types of code and they require different types of
testing
INSIGHT 2 •• Take your testing down a level from features to capabilities
INSIGHT 3 •• Take your testing up a level from test cases to techniques
INSIGHT 4 •• Improving development is your top priority
INSIGHT 5 •• Testing without innovation is a great way to lose talent
REVOLUTIONIZE YOUR QA
D
INTRODUCTION01
INSIGHT 102
THERE ARE TWO TYPES OF CODE
AND THEY REQUIRE DIFFERENT
TYPES OF TESTING
Screws and nails: two types of fasteners that carpenters
use to bond pieces of wood. A carpenter who uses a
hammer on a screw wouldn’t last long as a professional
furniture maker. A hammer drives a nail and a
screwdriver a screw. A good carpenter knows when to
wield the right tool.
But what is simple for the carpenter is commonly a
problem for the software tester. To demonstrate, here’s
a note I received from a friend (who works for another
company):
INSIGHT 103
“I was just in test review yesterday and they were seeing
diminishing returns on functional automation testing.
They were experiencing an inflection point where
the bugs are now mostly about behavioral problems
and integration with other systems. Their tests were
becoming less useful and [it was] harder to investigate
the failures. My guess was that the only way to solve
this was heavy instrumentation (that could produce an
intelligent bug report based on a hell of a lot of state/
historical context).”
Inflection point indeed. I’ve seen
this same inflection point on a
number of products here. When
automation stops finding bugs, the
tempting conclusion is that quality
is high. Clearly, my friend above
didn’t make that mistake. Too much
faith in automation is one of the
problems I believe we suffered from
with Windows Vista. The automation
stopped finding bugs and we took
that as good news.
Even if it is good news, it is only good for part of your code. For the
other part, it’s useless. This brings me to the point of this section:
there are two types of code in every product and the testing concerns,
methods and practices are different for each of them.
The first type of code is what I call experience code. It’s the code that
implements the functionality that attracted users to the application
in the first place. It provides the user with the experience** they are
seeking. For a word processor, it is the code that allows a user to
type, format and print a document. For an email application, it’s the
code that allows reading, replying and managing of messages. For a
mobile phone, it’s the ability to make and receive calls. For my own
product in Visual Studio, it’s the code that allows testers to write,
manipulate and execute test cases.
** This is often referred to as end-user behavior,
functionality, features and so forth but I think experience
is the best encapsulating term. Feel free to think of it in
these other terms if you find them more to your liking.
INSIGHT 104
INSIGHT 1
The second type of code is infrastructure
code, that is, the code that makes software
run on its intended platform (cloud,
desktop, phone, etc.) and interoperate with
various devices, peripherals, languages and
fonts. It is all the input and output code,
memory, file system, network, runtime and
glue code that makes all the moving parts
work together.
For my Visual Studio product, it is the
connection to the Team Foundation Server
that stores test cases, project data and
the various Data Collectors that extract
information from the environment where
the ‘app under’ test is executed.
05
This is code that a human user generally does not see, as it executes
invisibly and only announces its presence when it fails. Infrastructure
code can’t generally be executed directly by a user. Rather, it responds
to changing environmental situations, stress, failure, load and so
forth. Thus, its testing is tailor made to be automated.
If my friend is trying to find user experience bugs, then I’d suggest
ignoring the automation altogether and putting some manual testers
on the case. Business logic bugs require putting eyes on screens and
fingers on keyboards, and what I like to call a brain-in-the-loop.
In short, automation is simply overmatched by the human tester when
it comes to analyzing subtle behaviors and judging user experience.
WE MUST UNDERSTAND THE DIFFERENCE
BETWEEN EXPERIENCE CODE AND
INFRASTRUCTURE CODE AND USE THE
RIGHT TECHNIQUE FOR THE JOB. LIKE THE
CARPENTER, WE MUST USE THE RIGHT TOOL
FOR THE RIGHT JOB.
BOTTOM
LINE
INSIGHT 2
TAKE YOUR TESTING DOWN A LEVEL
FROM FEATURES TO CAPABILITIES
Once you pick the right way to test, my
second insight will help you get more out
of your actual testing. One of my pet peeves
is so-called feature testing. Features are far
too high-level to act as good testing goals,
yet so often a testing task is partitioned by
feature. Assign a feature to a tester, rinse
and repeat.
There’s a lot of risk in testing features in
isolation. We need to be more proactive
about decomposing a feature into
something more useful and understanding
how outside influences affect that feature.
I push teams to take testing to a lower level and concentrate
on what I call capabilities. At Microsoft we do an exercise called
Component-Feature-Capability Analysis to accomplish this. The
purpose is to understand more precisely the testable capabilities
of a feature and to identify important interfaces where features
interact with each other and external components. Once these
are understood, then testing becomes the task of selecting
environment and input variations that cover the primary cases.
Here’s a snapshot outline of what Component-Feature-Capability
Analysis looks like for the product I am working on for Visual
Studio (continued on next page):
07
INSIGHT 208
MAIN SHELL
• CONTEXT (TFS) (red indicates an external dependency)
• Add a new TFS Server
• Connect to a TFS Server
• Delete a TFS Server
• OPEN ITEMS
• Verify that only savable activities show up here
• Verify that you can navigate to them
TESTING CENTER
• CONTENTS
• Add new static suites
• Add new query-based suites
• ...
• Refresh
• PROPERTIES (current test plan)
• Modify iterations
• Modify/create new manual test setting
• ...
• Modify start/end dates
• PLAN MANAGER
• Select a current test plan
• Create a new test plan
• ...
• Refresh test plan manager
TEST
• RUN TESTS
• Run all tests on a suite (automated and/or manual or mixed)
• Run tests with a specific environment chosen
Obviously, there’s a lot missing from this, as the use of
ellipses shows. This is also only a subset of our feature
set, but it gives you an idea of how the analysis is
performed:
1. List the components
2. Decompose components into features
3. Decompose the features into capabilities
4. Keep decomposing until the capabilities are simple
Our product is very feature rich (it’s a test case
management system for manual testing) and this
analysis took a total of about two hours during a three-
person brainstorm. The entire analysis document serves
as a guide to the manual tester or to the automation
writer to determine how to test each of the capabilities.
I have some suggestions about how to go about testing
these capabilities and that is the subject of the next
insight.
INSIGHT 209
TAKE YOUR TESTING UP A LEVEL
FROM TEST CASES TO TECHNIQUES
Test cases are a common unit of measurement in the
testing world. We count the number of them that we
run, and when we find a bug, we proudly present the
test case that we used to find it.
I hate it when we do that.
I think test cases – and most discussions about them –
are generally meaningless. I propose we talk in more
high-level terms about test techniques instead. For
example, when one of my testers finds a bug, they often
come to my office to demo it to me (I am a well-known
connoisseur of bugs and these demos are often reused
in lectures I give around campus).
Most of them have learned not to just
repro the bug by re-running the test
case. They know I am not interested
in the bug per se, but the context of
its exposure.
INSIGHT 310
These questions represent a higher level of discussion and
one we can learn something from. The test case itself lost
its value when it found the bug, but when we merge the test
case with its intent, context, strategy and the bug it found, we
have something that is far more than a single test case that
evokes a single point of failure.
We’ve created the basis for understanding why the test case
was successful and we’ve implied any number of additional
test cases that could be derived from this one successful
instance.
At Microsoft, we have begun using the concept of test tours
as a way to categorize test techniques. This is an even higher
level discussion and we are working on documenting the tours
and creating experience reports based on their use within the
company.
Stay tuned for more information on this effort.
INSIGHT 311
THESE ARE THE TYPE OF QUESTIONS I LIKE TO ASK
DURING BUG DEMOS:
• What made you think of this particular test case?
• What was your goal when you ran that test case?
• Did you notice anything interesting while running the test
case that changed what you were doing?
• At what point did you know you had found a bug?
IMPROVING DEVELOPMENT IS YOUR
TOP PRIORITY
I had a lunch conversation recently with a test trainer at
Microsoft who encourages testers to get more involved
in development. He cited cases where testers would
recognize weakness in code and suggest new design
patterns or code constructs. Both myself and our other
lunch partner (also a tester) were skeptical.
Testers are hired to test, not to develop, and most teams
I’ve worked with both inside and especially outside of
Microsoft would see such behavior as meddling. So, if
testers aren’t contributing directly to the code, then are
we simply bug finders whose value is determined by
what we take out of the software?
Well that is certainly one purpose
of testing: to find and remove bugs,
but there is a broader purpose too.
It is our task to use testing as an
instrument of improvement.
This is where the techniques and tours
discussed in the prior section can help.
By raising the level of abstraction
in our primary test artifact, we can
use this to create new avenues of
communication with development.
In my group we regularly review test
strategy, techniques and tours with
developers. It’s our way of showing
them what their code will face once
we get a hold of it
INSIGHT 412
Of course, their natural reaction is to write their code so it won’t
be susceptible to these attacks. Through such discussions, they
often help us think of new ways to test. The discussion becomes
one that makes them better developers and us better testers.
We have to work harder in the sense that the tests we would
have run won’t find any bugs (because the developers have
anticipated our tests) but this is work I am willing to invest in
any day!
This is the true job of a tester: to make developers and
development better. We don’t ensure better software – we
enable developers to build better software. It isn’t about finding
bugs, because the improvement caused is temporal.
The true measure of a great tester is that they find bugs, analyze
them thoroughly, report them skillfully and end up creating a
development team that understands the gaps in their own skill
and knowledge.
ON THE PERCEIVED ROLE OF TESTING
“This is the true job of a tester: to make
developers and development better. We don’t
ensure better software – we enable developers
to build better software.”
INSIGHT 413
The end result will be developer improvement and that will
reduce the number of bugs and increase their productivity in
ways that far exceeds simple bug removal.
This is a key point. It’s software developers who build software
and if we’re just finding bugs and assisting their removal, no
real lasting value is created. If we take our job seriously enough
we’ll ensure the way we go about it creates real and lasting
improvement.
Making developers better, helping them understand failures
and the factors that cause them will mean fewer bugs to find in
the future. Testers are quality gurus and that means teaching
those responsible for anti-quality what they are doing wrong
and where they could improve.
The immortal words of Tony Hoare ring very true:
“The real value of tests is not that they detect bugs in the code,
but that they detect inadequacies in the methods, concentration
and skill of those who design and produce the code.”
He said this in 1996. Clearly, he was way ahead of his time.
INSIGHT 414
ON THE REAL ROLE OF TESTERS
THIS IS THE TRUE JOB OF A TESTER: TO MAKE
DEVELOPERS AND DEVELOPMENT BETTER. WE
DON’T ENSURE BETTER SOFTWARE - WE ENABLE
DEVELOPERS TO BUILD BETTER SOFTWARE
“
TESTING WITHOUT INNOVATION
IS A GREAT WAY TO LOSE TALENT
Testing sucks. Now let me qualify that statement:
Running test cases over and over – in the hope that
bugs will manifest – sucks. It’s boring, uncreative work.
And since half the world thinks that is all testing is
about, it is no great wonder few people covet testing
positions! Testing is either too tedious and repetitive or
its downright too hard. Either way, who would want to
stay in such a position?
What is interesting about testing is strategy, deciding
what to test and how to combine multiple features
and environmental considerations in a single test. The
tactical part of testing, actually running test cases and
logging bugs, is the least interesting part.
Smart test managers and test
directors need to recognize this and
ensure that every tester splits their
time between strategy and tactics.
Take the tedious and repetitive parts
of the testing process and automate
them. Tool development is a major
creative task at Microsoft and is well-
rewarded by the corporate culture.
INSIGHT 516
For the hard parts of the testing process, like deciding what to test
and determining test completeness, user scenarios and so forth,
we have another creative and interesting task. Testers who spend
time categorizing tests and developing strategy (the interesting
part) are more focused on testing and thus spend less time running
tests (the boring part).
Testing is an immature science. There are a lot of insights that a
thinking person can make without inordinate effort. By ensuring
that testers have the time to take a step back from their testing
effort and find insights that will improve their testing, teams will
benefit. Not only are such insights liable to improve the overall
quality of the test, but the creative time will improve the morale
of the testers involved.
INSIGHT 517
James A. Whittaker, now a Technical Evangelist at Microsoft, has spent his
career in software testing. He was an early thought leader in model-based
testing, where his PhD dissertation from the University of Tennessee became
a standard reference on the subject. While a professor at Florida Tech, he
founded the world’s largest academic software testing research center and
helped make testing a degree track for undergraduates.
Before he left Florida Tech, his research group had grown to over 60 students
and faculty and had secured over $12 million in research awards and contracts.
During his tenure at FIT he wrote How to Break Software and the series
follow-ups How to Break Software Security (with Hugh Thompson) and How
to Break Web Software (with Mike Andrews). His research team also developed
the highly acclaimed runtime fault injection tool Holodeck and marketed it
through their startup Security Innovation, Inc.
Dr. Whittaker currently works at Microsoft and dreams of a future in which
software just works.
ABOUT JAMES18
ABOUT JAMES WHITTAKER
ABOUT APPLAUSE19
ABOUT APPLAUSE
100 Pennsylvania Ave.
Framingham, MA 01701
1.844.500.5556
www.applause.com
Applause is leading the app quality revolution by
enabling companies to deliver digital experiences
that win – from web to mobile to wearables and
beyond. By combining in-the-wild testing services,
software tools and analytics, Applause helps
companies achieve the 360° app quality™ they need
to thrive in the modern apps economy. Thousands
of companies – including Google, Fox, Amazon, Box,
Concur and Runkeeper – choose Applause to launch
apps that delight their users.
Applause in-the-wild testing services span the app
lifecycle, including functional, test automation,
usability, localization, load and security.
Applause appqualitytools help companies stay connected
to their users and the health of their apps with Mobile
Beta Management, Applause Analytics, and the Applause
SDK.
The company is headquartered near Boston, with
offices in San Mateo, Seattle, Germany, Israel, Poland,
and the UK. Since launching as uTest in 2008, Applause
has raised more than $80 million in funding, generated
triple-digit revenue growth annually, made consecutive
Inc. 500 appearances and was named the 7th Most
Promising Company in America by Forbes in 2014.

Weitere ähnliche Inhalte

Was ist angesagt?

Software presentation
Software presentationSoftware presentation
Software presentationJennaPrengle
 
Engaging IV&V Testing Services for Agile Projects
Engaging IV&V Testing Services for Agile ProjectsEngaging IV&V Testing Services for Agile Projects
Engaging IV&V Testing Services for Agile ProjectsRavi Kumar
 
Unit Testing Guidelines
Unit Testing GuidelinesUnit Testing Guidelines
Unit Testing GuidelinesJoel Hooks
 
Exploratory testing
Exploratory testingExploratory testing
Exploratory testingHuib Schoots
 
Unit Testing And Mocking
Unit Testing And MockingUnit Testing And Mocking
Unit Testing And MockingJoe Wilson
 
An Introduction to Test Driven Development
An Introduction to Test Driven Development An Introduction to Test Driven Development
An Introduction to Test Driven Development CodeOps Technologies LLP
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven DevelopmentDhaval Dalal
 
Test driven development
Test driven developmentTest driven development
Test driven developmentNascenia IT
 
Testing Experience - Evolution of Test Automation Frameworks
Testing Experience - Evolution of Test Automation FrameworksTesting Experience - Evolution of Test Automation Frameworks
Testing Experience - Evolution of Test Automation FrameworksŁukasz Morawski
 
The Testing Planet Issue 4
The Testing Planet Issue 4The Testing Planet Issue 4
The Testing Planet Issue 4Rosie Sherry
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven DevelopmentMireia Sangalo
 
Jason Olson - Test What You've Built
Jason Olson - Test What You've BuiltJason Olson - Test What You've Built
Jason Olson - Test What You've BuiltJohn Zozzaro
 
Design for Testability: A Tutorial for Devs and Testers
Design for Testability: A Tutorial for Devs and TestersDesign for Testability: A Tutorial for Devs and Testers
Design for Testability: A Tutorial for Devs and TestersTechWell
 
Test driven development
Test driven developmentTest driven development
Test driven developmentnamkha87
 
iOS Test-Driven Development
iOS Test-Driven DevelopmentiOS Test-Driven Development
iOS Test-Driven DevelopmentPablo Villar
 
Peter Zimmerer - Evolve Design For Testability To The Next Level - EuroSTAR 2012
Peter Zimmerer - Evolve Design For Testability To The Next Level - EuroSTAR 2012Peter Zimmerer - Evolve Design For Testability To The Next Level - EuroSTAR 2012
Peter Zimmerer - Evolve Design For Testability To The Next Level - EuroSTAR 2012TEST Huddle
 

Was ist angesagt? (20)

Software presentation
Software presentationSoftware presentation
Software presentation
 
Engaging IV&V Testing Services for Agile Projects
Engaging IV&V Testing Services for Agile ProjectsEngaging IV&V Testing Services for Agile Projects
Engaging IV&V Testing Services for Agile Projects
 
Unit Testing Guidelines
Unit Testing GuidelinesUnit Testing Guidelines
Unit Testing Guidelines
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Exploratory testing
Exploratory testingExploratory testing
Exploratory testing
 
Unit Testing And Mocking
Unit Testing And MockingUnit Testing And Mocking
Unit Testing And Mocking
 
nullcon 2011 - Fuzzing with Complexities
nullcon 2011 - Fuzzing with Complexitiesnullcon 2011 - Fuzzing with Complexities
nullcon 2011 - Fuzzing with Complexities
 
An Introduction to Test Driven Development
An Introduction to Test Driven Development An Introduction to Test Driven Development
An Introduction to Test Driven Development
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Testing Experience - Evolution of Test Automation Frameworks
Testing Experience - Evolution of Test Automation FrameworksTesting Experience - Evolution of Test Automation Frameworks
Testing Experience - Evolution of Test Automation Frameworks
 
The Testing Planet Issue 4
The Testing Planet Issue 4The Testing Planet Issue 4
The Testing Planet Issue 4
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Jason Olson - Test What You've Built
Jason Olson - Test What You've BuiltJason Olson - Test What You've Built
Jason Olson - Test What You've Built
 
TDD Best Practices
TDD Best PracticesTDD Best Practices
TDD Best Practices
 
Design for Testability: A Tutorial for Devs and Testers
Design for Testability: A Tutorial for Devs and TestersDesign for Testability: A Tutorial for Devs and Testers
Design for Testability: A Tutorial for Devs and Testers
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
iOS Test-Driven Development
iOS Test-Driven DevelopmentiOS Test-Driven Development
iOS Test-Driven Development
 
Peter Zimmerer - Evolve Design For Testability To The Next Level - EuroSTAR 2012
Peter Zimmerer - Evolve Design For Testability To The Next Level - EuroSTAR 2012Peter Zimmerer - Evolve Design For Testability To The Next Level - EuroSTAR 2012
Peter Zimmerer - Evolve Design For Testability To The Next Level - EuroSTAR 2012
 
QTP/UFT latest interview questions 2014
QTP/UFT latest interview questions 2014QTP/UFT latest interview questions 2014
QTP/UFT latest interview questions 2014
 

Andere mochten auch (12)

1968 tlaltelolco
1968 tlaltelolco1968 tlaltelolco
1968 tlaltelolco
 
Trabajo final integración tic un recorrido de ideas por distintos campos del ...
Trabajo final integración tic un recorrido de ideas por distintos campos del ...Trabajo final integración tic un recorrido de ideas por distintos campos del ...
Trabajo final integración tic un recorrido de ideas por distintos campos del ...
 
Integración TIC: "Un recorrido de ideas por distintos lados del saber"
Integración TIC: "Un recorrido de ideas por distintos lados del saber"Integración TIC: "Un recorrido de ideas por distintos lados del saber"
Integración TIC: "Un recorrido de ideas por distintos lados del saber"
 
Matematika
MatematikaMatematika
Matematika
 
Test
TestTest
Test
 
BIODATA_2_2-2015
BIODATA_2_2-2015BIODATA_2_2-2015
BIODATA_2_2-2015
 
Jpmc
JpmcJpmc
Jpmc
 
Ergonomia informatica1
Ergonomia informatica1Ergonomia informatica1
Ergonomia informatica1
 
H θεωρία της πολλαπλής νοημοσύνης
H θεωρία της πολλαπλής νοημοσύνηςH θεωρία της πολλαπλής νοημοσύνης
H θεωρία της πολλαπλής νοημοσύνης
 
Unidades periféricas
Unidades periféricasUnidades periféricas
Unidades periféricas
 
Us patent cases weekly update may 10th may 17th 2016
Us patent cases weekly update  may 10th may 17th 2016Us patent cases weekly update  may 10th may 17th 2016
Us patent cases weekly update may 10th may 17th 2016
 
Relatório intenção de compras - Natal 2015
Relatório intenção de compras - Natal 2015Relatório intenção de compras - Natal 2015
Relatório intenção de compras - Natal 2015
 

Ähnlich wie 5-Ways-to-Revolutionize-Your-Software-Testing

assertYourself - Breaking the Theories and Assumptions of Unit Testing in Flex
assertYourself - Breaking the Theories and Assumptions of Unit Testing in FlexassertYourself - Breaking the Theories and Assumptions of Unit Testing in Flex
assertYourself - Breaking the Theories and Assumptions of Unit Testing in Flexmichael.labriola
 
Testing In Software Engineering
Testing In Software EngineeringTesting In Software Engineering
Testing In Software Engineeringkiansahafi
 
Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...
Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...
Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...Applitools
 
Agile Testing 20021015
Agile Testing 20021015Agile Testing 20021015
Agile Testing 20021015Raghu Karnati
 
I Smell A RAT- Rapid Application Testing
I Smell A RAT- Rapid Application TestingI Smell A RAT- Rapid Application Testing
I Smell A RAT- Rapid Application TestingPeter Presnell
 
Bridging the communication gap
Bridging the communication gapBridging the communication gap
Bridging the communication gapGuillagui San
 
Different Methodologies For Testing Web Application Testing
Different Methodologies For Testing Web Application TestingDifferent Methodologies For Testing Web Application Testing
Different Methodologies For Testing Web Application TestingRachel Davis
 
Unit testing
Unit testingUnit testing
Unit testingPiXeL16
 
Making the Unstable Stable - An Intro To Testing
Making the Unstable Stable - An Intro To TestingMaking the Unstable Stable - An Intro To Testing
Making the Unstable Stable - An Intro To TestingCameron Presley
 
Myths and reality about software testing
Myths and reality about software testingMyths and reality about software testing
Myths and reality about software testingAlisha Henderson
 
Testing & should i do it
Testing & should i do itTesting & should i do it
Testing & should i do itMartin Sykora
 

Ähnlich wie 5-Ways-to-Revolutionize-Your-Software-Testing (20)

assertYourself - Breaking the Theories and Assumptions of Unit Testing in Flex
assertYourself - Breaking the Theories and Assumptions of Unit Testing in FlexassertYourself - Breaking the Theories and Assumptions of Unit Testing in Flex
assertYourself - Breaking the Theories and Assumptions of Unit Testing in Flex
 
Testing In Software Engineering
Testing In Software EngineeringTesting In Software Engineering
Testing In Software Engineering
 
TDD Workshop UTN 2012
TDD Workshop UTN 2012TDD Workshop UTN 2012
TDD Workshop UTN 2012
 
manual interview q.pdf
manual interview q.pdfmanual interview q.pdf
manual interview q.pdf
 
Tdd dev session
Tdd dev sessionTdd dev session
Tdd dev session
 
Why test with flex unit
Why test with flex unitWhy test with flex unit
Why test with flex unit
 
Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...
Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...
Testing Hourglass at Jira Frontend - by Alexey Shpakov, Sr. Developer @ Atlas...
 
Agile Testing 20021015
Agile Testing 20021015Agile Testing 20021015
Agile Testing 20021015
 
I Smell A RAT- Rapid Application Testing
I Smell A RAT- Rapid Application TestingI Smell A RAT- Rapid Application Testing
I Smell A RAT- Rapid Application Testing
 
Bridging the communication gap
Bridging the communication gapBridging the communication gap
Bridging the communication gap
 
Why Unit Testingl
Why Unit TestinglWhy Unit Testingl
Why Unit Testingl
 
Why unit testingl
Why unit testinglWhy unit testingl
Why unit testingl
 
Why Unit Testingl
Why Unit TestinglWhy Unit Testingl
Why Unit Testingl
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Different Methodologies For Testing Web Application Testing
Different Methodologies For Testing Web Application TestingDifferent Methodologies For Testing Web Application Testing
Different Methodologies For Testing Web Application Testing
 
utplsql.pdf
utplsql.pdfutplsql.pdf
utplsql.pdf
 
Unit testing
Unit testingUnit testing
Unit testing
 
Making the Unstable Stable - An Intro To Testing
Making the Unstable Stable - An Intro To TestingMaking the Unstable Stable - An Intro To Testing
Making the Unstable Stable - An Intro To Testing
 
Myths and reality about software testing
Myths and reality about software testingMyths and reality about software testing
Myths and reality about software testing
 
Testing & should i do it
Testing & should i do itTesting & should i do it
Testing & should i do it
 

Mehr von Mary Clemons

ReportWriterCertification
ReportWriterCertificationReportWriterCertification
ReportWriterCertificationMary Clemons
 
Upgrading Expert Imaging
Upgrading Expert ImagingUpgrading Expert Imaging
Upgrading Expert ImagingMary Clemons
 
BasicScript Sample Explained
BasicScript Sample ExplainedBasicScript Sample Explained
BasicScript Sample ExplainedMary Clemons
 
Threshold Billing Script Without Video
Threshold Billing Script Without VideoThreshold Billing Script Without Video
Threshold Billing Script Without VideoMary Clemons
 
Expert Image Notes
Expert Image NotesExpert Image Notes
Expert Image NotesMary Clemons
 

Mehr von Mary Clemons (7)

SQL Issue
SQL IssueSQL Issue
SQL Issue
 
ReportWriterCertification
ReportWriterCertificationReportWriterCertification
ReportWriterCertification
 
Upgrading Expert Imaging
Upgrading Expert ImagingUpgrading Expert Imaging
Upgrading Expert Imaging
 
BasicScript Sample Explained
BasicScript Sample ExplainedBasicScript Sample Explained
BasicScript Sample Explained
 
Threshold Billing Script Without Video
Threshold Billing Script Without VideoThreshold Billing Script Without Video
Threshold Billing Script Without Video
 
Expert Image Notes
Expert Image NotesExpert Image Notes
Expert Image Notes
 
Word Curriculum
Word CurriculumWord Curriculum
Word Curriculum
 

5-Ways-to-Revolutionize-Your-Software-Testing

  • 1. 5 WAYS TO REVOLUTIONIZE YOUR SOFTWARE TESTING By Dr. James Whittaker
  • 2. uring serious ship mode time, people often lose sight of the big picture and concentrate solely on the day-to-day details of finding and resolving bugs. Always being one to buck such trends, I’ve come up for air and am offering five insights that will revolutionize the way you test and, I hope, make your team more effective. INSIGHT 1 •• There are two types of code and they require different types of testing INSIGHT 2 •• Take your testing down a level from features to capabilities INSIGHT 3 •• Take your testing up a level from test cases to techniques INSIGHT 4 •• Improving development is your top priority INSIGHT 5 •• Testing without innovation is a great way to lose talent REVOLUTIONIZE YOUR QA D INTRODUCTION01
  • 3. INSIGHT 102 THERE ARE TWO TYPES OF CODE AND THEY REQUIRE DIFFERENT TYPES OF TESTING Screws and nails: two types of fasteners that carpenters use to bond pieces of wood. A carpenter who uses a hammer on a screw wouldn’t last long as a professional furniture maker. A hammer drives a nail and a screwdriver a screw. A good carpenter knows when to wield the right tool. But what is simple for the carpenter is commonly a problem for the software tester. To demonstrate, here’s a note I received from a friend (who works for another company):
  • 4. INSIGHT 103 “I was just in test review yesterday and they were seeing diminishing returns on functional automation testing. They were experiencing an inflection point where the bugs are now mostly about behavioral problems and integration with other systems. Their tests were becoming less useful and [it was] harder to investigate the failures. My guess was that the only way to solve this was heavy instrumentation (that could produce an intelligent bug report based on a hell of a lot of state/ historical context).” Inflection point indeed. I’ve seen this same inflection point on a number of products here. When automation stops finding bugs, the tempting conclusion is that quality is high. Clearly, my friend above didn’t make that mistake. Too much faith in automation is one of the problems I believe we suffered from with Windows Vista. The automation stopped finding bugs and we took that as good news.
  • 5. Even if it is good news, it is only good for part of your code. For the other part, it’s useless. This brings me to the point of this section: there are two types of code in every product and the testing concerns, methods and practices are different for each of them. The first type of code is what I call experience code. It’s the code that implements the functionality that attracted users to the application in the first place. It provides the user with the experience** they are seeking. For a word processor, it is the code that allows a user to type, format and print a document. For an email application, it’s the code that allows reading, replying and managing of messages. For a mobile phone, it’s the ability to make and receive calls. For my own product in Visual Studio, it’s the code that allows testers to write, manipulate and execute test cases. ** This is often referred to as end-user behavior, functionality, features and so forth but I think experience is the best encapsulating term. Feel free to think of it in these other terms if you find them more to your liking. INSIGHT 104
  • 6. INSIGHT 1 The second type of code is infrastructure code, that is, the code that makes software run on its intended platform (cloud, desktop, phone, etc.) and interoperate with various devices, peripherals, languages and fonts. It is all the input and output code, memory, file system, network, runtime and glue code that makes all the moving parts work together. For my Visual Studio product, it is the connection to the Team Foundation Server that stores test cases, project data and the various Data Collectors that extract information from the environment where the ‘app under’ test is executed. 05 This is code that a human user generally does not see, as it executes invisibly and only announces its presence when it fails. Infrastructure code can’t generally be executed directly by a user. Rather, it responds to changing environmental situations, stress, failure, load and so forth. Thus, its testing is tailor made to be automated. If my friend is trying to find user experience bugs, then I’d suggest ignoring the automation altogether and putting some manual testers on the case. Business logic bugs require putting eyes on screens and fingers on keyboards, and what I like to call a brain-in-the-loop. In short, automation is simply overmatched by the human tester when it comes to analyzing subtle behaviors and judging user experience.
  • 7. WE MUST UNDERSTAND THE DIFFERENCE BETWEEN EXPERIENCE CODE AND INFRASTRUCTURE CODE AND USE THE RIGHT TECHNIQUE FOR THE JOB. LIKE THE CARPENTER, WE MUST USE THE RIGHT TOOL FOR THE RIGHT JOB. BOTTOM LINE
  • 8. INSIGHT 2 TAKE YOUR TESTING DOWN A LEVEL FROM FEATURES TO CAPABILITIES Once you pick the right way to test, my second insight will help you get more out of your actual testing. One of my pet peeves is so-called feature testing. Features are far too high-level to act as good testing goals, yet so often a testing task is partitioned by feature. Assign a feature to a tester, rinse and repeat. There’s a lot of risk in testing features in isolation. We need to be more proactive about decomposing a feature into something more useful and understanding how outside influences affect that feature. I push teams to take testing to a lower level and concentrate on what I call capabilities. At Microsoft we do an exercise called Component-Feature-Capability Analysis to accomplish this. The purpose is to understand more precisely the testable capabilities of a feature and to identify important interfaces where features interact with each other and external components. Once these are understood, then testing becomes the task of selecting environment and input variations that cover the primary cases. Here’s a snapshot outline of what Component-Feature-Capability Analysis looks like for the product I am working on for Visual Studio (continued on next page): 07
  • 9. INSIGHT 208 MAIN SHELL • CONTEXT (TFS) (red indicates an external dependency) • Add a new TFS Server • Connect to a TFS Server • Delete a TFS Server • OPEN ITEMS • Verify that only savable activities show up here • Verify that you can navigate to them TESTING CENTER • CONTENTS • Add new static suites • Add new query-based suites • ... • Refresh • PROPERTIES (current test plan) • Modify iterations • Modify/create new manual test setting • ... • Modify start/end dates • PLAN MANAGER • Select a current test plan • Create a new test plan • ... • Refresh test plan manager TEST • RUN TESTS • Run all tests on a suite (automated and/or manual or mixed) • Run tests with a specific environment chosen
  • 10. Obviously, there’s a lot missing from this, as the use of ellipses shows. This is also only a subset of our feature set, but it gives you an idea of how the analysis is performed: 1. List the components 2. Decompose components into features 3. Decompose the features into capabilities 4. Keep decomposing until the capabilities are simple Our product is very feature rich (it’s a test case management system for manual testing) and this analysis took a total of about two hours during a three- person brainstorm. The entire analysis document serves as a guide to the manual tester or to the automation writer to determine how to test each of the capabilities. I have some suggestions about how to go about testing these capabilities and that is the subject of the next insight. INSIGHT 209
  • 11. TAKE YOUR TESTING UP A LEVEL FROM TEST CASES TO TECHNIQUES Test cases are a common unit of measurement in the testing world. We count the number of them that we run, and when we find a bug, we proudly present the test case that we used to find it. I hate it when we do that. I think test cases – and most discussions about them – are generally meaningless. I propose we talk in more high-level terms about test techniques instead. For example, when one of my testers finds a bug, they often come to my office to demo it to me (I am a well-known connoisseur of bugs and these demos are often reused in lectures I give around campus). Most of them have learned not to just repro the bug by re-running the test case. They know I am not interested in the bug per se, but the context of its exposure. INSIGHT 310
  • 12. These questions represent a higher level of discussion and one we can learn something from. The test case itself lost its value when it found the bug, but when we merge the test case with its intent, context, strategy and the bug it found, we have something that is far more than a single test case that evokes a single point of failure. We’ve created the basis for understanding why the test case was successful and we’ve implied any number of additional test cases that could be derived from this one successful instance. At Microsoft, we have begun using the concept of test tours as a way to categorize test techniques. This is an even higher level discussion and we are working on documenting the tours and creating experience reports based on their use within the company. Stay tuned for more information on this effort. INSIGHT 311 THESE ARE THE TYPE OF QUESTIONS I LIKE TO ASK DURING BUG DEMOS: • What made you think of this particular test case? • What was your goal when you ran that test case? • Did you notice anything interesting while running the test case that changed what you were doing? • At what point did you know you had found a bug?
  • 13. IMPROVING DEVELOPMENT IS YOUR TOP PRIORITY I had a lunch conversation recently with a test trainer at Microsoft who encourages testers to get more involved in development. He cited cases where testers would recognize weakness in code and suggest new design patterns or code constructs. Both myself and our other lunch partner (also a tester) were skeptical. Testers are hired to test, not to develop, and most teams I’ve worked with both inside and especially outside of Microsoft would see such behavior as meddling. So, if testers aren’t contributing directly to the code, then are we simply bug finders whose value is determined by what we take out of the software? Well that is certainly one purpose of testing: to find and remove bugs, but there is a broader purpose too. It is our task to use testing as an instrument of improvement. This is where the techniques and tours discussed in the prior section can help. By raising the level of abstraction in our primary test artifact, we can use this to create new avenues of communication with development. In my group we regularly review test strategy, techniques and tours with developers. It’s our way of showing them what their code will face once we get a hold of it INSIGHT 412
  • 14. Of course, their natural reaction is to write their code so it won’t be susceptible to these attacks. Through such discussions, they often help us think of new ways to test. The discussion becomes one that makes them better developers and us better testers. We have to work harder in the sense that the tests we would have run won’t find any bugs (because the developers have anticipated our tests) but this is work I am willing to invest in any day! This is the true job of a tester: to make developers and development better. We don’t ensure better software – we enable developers to build better software. It isn’t about finding bugs, because the improvement caused is temporal. The true measure of a great tester is that they find bugs, analyze them thoroughly, report them skillfully and end up creating a development team that understands the gaps in their own skill and knowledge. ON THE PERCEIVED ROLE OF TESTING “This is the true job of a tester: to make developers and development better. We don’t ensure better software – we enable developers to build better software.” INSIGHT 413
  • 15. The end result will be developer improvement and that will reduce the number of bugs and increase their productivity in ways that far exceeds simple bug removal. This is a key point. It’s software developers who build software and if we’re just finding bugs and assisting their removal, no real lasting value is created. If we take our job seriously enough we’ll ensure the way we go about it creates real and lasting improvement. Making developers better, helping them understand failures and the factors that cause them will mean fewer bugs to find in the future. Testers are quality gurus and that means teaching those responsible for anti-quality what they are doing wrong and where they could improve. The immortal words of Tony Hoare ring very true: “The real value of tests is not that they detect bugs in the code, but that they detect inadequacies in the methods, concentration and skill of those who design and produce the code.” He said this in 1996. Clearly, he was way ahead of his time. INSIGHT 414
  • 16. ON THE REAL ROLE OF TESTERS THIS IS THE TRUE JOB OF A TESTER: TO MAKE DEVELOPERS AND DEVELOPMENT BETTER. WE DON’T ENSURE BETTER SOFTWARE - WE ENABLE DEVELOPERS TO BUILD BETTER SOFTWARE “
  • 17. TESTING WITHOUT INNOVATION IS A GREAT WAY TO LOSE TALENT Testing sucks. Now let me qualify that statement: Running test cases over and over – in the hope that bugs will manifest – sucks. It’s boring, uncreative work. And since half the world thinks that is all testing is about, it is no great wonder few people covet testing positions! Testing is either too tedious and repetitive or its downright too hard. Either way, who would want to stay in such a position? What is interesting about testing is strategy, deciding what to test and how to combine multiple features and environmental considerations in a single test. The tactical part of testing, actually running test cases and logging bugs, is the least interesting part. Smart test managers and test directors need to recognize this and ensure that every tester splits their time between strategy and tactics. Take the tedious and repetitive parts of the testing process and automate them. Tool development is a major creative task at Microsoft and is well- rewarded by the corporate culture. INSIGHT 516
  • 18. For the hard parts of the testing process, like deciding what to test and determining test completeness, user scenarios and so forth, we have another creative and interesting task. Testers who spend time categorizing tests and developing strategy (the interesting part) are more focused on testing and thus spend less time running tests (the boring part). Testing is an immature science. There are a lot of insights that a thinking person can make without inordinate effort. By ensuring that testers have the time to take a step back from their testing effort and find insights that will improve their testing, teams will benefit. Not only are such insights liable to improve the overall quality of the test, but the creative time will improve the morale of the testers involved. INSIGHT 517
  • 19. James A. Whittaker, now a Technical Evangelist at Microsoft, has spent his career in software testing. He was an early thought leader in model-based testing, where his PhD dissertation from the University of Tennessee became a standard reference on the subject. While a professor at Florida Tech, he founded the world’s largest academic software testing research center and helped make testing a degree track for undergraduates. Before he left Florida Tech, his research group had grown to over 60 students and faculty and had secured over $12 million in research awards and contracts. During his tenure at FIT he wrote How to Break Software and the series follow-ups How to Break Software Security (with Hugh Thompson) and How to Break Web Software (with Mike Andrews). His research team also developed the highly acclaimed runtime fault injection tool Holodeck and marketed it through their startup Security Innovation, Inc. Dr. Whittaker currently works at Microsoft and dreams of a future in which software just works. ABOUT JAMES18 ABOUT JAMES WHITTAKER
  • 20. ABOUT APPLAUSE19 ABOUT APPLAUSE 100 Pennsylvania Ave. Framingham, MA 01701 1.844.500.5556 www.applause.com Applause is leading the app quality revolution by enabling companies to deliver digital experiences that win – from web to mobile to wearables and beyond. By combining in-the-wild testing services, software tools and analytics, Applause helps companies achieve the 360° app quality™ they need to thrive in the modern apps economy. Thousands of companies – including Google, Fox, Amazon, Box, Concur and Runkeeper – choose Applause to launch apps that delight their users. Applause in-the-wild testing services span the app lifecycle, including functional, test automation, usability, localization, load and security. Applause appqualitytools help companies stay connected to their users and the health of their apps with Mobile Beta Management, Applause Analytics, and the Applause SDK. The company is headquartered near Boston, with offices in San Mateo, Seattle, Germany, Israel, Poland, and the UK. Since launching as uTest in 2008, Applause has raised more than $80 million in funding, generated triple-digit revenue growth annually, made consecutive Inc. 500 appearances and was named the 7th Most Promising Company in America by Forbes in 2014.