|
| 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: 11492 Trackback(0)Comments (0)
|
| Last Updated on Saturday, 20 October 2007 04:38 |
Agile Marketplace - Announcements and Special Offers
Upcoming Webcasts
Sponsored by Urbancode - On Demand
Mastering Complex Application Deployment
Sponsored by CollabNet - Wednesday, August 24, 2011
Closing the Agile Loop: Continuous Integration, Continuous Information
ScrumWorks Pro – The World’s Best Agile Project Management Tool
Simply put, CollabNet’s ScrumWorks Pro is the best Agile project management solution on the market, bar none. More than 150,000 Agile professionals rely on the power and simplicity of ScrumWorks every day. But don’t take our word for it – try it yourself for free. CollabNet is now providing the first 10 users of ScrumWorks Pro at no charge!
Download ScrumWorks Pro today!
The Business Case for ALM Transformation
Are legacy systems holding your company back? Breakthrough these technical constraints with an open and scalable environment that meets your unique business need to transform. There is no reason to be locked into an obsolete platform. The output of a number of recent transitions from legacy systems, this is practical white paper shares lessons learned and illustrates how guidance and enablement can pave the way for change.
Download this Whitepaper



