Understand简明分析

  • Post author:
  • Post category:其他


Understand全称为Scientific Toolworks Understand,,是一款源代码阅读分析软件,使用它可以大大提高代码阅读效率。此软件亦有架构分析,代码评审与度量,生成软件质量统计与报表等功能。

官方网站:

https://www.scitools.com/features/metrics.php

一.安装

傻瓜式安装,安装过程中使用算号器生成可用序列号填入其中即可。

二.功能概述

(一).代码度量,统计各个方面的指标以确定代码健壮性与重用性,测重代码健康。

(二).代码分析,使用代码规范检查代码,测重代码风格与规范。

(三).代码编辑,包括编辑器,代码大纲,代码属性,代码比较,代码搜索

(四).依赖关系,分析代码各模块之间的依赖关系

(五).支持多种语方,如C,C++,C#,JAVA等

(六).报表输出

(七).统计报告

更详细的说明可参看:


代码阅读分析工具Understand 2.0试用

三.Understand代码度量与Visual Studio代码度量

代码度量是一组软件度量值,使开发人员可以更好地了解他们正在开发的代码。利用代码度量,开发人员可以了解哪些类型和/或方法应该返工或进行更彻底的测试。开发团队可以识别潜在的风险、了解项目的当前状态,并跟踪软件开发的进度。

Visual Studio 2008及其以后的Perfessional及其以上的版本提供了代码度量功能。

VS提供了代码度量最核心的四个指标:Cyclomatic Complexity(圈复杂度),Depth of Inheritance(继承深度),Class Coupling(类耦合度),Lines of Code(代码行数);另外还有一个综合这四个指标得出的一个评估值:Maintainability Index(可维护性指数)。

Understand代码度量则提供了更加详细的分析指标与报告。

如无特殊需求,Visual Studio自带的代码度量即可满足日常使用。

四.重要的度量参数简介

可维护性指数:计算一个介于 0 和 100 之间的指数值,表示维护代码的相对容易度。值越大表示可维护性越好。该计算基于 Halstead Volume、圈复杂度和代码的行数。按颜色标记的等级可用于迅速发现代码中的故障点。绿色等级介于 20 和 100 之间,表示代码的可维护性良好。黄色等级介于 10 和 19 之间,表示代码的可维护性中等。红色等级是介于 0 和 9 之间的等级,表示可维护性低。

圈复杂度:衡量代码在结构上的复杂程度。它通过计算程序流中的不同代码路径的数目(例如 if 块、switch case 以及 do、while、foreach 和 for 循环),然后在总数中加 1 来创建。具有复杂控制流的程序需要更多单元测试才能实现良好的代码覆盖率,并且不容易维护。如果数值在1到4之间,说明代码简明,风险低;如果在5到10,说明代码稳定,结构化良好,风险低;11到20,说明代码有点复杂,风险中等;21到50,说明代码非常复杂,风险高;大于50,说明代码已失控,风险极高。一个正面典型的程序模块的圈复杂度为10,20以内的圈复杂度都是可以接受的。

可以参考以下两篇文章


浅谈软件度量


Project Metrics in Project Analyzer

的Complexity metrics章节

继承深度:指明扩展到类层次结构根的类定义的数目。层次结构越深,则越难了解特定方法和字段是在何处定义或/和重新定义的。在类级别,该数目是通过计算继承树中从 0 开始的类型之上的类型数目(不包括接口)来创建的。在命名空间和项目级别,该计算包括命名空间或项目内所有类型的最高继承深度计算。好的继承层次应在3以内,最好不要超过5层。

类耦合:通过参数、局部变量、返回类型、方法调用、泛型或模板实例化、基类、接口实现、在外部类型上定义的字段以及属性修饰来衡量与唯一类的耦合程度。该计算不包 括基元类型和内置类型,例如 int32、字符串和对象。良好的软件设计要求类型和方法应具有较高的内聚力和较低的耦合。耦合较高表示设计难以重用和维护,这是因为它与其他类型之间存 在许多依存关系。目前还未查到权威文档对此值取值范围的说明,现行目标是尽可能的少。跟据经验,推荐为20以内。

代码的行数:指明代码中的大概行数。该计数基于 IL 代码,因此并不是源代码文件中的确切行数。该计算不包括空白、注释、括号以及成员、类型和命名空间的声明。计数过高可能表示某个类型或方法正在尝试执行过多的工作,应予以拆分。还可能表示该类型或方法难以维护。目前无推荐值。

五.Understand代码度量参数


官方文档

