[Joanju Logo]
    Joanju Analyst Live Demo Joanju Software

 Home


 Products
      Proparse
      Analyst


 Prices/Licenses
 Purchase
 Services
 Support
 Forum


 White Papers Etc.


 Projects, Utils,
 and Contributors



 Site History
 Contact us
 About Joanju
 Privacy

Home > Analyst > Live Demo

Contents
Terse list of things to try
Scripted Self-Demo
'BOM' XML

About
This page describes a live, online demonstration of Joanju Analyst. Analyst is a web application that is designed to run on your LAN, but for this demonstration, I've placed a small server onto the internet. The application source code being used to demonstrate Analyst is from Prolint (oehive.org/prolint).

Requirements
Internet Explorer does not work with Analyst. Firefox is the preferred web browser, Opera is also tested and supported.

URL and access
http://70.69.227.233:8180/prolint/ is the server. Some of the administrative links have been stripped from the front page of Analyst, such as the link to the Build page. These aren't hard to find, but please don't run them without asking me first.

AutoEdge
http://70.69.227.233:8180/autoedge/ is another copy of Analyst running on the same server. I didn't build any list of things to look at like I did for Prolint, but autoedge/start.p is probably a reasonable compile unit to start browsing from.

About the server
This demonstration is running on a basic home internet connection, on an old 1.7GHz laptop with 500MB RAM. This is not a preferred configuration for Analyst! Please do not view this server's performance as an indication of how Analyst will perform on your LAN. Please pardon any downtime as well - I expect I'll be doing frequent updates. If you find the server is not available when you need it, please email me at john at joanju.com.

Terse list of things to try

From Analyst's front page, submit: prolint/rules/noundo.p as the compile unit for browsing. From there, try these:

  • Click the link at the top of the page ("Rendering ..."). Try each of the links from the popup menu that appears.
  • Click "Collapse all" and "Expand all".
  • Click a green "{" to get a popup menu. Try expand and collapse. Try the link to view the include's source file.
  • Click links in the code, such as RUN, DYNAMIC-FUNCTION, FUNCTION, IN, and PROCEDURE. All of those have popup menus. Try some of the links from those popup menus.

From Analyst's front page, try these search strings:

  • includes:"prolint/core/ttprocedure.i"
  • calls:"prolint/prolintdb/dirstats.w OpenBrowse2"
  • tables:lint_stat_subdir
  • fields:lint_stat_subdir.severity
  • "for each delete"~10

Also see the Search Help page for search syntax explanations and additional syntax. The syntax is not uncommon - you might recognize it from other search engines.

Scripted Self-Demo

In this exercise, we'll browse and analyze a little bit of Prolint's source code. (It doesn't matter if you aren't familiar with Prolint.) In Prolint, many different 'rules' check your source code for compliance. If a rule is broken, it is reported to any number of outputs (as configured by the user). For example, broken rules might be reported to a log file, an HTML report, and a GUI window all at once. Let's analyze the source code to see how this is done.

Assuming we already know that a Prolint rule reports a variable name and the following string, let's use the following (with quotes) in the Search field in Analyst:

  "defined without NO-UNDO"
Only one compile unit will match the search.

Click the link to browse the noundo.p compile unit.

Notice that what we are browsing here is preprocessed, stripped of comments, and pretty printed. Consider how this, in many cases, can make it easier to follow the control and data flow in unfamiliar code.

Popup Menu for the noundo.p Compile Unit

  • At the top of the page, the name of the source file is hyperlinked. Click that link to get a popup menu.
  • In the popup, notice that there are two links: One to view the source, and the other to browse another compile unit, prolint.p, which calls this one. We will follow them both.
  • Right-click the View source link to open it in a new browser tab. That's how easy it is to jump to the original source code, for example to see the source comments. We are done with this new "View source" browser tab and you can close it.
  • Now do the same for the link to prolint.p - right-click to open the link in a new browser tab. Notice that the page opened at the RUN statement which calls noundo.p.
  • Consider how browsing "where used" can make impact analysis much easier.
  • Consider how the browser tabbed interface can make it easier to follow application logic across multiple compile units.
  • We are done with this browser tab and you can close it.
  • We are done with the popup menu, and you can close it.

Notice the links on the left side of the page for Collapse all and Expand all. Click each of those, and notice how include file references are collapsed and expanded.

Click one of the green curly braces ('{') to see its popup menu. Include file references can be collapsed and expanded individually, and there is also a handy link to view the original source file for the include file.

Now let's get back to our task of finding how rules add messages to Prolint's output. In the browse page for noundo.p, find the text:

  defined without NO-UNDO

See that this string is passed as an argument for RUN PublishResult. Click the hyperlinked RUN keyword. See the popup with a link to publishresult in lintsuper.p.

Notice that Analyst was able to figure out that PublishResult is in a super procedure. Consider how this can make it easier to follow the application logic, especially if you are not familiar with the source code.

Use right-click on that link, to open it in a new browser tab. Click on the hyperlinked PROCEDURE text. Note how it is easy to get a list of all calls to a procedure. With the hyperlinks, it is easy to jump to each call and view it for impact analysis.

See that PublishResult does little more than RUN PublishResultSeverity IN TARGET PROCEDURE. The RUN is hyperlinked to the local internal procedure PublishResultSeverity.

Near the bottom of PublishResultSeverity, notice that there is a hyperlink for run GetFilterResult in hpFilterPlugins, and that Analyst was able to provide a link to GetFilterResult, even though it has to find it via a procedure handle.

Now we have found what we were looking for. The rule publishes its results via PUBLISH "Prolint_AddResult". A quick search (from Analyst's front page) for "subscribe to Prolint_AddResult" will return a list of potential subscribers [1]. Now we have learned how Prolint reports results to any number of outputs all at once.


[1] You might have wondered why Analyst doesn't have links between PUBLISH and SUBSCRIBE. It's in the plans! If PUBLISH/SUBSCRIBE is used extensively within your application, please let me know.

'BOM' XML

Analyst is a web application (Tomcat) and any sort of custom scripts can be added to it, accessible simply by opening the script in your web browser. Much of Analyst is delivered as source, and that includes some scripts that are designed to be customized before use. One such script generates an XML 'Bill of Materials' (BOM) for your application (or for a selected subdirectory of your application).

The XML generated by this script can be viewed directly for quick and dirty analysis, or it can be used as a data source for generating databases, documentation, diagrams, etc.

prolint.bom.xlm is a sample output.

One particularly exciting application of this bom.xml file is for loading into UML. Please see oehive.org/UMLFromABL by Thomas Mercer-Hursh (Computing Integrity) for details about that project and the free tool to generate UML.

autoedge.bom.xml.zip is of course output for AutoEdge, and it is a much larger sample; the .5MB zip file expands to about 9MB.