Home arrow Articles arrow Subscribe Here
Continuous Quality - Shortening the Development and Test Feedback Loop Beyond Continuous Build PDF Print E-mail
User Rating: / 0
PoorBest 
Written by Zach Nies   
Sunday, 08 June 2008
june08feedbackbigAgile practices emphasize the value of bringing testing forward in the development process, but has anyone ever explained to you how to actually make that happen? Most likely not, at least from my experience. The fact is most teams lack the process and automation needed to get continuous visibility into the ongoing quality of their software releases.

In Part 1 of this series, I will outline how automation can provide a great platform to pull quality and testing forward when the focus of the automation is informed by a few key principles. In Part 2 of this article, I will take the concepts presented in Part 1 and walk you through the details of implementing an automation infrastructure, including specific examples.

What the Heck is Continuous Quality?

What do I mean by "continuous quality"? Quality isn't an event that happens right before a project is done or before a product ships; quality requires the continuous focus of the team. Just as continuous integration enables the continuous feedback cycle around integrating code, continuous quality enables the continuous feedback cycle about the quality of the system or product being developed. Ultimately, continuous quality is about reproducibly building integrity in at all levels of the development and testing process through the effective use of automation.

As an engineer working in an IDE, you should be continually aware of how your code integrations are affecting quality. As a tester, you should have a say in the definition of done, visibility into the quality of the stories under development, and control over your testing environment. As a product manager, you should be able to understand and provide feedback, in short cycles, about how a customer will perceive the value and quality of the stories being developed. Finally as a team, you should have constant and objective feedback about how quality is trending with the ability to "Stop the Line."

Principle #1 - Agile's Discipline Around Short, Time-Boxed Development
In waterfall development, the goal of the testing phase is for quality to "come together" at the end of development, where I would argue it is much too late to materially affect quality. Also, there is typically little focus paid to the deployment or installation work until development is finished. Focusing on quality at the end of the development cycle puts the team in a position where fixing any issue often requires reconstructing the context around code that changed months ago. The problem is that at this point, everything is out of context. It's like asking what youhad for lunch three Tuesdays ago. Do you remember?

The short time boxes of Agile development (where small increments of work are taken from definition through acceptance) enable testing to be pulled forward. Because the feedback cycles between development and acceptance are compressed, issues are discovered and resolved while the code changes are still in context. Do you remember what you had for lunch today? I hope so. Involving testers in development from definition to acceptance is a start, but there are ways to make the feedback cycles even shorter through automation. Short time boxes AND automation help pull testing forward to the point where quality is continuously understood and acted upon.

Principle #2 - Feedback Cycles and Lean Thinking
Now let's take a look at Lean thinking to understand feedback cycles and how to compress them. According to Mary and Tom Poppendieck, improving cycle times involves limiting work to capacity, evening out the arrival of work, minimizing the number of things-in-process, minimizing the size of things-in-process, establishing a regular cadence, and using pull scheduling [1]. The basic cycle of development is captured in the picture below.

zn0608-1

In this cycle, testers and product owners specify functionality, developers write code to implement that functionality, and the code gets checked into the source control management system. At some point in the cycle, those code changes are incorporated into a build.  Testers and product owners use this build to accept the functionality they specified earlier in the cycle. Without short time boxes, this cycle can take months or years to complete. Even with short time boxes, the challenge is to compress this cycle to the point where feedback is continuous enough that responding doesn't require the team to reconstruct context.

Why should we focus on cycles and batching? To deliver as fast as possible, queuing theory suggests that reducing batch sizes, evening out the arrival of work, and including slack can positively influence cycle times. As utilization goes toward 100%, the cycle times of large batches is considerably higher than for small batches.  Translated for a development team, this means as a team tries to schedule 100% of their velocity into each time box, the size of the batches in the development cycle will greatly affect the time it takes for the work go through the cycle. The details behind this are beyond the scope of this article. If you are interested in learning more about queuing theory for software teams I would highly recommend reading at least chapter 4 of Lean Software Development by Mary and Tom Poppendieck[2].

Automation and Lean thinking are the keys to enabling quicker cycles and giving the team continuous feedback about quality in an actionable way. Let's look at the ‘why' and in Part 2 of this series I will address the ‘how'.

Unit Tests & Code Metrics
Unit tests and code metrics are a good place for a team to start. By implementing continuous integration, where the code is built and the unit tests run on a dedicated machine that is not a developer workstation, you are most of the way there on this level of automation. You'll need a scriptable way to create a build, a scriptable way to run unit tests, a dedicated machine, and the willingness to build with each atomic check-in. If we go back to the basic cycle of development, continuous integration alone can have an impact on batching patters and the quality feedback cycle.

zn0608-2

