The Pure Pulse - April 1995


Introduction

Welcome to the April 1995 issue of The PurePulse. The PurePulse is designed to keep you up-to-date on new product and feature announcements and provide technical tips for using Pure Software products. For more information about Pure Software products or services, check out our new home page at

URL: http://www.pure.com.

If you have any questions or comments about The PurePulse, send email to pulse@pure.com.

For more information on any of the topics listed below, send email to info@pure.com for North America, info@europe.pure.com for Europe and info@japan.pure.com for the Pacific Rim, or call 1-800-353-7873 in the U.S. or (408)720-1600 for outside the U.S.

Pure Software Merges with Qualtrak Corp.

We are pleased to announce that Pure Software has acquired Qualtrak Corporation. As the leading provider of UNIX software quality improvement products, we recognize the need to continually update and expand our product offering. By merging the product lines Pure Software becomes the first provider of products that span the entire development cycle.

Both Qualtrak and Pure Software share the same vision: to dramatically improve software quality everywhere. While Qualtrak has historically focused on products for QA engineering, Pure Software has focused on product for developers.

To read more about our expanded product offering see the New Products Section below.

New Products

PureDDTS---a quality management system consisting of a defect tracking component, metrics and reporting system, and integration with configuration management systems. PureDDTS tracks known defects in any product and can be customized to the needs of any organization, company or enterprise. PureDDTS includes a defect organizer that keeps defects separated into projects and over 40 types of management reports.

PureTestExpert---a commercial test management system. PureTestExpert addresses all aspects of test development, test execution, and test maintenance and includes a test execution engine that compiles, executes, and cleans up after testing. Using its internal SQL database, PureTestExpert is capable of managing a single test or the thousands of tests required in large development projects.

Purify Available For SGI Workstations

Purify will be available for developers working on SGI workstations. Purify helps developers quickly and accurately detect run-time errors in UNIX applications. Purify will be integrated with DeveloperMagic, SGI's integrated visual software development environment, providing progammers more development options. Purify will be available for IRIX 5.2 and 5.3 in the 3rd quarter of 1995.

Purelink Now Available For Solaris

PureLink 1.2 is now shipping on the Solaris platform. A drop-in replacement for the ordinary UNIX linker, PureLink is an incremental linker that dramatically reduces build times. It reuses information from prior builds to only relink outdated portions of an executable. PureLink relinks applications in one tenth the time required by the standard linker.

Training

In North America Pure Software training services have expanded to include jumpstart and advanced training for all products; including Purify, Quantify, PureCoverage and now PureDDTS and PureTestExpert.

The new Quantify workshops teach users how to use Quantify's detailed execution information on the most time-consuming functions. As companies become more concerned about building performance into their applications (rather than rushing through performance tweaking before release time), they turn to Quantify. To ensure that development engineers get the most from Quantify we are now offering a "Lunch on Quantify" training program. Be sure to ask about it when you order Quantify!

Technical Support

As a result of customer feedback, North American Technical Support hours will be extended to provide expanded coverage to Pure Software customers. Support is now available from 7:00 a.m. until 6:00 p.m. Pacific Standard Time. North American Technical Support can be reached at 1(408)720-1600 or emailed at support@pure.com. For European Technical Support email support@europe.pure.com and for the Pacific Rim email support@japan.pure.com.

We welcome and encourage your comments so we may continually improve technical support.

Technical Seminars & Trade Shows

Pure Software will begin sponsoring a number of product and educational seminars throughout North America. If you would like more information regarding the topics of discussion or would like to attend one of the following seminars, send e-mail to seminar@pure.com. Additional seminar topics and dates are being developed now.

For international seminar information send e-mail to:

Europe: info@europe.pure.com
Asia Pacific: info@japan.pure.com

North American Seminar Schedule (April & May 1995)!

"Essential Tools for UNIX Software Development Teams"
(These half-day seminars will be held in conjunction with Atria Corporation and Integrated Computer Solutions, ICS.)

May 2: Research Triangle Park/Durham, North Carolina

May 4: Schaumburg, Illinois

May 9: Redwood City, California

May 11: Irvine, California

May 16: New York, New York

May 18: Cambridge, Massachusetts

