Follow Agile Journal on Twitter
- Loading...
Upcoming and Recent WebCasts
|
| A prime directive of agile development is to maintain forward progress. In past articles, I've talked about metrics that gauge the quality of code and design. While these metrics help guide refactoring efforts that ensure application maintenance remains easy, they don't necessarily allow us to measure our progress in terms that make sense to the business customer. A good way to measure forward progress is to know where the development effort stands in relation to the functional features desired by business stakeholders. Running Tested Features (RTF) is a way to track progress by measuring how many features pass acceptance tests. In this article, I'll introduce RTF and present some tools that can be adopted to implement an RTF strategy.
RTF Explained Continuous RTF RTF is a continuous measurement and, all things being equal, should grow linearly throughout the project. To explore what this means, we must first compare agile development with iterative development. Iterative development teams tend to timebox their iterations, {sidebar id=1} marking each iteration with a milestone focused on delivering a planned set of features to clients every two to four weeks. Iteration planning defines the work included in future iterations based on the amount of work accomplished in previous iterations. Yet within these iterations, teams should deliver functional and valuable features daily, hourly, or even more frequently. Teams should not be constrained to delivering features at the end of each iteration. While project management defines iterations that last weeks or months, primarily for planning, the development team works in iterations that lasts days, hours, or minutes. And each feature that is released throughout an iteration planning window is a feature that can be measured and contributes to RTF. In The Agile Matrix, I talked about dividing teams into smaller teams according to the business processes they will implement and support. Each process team is responsible for fulfilling the requirements for a complete business process. But on many software development efforts, we aim to align each process team to the same iteration schedule. This is not necessary. Each process team can work within its own iteration planning window. Agile practices, including continuous integration, ensure individual process teams remain aligned, and the processes of continuous release, continuous builds, and continuous deploys encourages the smaller iterations that often go unacknowledged on many development efforts. It is these smaller iterations where software growth occurs, and where we continuously measure Running Test Features. Figure 1 depicts a multi-dimensional agile development effort, where iterations overlap but where RTF experiences linear growth as each iteration nears completion. Critics might argue that RTF cannot experience consistent linear growth due to unpredictable setbacks throughout the development lifecycle. While it's true that teams can experience challenges that limit RTF growth for a short period of time, analyzing RTF reports over time will show positive growth.
RTF Strategy
As discussed in An Agile Resolution, choosing the correct tools has a tremendous impact on a teams ability to remain agile. Agile tools are testable, non-invasive, easy to use, flexible, and lightweight. As RTF requires continuous measurement of automated acceptance tests, measuring RTF requires a tool. A few such tools exist in the open source space.
java -jar ./server/selenium-server.jar
require 'test/unit' require 'selenium'
class SeleniumTest < Test::Unit::TestCase
def setup @sel = Selenium::SeleniumDriver.new("localhost", 4444, "*firefox", "http://localhost:8181", 15000) @sel.start end
def test_loan @sel.open("http://localhost:8181/Loan.html") @sel.type("rate", "6.0") @sel.type("term", "60") @sel.type("principle", "10000") @sel.click("clc") @sel.wait_for_page_to_load("5000") assert_equal("Loan Payment Schedule", @sel.get_title()) end
def teardown @sel.stop end end
Now it's time to run the test case. We can execute the test using the following command, where -I specifies the location of Selenium's Ruby client driver:
ruby -I ./selenium-remote-control-0.9.0/ruby ./test/SeleniumTest.rb
require 'test/unit/testsuite' require 'test/unit/ui/console/testrunner' require 'test/unit/ui/reporter' require 'stringio'
require 'SeleniumTest' suite = Test::Unit::TestSuite.new suite << SeleniumTest.suite
require 'fileutils' FileUtils.mkdir_p 'build/report/acceptance'
#Test::Unit::UI::Console::TestRunner.run(suite) Test::Unit::UI::Reporter.run(suite, 'build/report/acceptance')
desc "Execute all acceptance tests" Rake::TestTask.new(:acceptance_test) do | tsk | tsk.libs << "./test;./selenium-remote-control-0.9.0/ruby" tsk.test_files = "OutputAcceptanceTests.rb" end
Invoking the build is as simple as typing rake at the command prompt. After navigating to the build/report/acceptance directory, we can open index.html, revealing the results of the test cases, as shown in Figure 2 below.
Figure 2
Conclusion
Running Tested Features is a way to continuously measure the progress of software development in business terms. RTF allows software teams to understand the current state of the development effort throughout the lifecycle by measuring the number of functional features desired by business stakeholders that pass automated acceptance tests. But to reliably and continuously measure RTF, tools must be employed that enforce the discipline necessary for continuous and reliable measurement. Applying tools correctly, and in a way that fits your environment and culture is a critical success factor when adopting an RTF strategy. Open source tools such as FitNesse and Selenium integrate well with many build tools, and offer a great foundation upon which to build a robust RTF strategy.
About the Author
Set as favorite
Bookmark
Email this
Hits: 9558 Comments (0)
|
| < Prev | Next > |
|---|
Agile Marketplace - Announcements and Special Offers
PureCM –SCM for Agile Teams
PureCM helps you to manage development in short iterations: keeping track of changes, supporting automated builds and preserving frequent snapshots of your projects.
Get the free trial now
Collabnet -TeamForge 5.3
CollabNet TeamForge 5.3 includes Dynamic Planning—providing flexibility to model release scope and timeline in a single view. Now, you can easily manipulate/adjust release data.
Download Your Free Trial
Free Agile Development Platform
Explore building working web business applications with Agile methodologies and OutSystems' Agile Platform Community Edition. This no-strings attached software download is free for personal or small business use and includes a small download footprint, simple installation, a complete getting started guide and sample applications.
Download your Agile Platform today
Agile Journal Live Seminar Series
These complimentary mini-conferences will feature the leading providers of Agile software development solutions. The next seminar will be held October 28, 2009 in Raleigh, NC.
Register Here
Agile CMMI – The Best of Both Worlds
Shares how a leading financial institution gains CMMI level 3 compliance and supports Agile practices.
Register for CollabNet webinar May 21
Requirements-based testing (RBT) can help you increase efficiency, reduce project risk, and improve overall software quality. Learn how MKS Integrity for application lifecycle management enables RBT, delivering full lifecycle traceability to help ensure that project requirements have complete test planning and execution coverage. Download the Requirements-Based Testing whitepaper