The above graphic shows how continuous integration affects the feedback cycle. By doing a continuous integration build after each check-in, cycle times and batch sizes can be significantly reduced. Also, the continuous integration infrastructure is giving the team some continuous measures of quality. Specifically, the developers are getting constant feedback on the quality of the code in the SCM system - does the build pass and do the unit tests pass? Through the use of code coverage tools and static code analyzers, the development team can get a deeper understanding of the degree to which each check-in is affecting code level quality. The feedback from continuous builds along with the development discipline to integrate code regularly can help a team to even out the arrival of work, minimize the number of things-in-process, and minimize the size of things-in-process.

Automated Functional Tests
Automated functional testing involves having: a scriptable way to package a build into a deployable or installable package, an automated way to deploy or install that package, an automated was to run database migrations, a dedicated testing machine, and an automated functional testing framework. If we go back to the basic cycle of development, automated functional testing provides continuous quality feedback for developers and begins to remove batching between developers and the rest of the team.

zn0608-3

The above graphic shows how automated functional testing affects the feedback cycle. Now the team is getting constant feedback about the functional quality of the code in the SCM system. By having an automated way to package and deploy/install a build, the deployment part of development now becomes part of the feedback cycle, and the team gets feedback when a code change breaks the packaging or deployment of the build artifacts. Before this level of automation, the ability to deploy or install a build is unknown until someone manually makes an attempt. If something goes wrong, the code responsible for the problems is likely to be out of the team's context. If the feedback comes as a direct result of a specific check-in it is easy to understand what is causing the problem and decreasing quality. The feedback from automated functional testing can help a team limit work to capacity, even out the arrival of work, minimize the number of things-in-process, minimize the size of things-in-process, and establish a regular testing cadence.

Manual GUI and Regression Testing
The next area to focus your automation effort is the infrastructure to allow testers to pull builds for manual GUI and regression testing. This is the part that allows testers and product owners to be completely in control of their testing environment. In teams that lack this level of automation, a tester or product owner typically has to ask someone in development or operations to make a build available, which can be a slow and contentious process that is frustrating and distracting to all involved. To implement this level of automation, you'll need a repository of build artifacts, and a way to deploy or install from that repository. The remaining areas of batching are removed with this level of automation.

zn0608-4

With this level of automation, there is no batching in the feedback cycle and, more importantly, the team can move to pull-based scheduling for testing. Pull scheduling empowers each person to clearly understand what he or she should do next to have the biggest positive impact on the business and have the ability to act on that understanding[2].As functionality is being developed, testers and product owners are in control of determining, with developers, what build would be most effective to test and get quality feedback to the team.

In Part 1 of this series, I outlined how automation and Lean principles reduce cycle times in a way that allows quality and testing to be pulled forward. In Part 2 of this article, I will take these concepts and walk you through the details of implementing an automation infrastructure, including specific examples.


About the Author
Zach Nies brings close to 20 years of engineering and product development experience to Rally's innovative products. Prior to joining Rally, Zach served as Principal Architect and Director of Systems Architecture for Level 3 Communications and founded a small start up which was quickly acquired by the publicly traded Creo, Inc, now a division of Kodak. He also served as Chief Software Architect at Quark, where he provided the overarching technological vision for the company. Zach's product vision has won numerous industry awards, including Jolt Product Excellence awards, Seybold HotPicks and the prized MacWorld Best of Show. Zach has served on standards bodies such as the W3C's HTML working group and currently serves on the board of directors for Agile Denver. At the age of 13, Zach began commercially publishing software and, at age 16, started a successful consulting business. A Boettcher Scholar, Zach received his BS with distinction in Computer Science Engineering from the University of Colorado at Boulder. He spends his spare time tuning his golf swing and spending time with his family.

 


[1] Poppendieck, Mary and Tom. "Managing the Pipeline." Poppendieck.LLC. 7 Oct 2007. http://www.poppendieck.com/pipeline.htm.

[2] Poppendieck, Mary and Tom. Lean Software Development, An Agile Toolkit. Boston: Addison-Wesley, 2003.

Comments (4)add feed
bs: ...
scm - source code management i guess
1

January 06, 2009
ELK: ...
Software Configuration Management
2

November 19, 2008
nlohchab: ...
If i am not wrong SCM = Scrum is best held first thing in the day or you can say Short Span meeting i.e 15 mins.
3

September 25, 2008
buset07: ...
What is SCM ?
4

September 22, 2008
Write comment


Write the displayed characters


busy
Tags:
Click to add your tags...,
 
< Prev   Next >






Lost Password?
No account yet? Register

Video News

Agile Poll

How important are CM tools (e.g., Version Control) for Agile projects?
 
 
 
 
 
 
Copyright © 2006 - 2008 CMC Media, Inc. All rights reserved. All marks are trademarks of CMC Media Reproduction in whole or in part in any form or medium without the express written permission of CMC Media, Inc. is prohibited  
 
 CM Yellow Pages | ALM Expo | CM Today | Configuration Management Journal | CM Crossroads