Sonar参数分析_第1页
Sonar参数分析_第2页
Sonar参数分析_第3页
Sonar参数分析_第4页
Sonar参数分析_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Sonar参数分析API compatibility1. API behavior changes-Clirr Plugin正常接口变化数2. API breaks-Clirr Plugin可能引发错误的接口变化3. New API-Clirr Plugin新增接口数4. Total API Changes-Clirr Plugin接口变化总数注:以上参数需要依赖于Clirr,暂时仍存在问题Architecture5. Architecture- Total Quality Plugin架构质量计算方式:ARCH = 100 TITI = Tangle Index6. Architecture

2、 Tangle Index- Total Quality Plugin架构复杂指标Complexity7. Complexity默认复杂度8. Complexity /class默认类复杂度9. Complexity /file默认文件复杂度10. Complexity /method默认方法复杂度11. Complexity Factor- Quality Index Plugin复杂度因素计算方式:CF = (5 * Complexity>30) * 100 / (Complexity>1 + Complexity>10 + Complexity>20 + Comp

3、lexity>30)12. Complexity Factor Methods- Quality Index Plugin方法复杂度因素13. QI Complexity-Quality Index Plugin复杂度质量指标计算方式:(Complexity>30 *10 + Complexity>20 * 5 + Complexity>10 * 3 + Complexity>1) / validLinesDesign14. Design Classes and Methods Complexity- Total Quality PluginNOM = (1 -

4、(class_complexity - 12) / (acel * 12) * 50 + (1 - (method_complexity - 2.5) / (acel * 2.5) * 50 参见1915. Design Coupling Between Objects- Total Quality PluginCBO = (1 - (efferent_coupling - 5) / (acel * 5) * 100 参见1916. Design Depth of Inheritance Tree- Total Quality PluginDIT = (1 - (depth_of_inheri

5、tance_tree - 5) / (acel * 5) * 100 参见1917. Design Lack of Cohesion of Methods- Total Quality PluginLCOM = (1 - (lack_of_cohesion_of_method - 1) / (acel * 1) * 100 参见1918. Design Response for Class- Total Quality PluginRFC = (1 - (response_for_class - 50) / (acel * 50) * 100 参见1919. Design Quality- T

6、otal Quality Plugin设计质量计算方式:DES = 0.15*NOM + 0.15*LCOM + 0.25*RFC 0.25*CBO + 0.20*DIT NOM = (1 - (class_complexity - 12) / (acel * 12) * 50 + (1 - (method_complexity - 2.5) / (acel * 2.5) * 50 LCOM = (1 - (lack_of_cohesion_of_method - 1) / (acel * 1) * 100 RFC = (1 - (response_for_class - 50) / (ace

7、l * 50) * 100 CBO = (1 - (efferent_coupling - 5) / (acel * 5) * 100 DIT = (1 - (depth_of_inheritance_tree - 5) / (acel * 5) * 100Acel参数因子的值可以在Sonar setting页面配置。每一个度量标准的默认阙值也可以进行配置(例如,50是response_for_class的默认阈值)。20. LCOM4(Lack of cohesion of methods)用来说明class内部方法和变量之间的关系, 值越大, 说明内聚性越差. 一般情况下 LCOM4=1是

8、内聚性最佳的. 2说明可以拆成两个类, 以此类推.但是这种测量对门面服务类来说不适用. 有时候很小的类也会根据需要合并在一起, 尽管关联不大21. Package tangle index包复杂指数此参数为包的复杂等级,最好的值为0%,意味着包之间没有圈依赖;最差的值为100%,意味着包与包之间的关系特别的复杂。该指数的计算公式:2 * (package_tangles / package_edges_weight) * 100.22. RFC(Response for Class)通过检查一个方法被调用的情况来反映一个class的复杂程度. 也可以简单的理解为一个类所包含的方法多寡.23.

9、Suspect LCOM4 densityLCOM4密度值Documentation24. Comment linesJavadoc、多行注释、单行注释的总数。空注释行、头文件中的注释(主要用于定义许可证)以及commented-out行均不会包括在内。25. Commented-out LOC注释掉的代码行数。Javadoc块不会被扫描26. Comments (%)注释行数/(注释行数+有效代码行数)27. Public documented API (%)添加注释的公有API占总的公有API的百分比28. Public undocumented API公有API未添加注释个数Duplic

10、ation29. DRYness - Total Quality PluginDRYNESS = 100 - Duplicated lines density30. Duplicated blocks重复块数31. Duplicated files重复文件数32. Duplicated lines重复行数33. Duplicated lines (%)重复行占总行数的百分比34. Useless Duplicated Lines-Useless Code Tracker无用的重复行数;当前的Sonar告诉你有50重复的行数,但是不能告诉你是有两块25行的代码重复(这样你可以节省25行代码)还是

11、有5块10行(这样你可以节省40行代码)的代码重复;通过这个插件,你可以获取到额外的信息。General35. Analysability Value- SIG Maintainability Model可理解性请查看37指标后的详细介绍36. Changeability Value- SIG Maintainability Model可扩展性37. Stability Value- SIG Maintainability Model稳定性38. Testability Value- SIG Maintainability Model可测试性可维护性可通过7个质量特性来衡量:可理解性可测试性可

12、修改性可靠性可移植性可使用性效率这个插件标示了一个Software Improvement Group(SIG)可维护性模型这个模型需要两步: 计算基数的指标,然后结合他们计算出更高层面上的数值。每一个指标被分成5级别排名:从-(很糟糕)到+(非常好)第一步加上基数的指标。Volume: 基于代码的行数RankLOC - > 1310000- > 6550000 > 246000+ > 66000+ > 0 Duplications: 基于代码重复的密度RankDuplication- > 20%- > 10%0 > 5%+ > 3%+ &

13、gt; 0% Unit tests: 基于单元测试覆盖率RankCoverage+ > 95% + > 80%0 > 60%- > 20%- > 0%Complexity:基于方法的圈复杂度第一步根据圈复杂度的范围确定在方法代码行中的百分比。Eval Complexity Very high > 50 High > 20 Medium > 10 Low > 0 然后根据分布,我们使用下面的表格来计算等级:Rank Medium High Very High + < 25% < 0% < 0% + < 30% <

14、 5% < 0% 0 < 40% < 10% < 0% - < 50% < 15% < 5% 否则等级是-Unit size: 基于方法代码的行数第一步根据行数的范围确定方法代码行数的百分比。Eval LOCsVery high > 100High > 50 Medium > 10 Low > 0 然后根据分布,使用下面的表格来计算等级:Rank Medium High Very High + < 25% < 0% < 0% + < 30% < 5% < 0% 0 < 40% <

15、10% < 0% - < 50% < 15% < 5% 否则等级为-第二步是通过一个简单的平均,将他们结合起来,使用以下映射表来确定最终等级.VolumeComplexityDuplicationsUnit sizeUnit testsanalysabilitychangeabilitystabilitytestability因此4个代表软件可维护性四维的先进指标。可选项,通过将4个指标简单的结合在一块,可以得到可维护性排名。需要注意的是,图表的颜色代表实际结合后的值,从红色=-到绿色=+.39. Profile version未知未知40. Quality Index

16、- Quality Index Plugin计算方式:QI = 10 - 4.5 * coding - 2 * complexity - 2 * coverage -1.5 * style41. SIG MM- SIG Maintainability ModelSIG可维护性模型,参考3742. Technical Debt ($)-Technical Debt Plugin清除所有技术债务需要的花费43. Technical Debt in days-Technical Debt Plugin需要多少人日去解决技术债务44. Technical Debt ratio-Technical De

17、bt Plugin技术债务占整个项目的比例45. Total Quality- Total Quality Plugin总体质量计算方式:TQ= 0.25*ARCH + 0.25*DES + 0.25*CODE + 0.25*TSManagement46. Burned budget燃尽预算47. Business value商业价值48. Team size团队规模注:以上变量为手动输入变量,另外这里可以添加一些自定义的变量Rules49. Blocker violations阻碍性违规50. Code Quality- Total Quality Plugin代码质量计算方式:Code =

18、 0.15*DOC + 0.45*RULES + 0.40*DRYNESS DOC = Documented API density RULES = Rules compliance index DRYNESS = 100 - Duplicated lines density51. Critical violations严重违规52. Dead Code- Useless Code Tracker无作用程序代码53. Info violations建议级别违规54. Major violations重要违规55. Minor violations次要违规56. Potential Dead C

19、ode- Useless Code Tracker当前代码中未使用的protected方法数目;此参数可通过PMD :UnusedProtectedMethod或者SQUID:UnusedProtectedMethod获取到。计算他们行数的和值。57. QI Coding Violations-Quality Index Plugin代码违规质量指标(PMD规则指数)计算方式:(Blocker * 10 + Critical * 5 + Major * 3 + Minor + Info) / validLines58. QI Coding Weighted Violations-Quality

20、 Index Plugin代码违规权重指标59. QI Style Violations-Quality Index Plugin风格违规质量指标(CheckStyle规则指数)计算方式:Style = (Errors*10 + Warnings) / ValidLines * 10QI = 10 - 4.5 * coding - 2 * complexity - 2 * coverage -1.5 * style60. QI Style Weighted Violations-Quality Index Plugin风格违规权重质量指标61. Rules compliance遵守规则率62.

21、 Security rules compliance- Security Rules PluginSecurity规则遵守率63. Security violations- Security Rules Plugin符合Security规则数目64. Violations违规总数65. Weighted Security Violations- Security Rules PluginSecurity规则权重值(总数)Size66. AccessorsGetter及setter方法的数量 / Getterspublic String getName()   &#

22、160; return ;public boolean isParent()     return this.isParent;/ Setterspublic void setName(String name)      = name;public void setIsParent(boolean isParent)     this.isParent = isParent;67. Artifact

23、Size (Kb)- Artifact Size Plugin记录最终产品大小68. Classes类总数69. Files文件数70. Lines文件中行数71. Lines of code代码行数72. Methods方法数目73. Packages包数目74. Public API公共类、公共方法(不包括访问器)以及公共属性(不包括public final static类型的)的数目。75. StatementsJava语言规范中没有块定义的语句数目;此数目在遇到含有if, else, while, do, for, switch, break, continue, return, th

24、row, synchronized, catch, finally等关键字的语句时增加。例如:/i = 0;if (ok)if (exit) if (3 = 4);if (4 = 4) ; else trywhile(true)for(.).语句数目不会随着以下情况增加,类、方法、字段、注释定义、包以及import定义。76. Total Useless Code- Useless Code Tracker可以删除的代码行数Tests77. Coverage覆盖率78. Line coverage行覆盖率79. QI Test Coverage-Quality Index Plugin测试覆盖

25、率质量指标80. Skipped unit tests忽略的单元测试数81. Testing Quality- Total Quality Plugin测试质量计算方式:Test = 0.80*COV + 0.20*SUC COV = Code coverage SUC = Unit Tests success density82. Uncovered lines未覆盖行数83. Unit test errors单元测试出错数84. Unit test failures单元测试失败数85. Unit test success (%)单元测试成功率86. Unit tests单元测试个数87.

26、Unit tests duration单元测试需要的时间SCM88. CommitsSVN库总的提交数89. Last commit最近的一次提交时间SQALE90. SQALE RatingSQALE(Software Quality Assessment based on Lifecycle Expectations)评级;基于生命周期期望的软件质量模型91. SQALE Remediation CostSQALE整治成本附录92. Sonar插件插件名称插件介绍度量参数ABAPABAP项目插件Artifact Size衡量项目产品的大小Artifact Size (Kb)Branding

27、允许添加Logo到Sonar界面上Build Breaker在有一个警报阈值满足时,停止分析处理CC项目插件C RulesC规则插件Clirr检查Java库二进制文件及源代码与之前版本的兼容性API behavior changesAPI breaksNew APITotal API ChangesClover通过Atlassian Clover(收费)获取覆盖率CobolCobol项目插件CrowdAtlassian Crowd在Sonar上的认证委托Email分析报告可通过Email进行传输EmmaEmma是替代Clover和Cobertura测量单元测试代码覆盖率的工具FlexActio

28、nScript项目插件French Pack法语包Google Calendar将Google日历集成到SonarGreenPepper收集GreenPepper Maven plugin提供的测试报告到Sonar上GroovyGroovy项目插件JMeter在Sonar上展示JMeter测试结果JaCoCoJaCoCo是替代Clover和Cobertura测量单元测试代码覆盖率的工具JavaScriptJavaScript项目插件Jira从Jira服务中收集项目缺陷的数目LDAPLDAP在Sonar上的认证委托Mantis从Mantis BugTracker中检索项目缺陷的个数Motion

29、Chart显示一组指标随着时间的演变(需要接入互联网)NaturalNatural项目插件PAM允许Sonar在*nix box上使用PAM认证PDF ReportPDF报告插件PHPPHP项目插件PL/SQLPL/SQL项目插件Quality Index根据编码规范、样式、复杂度、覆盖率计算一个全局的质量指标QI Test CoverageQI Style Weighted ViolationsQI Style ViolationsQI Coding Weighted ViolationsQI Coding ViolationsComplexity FactorComplexity Fact

30、or MethodsQI ComplexityQuality IndexRadiator使用treemap显示度量指标SCM Activity从SCM收集和报告信息。CommitsLast commitSIG Maintainability ModelSIG可维护性模型接口SIG MMTestability ValueStability ValueChangeability ValueAnalysability ValueSecurity Rules检测一组已定义的安全规则Weighted Security ViolationsSecurity violationsSecurity rules

31、 complianceSonar Cutoff Plugin通过日期排除要分析的文件;所有从最后修改时间到配置的截止时间之内的源文件都被排除在外。当你需要分析在现有代码基础上新增代码或修改时,这可能是有用的。这种方式对于以前各阶段的分析不会影响分析结果。Sonar Piwik PluginPiwik(/)是一个开源的可替换Google Analytics来使用的网络分析软件,特别是在内部网站。Piwik插件可以将Sonar上个人浏览活动的记录提交到Piwik服务器。Sonargraph通过循环依赖及其他架构方面的指标提供架构改进功能SQALE基于生命周期期望的软件

32、质量评估SQALE Remediation CostSQALE RatingSpanish Pack西班牙包Switch Off Violations关闭违规检查Taglist分析代码中像TODO或者/TODO的标记Technical Debt以美元计算修复源代码中所有质量问题所需要的工作量Technical Debt ratioTechnical Debt in daysTechnical Debt ($)Timeline高级时间机器(time machine)图表(需要连入互联网)Total Quality将代码质量、设计、架构及测试质量结合在一块提供项目的整体质量度量Testing Qu

33、alityCode QualityTotal QualityDrynessDesign QualityDesign Response for ClassDesign Lack of Cohesion of MethodsDesign Depth of Inheritance TreeDesign Coupling Between ObjectsDesign Classes and Methods ComplexityArchitecture Tangle IndexArchitectureTrac从Trac中检索和报告项目问题Useless Code Tracker查找项目内重复源代码Tota

34、l Useless CodePotential Dead CodeDead CodeUseless Duplicated LinesViews创建项目的树状图,项目按照应用程序进行分类,应用程序按照小组来进行分类,小组按照部门进行分类Visual BasicVisual Basic项目插件Web分析Web代码Xml分析XML和XHTML文档fb-contrib新的FindBugs规则Checkstyle使用Checkstyle 5.1分析Java代码Cobertura使用Cobertura.获取覆盖率Core提供覆盖到所有语言的通用组件Database Cleaner清除旧的或无用的数据,来提

35、高数据库性能Design分析Java字节码来计算O.O.度量值并提取资源之间的依赖关系Duplications查找项目中重复的源代码Email notificationsEmail通知English Pack英语包Findbugs使用分析Java代码Google analytics将Google Analytics跟踪脚本添加到Sonar应用程序PMD使用分析Java代码Squid for JavaSquid分析JavaSurefire使用Surefire获取单元测试结果93. Sonar帮助文档中的度量值度量是Sonar的核心,有效的使用Sonar,需要完全了解每个参数的定义和计算方式。Na

36、meKeyDescriptionPhysical lineslines回车数目Comment linescomment_lines Javadoc、多行注释、单行注释的总数。空注释行、头文件中的注释(主要用于定义许可证)以及commented-out行均不会包括在内。/* * This is a javadoc block *  <- empty comment line considered as a blank line */  <- empty comment line considered as a blank l

37、ine/* * This is a multi-comment block */ This is a single-comment block/ log("Debug information"); <- commented-out line of code is not a comment lineCommented-out lines of codecommented_out_code_lines注释掉的代码行数。Javadoc块不会被扫描/* someoneCommentMeOutOneDay();* nobodyKnowWhatAmISupp

38、osedToDo();*/Lines of codenclocphysical lines - blank lines - comment lines - header file comments - commented-out lines of codeDensity of comment linescomment_lines_densitycomment lines / (lines of code + comments lines) * 100%Packagespackages包数目Classesclasses类的数目,包括内部类、接口、枚举及注释标签Filesfiles分析的文件数目D

39、irectoriesdirectories分析的目录数目AccessorsaccessorsGetter及setter方法数目,通过get(reading)或set(writing)一个类属性/ Getterspublic String getName()     return ;public boolean isParent()     return this.isParent;/ Setterspublic void setName(String name) &#

40、160;    = name;public void setIsParent(boolean isParent)     this.isParent = isParent;MethodsFunctions方法数目,不包括访问器。一个构造函数算作一个方法Public APIpublic_api公共类、方法(不包括访问器)以及属性(不包括public final static修饰的属性)Public undocumented APIpublic_undocumented_api不包含javadoc块的

41、公共API数目Density of public documented APIpublic_documented_api_density(public API - undocumented public API) / public API * 100%Duplicated linesduplicated_lines重复的物理行数Duplicated blocksduplicated_blocks重复的代码块数Duplicated filesduplicated_files涉及到重复代码的文件数目Density of duplicated linesduplicated_lines_densit

42、yDuplicated lines / Physical lines * 100%StatementsstatementsJava语言规范中没有块定义的语句数目;此数目在遇到含有if, else, while, do, for, switch, break, continue, return, throw, synchronized, catch, finally等关键字的语句时增加。例如:/i = 0;if (ok)if (exit) if (3 = 4);if (4 = 4) ; else trywhile(true)for(.).语句数目不会随着以下情况增加,类、方法、字段、注释定义、包

43、以及import定义。Complexitycomplexity圈复杂度也被称为McCabe度量。它简单归结为一个方法中if , for , while等块的数目。当一个方法的控制流分割,圈计数器加1.除不被认为是方法的访问器外,每个方法默认有最小的值1,所以不会增加复杂度。对于以下的每一个java关键字/语句,圈复杂度均会加1:ifforwhilecasecatchthrowreturn (当不是一个方法最好一个语句时)&&|?注意else, default及finally不会增加CCN的值。另一方面,一个含switch语句及很大块case语句的简单方法可以拥有一个令人惊讶的高

44、的CCN值(同时,当将switch块转化为等效的if语句时,它具有相同的CCN值)。例如,下面的方法具有5的复杂度。public void process(Car myCar) <- +1 if(myCar.isNotMine() <- +1 return; <- +1 car.paint("red"); car.changeWheel(); while(car.hasGazol() && car.getDriver().isNotStressed() <- +2 car.drive(); return;Average complex

45、ity by methodfunction_complexity方法的平均圈复杂度Complexity distribution by methodfunction_complexity_distribution方法复杂度的分布Average complexity by classclass_complexity类的平均圈复杂度Complexity distribution by classclass_complexity_distribution类复杂度的分布Average complexity by filefile_complexity文件平均复杂度Violationsviolation

46、s违规总数New Violationsnew_violations新的违规数目xxxxx violationsxxxxx_violationsXxxxx级别违规的数目,xxxxx为阻碍、严重、主要、次要和建议New xxxxx violationsnew_xxxxx_violations新的Xxxxx级别违规的数目,xxxxx为阻碍、严重、主要、次要和建议Weighted violationsweighted_violations通过每个级别的相关系数,违规权重的总和(Sum(xxxxx_violations * xxxxx_weight))Rules compliance indexviol

47、ations_density100 - weighted_violations / Lines of code * 100Unit testsTests单元测试数目Unit tests durationtest_execution_time执行单元测试的时间Unit test errortest_errors单元测试发生错误的数目Unit test failurestest_failures单元测试以不符合预期的异常失败Unit test success densitytest_success_density(Unit tests - (errors + failures)/ Unit tes

48、ts * 100Skipped unit testsskipped_tests跳过的单元测试数目Line Coverageline_coverage行覆盖率Line coverage = LC / EL其中LC 覆盖的行数 (lines_to_cover - uncovered_lines)EL 可执行的代码行数 (lines_to_cover)New Line Coveragenew_line_coverage新代码或更新代码的行覆盖率Branch coveragebranch_coverage分支覆盖率Branch coverage = (CT + CF) / (2*B)其中CT 条件至少

49、一次为“true”的分支CF 条件至少一次为“false”的分支(CT + CF = conditions_to_cover - uncovered_conditions) B 分支的总数量 (2*B = conditions_to_cover)New Branch Coveragenew_branch_coverage新的或更新代码的分支覆盖率Coveragecoverage覆盖率coverage = (CT + CF + LC)/(2*B + EL) 其中CT -条件至少一次为“true”的分支CF -条件至少一次为“false”的分支LC -覆盖的行数(lines_to_cover - uncovered_lines) B -分支的总数量(2*B = conditions_to_cover)EL 可执行代码的总行数 (lines_to_cover)New Coveragenew_coverage新的或更新代码的覆盖率Conditions to Coverconditions_to_cover单元测试覆盖的条件总数New Conditions to Covernew_conditions_t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论