Help contents
Project Analyzer version history
This version history lists the major improvements and changes in Project Analyzer.
For details and latest updates, see file version.txt in your Project Analyzer directory. Version.txt includes details on each minor update, improvement and bug fix.
Version summary
v10.3 (Feb 2021) VBA Plug v3.3 (Office 2019). Updated code review and reporting.
v10.2 (Feb 2014) VB 2013. Reporting update. Later: VBA Plug v3.2 (Office 2016).
v10.1 (Apr 2013) VB 2012. VBA Plug v3.1 (Office 2013). Compiler const analyses.
v10.0 (Nov 2010) VB 2010. VBA Plug v3 (Office 2010). Analyze logic & .NET assemblies.
v9.0 (Oct 2008) VB 2008. Flaw finder. Analyze directory. PDF output.
v8.1 (Feb 2007) VBA Plug v2 (Office 2007). Print code. XML metrics.
v8.0 (Feb 2006) VB 2005. Enterprise Diagrams.
v7.1 (Sep 2004) VBA Plug v1. Project Metrics enhanced.
v7.0 (Aug 2003) VB 2003. Duplicate code, dead control and DLL analysis. Project Metrics.
v6.2 (Jan 2003) Project Graph: Ctrl/data flow, Form show. File dep analysis.
v6.1 (Aug 2002) Multi-project analysis. COM analysis. References dialog.
v6.0 (May 2002) VB.NET support (VB 2002).
v5.4 (May 2001) VB.NET compatibility check.
v5.3 (Jan 2001) Enterprise Edition with auto-fix and macros.
v5.2 (Mar 2000) Project NameCheck. Support for non-Western character sets.
v5.1 (May 1999) Problem detection. Project Printer code web site. New reports.
v5.0 (Oct 1998) VB 6.0 support. Hypertext view in main window.
v4.2 (Aug 1998) Need report. Hotkey conflicts.
v4.1 (Jan 1998) Project Graph. Comment manual. UI update.
v4.0 (Sep 1997) VB 5.0 support. Analyze Types and Enums.
v3.1 (Feb 1997) Super Project Analyzer. Project Printer. New metrics.
v3.0 (Jun 1996) VB 4.0 support.
v2.1 (Sep 1995) Summary report. DLL report.
v2.0 (Aug 1995) Problem report. Dead var & const detection. FRX view. Metrics.
v1.1 (Mar 1995) Dead procedure detection. Hypertext view. Call trees.
v1.0 (Feb 1995) Initial release with VB 3.0 support
(1994) Pre-release versions with functionality of v1.0.
History: Project Analyzer was born in 1994 in Helsinki, Finland. It was originally a small utility that documented some Visual Basic 3.0 projects. In 1995, Project Analyzer 1.0 was released as a shareware experiment on a website called VBShop. Aivosto Oy, a new company, was established in 1997 to bring Project Analyzer to a professional level. By 2004, Project Analyzer supported all major versions of Visual Basic, including VB.NET and VBA. Since then it has expanded further to cover a considerably wide range of code analysis, diagramming and documentation features.
Despite its long history Project Analyzer is not filled with outdated code but state-of-the-art technology. The key enabler of this development has been the most important programming strategy: Keep the users happy!
Pro, Ent = Feature requires Pro or Enterprise Edition
Ent = Feature requires Enterprise Edition
Version 10.3 (Feb 2021)
Improvements in v10.3
- Office 2019 VBA support official with VBA Plug v3.3.
- VBA Plug robustness improved to cope with error conditions.
- Hex viewer updated in hypertext view.
- Print code and Export code as PDF features enhanced.
- Support Windows 10 high-DPI monitors.
- Dialogs fine-tuned for Windows 10.
- File associations no longer require administrative privileges. The settings now affect the current user, not the whole machine.
- Minor changes with metrics: CC, CC2, CC3, TCC, DECDENS, STMTc, STMTnc, LEN.
- A large number of small fixes.
- Help file modernized. Optimized for mobile devices.
New code review rules in v10.3
- Possibly commented-out code: Clean up your project by getting rid of commented-out lines.
- Rem comment found: Obsolete comment syntax. Mark comments with a single quote (').
- For conditions illogical: The rule detects For..Next loops that won't start, loops that may
iterate just once and loops that may iterate forever.
- For with Step 1 found: Specifying Step 1 in a For statement is redundant.
- Next statement ends multiple For loops: Next i, j was found. For and Next should appear in pairs.
- Let statement found: The Let keyword is obsolete and may be omitted.
- DefType statement found: Relying on DefType may confuse. Declare "As Datatype" instead.
- On Local Error statement found: The Local keyword is redundant. Can rewrite as On Error.
Updated code review rules in v10.3
- Dead line number, Magic number found, Unreachable code: Accuracy of rule improved.
- Default name: Detect default project and module names such as Project1 and Module1. Rule previously detected default control names only.
- Verify accuracy: File constant.txt updated with the latest values of physical and astronomical constants.
Analysis improvements
- Support for some legacy classic VB syntax: If..GoTo, If..Then linenum Else linenum, certain undocumented Global statements, Dim Shared, CDecl, line numbers longer than 5 digits.
- Fixed analysis of single-line functions.
Reporting update in v10.3
- Compiler directives report: New report summarizes compiler directives and compiler constants.
- Summary report to count statement types, branching statistics, decisions and operators.
- Design quality report to analyze the amount of commented-out code, line lengths, whitespace, indentation and tab stops.
- Compiler constants moved from "Constants report" to "Compiler directives report".
- Summary report sections titled "Source file last modified" moved to "File sizes and dates" report.
- Form report updated. Added Form list with filename and caption.
- HTML reports updated. Slight facelift to match PDF reports more closely. Modern HTML tags.
- Minor changes and optimizations in several reports.
Breaking change
- Custom CSS files created for HTML reports in previous versions need to be updated. Use HTML options to get new CSS.
Version 10.2 (2014–2019)
Version 10.2.04 (January 2016)
- Office 2016 VBA support added to VBA Plug v3.2.
- Visio 2016 support in Enterprise Diagrams and VBA Plug.
- Windows 10 support ensured.
Version 10.2.01 (February 2014)
New and improved features in v10.2
- Visual Basic 2013 support added. Project Analyzer v10.2 supports VB versions 3.0, 4.0, 5.0, 6.0, 2002, 2003, 2005, 2008, 2010, 2012 and 2013.
- Project Printer prints formatted code. Pro, Ent
- Non-Western character support improved, including Japanese letters and others.
- Windows 8.1 support ensured.
Reporting update in v10.2
- Printed reports use improved formatting. Now similar to PDF reports.
- RTF reports improved. Improved compatibility with WordPad on Windows 7 and 8. Page headers and margins defined.
- PDF report word wrapping improved.
- Plain-text reports reformatted.
- CSV reports improved for easier data import to Excel.
- 14 individual reports updated. Improved formatting. Added internal links (PDF and HTML reports). Report specific details in file version.txt.
- "String literal report" lists non-ASCII strings for portability check.
- "File list with details" adds a directory list section to help understand project directory tree.
Version 10.1 (April 2013)
New and improved features in v10.1
- Visual Basic 2012 support added. Project Analyzer v10.1 supports VB versions 3.0, 4.0, 5.0, 6.0, 2002, 2003, 2005, 2008, 2010 and 2012.
- Office 2013 VBA support added to VBA Plug v3.1.
- Visio 2013 export supported in Enterprise Diagrams. Ent
- 3 new code review rules, list below.
- Summary report enhanced, including Generated lines count, Lines excluded by conditional compilation, Line labels, Compiler constants, Work effort estimate in man-months, and details on file last modified dates.
- Design quality report enhanced, including Bad fix probability, Object-orientedness and Quality assessment (Overall quality level).
- Compiler constants included in Constant list and Dictionary report.
- Archive dialog improved. Option to create UTF-8 encoded list file.
- Block-level local variables and constants supported in VB.NET.
- Windows 8 support ensured.
New code review rules in v10.1
- "Dead line label or number" — Line label or line number is not used as a jump target.
- "Dead compiler constant" — Compiler constant is defined but not used for conditional compilation.
- "Undefined compiler constant" — Compiler constant is used for conditional compilation but not defined.
Updated code review rules in v10.1
- "Unused file" shows "Exposed" where a file is not used by the project itself, but should
be used by external projects.
- "Condition always True" no longer triggers for Select Case True, as in: Select Case True: Case A=B.
- "Assigned value not used" no longer triggers for variable ex in
Catch ex As ExceptionType.
- For the following problems, the actual conditional expression is displayed: "Conditional block excluded", "Condition always False/True" and "Condition always False/True at run-time".
Removed features in v10.1
- WinZip support removed from Archive feature. Use built-in Zip instead.
- Visio 2002 support removed from Enterprise Diagrams. Use newer Visio.
Version 10.0 (November 2010)
New features in v10.0
- Visual Basic 2010 support added. Project Analyzer v10.0 supports Visual Basic versions 3.0, 4.0, 5.0, 6.0, 2002, 2003, 2005, 2008 and 2010.
- Office 2010 VBA support added to VBA Plug.
- Analyze .NET assemblies and use of the .NET Framework. More Ent
- 31 new code review rules, list below.
- Archive feature rewritten.
- Visio 2010 support in Enterprise Diagrams and VBA Plug.
New code review rules in v10.0 (31 new rules)
- "Magic number found" — A numeric literal is not defined as a constant.
- "Verify accuracy" — A floating point constant may be imprecise.
- "Optional parameter never passed a value" — An Optional parameter is never passed as a call argument.
- "Empty block" — This rule reports empty blocks such as If, Else, Catch.
- "Slow ^ operator found" — Replace ^ by one or more multiplications.
- "CreateObject found" — Use "As New" early binding instead of late binding.
- "Possibly orphaned event handler" — Sub no longer handles any events.
- "Event handler called directly" — Event handlers should not be explicitly called.
- "Implementation called directly" — Should not call a procedure that implements an interface.
- "Event handler should be Private" — Prevent other modules from calling it directly.
- "Implementation should be Private" — Prevent other modules from calling it directly.
- "Non-instantiatable class has instance members" — Instance members are inaccessible.
- "Class/Structure nested inside Interface" — Bad programming style.
- "Unreachable code found" — A block of code never executes because it is not reachable.
- "Variable read before written (along some path)" — Potential logic mistake.
- "Variable read before written" — Variable always contains its default value at this point.
- "Object read before written (along some path)" — Run-time error (null pointer reference) could occur.
- "Object read before written" — Run-time error (null pointer reference) is likely.
- "Assigned value not used" — Useless assignment, check logic.
- "Assigned object not used" — Useless assignment, check logic.
- "Parameter value not used" — Logic flaw: Parameter is overwritten before ever read.
- "Passed value not used" — Receiving procedure doesn't use a value. Could optimize.
- "Loop runs only once" — Potential logic flaw. Why loop just 1 time?
- "Loop runs forever" — No reachable exit from this loop. Potential jam.
- "Condition always True or False at run-time" — Statement is unconditional due to run-time conditions.
- "Rewrite Sub as Function" — Use return value instead of 'out' parameter.
New rules that replace old rules:
- "Microsoft.VisualBasic.Compatibility imported"
replaces old rule "Microsoft.VisualBasic imported". The Compatibility namespace is a style problem while the VisualBasic namespace is not.
- "Conditional block excluded" replaces old rule "Conditional block will not upgrade to
VB.NET" and is now available in all editions.
Finds lines where #If or #Else block condition is False.
- 3 rules replace old rule "Return and Exit statement found":
- Exit Sub|Function|Property found
- Exit statement found (other Exit statements)
- Return statement found (VB.NET)
Code review rules changed
- "ByVal parameter written to" now shows up at each write location.
- "Short name" problem:
- New option: Allow single-character local variables (i, j, k, ...) used as For index variables.
- Allows e As System.EventArgs, Catch ex and short DLL parameter names.
- Reports short Enum constant and Type field names.
New reports in v10.0
Report improvements in v10.0
- File list with details improved.
- Procedure list: Added color. Removed binary procedures.
- String literal analysis: Added color.
- Variable use report sorted alphabetically and clarified.
- Files and projects report can accommodate more projects. Ent
- Problem report by location: Files sorted alphabetically.
- VB.NET compatibility report considers issues with dead code. Ent
- Summary report and Design Quality report improved.
- Module interface report: Sorted hierarchically.
- Module members report: Sorted hierarchically.
- PDF reports: Line wrapping improved.
- PDF reports saved from Display window include page headers and a PDF outline (instead of TOC).
New metrics in v10.0
- dUDTS Dead user-defined types Ent
- dENUMS Dead Enums Ent
- dENUMCS Dead Enum constants Ent
- SDENS Statement density. SDENS=STMT/LLOC Ent
Other improvements in v10.0
- Find duplicate code improved: find case-insensitively, return duplicates within a single file as well. Ent
- Project Metrics .mtx files are now considerably smaller. Ent
- Comment directives added: IN_THIS_PROJECT, ANYWHERE, WHERE condition.
- Syntax errors with comment directives now displayed.
- Considerable performance boost with large XML literals.
- Support high-density displays and smoother ClearType fonts in dialogs. (v10.0.06)
Analysis improvements in v10.0
- Improved detection of default member references.
- Improved detection of COM in/out ByRef parameters. Ent
- Improved accuracy of Overloads resolution.
- Improved accuracy of type inference.
- Improved support of [keyword] syntax.
- Improved support of {..} syntax.
- Improved <Extension()> method support.
- Improved handling of generic types.
- Syntax obj=value is no longer treated as a write to obj
in classic VB. Writing requires the Set obj=value syntax.
- Letting a new value to an object's default property is now
analyzed more accurately. Syntax obj=value in classic VB.
- Added support (no functionality) for XML Axis Properties:
.<tag> and ...<tag> and .@<attrib>
- Added support for Widening Operator CType conversions in
overloaded calls.
Replaced features and breaking changes in v10.0
- Variables and constants report has been replaced by
Variable list and Constant list.
- Macro "Report VarsNConsts" now unsupported. Replace by "Report Variables" and "Report Constants". Ent
- Macro command Analyze supports new parameter BIN.
Parameter COM is obsoleted but supported. Ent
- Auto-fix replacement of "" with vbNullString has been disabled in VB.NET. Use of vbNullString may cause subtle run-time bugs in VB.NET.
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. Ent
- 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. Ent
- 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 across 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. Search for variables, constants, types and enums. Search for any text in your project, or any piece of code (excluding comments and string literals).
- View detailed cross-references for a piece of code by
right-clicking it in the hypertext view.
- Enhanced reports: Module diagrams, Interface report, File list, Design quality report, Summary report, Dictionary report, Problem report, Needs report, Cross-reference report.
- PDF reports.
- Project Printer rewritten.
- Late-bound object member references are solved. (toggle on/off in General options)
- The RTF to HLP file compile option for reports has been replaced by a similar feature for CHM help file compilation. This option is available in Project Printer.
- Metrics features moved to Enterprise Edition.
Older versions
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 [feature removed in v6]
- UI update: VB Browser (hypertext view) integrated in the main window
- Call depth report
Version 4.2 (August 1998)
- Need report
- Hotkey conflicts on Problem report
- Support for line continuation character "_"
Version 4.1 (January 1998)
- UI update: Hypertext, procudure details and file details windows merged into VB Browser window
- Project Graph
- Project Printer supports Comment manuals
- Support for compiler directives (#Const, #If...End If)
- Comment directives ('$ USED) to bypass problem checking
Version 4.0 (September 1997)
- Added support for Visual Basic 5.0
- User defined Types and Enums included in the analysis
- Call tree and Variables and constants window enhanced
Version 3.1 (February 1997)
- Super Project Analyzer
- Project Printer
- Metrics
- Name shadowing report
- HTML reports
- Help file reports
Version 3.0 (June 1996)
- Added support for Visual Basic 4.0
- Hypertext window enhanced
- Call tree enhanced
- Needless globals report
- Variables with no type in Problem report
Version 2.1 (September 1995)
- Summary report
- Generate constants module command
- Look better with Windows 95
- DLL report (v2.1.07)
- Formatted reports on screen (v2.1.07)
Version 2.0 (August 1995)
- New windows: File details, Procedure details, Variables and constants, Call tree
- Show form icon and controls
- File level call trees
- FRX file view
- Show declared functions in DLLs
- Problem report
- Detect dead variables and constants
- New statistics, including cyclomatic complexity and LOC for each procedure
- RTF reports
Version 1.1 (March 1995)
- Find dead procedures
- Variables and constants list
- Procedural call trees
- Hypertext style code viewer
- Find procedure command
Version 1.0 (February 1995)
"Project Analyzer reads VB code and gives reports about the modules, forms, procedures, procedural dependencies and commentation in the code."
- Initial release with Visual Basic 3.0 support
- Functions and subs called by this procedure - and where to find them
- Functions and subs that need this procedure
- Files needed for this module to work
- Detailed file and procedure lists - great for documenting the entire project
- Project file archiving using ARJ or PKZIP
Features:
- Sub and Function lists with comments
- Sub and Function call lists
- File lists with comments
- File call lists with comments
- Procedural dependencies between procedures and files
- Project file archiving
(1995)
Pre-release versions (1994) supported the functionality of Project Analyzer v1.0.
©Aivosto Oy Project Analyzer Help