SlideShare a Scribd company logo
1 of 15
How to Really
Prevent and Manage Bugs
in Agile Projects
Michael Dubakov
TargetProcess, Founder
Table of content
Zero Defects Mentality 4
Bug Source #1: Unclear User Stories 5
Clarification meeting
Stories should be ready before iteration start 6
Bug Source #2: Manual Testing in Short Iterations 7
Bug Source #3: Automated Testing in Short Iterations
Bug Source #4: Separate Testing Team 8
Bug Source #5: Bug Clusters
Agile Bug Management 9
Bugs found in iteration
Bugs found in production 10
Bug estimation 12
Agile Bug Management Anti-Patterns 13
Bug fixing phase inside iteration
Bug fixing iteration
Skip “Zero open bugs” rule in user story’s Definition of Done
Defect Tracking Systems 14
Co-located
Distributed
References 15
2
Foreword
Today, Agile is a widely adopted software development approach. Most developers
have either heard of or successfully applied popular agile practices like TDD, CI, PP, etc.
But what about testers? It seems that many teams are having difficulties trying to
integrate quality control teams into an agile development process. Moreover, it also
seems that many teams are having difficulties with overall bug management. How to
treat bugs? Does a bug have a business value? Should we estimate bugs in points or in
hours? Should we treat bugs as user stories and add to velocity?
This article not only answers the questions above and explains how to manage bugs in
agile projects, but it also shows how not to manage bugs.
3
Zero Defects Mentality
Are you familiar with a zero defects mentality? It looks very good from the first sight: “I’d like
to have zero defects in my projects.”
So, what is a zero defects mentality?
Here is the quote from the book Lean Software Development: an Agile Toolkit:
“One of the fastest ways to kill motivation is what is called in the US Army a zero defects
mentality. A zero defects mentality is an atmosphere that tolerates absolutely no
mistakes; perfection is required down to the smallest detail. The army considers a zero
defects mentality to be a serious leadership problem, because it kills the initiative
necessary for success on a battlefield”
Mary & Tom Poppendieck
Obviously, a zero defects mentality is not something that HOUSE M.D. likes ;) Moreover, I think
Dr. House hates it, because it has several unpleasant effects:
Not enough courage to refactor a complex, messy, buggy, but important piece of code.
Inability to make an important right decision. The result is a less risky, but wrong
decision.
Doing everything to avoid responsibility leads to coward and stupid behavior.
Zero defects may sound good. But in reality you still have errors after production. Even in
predictable and (quite) easily testable industries (hardware, automobile, etc.) there are
problems with 100,000 power adapters that should be replaced (or hard drive problems, or
accumulators problems, I bet you can continue the list).
How can we expect zero defects in software development? It is harder to test, harder to define
in details, harder to predict. Software development is a complex adaptive system, and we
can't predict all effects.
So bugs in production are a normal thing, and by “normal” I mean that we can't bring them to
zero. We can (and should) minimize them using all possible ways. Bugs are a form of waste.
We should do our best to reduce bugs in software projects and eradicate waste.
There are several strategies that will help:
Test Driven Development. A nice side effect of TDD is a unit tests suite. You have tests
for all new code, and you have unit tests for all old code. If you have good tests - you
have less bugs.
4
Continuous integration. Instant feedback helps to identify problems early and fix them
early. It saves money and you have less bugs in production.
Automated regression functional testing suite. Unit tests are good, but you need
something else. Functional tests emulate user behavior and identify user interface
errors, integration errors, etc. Needles to say you should have continuous integration in
place to succeed with automated functional tests.
Root cause analysis. There are several ways to fix the bug. You may just hack the code
and apply a patch (please, don’t do it at home!). You may think deeper and fix the bug
nicely. Also you may look into the root of the problem and resolve it. Yes, it may take
time, but you will prevent future bugs from this domain.
High development skills. Ironically, high skills do not always reduce a bug rate in
production. “Stars” may be strong in some areas (business layer), but may not polish
things. It may lead to many small bugs, especially on UI.
“Stop worrying about the defect database and start worrying about why you are still
creating code where defects are discovered a significant amount of time after the code
has been written.”
Mary Poppendieck
Bug Source #1: Unclear User Stories
I think unclear specifications are a #1 source of bugs. If you deliver something that was not
intended, there will be many complaints from customers and in their opinion almost all of
these complaints are bugs. Also, without instant communication it is very easy to miss some
details and release an unpolished user story with many small glitches.
Agile development is very rapid. In many cases the path from an idea to user story in progress
is extremely short; it may be even 1 day. In this environment it is very easy to make mistakes
in a user story description. Product Owner may miss some important details and as a result
the story does something wrong, which was not expected.
“This is the first question you must ask... is it a bug, or is it a change? I've seen a lot of
bugs that have come up that were "We asked you for x, never thinking about y, so could
you please change the system so that y is covered?" It's a business scenario, so there's
little reason to expect a dev or tester to anticipate/test it. I know where we've struggled is
in injecting items into the product backlog, we tend to classify it as a bug and so we end
up with a lot of bugs, but not a lot of change in the back log. That's exactly what I think
we're supposed to be avoiding in Scrum or any other agile methodology. As we see
change, we should be taking it on as a feature and prioritizing it accordingly. Only when
it's something broken should it be called a bug.”
Jim Leonardo
The best solution to this problem is communication.
5
Clarification meeting
The important thing in software development is to put everyone on the same page.
Developer, Tester and Product Owner should conduct a small meeting about a user story, thus
forming a mini-team. If the user story has several developers and several testers, all should
participate.
The goals of the meeting are:
To ensure that everyone understands what should be implemented.
To brainstorm acceptance tests/test cases and create a check list.
To reveal and eliminate all discrepancies in a story description/specification.
We have these meetings at TargetProcess and they are very efficient and helpful. The side
effect of the meeting is that Product Owner receives less questions about functionality later,
thus having less interruptions (which is good).
Stories should be ready before iteration start
It is a good idea to have all user stories described in minute detail before iteration start. Thus,
testers and developers will have time to review them and prepare questions for the iteration
meeting. It may drive a much better discussion and reveal some interesting problems that
were unclear initially.
Discuss User
Stories,
brainstorm
acceptance tests
Product
Owner
TesterDeveloper
6
There is a danger to document more user stories than is required, and it will be a form of
waste. Product Owner should maintain good balance here.
Bug Source #2: Manual Testing in Short Iterations
Most testers are having hard time switching from waterfall to iterative development. Short
iterations put pressure on a testing activity. It is required to write test cases fast, execute
them fast and provide feedback fast. It is far away from a huge testing phase in waterfall.
Under pressure testers make more mistakes, think less and miss some test cases in a hurry.
Testers tend to write brief test cases and skip unusual or not obvious cases. Naturally, it is a
straight way to bugs in production.
The most common error is a testing phase in every iteration. It is a kind of mini-waterfall and
should be avoided. Each feature should have a separate flow with its own testing phase. It is
required to test by feature. Tester should start testing immediately after a feature is developed
(or even earlier if possible).
Bug Source #3: Automated Testing in Short Iterations
Test Driven Development is a great bug catcher. If you apply it right, you will improve product
quality significantly and bugs in production will be quite rare. However, it is not as easy as it
sounds.
There are two levels of TDD: Unit Tests and Functional Tests.
It is relatively easy to adopt unit tests and make it a mandatory practice in the development
team. Developers write unit tests, then write code, then refactor.
Functional tests are harder to create and maintain. And it is even harder to create them
before feature implementation. And it is especially hard to create automated functional tests
upfront on the User Interface level.
Tools like Fitnesse simplify functional testing of business logic, but still you want to have
complete UI tests using Selenium, WinRunner or any other GUI testing tool.
Here are several pieces of advice that will help you catch more bugs during iterations using
automated tests:
Adopt TDD fully on the unit tests level.
Hire highly experienced automated testers (almost like developers in skills) who can
write automated tests very fast. Speed is important here. An alternative is to force
developers to write automated functional tests.
Create automated functional tests for the previous iteration at the beginning of the
next iteration. It will be regression testing, but it is definitely better than nothing.
7
Bug Source #4: Separate Testing Team
It is common for a waterfall process to have separate functional teams: Designers, Developers,
Testers, DBA, etc. Functional teams set additional communication barriers, and poor
communication leads to many problems like:
Missing test cases.
Different understanding of a user story by Developer and Tester.
Delay between story implementation and testing phases.
Obviously, these problems lead to more bugs found in production. The best thing to do here is
to create a cross-functional team and put testers and developers into one shared space. It
should be one team, not several sub-teams.
Quite a common situation with functional departments looks like this. You have several
testers assigned to your project. Then suddenly two of them get relocated to another project
and replaced by two other testers. That is a real danger to your project.
So, your goal is a single cross-functional team. If it is not possible, you’ll have to play political
games. At least you should try to extract a dedicated testing team for the project and
minimize the power of Functional Testing Department Manager. In this case you have a
chance to join two functional teams into one.
Bug Source #5: Bug Clusters
Bugs like to live in communes in a single nest. Most likely you have modules with perfect
conditions for bug survival and reproduction. Bugs prefer the following places:
Code written by junior developers.
Code written under time pressure.
Legacy (initially beautiful) code that was passed to the offshore team, then back to the
main development team, then back offshore and then shared between several teams.
Code that somehow does not have unit tests (what a shame!).
UI (yes, most user interfaces are buggy, since developers do not unit test UI).
Quite a large and complex piece of code (there is a high chance that complex logic will
have some missed test cases as it is hard not to forget something).
Code written in JavaScript.
Integration with a third-party system.
So if you have a complex UI component written by Junior Developer in JavaScript with no unit
tests and under pressure - I bet you have several bugs in this code.
8
Anyway, bugs are nesting and so a good strategy is to find the nest and destroy it (refactor,
rewrite, add unit tests, etc). Lisa Crispin has something to say about it.
“If you already have a defect database, consider mining it for information about where
defects cluster, and focus on cleaning up the related code.” - Lisa Crispin
http://home.att.net/~lisa.crispin/CrispinFinal.pdf
If you have a defect tracking system, you may use tags, thus categorizing defects. It will be
quite easy to find problematic areas in your software. For example, you may find out that most
bugs live in the Reports or Email Integration areas.
Agile Bug Management
Agile development books often skip a bug management practice. Many agile people assume
that the problem is obvious, unfortunately it is not the case.
In general, there are two types of bugs: bugs found during iteration development and bugs
found in production. Strategies are quite different as you may expect.
Bugs found in iteration
There is a huge difference between a bug found during story development and a bug found by
the customer in production. A bug found during story development is much easier to fix, since
you have focus on the story, you know what you did 1-3 days ago and everything is fresh in
Software
Authentication
module
Content
module
Reporting
module
Bug
Bug
Bug
Bug
Bug
Bug
Bug
Bug
Bug
Bug
Bug
Bug
Bug
Bug
9
mind. You may even recall some places in the code where the bug can live right away. If a bug
is found a month from now, it will take time to switch to it, fix, include into the new build and
deliver.
So, how should we handle such bugs? First, do not estimate bugs during story development at
all. Second, do not prioritize them. Bugs are a usual part of the development process and on
average in each iteration you will have quite similar time spent on bug fixing. So why bother
with estimation and prioritization? One simple rule replaces them: all bugs found in the
iteration should be fixed. No exceptions. No excuses.
If you do not estimate bugs, they do not affect iteration velocity. If you use the same estimate
technique during several iterations, most likely you will have similar bug rates. It means that
the bug fixing deviation does not affect velocity.
Iteration #1
User Story User Story User Story User Story
Bug
Bug
Bug
Bug
Bug
Bug Bug Bug
User Story User Story
Bug
Bug
Bug
Bug
Bug
Bug
Bug Bug Bug 0 open bugs
Time
Alternatively you may estimate bugs as tasks (in hours), but I don’t see much value it this
effort.
Bugs found in production
Unfortunately, we have to deal with bugs in production. No software is bug free. There are
bugs in business software, medical software and even space shuttle software.
Sure medical software has less bugs, but they still exist (http://www.cs.tau.ac.il/~nachumd/
verify/horror.html).
Bugs as User Stories
One strategy is to put bugs into the product backlog and treat them as user stories. From the
customer’s perspective there is no much difference between bug in production and a new
feature request. The customer wants to have a problem solved, and the problem may be
expressed as a bug or may be expressed as a user story.
10
Iteration #1
User Story Production Bug User Story User Story
Bug
Bug
Bug
Bug
Bug
Development Team
Production Bug Time
Bug
Bug
Is this bug with login screen more important than the “Advanced Search” user story? It is a
subject for Product Owner to decide. He should maintain a single backlog with bugs and user
stories prioritized and select bugs and stories for the next iteration.
In such a scenario you will have to estimate bugs in points or in hours to have a fair
prediction how many bugs and stories you may take and implement in the next iteration. It
sounds somewhat counterintuitive, since bugs are a form of waste. But still prioritization and
estimation are important in this scenario.
However there is a danger in this approach:
If defects are viewed as features with negative value, they become managed as if they
were features. Development groups store up prioritized repositories of bugs, treat bugs
as user stories, outsource the fixing of bugs, and so on. While each of those can be a useful
technique or perspective in dealing with a project in transition or crisis, it is not a long-
term view that should be encouraged. After all, as the "Manifesto for Agile Software
Development" says, "Working software is the primary measure of progress." It is a little
disingenuous to pass off a feature with known defects as complete and working — "Yes,
it's done... but there are a few bugs." - Kevlin Henney
People dedicated to bug fixing
Another strategy is to have dedicated people for bug fixing. For example, you may dedicate
about 10-20% of a development team’s effort to production bug fixes. Alternatively, you may
have one developer each day on production bug fixing, and developers may rotate daily.
11
Iteration #1
User Story User Story User Story User Story
Bug Bug
Time
Development Team
Production Bug Production Bug Production Bug Support Developer
In this case, 25% of the development team is solely dedicated
to fixing bugs found in production (1 of 4 developers)
Free time. Support Developer drinks bear or
joins the development team (and enjoys user
stories). But if a new bug is found in
production, she switches to it with no delays.
Bug Bug
Bug
BugBug
Bug
Using this approach, you have two separate flows: one for user stories and another for bugs
found in production. Obviously, each flow should be managed separately. While for user
stories you have usual metrics like an iteration burn down chart, for a bug flow you need to
invent something different.
If you do not estimate bugs, all you have is the bugs fixed/day metric. If you do estimate them,
you may create a bug burn up chart or points fixed/day chart.
If you have few bugs, good advice will be to not track the bug fixing flow at all. But if you
have many bugs that will take several weeks to fix, you need some metrics to forecast when
you will be able to fix all Critical bugs, all Normal bugs, all Small bugs, etc. Also you should
know how many new bugs are coming from production each week. It will definitely influence
forecasts.
Weeks to a bug free release = Total bugs / (Weekly bug fixing rate - Weekly new bugs rate)
For example, you have 40 bugs to fix, weekly bug fixing rate is 10 bugs/week, and each week
2new bugs are found. In this case
Weeks to a bug free release = 40 / (10 - 2) = 5 weeks.
Bug Estimation
You may not estimate bugs. There are several reasons not to estimate:
Often bugs are hard to estimate. Even a small problem may take a day to fix
(unexpectedly revealing dirty roots that should be cleared up).
Bugs should be fixed with no exceptions.
If you have few bugs from production and use dedicated people for bug fixing,
estimation does not bring any additional value.
Bug estimation is required when:
You have many bugs in production and want to provide some forecasting.
You treat bugs as user stories and plan iteration accordingly.
12
Agile Bug Management Anti-Patterns
There are several dangerous misunderstandings (anti-patterns) related to bug management
that are quite common. It is better to recognize the problem early and fight to win. Here are
three common bug management anti-patterns in a development process.
Bug fixing phase inside iteration
Symptom: You have several days at the end of an iteration fully dedicated to bug fixing.
Iteration #1
User Story
Implement User Stories
User Story
User Story
Bug
Bug
Bug
TimeBug Fixing
Bug
Bug
BugUser Story
If you have a bug fixing phase inside an iteration, you have mini-waterfall in each iteration,
which is not a very good idea (in agile we blame waterfall, don’t we?). A story should be
tested as soon as it is completed.
Bug fixing iteration
Symptom: You run several iterations with almost no or little bug fixing and then have one (or
even two) iterations that are fully dedicated to bug fixing.
Release #1
User Story Bug
Bug
Bug
Time
Bug
Bug
Bug
Iteration #1
Implementing stories
Iteration #2
Implementing stories
Iteration #3
Bug fixing
User Story
User Story User Story
User Story User Story
A bug fixing iteration kills your iterative development. It is even worse than mini-waterfall.
Such iterations increase your work in progress dramatically. You have nothing done during
several iterations before a bug fixing iteration. You have nothing to ship. Moreover, bug fixing
iterations reduce motivation, people do not like to fix bugs during 2 weeks or a full month.
Skip “zero open bugs” rule in user story’s Definition of Done
Symptom: You have open bugs in a completed iteration.
You may have decided that some bugs discovered during story development are unimportant
and may be postponed to future releases/iteration. That is a very dangerous practice that
leads to bug accumulation. Moreover, it may be a reason for a bug fixing iteration (see above).
The best strategy is to have a “zero open bugs” rule in DoD for a user story.
13
Defect Tracking Systems
Should we use a defect tracking system? The answer is “it depends”. Here are all possible
alternatives:
Use a defect tracking system (excel, web based, desktop).
Use Task Board. Write bugs on sticky notes and stick them to Task Board.
Use index cards. Write bugs on a card and give it to Developer.
Personal communication (use voice and memory). Just tell Developer about the
problem.
Let’s see under what conditions you may use these approaches.
Co-located Distributed
Small team
Task Board, index cards,
personal communication
Defect tracking system
Medium Team
Task Board, defect tracking
system
Defect tracking system
Large Team Defect tracking system Defect tracking system
Obviously, a defect tracking system is a must for a distributed team. A distributed team
demands more formal communication and a single place to store all bugs.
A small co-located team may use any approach that fits their process. Medium and large co-
located teams can’t rely on personal communication and simple story cards. Task Board may
work for a medium team, but a large team most likely needs a defect tracking system.
I was surprised that our programmers find the defect-tracking system quite useful. The
ability to read clear, detailed steps to reproduce the problem saves them time. - Lisa
Crispin
14
References
Coping with Bugs on an Agile/Scrum Project
http://www.infoq.com/news/2009/07/coping-with-bugs
Software testing is an activity, not a phase or a department
http://searchsoftwarequality.techtarget.com/news/article/
0,289142,sid92_gci1337882,00.html
Fix defects right away
http://www.cyphersec.com/2009/05/21/fix-bugs-now/
15

