NCover 4.2: Improvements for Speed and Scalability

Just in time for Valentine’s Day, the NCover team has released the latest update to the revolutionary NCover 4 platform. NCover version 4.2 is the latest installment of an already groundbreaking suite of code coverage tools for .NET. The improvements for this version are targeted at the larger projects and larger teams that are adopting the new tool set. 4.2 improves the performance of querying large data sets, adds more flexibility in project definition, extends data management with archiving and adds a handful of additional tools to the command line for enhanced build script integration and control.

Browsing speed boost
The only person who ever complained to me about too much speed was my mother. I don’t think that complaint applies to browsing my coverage data, so the faster, the better. NCover 4.2 has a revamped aggregation strategy. Benchmarks show speed increases in raw data aggregation by at least an order of magnitude, and we have seen some increases of 100-fold or more. Coupling this aggregation strategy with pre-aggregation of targeted data for each execution means that the top level aggregate data for your projects are available for browsing much more quickly than any previous release. While smaller projects and software suites will notice speed improvements this is truly the flag-ship upgrade for users with large source code projects.

UpgradingDatastoreAlong with this aggregation strategy come some new tables and indexes in the data store. When you upgrade to 4.2 your data store will be automatically upgraded to include the new structures.  These are additive structures so not data is removed, but it’s always the best practice to backup your data store before upgrading if that’s possible. The default location of the NCover data store on most platforms is c:\ProgramData\NCoverData. By stopping the NCover windows service, this folder can be archived to a zip file and backed up to any media of your choice.

Revised project and filter dialog
Out with the old and in with the new. The old project dialog served us well, but projects and filters are growing larger and demand more flexibility in their creation. The updated versions of the project and filter creation windows feature a data grid entry system for creating process match rules and filter rules.  This grid can be switched to display the rules in a CSV format that is easily copied and reused in other projects or filters. The grid also features sorting and searching.

ProjectMatchRuleGrid
ProjectMatchRuleCSV

In addition to the grid-style editing of rules, the auto-configure option has been overhauled to provide increased control over generated filters. The default behavior in the new dialog is to capture only process match rules and ignore the assembly filters. This can create more efficient and self-maintaining projects since any assemblies encountered in a new coverage run would automatically be included in the coverage scope. If you decide you want to create filter rules (selected by radio button) the check-boxes beside each module appear and have three possible states: blank = create no rule, red X = create exclude rule, and green check = create an include rule. This functionality replaces the forced creation of include rules, which was a limitation of previous versions of NCover 4.

ProjectAutoDetectNoFilter

ProjectAutoDetectWithFilter

Remote control for Collector
The beauty of NCover Collector is the trimmed-down administration of collecting coverage on distributed machines.  Previous versions of NCover 4 still required that you access the local GUI for your Collector machine from the actual desktop of that machine; remote browsing was not available. To ease the work of updating Collector software and to allow inspection of the Collector status, the NCover team has enabled remote browsing of the Collector GUI. Now even the software updates on remote machines can be done right from your local browser.

Archive executions 
The beauty of the NCover 4 product is the ease of maintaining code coverage history for the life-cycle of your product. That also means that over time you’ll have more data displayed and, most likely, more data you’ll eventually want to delete.  In many cases it makes total sense to preserve only the ending snapshot of coverage at each release point in the software life-cycle. That gives enough history for you to see how the coverage of the product is trending over time.  So, when you complete a release cycle the new Archiving capability will allow you to save to zip files any executions that aren’t needed to maintain the integrity of your coverage trend. This feature is available in the GUI of the Desktop and Code Central and is also available from the NCover command line.

ArchiveExecutions

HTML5 in a Server 2003 world
NCover 4.2 has removed the pain of providing an HTML5 browser in the context of Windows Server 2003. For the most part there are only one or two versions of Firefox that will support the Canvas and JSON capabilities required by NCover 4 on the Windows 2003 platform.  All versions of NCover Desktop have come with a trimmed down browser we package as NCover.Explorer.exe.  NCE in this context is tied directly to browsing only the local machine. We’ve packaged this NCE browser with Code Central to ease the pain of inspecting coverage on these older server configurations. Look for NCover Explorer for Code Central on the Programs menu.

Command line Pause
Integration with build servers often requires a little artistry by build managers. In the case of code coverage, there is a fine line between automation and aggressive data synchronization and removal. We have found that in many cases it’s nice to have NCover Collector hold on to a set of data being collected over several testing sessions and then have those executions merged and synced in unison as a single run. Two variants of the Sync command exist in 4.2 “Sync-Enable” and its twin “Sync-Disable”. Using these commands in conjunction with Run and Merge, it is now possible in scripting to control precisely how coverage data is collected and merged remotely before the synchronization to Code Central begins.

Upgrade Note:  The focus of the 4.2 release has been to provide a quicker data browsing experience for our customers with large projects.  There are substantial speed improvements across the board for coverage browsing in this version update.  This upgrade adds new indexing to the data store and re-aggregates all coverage history.  This could be a lengthy process for customers with a large number of coverage runs.  The re-aggregation can be safely interrupted by restarting the NCover Windows service, but any Executions not aggregated will show no coverage results.  The NCover Aggregate command can be used selectively to aggregate specific projects or executions if preferred.

Comments

  1. Wow John, that’s some great information.

    One question though – how do you use the remote abilities to collector? You mention it but don’t provide an example of how to accomplish it. It would save me loads of time.

    • Hey Kris,

      Great question! Sorry for the oversight. You can browse to a collector just like you can to Code Central. Using an HTML5 compatible browser such as Chrome you can hit the Collector by IP or server name and port.

      Examples:
      ht_p://10.4.4.20:11235 or ht_p://my-collector.local:11235

      11235 is the default port for collectors so I would expect this will be the normal use case.

      Thanks for stopping by the NCover blog.

      John