A Tool for Unraveling the Complexity of ApplicationsCodeRover Browser for Java 2.0


It's been called "the complexity crisis": The sheer number of technologies, tools, and languages used to develop software applications today is making it increasingly difficult for IT teams to find their way around the inner workings of the applications they are charged with maintaining and enhancing. More and more developers are faced with the prospect of plunging into millions of lines of intractable code from a host of sources jammed together into a single system with numerous complicated inheritance relationships and too many hidden details. For help, developers are turning to source-code browsing and navigation tools like the CodeRover Browser from Upspring Software.

"CodeRover" is actually the brand name of a family of desktop software infrastructure applications designed to enhance the productivity of individual and small groups of software developers. Most of those applications come with the browser.

First released in September 2000, the CodeRover Browser is a standalone, desktop source-code browser for C/C++ and Java. The product captures relationships between source-code entities in a personal database for any combination of C, C++, and Java. We recently asked Java specialist and author Mitch Goldstein to test the 2.0 version of this browser component of the CodeRover line.

—John K. Waters
Product Review Editor

[email protected]

2 Cup Rating Version Reviewed: CodeRover Browser for Java 2.0
Current Version: CodeRover Browser for Java 2.0
5 Outstanding 4 Very Good
3 Acceptable 2 Has Potential 1 Poor

ANYONE WHO HAS ever worked on a large project, especially an object-oriented project, probably understands the need for tools to help developers grasp the overall structure of an object architecture. CodeRover Browser for Java is intended to serve as a tool for unraveling the complexity of Java applications. Provided by Upspring Software Inc., Burlington, MA, this tool generates databases of relationship information about a set of Java classes and provides a Swing-based browser application.

CodeRover consists primarily of two major components: a database generator and an information browser. Upspring Software makes some interesting claims about the benefits of this software, including bringing new developers "up to speed in as little as 20% of the time," reducing mentoring time by 60%, and reducing "as-built" documentation construction time by a factor of two to four.

InstallShield is used to manage the installation process. The total disk space used was approximately 52 MB, which seemed rather large. Upon examination of the target directory, it is clear why this is so: The software installs a complete copy of the Java 1.3 Runtime Environment (JRE) and a complete perl implementation, together accounting for 20 MB. Since disk space is no longer considered to be at a premium, this is understandable.

Unfortunately, the first time the product was installed, the target directory name was not handled well by the application. It was installed to a directory called "C:\Code Rover" (blank space in the middle), which the software had trouble understanding. After re-installing to a new directory "C:\CodeRover" (no blank), all seemed to go well.

For this review, I used a common set of software components. I created a JBuilder project to recompile the source code for JavaHelp 1.1, which I used as the input to the database generator. The "Information Model" that was created contained more than 10 MB of information, which was created from just under 600 K of Java source code. In the initial test run of this utility, the "Information Model" took just over six minutes to complete its parsing and generation phases.

Running CodeRover is a two-step process: First, a database is created from a JBuilder project file. By default, the application requests a file with a .dsw extension, which is the default extension for a Visual Studio Workspace. This was the first indication that this utility is primarily designed for C/C++ usage and that its use for Java is more of an afterthought.

For the second part of the process, the browser utility can be used to examine the results and allow the user to navigate around the contents of the project. The interface is evidently developed to use the Swing component set under Java, taking advantage of the flexibility of the JTree, JTable, and JComboBox classes (see Figure 1).

Figure 1
Figure 1. CodeRover browser GUI.

The interface is a split-pane with a tree on the left-hand side showing the hierarchy of the source. The right-hand side is split into a query area and a results area. The graphical interface seemed very cluttered and confusing, with an overwhelming amount of information displayed by default. For example, the names of the source files are prefixed with complete path names and set to all lowercase. This leads to a very tight squeeze for the "ToolTips" that are used to highlight information in the query results and some visual confusion in spotting the Java class names of the project components (see Figure 2).

Figure 2
Figure 2. ToolTips in browser.

There are also some inconsistencies in the use of Swing's Look-and-Feel (LaF): Some components seem to be explicitly rendered in different LaFs, while some are set explicitly to display contents in "monospace" font, "combo boxes," and other text is sometimes clipped due to lack of real estate.