More Related Content

Viewers also liked

Spricht dein Blog auch?
Spricht dein Blog auch?Spricht dein Blog auch?
Spricht dein Blog auch?deutschonline
 
Buchstaben für Gera
Buchstaben für GeraBuchstaben für Gera
Buchstaben für Geradeutschonline
 
Rancho da fanadia
Rancho da fanadiaRancho da fanadia
Rancho da fanadianscpc
 
Richtig präsentieren
Richtig präsentierenRichtig präsentieren
Richtig präsentierendeutschonline
 
Autoempleo 2013
Autoempleo 2013Autoempleo 2013
Autoempleo 2013Red RADAR
 
Comunicação em Redes Sociais - Divulgação de Blogs
Comunicação em Redes Sociais - Divulgação de BlogsComunicação em Redes Sociais - Divulgação de Blogs
Comunicação em Redes Sociais - Divulgação de Blogsgalvaogui
 
Slides dpe i unidade 2
Slides dpe i   unidade 2Slides dpe i   unidade 2
Slides dpe i unidade 2Nilo Tavares
 
Stunde_16_ Modalverben
Stunde_16_ Modalverben Stunde_16_ Modalverben
Stunde_16_ Modalverben deutschonline
 
Programa RADAR PAR
Programa RADAR PARPrograma RADAR PAR
Programa RADAR PARRed RADAR
 