"Managing Testing and Automating QA"
(Mike Manley, vice-president and general manager of Pure Software will host this series of workshops for QA managers and engineers. Mike Manley has over 15 years experience managing QA teams and was the founder of Qualtrak Corporation, which was recently purchased by Pure Software.)

May 17: Chicago, IL

May 17: Shaumburg, IL

May 18: Denver, CO

May 19: San Francisco, CA

May 22: Boston, MA

May 23: New York, NY

Tradeshows Worldwide

Pure Software will be exhibiting at:

We'll be showing all the latest versions our of the development and testing products. If you'd like any further information or an advance conference program or free pass for DAC only, please contact Marie Martin at e-mail address marie@pure.com.

Pure Software is speaking at DevCon in Weisbaden Germany! A technical team member from Pure Software will be speaking about the "Quality Challenge of Programming in C and C++" May 9th at Software DevCon '95 in Weisbaden, Germany.

Pure Software will be exhibiting at HP World in Ikebukuro, Japan May 31 thru June 2. We'll be showing our products and their integration with the Softbench products from Hewlett Packard. In addition, we will be demonstrating our soon-to-be-released Japanese product versions. For more information please contact info@japan.pure.com.

Technical Hints

PureCoverage Hint

If you are using PureCoverage with applications from a common code base and are experiencing "directory clutter", that is, a proliferation of .pcv files, here's a hint for you.

By default, coverage data for various executions of each program are accumulated into the files app1.pcv, app2.pcv, etc.... If app1 and app2 share a common code base then you may want to direct the results into a common pcv file using the '-counts-file' option. To do this simply:

     % setenv PURECOVOPTIONS -counts-file=/app.pcv

Using X Resources to Control the Purify, PureCoverage and Quantify GUIs

You can use X resources to easily modify the default behavior and set up of the GUIs for Purify, PureCoverage and Quantify. X resources for Purify, PureCoverage and Quantify can be used to control many things like colors of message classes, sort orders, fonts and other default behavior.

Purify and PureCoverage resources

For Purify and PureCoverage, the /UI/app-defaults directory contains a file of X resource information. If that is changed, it will affect all the product users.

In the case that you wish to change your personal defaults you can copy that file and include it in your .Xdefaults file or just modify your .Xdefaults file to override the version. You may have to rerun 'xrdb -merge' to have these resources take effect.

To customize these display aspects under HPUX's vuewm, you can also add resources by following the procedures outlined by HP in their user's guide documentation on HP VUE. The actual procedure depends on the type of session you expect to run.

It is handy to change the colors of the messages in the Purify Viewer to reflect the message class of the error. For instance, you may want ABW, BRK, FMW, and FUM to show up as red because they are all corrupting errors. To do this, specify the following in your .Xdefaults file:

     Purify*Color*enhanceStrings: "ABW", "BRK", "FMW", "FUM"
     Purify*Color*ABW.enhanceForeground: white
     Purify*Color*ABW.enhanceBackground: red
     Purify*Color*BRK.enhanceForeground: white
     Purify*Color*BRK.enhanceBackground: red
     Purify*Color*FMW.enhanceForeground: white
     Purify*Color*FMW.enhanceBackground: red
     Purify*Color*FUM.enhanceForeground: white
     Purify*Color*FUM.enhanceBackground: red
Let's say when the Purify Viewer comes up you always pulldown the View menu to enable displaying the program control buttons on the bottom of the Viewer. You can change the behavior such that they come up automatically when the Viewer comes up. To do so simply add the following line to your .Xdefaults file:
     Purify*viewProgramControls.selected: true
You can modify the default settings for the PureCov Viewer display using the same technique. For instance, the default sort criteria for the PureCov Viewer is number of unused lines. If you would like the default sorting criteria to be alphabetical instead simply add the following line to your .Xdefaults file:

     PureCoverage*sortCriterion: alpha

Quantify resources

Under Quantify, X resources can modify which windows are automatically created, how long and wide the reports are, what data is initially displayed, what scale factors and precision are used, and, for the Call Graph, what colors to use for the River of Time.

It's easy to customize the Quantify viewer using the X resources listed in your .qvrc file. Quantify writes this file in your home directory when you exit the Quantify viewer for the first time. Edit the X resources listed in this file to change the startup behavior of Quantify viewer the next time it is run. The Quantify viewer automatically reads this file on startup so you do not have to use xrdb or interact with vuewm under HPUX to change your Quantify settings.

