|
| 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: 10206 Comments (0)
|
| Last Updated on Saturday, 20 October 2007 03:38 |
Agile Marketplace - Announcements and Special Offers
Rally Software Extends Agile ALM Platform to Meet the Unique Needs of Global Organizations
Rally Unlimited Edition – Promote Agile practices throughout your organization by providing a complete system-of-record of each product's status, progress and quality across the full idea-to-deployment lifecycle. Sign-up today for your free trial!
iPhone iPad Developers Conference
The iPhone iPad Developers Conference, September 27-29 in San Diego, is the world's premier independent event dedicated to building and marketing apps for Apple's iPhone, iPad and iPod Touch. The format includes 45+ technical classes, workshops and breakout classes. It will also be the first major developer conference after the release of iPhone OS4. CMC subscribers can receive a $100 discount off the Full Event Passport and/or gain free admission to the exhibits (first time registrants only - cannot be combined with other offers) by inserting the code MEDIASPONSOR when prompted on the eRegistration page linked from www.iphonedevcon.com
AgilePalooza - Serious Learning in a Fun Atmosphere
AgilePaloozas are community events sponsored by VersionOne and Agile Journal. These one day conferences provide serious learning in a fun atmosphere. Two tracks are included: Learning Agility and Advancing Agility. Speakers include internationally recognized agile coaches and trainers. The next seminar will be held August 27th in Dallas, TX – use discount code agilejournal and save $20!
Register Here
CollabNet Subversion Edge Improves Governance, Security, Administration
Quickly configure SVN, Apache, and ViewVC with one certified stack, fronted by a powerful UI.
Try our beta version and let us know what you think!