Hit_Parade der Tannenbäume
Hit_Parade der TannenbäumeHit_Parade der Tannenbäume
Hit_Parade der Tannenbäumedeutschonline
 

Viewers also liked (20)

Scoop.it 24.07.12
Scoop.it 24.07.12Scoop.it 24.07.12
Scoop.it 24.07.12
 
Spricht dein Blog auch?
Spricht dein Blog auch?Spricht dein Blog auch?
Spricht dein Blog auch?
 
Buchstaben für Gera
Buchstaben für GeraBuchstaben für Gera
Buchstaben für Gera
 
Rancho da fanadia
Rancho da fanadiaRancho da fanadia
Rancho da fanadia
 
Richtig präsentieren
Richtig präsentierenRichtig präsentieren
Richtig präsentieren
 
Autoempleo 2013
Autoempleo 2013Autoempleo 2013
Autoempleo 2013
 
Beruf
BerufBeruf
Beruf
 
Comunicação em Redes Sociais - Divulgação de Blogs
Comunicação em Redes Sociais - Divulgação de BlogsComunicação em Redes Sociais - Divulgação de Blogs
Comunicação em Redes Sociais - Divulgação de Blogs
 
Modos textuais 2
Modos textuais 2Modos textuais 2
Modos textuais 2
 