For example, to automatically create the Function List window on startup and have it display to top 20 functions only with increased precision, change the following lines in your .qvrc file:

     Quantify*wFunctionList.createWindow:         true
     Quantify*wFunctionList.restrictFunctions:    top20
     Quantify*wFunctionList.precision:            dd.ddddd

Verifying Performance Improvements with Quantify

Many users are not aware that Quantify comes with several scripts to aid their performance analysis. An extremely useful script is "qxdiff", which compares two export data files from runs of a Quantify'd program and reports any changes in function performance.

The first export data file often corresponds to data from a baseline run. The second file corresponds to the data from a changed run. Here's an example from a program where we improved the performance of a hash table by re-writing the algorithm to call the "strcmp" routine less often (which resulted in a 25% performance improvement.)

  Differences between:
  program ./test/hash/testHash.pure (pid 23171) collected on 
  sparcstation_lx(50 MHz) by Quantify version 2.0 and
  program ./test/hash/improved_testHash.pure (pid 22877) 
  collected on sparcstation_lx (50 MHz) by Quantify version 2.0.
                 
           Function name         Calls     Cycles   % change
   !                   strcmp   -40822   -1198546  94.53% faster
   !                   putHash       0     -33222   7.13% faster
   !                   getHash       0     -26876   8.10% faster
   !                   remHash       0      -7356   5.82% faster
   !           _malloc_unlocke       0      -3000   6.59% faster
   !                      sbrk       0      -1620  87.85% faster
   !                 cleanfree       0       -810   1.39% faster
   !                  ___errno       0       -540  81.82% faster
   !                testPutHas       0       -540   1.54% faster
   !             fillTestTable       0       -270   0.95% faster
   !                   _doprnt       0       -270   0.07% faster
   !                  realfree       0       -270   0.61% faster
   !                     fgets       0       -270   0.65% faster
   !             testHashTable       0       -270  64.29% faster
   !                    printf       0       -270  69.23% faster
   !               _exithandle       0       -270  85.99% faster
   !                    memcpy       0          5   0.01% slower
   !                    strlen       0         35   0.03% slower
   !                   eucscol       0        192   0.12% slower
   !                 hashIndex       0      10000   1.46% slower
  20 differences; -1264168 cycles (-0.025 secs at 50 MHz)  24.98% 
  faster overall (ignoring system calls).
Each line of the report lists a function whose time differs between runs. Each line contains a character indicating the type of difference, followed by the function name, and the change in the number of times called and the change in the function time recorded. The possible function differences are:

   Symbol   Meaning
    "-"     Called in the baseline run only
    "!"     Called in bother runs; timing changed
    "+"     Called in the changed run only
For functions whose number of calls or function times have changed, qxdiff prints these differences and reports the percentage change relative to the baseline data for that function. Finally, qxdiff summarizes the totaL number of differences and reports the percentage change relative to the baseline data and the changed run. This gives you the information you need to verify how much improvement your changes made.

Automating Performance Regression Tests

If you have an automated overnight build process, you can use the -run-at-exit Quantify option to detect any regression in your program's performance. Simply add a step to the build procedure to Quantify the program and then run it on a standard test data set. The script "qxchange" uses "qxdiff" to compare a saved export file with a given export file for an executable. It then copies the given export file to become the saved export data file for subsequent comparisons.

To run this script during the nightly build, set the environment variable QUANTIFYOPTIONS to:

     '-windows=no -run-at-exit="qxchange %v %x -i"'
The -windows=no option setting specifies that qv should not be run interactively during the automated run. The -run-at-exit option setting specifies that the qxchange script should run whenever the program saves a dataset and that comparisons should ignore system call times.

By default, the output from qxchange is written to stdout. To email the comparison to yourself, you could set QUANTIFYOPTIONS to:

     '-windows=no -run-at-exit="qxchange %v %x -i | mail $USER"'
By making application performance part of your regular regression testing, you can be proactive rather than reactive in your testing. When someone checks in new code that slows down performance you will be able to spot the problem immediately.


[More Information?]

For subscription requests send email to: pulse-request@pure.com
Comments? We'd like to hear from you.
An Index and Help are available.
Copyright 1994 Pure Software Inc. 1309 South Mary Avenue, Sunnyvale, CA 94087 USA. All rights reserved.