Type

Name

Description

中文说明

Count

AltAvgLineBlank

Average number of blank lines for all nested functions or methods, including inactive regions.

Count

AltAvgLineCode

Average number of lines containing source code for all nested functions or methods, including inactive regions.

Count

AltAvgLineComment

Average number of lines containing comment for all nested functions or methods, including inactive regions.

Count

AltCountLineBlank

Number of blank lines, including inactive regions.

Count

AltCountLineCode

Number of lines containing source code, including inactive regions.

Count

AltCountLineComment

Number of lines containing comment, including inactive regions.

Complex

AvgCyclomatic

Average cyclomatic complexity for all nested functions or methods.

平均圈复杂度(标准计算方式)

Complex

AvgCyclomaticModified

Average modified cyclomatic complexity for all nested functions or methods.

平均圈复杂度(第二种计算方式)

Complex

AvgCyclomaticStrict

Average strict cyclomatic complexity for all nested functions or methods.

平均圈复杂度(第三种计算方式)

Complex

AvgEssential

Average Essential complexity for all nested functions or methods.

平均基本复杂度(标准计算方式)

Complex

AvgEssentialStrictModified

Average strict modified essential complexity for all nested functions or methods.

Count

AvgLine

Average number of lines for all nested functions or methods.

平均行数

Count

AvgLineBlank

Average number of blank for all nested functions or methods.

平均空白行数

Count

AvgLineCode

Average number of lines containing source code for all nested functions or methods.

平均包含代码的行数

Count

AvgLineComment

Average number of lines containing comment for all nested functions or methods.

平均包含注释的行数

Object Oriented

CountClassBase

Number of immediate base classes.

直接基类数,可能的话包括Object类

Object Oriented

CountClassCoupled

Number of other classes coupled to.

对像耦合度,包括.net框架对象

Object Oriented

CountClassDerived

Number of immediate subclasses.

直接子类数

Object Oriented

CountDeclClass

Number of classes.

类的个数

Object Oriented

CountDeclClassMethod

Number of class methods.

静态方法个数,包括静态构造方法

Object Oriented

CountDeclClassVariable

Number of class variables.

静态字段个数

Count

CountDeclFile

Number of files.

文件的个数

Count/ Object Oriented

CountDeclFunction

Number of functions.

函数的个数,不包括接口方法,包括属性方法,构造函数和一般方法

Object Oriented

CountDeclInstanceMethod

Number of instance methods.

实例方法个数

Object Oriented

CountDeclInstanceVariable

Number of instance variables.

实例字段个数

Object Oriented

CountDeclInstanceVariablePrivate

Number of private instance variables.

Object Oriented

CountDeclInstanceVariableProtected

Number of protected instance variables.

Object Oriented

CountDeclInstanceVariablePublic

Number of public instance variables.

Object Oriented

CountDeclMethod

Number of local methods.

本类方法个数

Object Oriented

CountDeclMethodAll

Number of methods, including inherited ones.

本类与继承的方法个数

Object Oriented

CountDeclMethodConst

Number of local const methods.

Object Oriented

CountDeclMethodDefault

Number of local default methods.

Count/ Object Oriented

CountDeclMethodFriend

Number of local friend methods.

Object Oriented

CountDeclMethodPrivate

Number of local private methods.

本类私有方法个数

Object Oriented

CountDeclMethodProtected

Number of local protected methods.

本类保护方法个数

Object Oriented

CountDeclMethodPublic

Number of local public methods.

本类公共方法个数

Object Oriented

CountDeclMethodStrictPrivate

Number of local strict private methods.

Object Oriented

CountDeclMethodStrictPublished

Number of local strict published methods.

Object Oriented

CountDeclModule

Number of modules.

Object Oriented

CountDeclProgUnit

Number of non-nested modules, block data units, and subprograms.

Object Oriented

CountDeclSubprogram

Number of subprograms.

Count

CountInput

Number of calling subprograms plus global variables read.

被调用的次数。被同一方法多次调用只算一次,被字段调用则不计入此数。

Count

CountLine

Number of all lines.

代码行数

Count

CountLineBlank

Number of blank lines.

代码空白行数

Count

CountLineBlank_Html

Number of blank html lines.

Count

CountLineBlank_Javascript

Number of blank javascript lines.

Count

CountLineBlank_Php

Number of blank php lines.

Count

CountLineCode

Number of lines containing source code.

包含代码的行数

Count

CountLineCodeDecl

Number of lines containing declarative source code.

声名类代码行数,方法声名行也记入此数