Slides dpe i unidade 2
Slides dpe i   unidade 2Slides dpe i   unidade 2
Slides dpe i unidade 2
 
Poema de amor
Poema de amorPoema de amor
Poema de amor
 
Madeira final
Madeira finalMadeira final
Madeira final
 
Rostow _Luba
Rostow _Luba Rostow _Luba
Rostow _Luba
 
El Lleó I El Ratolí
El Lleó I El RatolíEl Lleó I El Ratolí
El Lleó I El Ratolí
 
Stunde_16_ Modalverben
Stunde_16_ Modalverben Stunde_16_ Modalverben
Stunde_16_ Modalverben
 
Programa RADAR PAR
Programa RADAR PARPrograma RADAR PAR
Programa RADAR PAR
 
Rostow_Dmitrij
Rostow_DmitrijRostow_Dmitrij
Rostow_Dmitrij
 
Modulo Diez
Modulo DiezModulo Diez
Modulo Diez
 
Hit_Parade der Tannenbäume
Hit_Parade der TannenbäumeHit_Parade der Tannenbäume
Hit_Parade der Tannenbäume
 
Rostow_Natalia
Rostow_NataliaRostow_Natalia
Rostow_Natalia
 

Recently uploaded

DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 

Recently uploaded (20)

DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 

