Last month Joe Berkovitz of Allurent announced the initial experimental release of Flexcover, an open-source code coverage tool suite for Flex, AIR and AS3.
Java developers who participate in the test-driven development (TDD) process have been using code coverage for some time as a way to measure the extent to which the source code of a program has been tested. However, this capability was not been available for Flex.
Tools used in code coverage for Java include Clover, EMMA, Cobertura and NoUnit. Windows.Net developers have used Ncover, Cover for .Net, and PartCover among others.
To learn more about the experimental release of Flexcover, InfoQ spoke with Berkovitz, who explains:
Flexcover incorporates a modified version of the AS3 compiler, which inserts extra function calls in the code within the SWF or SWC output file. At runtime, these function calls send information on the application's code coverage to a separate tool. The modified compiler also emits a separate coverage metadata file that describes all the possible packages, classes, functions, code blocks and lines in the code as well as the names of the associated source code files.
Recalling the development of Flexcover, Berkovitz says:
I consider testing an essential aspect of software development, and code coverage is a key tool for measuring the quality of one's testing. It answers an important question: "How much of our code is being exercised when we test?"
I have used code coverage tools for other languages with excellent results, but have been frustrated that none was available for Flex. One morning, I woke up and realized that thanks to the Flex compiler becoming open source, it would be possible to modify it in order to add coverage measurement functions to the SWF byte code that it creates. As it turned out, this wasn't too hard to do, as I had worked on compilers and code generators in the past.
According to Berkovitz, the major goals behind the design of Flexcover include:
- Capturing and viewing coverage information for AS3 applications in real time
- Making it easy to identify low-coverage areas at a glance
- Saving out reports of coverage information
- Viewing saved coverage reports
- Accumulating coverage data from runs of both automated and manual tests, and
- Analyzing in term.
In developing Flexcover, Berkovitz carefully built up the existing code coverage tools used for other languages. In particular, he says, “I looked at a number of Java open-source coverage tools, including Emma and Covertura, and the way they presented information. Then, I tried to go one better and add live coverage, so you can watch the source code update with coverage numbers while you test the application.”
Berkovitz explains that the structure of Flexcover consists of three parts:
- A set of modifications to the ActionScript compiler, which is written in Java. The result is a modified set of the Java libraries, which support mxmlc and compc, with additional options for code coverage.
- A runtime ActionScript library for collecting data in the application under test and writing it out.
- An AIR application for reading the data written out by the application under test.
Berkovitz is not alone. Alex Uhlmann of Adobe Consulting has been working on a set of ideas related to code coverage for some time, and he will be collaborating in future releases of Flexcover. Berkovitz and Uhlmann are working together on some new user experience ideas.
When asked about involvement from Adobe, Berkovitz told InfoQ: “I can't comment on anything going on at Adobe, but I know that they are interested in code coverage and that people on the Flex team are actively thinking about how to support it. Also, they've been a big help in getting Flexcover off the ground. I'm grateful for that!”