Count

CountLineCodeExe

Number of lines containing executable source code.

纯执行类代码行数

Count

CountLineCode_Javascript

Number of javascript lines containing source code.

Count

CountLineCode_Php

Number of php lines containing source code.

Count

CountLineComment

Number of lines containing comment.

注释类代码行数

Count

CountLineComment_Html

Number of html lines containing comment.

Count

CountLineComment_Javascript

Number of javascript lines containing comment.

Count

CountLineComment_Php

Number of php lines containing comment.

Count

CountLineInactive

Number of inactive lines.

Count

CountLinePreprocessor

Number of preprocessor lines.

Count

CountLine_Html

Number of all html lines.

Count

CountLine_Javascript

Number of all javascript lines.

Count

CountLine_Php

Number of all php lines.

Object Oriented

CountOutput

Number of called subprograms plus global variables set.

调用其它方法的次数,多次调用同一方法只算一次调用。Return语句算一次调用。

Object Oriented

CountPackageCoupled

Number of other packages coupled to.

Complex

CountPath

Number of possible paths, not counting abnormal exits or gotos.

可以执行的代码路径,与圈复杂度相关

Count

CountSemicolon

Number of semicolons.

分号的数量

Count

CountStmt

Number of statements.

语句的数量,即使把多句话写在一行内,仍然算多次

Count

CountStmtDecl

Number of declarative statements.

定义类语句的数量,包话方法声名行

Count

CountStmtDecl_Javascript

Number of javascript declarative statements.

Count

CountStmtDecl_Php

Number of php declarative statements.

Count

CountStmtEmpty

Number of empty statements.

Count

CountStmtExe

Number of executable statements.

执行类语句的数量

Count

CountStmtExe_Javascript

Number of javascript executable statements.

Count

CountStmtExe_Php

Number of php executable statements.

Complex

Cyclomatic

Cyclomatic complexity.

圈复杂度(标准计算方式)

Complex

CyclomaticModified

Modified cyclomatic complexity.

圈复杂度(第二种计算方式)

Complex

CyclomaticStrict

Strict cyclomatic complexity.

圈复杂度(第三种计算方式)

Complex

Essential

Essential complexity.

基本复杂度(标准计算方式)

Complex

EssentialStrictModified

Strict Modified Essential complexity.

Complex

Knots

Measure of overlapping jumps.

Complex

MaxCyclomatic

Maximum cyclomatic complexity of all nested functions or methods.

最大圈复杂度(标准计算方式)

Complex

MaxCyclomaticModified

Maximum modified cyclomatic complexity of nested functions or methods.

最大圈复杂度(第二种计算方式)

Complex

MaxCyclomaticStrict

Maximum strict cyclomatic complexity of nested functions or methods.

最大圈复杂度(第三种计算方式)

Complex

MaxEssential

Maximum essential complexity of all nested functions or methods.

Complex

MaxEssentialKnots

Maximum Knots after structured programming constructs have been removed.

Complex

MaxEssentialStrictModified

Maximum strict modified essential complexity of all nested functions or methods.

Complex/ Object Oriented

MaxInheritanceTree

Maximum depth of class in inheritance tree.

本类继承层次

Complex

MaxNesting

Maximum nesting level of control constructs.

最大嵌套层次,与圈复杂度相关

Complex

MinEssentialKnots

Minimum Knots after structured programming constructs have been removed.

Object Oriented

PercentLackOfCohesion

100% minus the average cohesion for package entities.

方法内聚缺乏度百分比。其要求类中每一个方法都要使用类中的全部字段。如果使用了3.5以上的自动属性,其自动生成的匿名字段将不会被任何一个方法使用,会导致此度量值不会为最优的结果:0

Complex/ Count

RatioCommentToCode

Ratio of comment lines to code lines.

代码注释率

Complex

SumCyclomatic

Sum of cyclomatic complexity of all nested functions or methods.

圈复杂度之和(标准计算方式)

Complex

SumCyclomaticModified

Sum of modified cyclomatic complexity of all nested functions or methods.

圈复杂度之和(第二种计算方式)

Complex

SumCyclomaticStrict

Sum of strict cyclomatic complexity of all nested functions or methods.

圈复杂度之和(第三种计算方式)

Complex

SumEssential

Sum of essential complexity of all nested functions or methods.

基本复杂度之和(标准计算方式)

Complex

SumEssentialStrictModified

Sum of strict modified essential complexity of all nested functions or methods.



版权声明:本文为CATHY_AA原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。