Como prever e gerenciar defeitos em projetos ágeis

  • 1. How to Really Prevent and Manage Bugs in Agile Projects Michael Dubakov TargetProcess, Founder
  • 2. Table of content Zero Defects Mentality 4 Bug Source #1: Unclear User Stories 5 Clarification meeting Stories should be ready before iteration start 6 Bug Source #2: Manual Testing in Short Iterations 7 Bug Source #3: Automated Testing in Short Iterations Bug Source #4: Separate Testing Team 8 Bug Source #5: Bug Clusters Agile Bug Management 9 Bugs found in iteration Bugs found in production 10 Bug estimation 12 Agile Bug Management Anti-Patterns 13 Bug fixing phase inside iteration Bug fixing iteration Skip “Zero open bugs” rule in user story’s Definition of Done Defect Tracking Systems 14 Co-located Distributed References 15 2
  • 3. Foreword Today, Agile is a widely adopted software development approach. Most developers have either heard of or successfully applied popular agile practices like TDD, CI, PP, etc. But what about testers? It seems that many teams are having difficulties trying to integrate quality control teams into an agile development process. Moreover, it also seems that many teams are having difficulties with overall bug management. How to treat bugs? Does a bug have a business value? Should we estimate bugs in points or in hours? Should we treat bugs as user stories and add to velocity? This article not only answers the questions above and explains how to manage bugs in agile projects, but it also shows how not to manage bugs. 3
  • 4. Zero Defects Mentality Are you familiar with a zero defects mentality? It looks very good from the first sight: “I’d like to have zero defects in my projects.” So, what is a zero defects mentality? Here is the quote from the book Lean Software Development: an Agile Toolkit: “One of the fastest ways to kill motivation is what is called in the US Army a zero defects mentality. A zero defects mentality is an atmosphere that tolerates absolutely no mistakes; perfection is required down to the smallest detail. The army considers a zero defects mentality to be a serious leadership problem, because it kills the initiative necessary for success on a battlefield” Mary & Tom Poppendieck Obviously, a zero defects mentality is not something that HOUSE M.D. likes ;) Moreover, I think Dr. House hates it, because it has several unpleasant effects: Not enough courage to refactor a complex, messy, buggy, but important piece of code. Inability to make an important right decision. The result is a less risky, but wrong decision. Doing everything to avoid responsibility leads to coward and stupid behavior. Zero defects may sound good. But in reality you still have errors after production. Even in predictable and (quite) easily testable industries (hardware, automobile, etc.) there are problems with 100,000 power adapters that should be replaced (or hard drive problems, or accumulators problems, I bet you can continue the list). How can we expect zero defects in software development? It is harder to test, harder to define in details, harder to predict. Software development is a complex adaptive system, and we can't predict all effects. So bugs in production are a normal thing, and by “normal” I mean that we can't bring them to zero. We can (and should) minimize them using all possible ways. Bugs are a form of waste. We should do our best to reduce bugs in software projects and eradicate waste. There are several strategies that will help: Test Driven Development. A nice side effect of TDD is a unit tests suite. You have tests for all new code, and you have unit tests for all old code. If you have good tests - you have less bugs. 4
  • 5. Continuous integration. Instant feedback helps to identify problems early and fix them early. It saves money and you have less bugs in production. Automated regression functional testing suite. Unit tests are good, but you need something else. Functional tests emulate user behavior and identify user interface errors, integration errors, etc. Needles to say you should have continuous integration in place to succeed with automated functional tests. Root cause analysis. There are several ways to fix the bug. You may just hack the code and apply a patch (please, don’t do it at home!). You may think deeper and fix the bug nicely. Also you may look into the root of the problem and resolve it. Yes, it may take time, but you will prevent future bugs from this domain. High development skills. Ironically, high skills do not always reduce a bug rate in production. “Stars” may be strong in some areas (business layer), but may not polish things. It may lead to many small bugs, especially on UI. “Stop worrying about the defect database and start worrying about why you are still creating code where defects are discovered a significant amount of time after the code has been written.” Mary Poppendieck Bug Source #1: Unclear User Stories I think unclear specifications are a #1 source of bugs. If you deliver something that was not intended, there will be many complaints from customers and in their opinion almost all of these complaints are bugs. Also, without instant communication it is very easy to miss some details and release an unpolished user story with many small glitches. Agile development is very rapid. In many cases the path from an idea to user story in progress is extremely short; it may be even 1 day. In this environment it is very easy to make mistakes in a user story description. Product Owner may miss some important details and as a result the story does something wrong, which was not expected. “This is the first question you must ask... is it a bug, or is it a change? I've seen a lot of bugs that have come up that were "We asked you for x, never thinking about y, so could you please change the system so that y is covered?" It's a business scenario, so there's little reason to expect a dev or tester to anticipate/test it. I know where we've struggled is in injecting items into the product backlog, we tend to classify it as a bug and so we end up with a lot of bugs, but not a lot of change in the back log. That's exactly what I think we're supposed to be avoiding in Scrum or any other agile methodology. As we see change, we should be taking it on as a feature and prioritizing it accordingly. Only when it's something broken should it be called a bug.” Jim Leonardo The best solution to this problem is communication. 5
  • 6. Clarification meeting The important thing in software development is to put everyone on the same page. Developer, Tester and Product Owner should conduct a small meeting about a user story, thus forming a mini-team. If the user story has several developers and several testers, all should participate. The goals of the meeting are: To ensure that everyone understands what should be implemented. To brainstorm acceptance tests/test cases and create a check list. To reveal and eliminate all discrepancies in a story description/specification. We have these meetings at TargetProcess and they are very efficient and helpful. The side effect of the meeting is that Product Owner receives less questions about functionality later, thus having less interruptions (which is good). Stories should be ready before iteration start It is a good idea to have all user stories described in minute detail before iteration start. Thus, testers and developers will have time to review them and prepare questions for the iteration meeting. It may drive a much better discussion and reveal some interesting problems that were unclear initially. Discuss User Stories, brainstorm acceptance tests Product Owner TesterDeveloper 6
  • 7. There is a danger to document more user stories than is required, and it will be a form of waste. Product Owner should maintain good balance here. Bug Source #2: Manual Testing in Short Iterations Most testers are having hard time switching from waterfall to iterative development. Short iterations put pressure on a testing activity. It is required to write test cases fast, execute them fast and provide feedback fast. It is far away from a huge testing phase in waterfall. Under pressure testers make more mistakes, think less and miss some test cases in a hurry. Testers tend to write brief test cases and skip unusual or not obvious cases. Naturally, it is a straight way to bugs in production. The most common error is a testing phase in every iteration. It is a kind of mini-waterfall and should be avoided. Each feature should have a separate flow with its own testing phase. It is required to test by feature. Tester should start testing immediately after a feature is developed (or even earlier if possible). Bug Source #3: Automated Testing in Short Iterations Test Driven Development is a great bug catcher. If you apply it right, you will improve product quality significantly and bugs in production will be quite rare. However, it is not as easy as it sounds. There are two levels of TDD: Unit Tests and Functional Tests. It is relatively easy to adopt unit tests and make it a mandatory practice in the development team. Developers write unit tests, then write code, then refactor. Functional tests are harder to create and maintain. And it is even harder to create them before feature implementation. And it is especially hard to create automated functional tests upfront on the User Interface level. Tools like Fitnesse simplify functional testing of business logic, but still you want to have complete UI tests using Selenium, WinRunner or any other GUI testing tool. Here are several pieces of advice that will help you catch more bugs during iterations using automated tests: Adopt TDD fully on the unit tests level. Hire highly experienced automated testers (almost like developers in skills) who can write automated tests very fast. Speed is important here. An alternative is to force developers to write automated functional tests. Create automated functional tests for the previous iteration at the beginning of the next iteration. It will be regression testing, but it is definitely better than nothing. 7
  • 8. Bug Source #4: Separate Testing Team It is common for a waterfall process to have separate functional teams: Designers, Developers, Testers, DBA, etc. Functional teams set additional communication barriers, and poor communication leads to many problems like: Missing test cases. Different understanding of a user story by Developer and Tester. Delay between story implementation and testing phases. Obviously, these problems lead to more bugs found in production. The best thing to do here is to create a cross-functional team and put testers and developers into one shared space. It should be one team, not several sub-teams. Quite a common situation with functional departments looks like this. You have several testers assigned to your project. Then suddenly two of them get relocated to another project and replaced by two other testers. That is a real danger to your project. So, your goal is a single cross-functional team. If it is not possible, you’ll have to play political games. At least you should try to extract a dedicated testing team for the project and minimize the power of Functional Testing Department Manager. In this case you have a chance to join two functional teams into one. Bug Source #5: Bug Clusters Bugs like to live in communes in a single nest. Most likely you have modules with perfect conditions for bug survival and reproduction. Bugs prefer the following places: Code written by junior developers. Code written under time pressure. Legacy (initially beautiful) code that was passed to the offshore team, then back to the main development team, then back offshore and then shared between several teams. Code that somehow does not have unit tests (what a shame!). UI (yes, most user interfaces are buggy, since developers do not unit test UI). Quite a large and complex piece of code (there is a high chance that complex logic will have some missed test cases as it is hard not to forget something). Code written in JavaScript. Integration with a third-party system. So if you have a complex UI component written by Junior Developer in JavaScript with no unit tests and under pressure - I bet you have several bugs in this code. 8
  • 9. Anyway, bugs are nesting and so a good strategy is to find the nest and destroy it (refactor, rewrite, add unit tests, etc). Lisa Crispin has something to say about it. “If you already have a defect database, consider mining it for information about where defects cluster, and focus on cleaning up the related code.” - Lisa Crispin http://home.att.net/~lisa.crispin/CrispinFinal.pdf If you have a defect tracking system, you may use tags, thus categorizing defects. It will be quite easy to find problematic areas in your software. For example, you may find out that most bugs live in the Reports or Email Integration areas. Agile Bug Management Agile development books often skip a bug management practice. Many agile people assume that the problem is obvious, unfortunately it is not the case. In general, there are two types of bugs: bugs found during iteration development and bugs found in production. Strategies are quite different as you may expect. Bugs found in iteration There is a huge difference between a bug found during story development and a bug found by the customer in production. A bug found during story development is much easier to fix, since you have focus on the story, you know what you did 1-3 days ago and everything is fresh in Software Authentication module Content module Reporting module Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug Bug 9
  • 10. mind. You may even recall some places in the code where the bug can live right away. If a bug is found a month from now, it will take time to switch to it, fix, include into the new build and deliver. So, how should we handle such bugs? First, do not estimate bugs during story development at all. Second, do not prioritize them. Bugs are a usual part of the development process and on average in each iteration you will have quite similar time spent on bug fixing. So why bother with estimation and prioritization? One simple rule replaces them: all bugs found in the iteration should be fixed. No exceptions. No excuses. If you do not estimate bugs, they do not affect iteration velocity. If you use the same estimate technique during several iterations, most likely you will have similar bug rates. It means that the bug fixing deviation does not affect velocity. Iteration #1 User Story User Story User Story User Story Bug Bug Bug Bug Bug Bug Bug Bug User Story User Story Bug Bug Bug Bug Bug Bug Bug Bug Bug 0 open bugs Time Alternatively you may estimate bugs as tasks (in hours), but I don’t see much value it this effort. Bugs found in production Unfortunately, we have to deal with bugs in production. No software is bug free. There are bugs in business software, medical software and even space shuttle software. Sure medical software has less bugs, but they still exist (http://www.cs.tau.ac.il/~nachumd/ verify/horror.html). Bugs as User Stories One strategy is to put bugs into the product backlog and treat them as user stories. From the customer’s perspective there is no much difference between bug in production and a new feature request. The customer wants to have a problem solved, and the problem may be expressed as a bug or may be expressed as a user story. 10
  • 11. Iteration #1 User Story Production Bug User Story User Story Bug Bug Bug Bug Bug Development Team Production Bug Time Bug Bug Is this bug with login screen more important than the “Advanced Search” user story? It is a subject for Product Owner to decide. He should maintain a single backlog with bugs and user stories prioritized and select bugs and stories for the next iteration. In such a scenario you will have to estimate bugs in points or in hours to have a fair prediction how many bugs and stories you may take and implement in the next iteration. It sounds somewhat counterintuitive, since bugs are a form of waste. But still prioritization and estimation are important in this scenario. However there is a danger in this approach: If defects are viewed as features with negative value, they become managed as if they were features. Development groups store up prioritized repositories of bugs, treat bugs as user stories, outsource the fixing of bugs, and so on. While each of those can be a useful technique or perspective in dealing with a project in transition or crisis, it is not a long- term view that should be encouraged. After all, as the "Manifesto for Agile Software Development" says, "Working software is the primary measure of progress." It is a little disingenuous to pass off a feature with known defects as complete and working — "Yes, it's done... but there are a few bugs." - Kevlin Henney People dedicated to bug fixing Another strategy is to have dedicated people for bug fixing. For example, you may dedicate about 10-20% of a development team’s effort to production bug fixes. Alternatively, you may have one developer each day on production bug fixing, and developers may rotate daily. 11
  • 12. Iteration #1 User Story User Story User Story User Story Bug Bug Time Development Team Production Bug Production Bug Production Bug Support Developer In this case, 25% of the development team is solely dedicated to fixing bugs found in production (1 of 4 developers) Free time. Support Developer drinks bear or joins the development team (and enjoys user stories). But if a new bug is found in production, she switches to it with no delays. Bug Bug Bug BugBug Bug Using this approach, you have two separate flows: one for user stories and another for bugs found in production. Obviously, each flow should be managed separately. While for user stories you have usual metrics like an iteration burn down chart, for a bug flow you need to invent something different. If you do not estimate bugs, all you have is the bugs fixed/day metric. If you do estimate them, you may create a bug burn up chart or points fixed/day chart. If you have few bugs, good advice will be to not track the bug fixing flow at all. But if you have many bugs that will take several weeks to fix, you need some metrics to forecast when you will be able to fix all Critical bugs, all Normal bugs, all Small bugs, etc. Also you should know how many new bugs are coming from production each week. It will definitely influence forecasts. Weeks to a bug free release = Total bugs / (Weekly bug fixing rate - Weekly new bugs rate) For example, you have 40 bugs to fix, weekly bug fixing rate is 10 bugs/week, and each week 2new bugs are found. In this case Weeks to a bug free release = 40 / (10 - 2) = 5 weeks. Bug Estimation You may not estimate bugs. There are several reasons not to estimate: Often bugs are hard to estimate. Even a small problem may take a day to fix (unexpectedly revealing dirty roots that should be cleared up). Bugs should be fixed with no exceptions. If you have few bugs from production and use dedicated people for bug fixing, estimation does not bring any additional value. Bug estimation is required when: You have many bugs in production and want to provide some forecasting. You treat bugs as user stories and plan iteration accordingly. 12
  • 13. Agile Bug Management Anti-Patterns There are several dangerous misunderstandings (anti-patterns) related to bug management that are quite common. It is better to recognize the problem early and fight to win. Here are three common bug management anti-patterns in a development process. Bug fixing phase inside iteration Symptom: You have several days at the end of an iteration fully dedicated to bug fixing. Iteration #1 User Story Implement User Stories User Story User Story Bug Bug Bug TimeBug Fixing Bug Bug BugUser Story If you have a bug fixing phase inside an iteration, you have mini-waterfall in each iteration, which is not a very good idea (in agile we blame waterfall, don’t we?). A story should be tested as soon as it is completed. Bug fixing iteration Symptom: You run several iterations with almost no or little bug fixing and then have one (or even two) iterations that are fully dedicated to bug fixing. Release #1 User Story Bug Bug Bug Time Bug Bug Bug Iteration #1 Implementing stories Iteration #2 Implementing stories Iteration #3 Bug fixing User Story User Story User Story User Story User Story A bug fixing iteration kills your iterative development. It is even worse than mini-waterfall. Such iterations increase your work in progress dramatically. You have nothing done during several iterations before a bug fixing iteration. You have nothing to ship. Moreover, bug fixing iterations reduce motivation, people do not like to fix bugs during 2 weeks or a full month. Skip “zero open bugs” rule in user story’s Definition of Done Symptom: You have open bugs in a completed iteration. You may have decided that some bugs discovered during story development are unimportant and may be postponed to future releases/iteration. That is a very dangerous practice that leads to bug accumulation. Moreover, it may be a reason for a bug fixing iteration (see above). The best strategy is to have a “zero open bugs” rule in DoD for a user story. 13
  • 14. Defect Tracking Systems Should we use a defect tracking system? The answer is “it depends”. Here are all possible alternatives: Use a defect tracking system (excel, web based, desktop). Use Task Board. Write bugs on sticky notes and stick them to Task Board. Use index cards. Write bugs on a card and give it to Developer. Personal communication (use voice and memory). Just tell Developer about the problem. Let’s see under what conditions you may use these approaches. Co-located Distributed Small team Task Board, index cards, personal communication Defect tracking system Medium Team Task Board, defect tracking system Defect tracking system Large Team Defect tracking system Defect tracking system Obviously, a defect tracking system is a must for a distributed team. A distributed team demands more formal communication and a single place to store all bugs. A small co-located team may use any approach that fits their process. Medium and large co- located teams can’t rely on personal communication and simple story cards. Task Board may work for a medium team, but a large team most likely needs a defect tracking system. I was surprised that our programmers find the defect-tracking system quite useful. The ability to read clear, detailed steps to reproduce the problem saves them time. - Lisa Crispin 14
  • 15. References Coping with Bugs on an Agile/Scrum Project http://www.infoq.com/news/2009/07/coping-with-bugs Software testing is an activity, not a phase or a department http://searchsoftwarequality.techtarget.com/news/article/ 0,289142,sid92_gci1337882,00.html Fix defects right away http://www.cyphersec.com/2009/05/21/fix-bugs-now/ 15