While navigating through the project, it became apparent that it would be difficult to immediately acquire any insight about how the objects might be organized. In an attempt to examine the classes in the javax.help.plaf package, the screen shown in Figure 3 was displayed.

Figure 3
Figure 3. Class navigation.

These results included classes such as java.awt.AWTEvent, which are "used" by the package but not defined. Going to the menu and selecting "Defines| Classes" produces a more sensible output, but also included anonymous classes and classes declared in subordinate packages. It was not clear how to obtain a list of only those classes declared in the package, and it seemed unusual to include information on anonymous classes by default. Overall, the interface seemed perplexing and counterintuitive.

Once the navigation was better understood, the capabilities of Code- Rover became more evident. However, the available functionality seemed to have an unusual mix of Java and C/C++ terminology, such as the use of the terms "module," "typedef" and "constant." This might be useful in a mixed C/C++ and Java environment, but JBuilder does not support this kind of heterogeneous arrangement. The inconsistency described earlier also applies to query capabilities; the term "method" is used in some places, while "function" is used elsewhere.

Another problem that was clearly evident is the lack of information on the items observed. The user interface did not explain where in the code the browsing was taking place, or how one might have arrived at a particular set of results. This product would be very well served by a re-evaluation of the query and results interfaces, which could be less "browser-like" and more like a query-by-example tool.

The results window has four tabs that provide access to a great deal of information, including a call tree and an inheritance tree. These views give a very detailed interpretation of the class hierarchy, but are not that much different than the capabilities already found in JBuilder itself. Since this product is compulsory for the operation of CodeRover, its benefits are questionable (see Figure 4).

Figure 4
Figure 4. Inheritance tree.

One good feature of the product is its ability to examine the source code in the CodeRover browser itself. This allows for a very rapid glimpse of the underlying source code without having to switch between two applications. Also, the editor provides some amount of Java syntax formatting, which is useful in spotting important keywords in the source code.

The documentation that ships with the product is sparse and out-of-step with the software release and contains many errors and omissions, especially on the essentials of how the browser should be used. Inclusion of a prefabricated project and "Information Model" that could serve as a tutorial could make a vast improvement to the quality of this product.

The fundamental purpose of Code-Rover Browser for Java is sensible, but the overall quality of the product needs significant improvement. The difficulty in quickly extracting useful information casts some doubt on Upspring Software's claims of the benefits of this software. There seems to be good potential for this product by virtue of the tremendous amount of information it collects and analyzes, and it is hoped that future releases of this software will take better advantage of it.

Vendor Info
Upspring Software Inc.
15 Third Avenue
Burlington, MA 01803
Phone: 781.359.3300
Fax: 781.359.3399

Review in a Nutshell
  • Generates tremendously detailed database by parsing Java source code.
  • Provides hierarchical views of source code, inheritance, calling, and reference relationships.
  • Displays source code for classes in an integrated syntax-formatted editor.
  • Integrates with other commonly used editors.
  • Allows generation of filtering queries to isolate object elements.
  • Enables grouping of elements.
  • Provides printed output of queries.

  • User interface is cramped and difficult to navigate, some problems with component sizing and look-and-feel.
  • Capabilities of browser interface are not intuitive.
  • Too much crossover to C/C++ concepts.
  • ToolTips are difficult to read and contribute to muddling of the user interface.
  • Menu items change often (items appear and disappear).
  • Difficult to identify sequence of navigation.
  • Path names for modules are changed to lowercase.
  • Deployment scope is too narrow (Windows NT and Windows 2000 only).
  • No ability to export information.
  • Must deploy an additional copy of JRE to use this product, no apparent ability to use an existing installation.
  • Documentation is deficient; no tutorial or sample model provided.

Test Platform:
  • Operating System: Windows 2000 (5.00.2195)
  • Hardware: Pentium III 600 MHz, 192 MB RAM
  • Additional Software: Borland JBuilder 3.5

System Requirements:
  • Operating System: Windows NT 4.0 (SP5 or higher) or Windows 2000
  • Hardware Minimum: Pentium 200 MHz, 128 MB RAM
  • Additional Software: Borland JBuilder

  • Price:
    • Browser for Java: $195 Introductory offer ($595 list); with maintenance: $315
    • Browser for Java and C/C++: $295; with maintenance: $495

    CodeRover Browser for Java 2.0 is available now as a Web download (21 MB) or CD.