我想开始测量Michael Feathers所称的代码紊乱,即

churn vs. complexity.

为此,我需要测量C或Java文件的复杂性.所以我发现了一些测量圈复杂度(CC)的工具.它们各自在功能或方法级别上很好地测量CC.但是,我需要一个文件级别的度量标准,并且它们在那里做得不好.一个工具只返回文件中所有方法复杂度的平均值,另一个工具将整个文件视为一个巨大的方法,即它计算整个文件中的所有决策点.

所以我做了一些研究,发现McCabe仅在模块方面定义CC – 并且它们将模块定义为函数 – 而不是文件(参见this presentation的幻灯片20和30).而且我认为这是有道理的.

所以现在我只想弄清楚如何表示文件的复杂性.我的想法是我应该使用该文件的最大方法CC.

有关该方法或任何其他建议的任何想法?

谢谢!

最佳答案 几年前我有同样的问题.我用以下方式回答了它并且它完美地起作用并且对我有用:

最小化复杂性的目的是提高可维护性.循环复杂性是逻辑复杂性的指标,你是对的 – 它适用于最小的“单位”,即功能.可以推导出“总结”指标,例如总计/最大/最小/等,但是当涉及圈复杂度时,它们很少显示有用的东西.我尝试使用’summary’指标来比较2个代码库,但得出的结论是,只有圈复杂度的分布图才真正有用.

那么,什么可以用于表示更大单位/抽象级别(如文件/组件/子系统)的可维护性级别?我发现第一个指标是代码行中单位的大小.如果限制文件的大小(如1000行)并限制文件中每个函数的圈复杂度,则会有相对“简单”的文件,因为它“很小”并且只包含“简单”函数.您可以包含或排除注释/空白行或仅计算语句或仅计算可执行行…

但是,我的结论是,在这个特定的应用程序中并不重要.只是限制一些“大小”指标,它在大多数情况下都可以达到目的.稍后您可以考虑限制每个组件/子系统的代码行总数.它将具有相同的效果 – 组件“简单”,因为它包含“小”数量的“简单”文件.

你提到的帖子非常好.它可以扩展到更广泛的度量,通常被称为“可维护性指数”.如果函数很复杂,文件很大并且频繁更改,测试覆盖率很小等等(在此处添加您认为定义的可维护性),索引非常高.我知道,这是找到重新分解热点的最好方法……

免责声明:我正在寻找执行用例场景的Metrix++工具,我在上面解释过.

java复杂性_如何衡量C或Java文件的复杂性?相关推荐

  1. java书籍_非科班,自学java需要把软件工程的课程全部学习完吗?

    问题一:非科班是否能自学Java.问题二:自学Java是否需要把软件工程课程全部学完?问题三:如何自学Java? 解决问题一:非科班是否能自学Java.不知道你是否有这个担心疑虑,从事Java技术开发 ...

  2. java获取java版本_在运行时获取Java版本

    最简单的方法(java.specification.version): double version = Double.parseDouble(System.getProperty("jav ...

  3. 双表查询java代码_什么是JDBC?Java数据库连接性简介

    JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集.JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首批 ...

  4. java安装_我最喜欢的Java高级开发人员书籍

    java安装 我上一篇博客文章(我对高级Java开发人员的十个最喜欢的在线资源)的想法,是由Xiaoran Wang发表的 "面向高级Java开发人员的十大网站"的启发. Wang ...

  5. java超线程_超线程多核心下Java多线程编程技术分析

    在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述超线程多核心下Java多线程编程技术分析,更多Java专业知识,广州疯狂 ...

  6. spring 加载java类_在Spring中基于Java类进行配置的完整步骤

    在Spring中基于Java类进行配置的完整步骤 发布于 2020-7-7| 复制链接 基于Java配置选项,可以编写大多数的Spring不用配置XML,下面 前言JavaConfig 原来是 Spr ...

  7. 成为java高手_我如何想成为Java

    成为java高手 我喜欢Java. 我喜欢用Java编程. 但是在使用Python一段时间后,我希望对其进行一些更改. 它几乎纯粹是语法上的,因此可能有更好的JVM语言,但是我并不真正感兴趣,因为我仍 ...

  8. 高级java开发_我最喜欢的Java高级开发人员书籍

    高级java开发 我上一篇博客文章 (我对高级Java开发人员的十个最喜欢的在线资源)的想法,是由Xiaoran Wang发表的"面向高级Java开发人员的十大网站"的启发. Wa ...

  9. oracle java认证_如何通过Oracle的Java认证-开发人员实用指南

    oracle java认证 by javinpaul 由javinpaul 如何通过Oracle的Java认证-开发人员实用指南 (How to Pass Oracle's Java Certific ...

最新文章

  1. 年薪70W架构师:全套英语学习资源泄露,手慢则无!(禁止外传)
  2. 集团年终总结的几点体会
  3. 一个晚上,输掉了整个世界!
  4. UVa 10652 (简单凸包) Board Wrapping
  5. ionic overflow:auto失效
  6. Zabbix 添加端口监控链接
  7. java websocket下载_java-websocket.jar免费版
  8. install pymssql on centos
  9. CVPR 2018 最具创意论文 TOP10
  10. Python-UDP编程
  11. CS224N笔记——TensorFlow入门
  12. java 宠物店管理系统
  13. 第一阶段·Linux运维基础 第3章·文件属性、正则表达式、文件权限
  14. 【金融基础设施建设01】金融基础设施建设概论(金融基础设施的定义、现状、国内外标准、基本特征、作用、风险)
  15. gsm手机影响计算机屏幕会怎么样,手机的辐射对孕妇的危害有多大
  16. 王春亮用心接待全国的调养者和学习者
  17. Word2016加载MathType打开时显示“安全警告 宏已被禁用”解决办法
  18. 华为机试2021答案
  19. IntelliJ IDEA中的神仙插件 写代码必备
  20. 海信电视通过U盘安装第三方软件时识别不出APK文件的总结

热门文章

  1. 【USACO 3.1】Contact(01子串按出现次数排序)
  2. 《大话设计模式》学习心得系列(一)
  3. 二一、MDT 2013 Update 1批量部署-客户端批量授权利用KMS服务器激活
  4. 浏览器窗口的高度和宽度
  5. Openvswitch手册(5): VLAN and Bonding
  6. C#基础知识整理:基础知识(1) Main方法
  7. iPhone开发教程之Core Data 常见问题的总结
  8. 你选的那些创业方向 可能正在毁掉你!
  9. html文件执行顺序,网页的加载和执行顺序?
  10. 【Python 爬虫】 1、爬虫基础概念