Help contents
Project Analyzer version history
This version history lists major improvements and changes in Project Analyzer. A detailed version history is in file version.txt in your Project Analyzer directory. Your feedback and ideas for future enhancements are welcome.
Earlier version changes:
v8.1
v8.0
v7.1
v7.0
v6.2
v6.1
v6.0
Pro, Ent = Feature requires Pro or Enterprise Edition
Ent = Feature requires Enterprise Edition
Version 9.0 (October 2008)
New features in v9.0
- Support for Visual Basic 2008. Project Analyzer v9.0 supports Visual Basic versions 3.0, 4.0, 5.0, 6.0, 2002, 2003, 2005 and 2008.
- 52 new code review rules (see below).
- Export source code as PDF.
- Project Printer generates source documentation as PDF.
- View contents of COM and DLL files as pseudo-code.
- View binary files with built-in hex viewer.
- Analyze all source files in a sub-directory tree. Analyze
projects without a .vbproj or a .sln file.
- Module list report classifies modules into groups such as
Definitions, Interface, Abstract class, Concrete class,
Stateless class, Dialog, Standard module and the like.
Useful for learning to understand an existing project.
- <Flaw finder> set of code review rules helps locate logical
mistakes and omissions and prevent future errors.
New code review rules in v9.0
Project Analyzer v9.0 adds 52 new code review rules, pushing the total over 250 rules.
- Dead code detection now finds variables and constants that
appear alive, but that are not so in reality. Existing read or write statements do not actually execute at run-time:
- Variable users all dead.
Variable readers all dead.
Variable writers all dead.
Variable not read, writers all dead.
Variable not written, readers all dead.
- Type field users all dead.
Type field readers all dead.
Type field writers all dead.
Type field not read, writers all dead.
Type field not written, readers all dead.
Type users all dead.
- Constant users all dead.
Enum constant users all dead.
Enum users all dead.
- Dead parameter detection improved:
- Dead parameter.
- ByVal parameter not read.
- Enum related review rules. Locate problems with Enum use:
- "Enum missing zero value" reports Enums that should define the constant zero
(default value).
- "Enum with duplicate value" reports duplicated constants inside Enums.
- "Enum constant expected" appears where a number is used in place of Enum value.
- Select Case and conditional statement related checks:
- "Case branch(es) missing for Enum" compares Select Case
against Enum and finds any unhandled Enum values.
- "Case useless" finds branches that will never execute.
- "Case overlap" triggers when a condition covers a range already
covered by a previous Case.
- "Condition always True or False" reports unconditional branches and loops.
- Other new code review rules:
- "Hard-coded path found" reports directory names, which can cause your program fail on another machine.
- "Trailing comment found" reports end-of-line comments if you prefer full-line comments. Can be handled via auto-fix.
- "Line too long" finds lines longer than your maximum preference. Can be wrapped via auto-fix.
- "ReDim without Dim" warns about implicit arrays missing their Dim statement. Can be added via auto-fix.
- "For index variable not local" warns about a potentially dangerous use of a global or a module-level variable.
- "Write-only property found" reports properties without a Get accessor, or the Get accessor having a smaller scope than Set or Let.
- "Cyclic recursion found" finds potential places of stack overflow.
- "Declare contains ordinal number" reports Declare statements using the rare but brittle "#1" syntax.
- "CVDate found, use CDate" suggests to avoid the Variant function CVDate.
- "Octal number found" locates error-prone numbers (&O10 = 8).
- "Data-only class found" reports classes missing any operations.
- "Dataless class found" reports classes having no internal state.
- VB.NET specific code review rules:
- "Type inference used" finds where the potentially dangerous Option Infer On is in use.
- "Optional parameter in exposed procedure" warns about a cross-language interoperability problem.
- "File with several classes or modules" demands that each file should consist of a single class or module.
- "Implicit variable" warns about implicit variable declarations.
- "RaiseEvent fails via constructor" notifies you when an Event does not always fire.
- "Multiple Return statements found" reports procedures with several exit points.
- "ReadOnly variable expected" reports variables that could be marked as ReadOnly.
- VB.NET class design rules:
- "Shared constructor decreases performance" appears for each Shared Sub New.
- "Parent class inherited only once" appears for classes having just one child class.
- "Shared-only class instantiated" appears if you unnecessarily instantiate a class.
- "NotInheritable expected" appears for classes with only Shared members, not suitable for inheritance.
- "Interface ambiguous" appears when Interface inheritance results in an interface having two methods or properties with the same name.
- "Interface duplicated" detects superfluous interface use via Inherits or Implements.
- "MustInherit class missing MustOverride methods" warns about abstract classes without abstract methods or properties.
- "MustInherit class inherits concrete class" warns you when an abstract class is not on top of the class hierarchy.
- "MustOverride overrides concrete procedure" appears when a class deletes inherited functionality, but does not provide replacement.
- "Shared expected" finds methods and properties that could be declared Shared.
Code review improvements in v9.0
- VB.NET Compatibility Check rules to cover VB2008.
- Option to Ignore dead Property Get/Set/Let if another accessor is
alive. This option allows read&write properties even if read
or write is dead.
- Special warning for an empty procedure when it Overrides an ancestor
class procedure. Empty Overrides deletes functionality of an ancestor
class, which is bad class design.
- "Unused file" problem is enhanced in a multi-project analysis.
It now verifies use for each project separately. You can
then exclude the file from some projects and keep it in those
projects where it is used.
- "Dead parameter" rule can be switched on/off.
- Overrides procedures are not subject to NameCheck, since
their name is defined in an ancestor class.
- Microsoft.VisualBasic imported rule checks project-level
imports in addition to Imports statements.
- More accurate rules for Excess Scope problem (classic VB).
Improved features in v9.0
- Unicode support for international characters (in certain features only).
- Option to load international source in a different codepage.
- Report enhancements:
- Variables and constants report rewritten for clarity.
Added underlying numeric constant values.
- Variable use report shows variable deadness status.
- File sizes and dates report shows line count and file age.
- Library report shows image base addresses for optimizing
the base address of your library projects.
- Dictionary report displays new statistics on names.
- PDF reports greatly improved.
- Image version and compile time displayed for library files.
- Syntax formatting for .sln files in hypertext and print-outs.
- Find window improved:
- Results displayed in an easier-to-read format
- Option to search for "Code or String"
- Print code: New option "Bracket structures" emphasizes conditionals and loops.
- Auto-fix now preserves existing line continuation characters (_) when possible. A continued line gets reformatted only
when the particular line is auto-fixed.
- Analyze several directory trees by creating a .lst file.
- Several performance improvements: end of phase 2/2, display of large
.mtx files, overly large Enums.
Analysis improvements in v9.0
- Added support for single-line Type and Enum blocks.
- Classic VB: Added support for single-line declarations such
as Dim x:Dim y or Sub x:End Sub.
- Support for date literals #10/5/2008 11:25:00#
- Classic VB: Arrays declared with ReDim (without Dim) are now
detected
- Support for generic Structure and Interface (Of T)
- Support for Structures implementing an Interface.
- Overloads resolution improved. The correct Overloads procedure is
now picked more often.
- Accuracy of late-bound call resolution improved by taking account
the number of call arguments.
- COM procedures. If an Optional parameter has an Enum data
type and a default value, the name of the respective Enum
constant is displayed as the default.
VBA Plug changes
- VBA Plug v2 is required for Project Analyzer v9.
Old version VBA Plug v1 is no longer compatible.
- Command line option /Q quits VBA Plug after export.
Removed features
- Project Analyzer no longer supports Windows 95 or NT.
It may work, but support is not maintained.
Version 8.1 (March 2007)
Improvements and new features in v8.1
- VBA Plug v2 supports Office 2007.
- Print code with syntax highlighting.
- Export code as HTML or RTF with syntax highlighting.
- Recursion diagram in Enterprise Diagrams shows recursive procedures. Ent
- Export metrics as XML. New macro: SaveMTXxml. Ent
Improvements in v8.1
- Windows Vista support ensured.
- Visio 2007 support added in Enterprise Diagrams. Ent
- Enterprise Diagrams export as .dot file. Ent
- Copy code to Clipboard with line numbers.
- Multiple monitor support improved.
- Reports improved: File dependency analysis,
Dictionary, Procedure list, Procedure list with details.
- Problem detection improvements
- Literal "" found reported for more cases.
- Global.asax.vb in ASP.NET: Session and Application events
are live code. The following problem is not shown: Parameter with
generic type: sender
- Robust large system analysis improved with
- Huge HTML and MHT reports
- File dependency report
- Project Printer web site
- Added analysis speed
- Project Metrics Viewer to display over 32767 procedures/variables
- Changes with metrics: Fixes for DCALLT, maxDCALLT, MHF and
AHF. New limitation: SCALLT, maxSCALLT and LLOCt are unavailable if computation time exceeds 1 minute. Limit affects very complex systems only. Ent
Version 8.0 (February 2006)
Major improvements in v8.0
- Visual Basic 2005 support. Project Analyzer v8.0 supports Visual Basic versions 3.0, 4.0, 5.0, 6.0, 2002, 2003 and 2005.
- Enterprise Diagrams
is a new diagramming solution. Ent
- Project Graph supports 2 new diagrams:
Pro, Ent
- Instantiation tree shows where classes are being instantiated.
- Data declaration tree shows where classes, structures, interfaces and forms are being used as data types. This graph also shows class instantiations.
- Constants and Enums window lets you review constant names and
values. Locate duplicated constants (for optimization) and
constants with the same name but different values (possible
mistake).
- Variables, constants and parameters window lists your
definitions and lets you locate a variable or constant by
its name or data type. Review the usage of a data type or
look for (un)desired variable or constant names.
- Procedures window lists all procedures. Locate functions and methods quickly.
- Data types window lists Enums, user-defined types, .NET
Structures and COM aliases. Review the definitions and
usage of data types. Review
the definitions and usage of data types.
- Modules window lists all modules.
New reports in v8.0
- Module members
report with several sub-options to list the procedures and/or
variables of each module:
All procedures and variables,
Data input, Data output,
External access, External data input, External data output,
Module data, Private data,
Data read access, Data write access,
Properties,
Procedures,
Methods, Events,
Constructors, Constructors and finalizers,
Procedures with "out" parameters.
- Interface report lists interfaces with implementations.
- Files and projects report lists which project includes which
files. It is useful for determining the use of shared files. Ent
- Super report in Super Project Analyzer lists the dead
code accross all your projects, as well as in which projects
your code is being reused. Pro, Ent
- Variable use report lists the number of live/dead variable
reads & writes. It is useful for locating potentially dead
variables and logical flaws where a variable value might not
be properly set, for example.
- Problem statistics report summarizes the number of problems found by code review.
- Dead code statistics report displays the amount of dead code grouped by deadness type.
- File dependency levels report lists files in their dependency order. You use the File dependency levels report to understand the dependency structure of a system. When you need to make large changes to the system, it may be beneficial to work on a single level at a time.
- Non-cohesive classes report finds classes to split up.
- Subsystem report finds reusable subsystems in a program.
| New metrics in v8.0 Ent |
|---|
Project metrics
VARSgm Global and module-level variables
VARSloc Local variables
ENUMSZ Average Enum size
ENUMR Enum ratio
Rc Reuse of constants
TREADS Total variable reads
TWRITES Total variable writes
TRW Total variable reads+writes
DATADENS Data access density
IOg% Global I/O ratio
maxDCALLT Maximum depth of call tree
maxSCALLT Maximum size of call tree
MOOD2 project metrics for object-oriented code
OHEF Operation hiding effectiveness factor
AHEF Attribute hiding effectiveness factor
IIF Internal inheritance factor
PPF Parametric polymorphism factor
Class metrics
LCOM4 Lack of cohesion of methods
TCCi, TCCl Tight class cohesion
LCCi, LCCl Loose class cohesion
Procedure metrics
IOg Global I/O
IOp Parameter I/O
IOvars Input and output variables
SCALLT Size of call tree
Variable metrics
READS Number of read instructions from variable
WRITES Number of write instructions to variable
RW Number of reads and writes
FLOWS Data flows into and out of a variable
LENV Length of variable name
VARUSR Variable users
|
Project Metrics improvements Ent
- 27 new metrics, see table on the right.
- New metrics reports:
Project metrics report,
Metrics statistics report,
Metric charts,
Project status report,
Compare project status report,
Limits report,
Metrics list,
Correlation analysis.
- Project Metrics Viewer enhancements: XML export, skew, kurtosis, rotated view, save metrics charts as GIF files, improved Regression analysis window.
Code review additions and improvements in v8.0
- New dead code analyses:
- Dead Enum constant.
- Dead Type field.
- Type field written, not read.
- Type field read, not written.
- Variable read, not written.
- Return value not set.
- Unused COM library file. Ent
- Special dead code cases enabled:
Dead NewEnum enumerator in classic VB collection.
Dead Protected Sub Finalize in .NET Structure — Finalize is not called by
the garbage collector.
Dead Overrides procedure.
Dead variable (Shared or not Public) in Attribute class.
- "Too many uncommented lines" rule finds consequtive lines
without any comments in them.
- "Pass ByRef" rule finds call locations where parameters
passed will or may be modified by the called procedure,
possibly causing unexpected side effects.
- "ByRef parameter returns a value" rule finds parameters
whose value is changed and the new value will be returned to
callers, possibly causing unexpected side effects.
- "ByVal parameter written to" rule reports parameters whose
value is changed, but not returned to callers.
- "ByRef parameter read only, consider ByVal" detects
parameters that might be intended to work as ByVal but
that are ByRef by accident.
- "Initializer missing for (local) variable" rule reports
VB.NET variables that are not initialized in the Dim
statement.
- "Assignment to self" rule reports unnecessary or erroneous
assignment statements of type "x = x".
- "Empty procedure" rule now reports procedures having no
executable code. This means that procedures with local
variable or constant declarations will be reported if they
have no executable code.
- Class design rule "Child reuses ancestor member name" now
considers the entire inheritance tree, not just the
immediate parent class.
- "Optional parameter missing default value" is now available
as an individual rule. The same rule was formerly part of
VB.NET Compatibility Check and it was called
"Default param value needed in VB.NET".
Other improvements in v8.0
- VB.NET Compatibility Check has been updated for VB.NET 2005.
Compatibility rules have been refined for migration from VB6 to VB.NET 2005.
A detailed change list is in file version.txt.
The VB.NET compatibility report has been enhanced with more detailed data. Ent
- Project Graph additions: Save graph as GIF file.
New options: Backward links only, Forward links only, Both, Hide binaries.
- Usability: Mouse wheel and Back/Forward button support. "App key" support for context menu. Consistent keyboard shortcuts.
- Interface report enhanced and renamed as Module interface report.
- Line numbers option in hypertext view.
- Project Printer improvements: Save project web site as MHT file.
Enable/disable reports. Enhanced HTML for source code including TITLE
for each hyperlink to show details when mouse hovers over a link.
New ProjectPrinter macro options. Line numbers option. Pro, Ent
- New report file type: MHT web archive.
- More information shown for COM libraries. Ent
- View the bytes required for data storage of user-defined
types and structures, classes and modules.
- Bookmarks for finding frequently reviewed code.
- You can load a .lst file to analyze several solutions,
projects or project groups at once.
- New global constant PROJECT_ANALYZER = True allows you to
write special lines for Project Analyzer only. Add
missing definitions, tweak the analysis or exclude sections
from being analyzed.
- Hotkey option to bring Project Analyzer up from the
background.
- Project Printer and the Uncommented code review rule have been
updated to consider comments above the procedure header line
to be a part of the procedure.
- Flowchart with Visustin. You can send the currently viewed
code directly to Visustin (if you have it) and get a flowchart.
- Types and Enums report shows number of reads and writes to
each field and constant, plus the value of each constant.
- Copy code as HTML to the clipboard. Publish code snippets easily!
- Analysis improvements
- CreateObject, GetObject supported.
- Object instantiation via New, CreateObject or GetObject calls
the appropriate constructor (Sub New) or Class_Initialize.
- Invisible call from Sub New to MyBase.New() is recorded.
- ByRef parameter passing is recorded and ByRef parameters are further
classified as 'in' and 'out' parameters.
- Copy in/copy out semantics are taken into account when
passing a property to a ByRef parameter in VB.NET.
- VarPtr, StrPtr and ObjPtr are handled as
"Address" references and read/write access to data.
- Multiple Inherits for Interfaces are now supported.
- References to default members are resolved, but only when
parentheses follow the object name. Thus:
Collection[.Item](1) is resolved, but
TextBox[.Text] is not resolved because no (..)
follows. FYI: A default member is one whose name you may omit.
- !bang syntax is now supported for COM methods, in addition to VB methods.
Example: Collection!key
- References to enumerators via For Each .. In .. are
resolved.
- Record late-bound procedure calls as "Call late-bound". Search for late binding in your code.
- Overrides and Overloads analysis more accurate
Breaking changes in v8.0
- Changes with metrics. Several metrics have been changed. The scope of the changes
range from almost unnoticeable to breaking changes. Old
metric values may not be comparable to new values. Ent
- Call depth report has been removed. The same information is in the metric DCALLT. Ent
- Default CSS settings for HTML reports have changed. If you
use a custom CSS file, verify the reports still look ok.
- Existing problem detection filters should be updated for the
following fields:
- Old rules "Dead Enum and Type" and "Dead structure" have
been rearranged as:
- Dead Enum
- Dead Structure/Type
Rule 1 now applies to Enums only, whereas rule 2 applies to
user-defined data types both in classic VB and VB.NET.
Review your existing filter settings.
- "Variable/const declared in code" has been split to
- Variable declared in code, and
- Constant declared in code.
Setting 1 will be preserved, you need to update 2.
- Module diagrams report has been superseded by Module members report.
- Some macro commands have been removed or replaced, see Removed macros. Ent
Version 7.1 (September 2004)
- VBA Plug enables analysis of Office VBA projects with Project Analyzer.
- Project Printer enhanced with 12 new reports and a .hhk file for the HTML Site option.
- Auto-fix lets you insert 'TODO:, 'HACK: and 'UNDONE: for VB.NET task list.
- Comment directives enhanced with an IN_THIS_FILE scope and the flagging of an entire call tree as live code with '$PROBHIDE DEAD.
- Macros support new commands: CommentManual, CommentManualUnformatted.
- File associations dialog and an option to define a default directory for file dialogs.
- Project Metrics lets you compare historical development of a
single file, class or procedure.
- Outliers calculated by Project Metrics. Outliers are metric values that are exceptionally high or low.
- New metrics:
Statement counts STMT, STMTd, STMTx, STMTc, STMTnc
Executability XQT
Control density CTRL
Cyclomatic complexity variations CC2 and CC3
Reuse benefit RB
- Enhanced analysis, including support for the !bang operator, VB6's Parent property, .NET Project Imports and .NET cross-project dependencies via a compiled library.
Version 7.0 (August 2003)
- Support for VB.NET 2003. Still supporting VB 3.0-6.0 and VB.NET 2002. Improved support for ASP.NET projects.
- DLL file analysis. Analyze the contents of conventional DLLs. View recommended declaration syntax of Win API calls. (Enterprise Edition)
- Detect dead controls in VB 3-6 projects. Remove controls that are invisible, disabled or outside the visible form area.
- Detect dead classes, modules, structures, interfaces and discarded function return values. Also find semi-dead code such as classes that are never instantiated or interfaces that are not implemented. (See Dead code detection)
- Find duplicate code. Detect repeated lines that frequently result from copy & paste coding. Save space and facilitate maintenance efforts by eliminating duplicate blocks. (Enterprise Edition)
- String literal analysis. Detect and join repeated strings to save space and centralize string definitions. Estimate string data size in executable.
- Prevent resource leaks by requiring destroy/release calls on Win API resource handles.
- Enforce class design rules. Find subtle faults in class declarations. Special rule sets for .NET: Enforce practices on instantiation and destruction. Detect inheritance, scope and naming issues.
- Enhanced style and optimization rules. Constant without type specification, Constant with obsolete type character, Parameter with generic type, Case Else missing, Dim/Const found in code, Base address unoptimal, Compilation unoptimized.
- Project Metrics: Total metrics rewrite. New metrics such as comment density, logical and physical lines, deadness index, length of names, decision and call density, total and relative complexity, class hierarchy metrics, MOOD metrics, Chidamber & Kemerer OO metrics, class interface size, lines in call tree... Store metrics in a database and view historical development. Compare projects. View charts and detect out-of-bounds values. (Enterprise Edition)
- New reports. File lists, Module list, Namespace list, Procedure lists, Form report, Dead procedures report.
- Report to .csv file and import analysis results to Excel.
- Syntax-highlighted copy to Clipboard. Paste color-coded source to your documentation.
- Updated VB.NET Compatibility Check for version 2003. New issues: COM+/MTS not upgradable, COM method not callable. (Enterprise Edition)
- Option to locate web project files referenced via http. This makes it quicker to analyze ASP.NET solutions.
Version 6.2 (January 2003)
- Project Graph new graph types: Control flow graph, Data flow graph and Form show graph.
- New problem detection features: Require explicit clearing of object variables, Empty module, Event not raised, Missing default/cancel button, Option Strict missing, On Error style used, Global variable found, Fixed-length string used, Object variable declared As New, Multi-dimensional array found, Microsoft.VisualBasic imported, Seal method for less overhead, WithEvents adds overhead, Use compound operator += etc., CType slower than DirectCast, Unicode function AscW/ChrW is faster, Constant available for certain Chr/Asc calls. Also added an option to enable/disable dead constants check.
- File dependency analysis finds circular file dependencies.
Version 6.1 (August 2002)
Version 6.0 (May 2002)
- Support for VB.NET added. Now supporting VB versions from 3.0 to 7.0.
- Inheritance tree in Project Graph. Larger graphs possible, as well as detection of two-way file dependencies.
- More powerful Find window.
- View detailed cross-references for a piece of code by
right-clicking it in the hypertext view.
- PDF reports.
- Project Printer rewritten.
- Metrics features moved to Enterprise Edition.
Versions 5 and 4
Version 5.4 (May 2001)
- Enterprise Edition adds VB.NET compatibility check
Version 5.3 (January 2001)
- Enterprise Edition available with problem auto-fix and macros
- More problems detected
Version 5.2 (February 2000)
- Project NameCheck
- New reports
- Support for non-Western source code including Cyrillic, Greek, Hebrew, Arabic etc. characters
Version 5.1 (May 1999)
- Problem detection made more powerful and configurable
- New reports
Version 5.0 (October 1998)
- Added Support for Visual Basic 6.0, now supporting VB 3-6
- Saving and reloading of analysis
- Hypertext view integrated in the main window
- Call depth report
Versions 4.0 to 4.2
- Support for Visual Basic 3.0 to 5.0
©Aivosto Oy - Project Analyzer Help Contents