python指标代码pymetrics可用于分析代码文件的复杂性。它们创建了两个不同的指标:
函数和类的McCabe复杂度度量
我想知道这些指标的数值意味着什么,而不是它们的定义。值“1”是什么意思?一个数字‘5’?一个“10”的数字?越高越好还是越低越好?什么数值指的是好代码,什么指的是真正的坏代码?上网搜了一下,给了一些提示,但我不确定分类指的是公制(1)还是公制(2)。我想让这两个数字都有意义。
我认为在你的问题中有一个有问题的假设,即好的代码对于某个度量具有某个值。你不能真正用一个指标来衡量代码的质量,它是一个东西的组合,而且高度依赖于上下文。非常非常高效的代码通常有点难以理解,这是否意味着它是糟糕的代码?
IBM决定通过程序员生成的代码行(SLOC)来衡量70年代程序员的质量。不用说,这导致了一些非常冗长和愚蠢的代码。
如果您想了解代码的质量,那么您需要其他开发人员来查看。最好是比你更有经验的开发人员。一个友好的代码审查对于学习来说是非常棒的,它也会迫使你思考为什么你以你的方式做了一些事情,而不是以其他的方式。幸运的是,stackexchange正好提供了这一点。
来自维基百科
圈复杂度
圈复杂度(或条件复杂度)是一种软件度量(测量)。它是由Thomas j . McCabe Sr .于1976年提出的,用于表示程序的复杂性。它直接测量通过程序源代码的线性独立路径的数量。这个概念,虽然不是方法,有点类似于通过Flesch-Kincaid可读性测试测量的一般文本复杂度。...一段源代码的圈复杂度是通过源代码的线性独立路径的数量。例如,如果源代码不包含诸如if语句或For循环之类的决策点,复杂度将是1,因为代码中只有一条路径。如果代码具有包含单个条件的单个If语句,则代码中将有两条路径,一条路径将IF语句评估为TRUE,另一条路径将IF语句评估为FALSE。
你不能说1
比2
好,这取决于上下文(你写的是什么语言,谁在写代码等)。您应该将循环复杂性值视为可以提示您理解代码的控制流是多么容易。大量嵌套的 if
语句将导致高 A CC。所以理想情况下,你的CC为1(也许每个函数),这是一个函数以一种方式做一件事,而没有别的,但显然这并不总是可能的。您必须评估在上下文中为指标获得的任何值。
你倾向于在用同一种语言编写的其他库中看到什么样的值?不过我不能给你一个数字(抱歉)。我可以说CC值为15可能有点过分,代码应该重构。这是执行脚本/函数的15种不同方式。在测试一个函数时,你需要考虑15种不同的条件,不要忘记所有可能使这15种东西不起作用的因素。你需要对它们进行另一个单元测试,以及值的组合(你明白了)。
源代码行
源代码行数(SLOC)是一种软件度量,用于通过计算程序源代码文本中的行数来测量计算机程序的大小。SLOC通常用于预测开发一个程序所需的工作量,以及评估软件生产后的编程生产率或可维护性。
可可莫
构造成本模型(COCOMO)是由巴利·W·玻姆开发的一种算法软件成本估算模型。该模型使用一个基本的回归公式,其参数来自历史项目数据和当前项目特征。
另一方面,COCOMO并没有真正衡量代码的质量,它是一种软件项目的成本计算模型(COCOMO II),是对最近(90后)软件项目的更新。
Softwaresystems.com这样说
COCOMO II实际上是三种不同的模型:
应用程序组合模型-适用于使用现代GUI构建器工具构建的项目。基于新的对象点。
•早期设计模型——在确定项目的整个架构之前,您可以使用该模型粗略估计项目的成本和持续时间。它使用了一小部分新的成本驱动因素和新的估算公式。基于未调整的功能点或KSLOC。
后架构模型——这是最详细的COCOMO II模型。在开发完项目的整体架构后,您将使用它。它有新的成本驱动因素、新的行数规则和新的方程式。
功能点是一个功能单元,KSLOC 是数千行代码。因此,COCOMO模型用于估计软件项目的成本,时间,所需资源等,而不是评估代码的质量。
问题内容: 函数定义中的下划线是什么意思? 例如 我了解在定义函数时,我可以执行以下操作: 然后,我将其称为而不是,即故意隐藏参数名称吗? 问题答案: Swift需要一个约定来说明函数名称是什么,不仅包括函数名称本身(在括号之前),还包括参数的外部名称。约定是名称后跟冒号。因此,这是一个函数声明(在Swift 2.0中): 这是该函数的名称: 但是,在现实生活中,一个或多个参数有可能(实际上)不会
如图所示,我在主函数之前定义了哈希函数,现在他却回答我“hash”不明确,我不理解
以下项目是从一个在线课程中逐字复制的。它应该显示一个ListView,但什么也不显示。我是一个全新的Android工作室,这只是我在里面的第二个项目。这里有5个文件,我将在下面显示每个文件的内容。我只需要另一双或两双眼睛来发现问题,因为我是“虫子盲”。任何帮助都将不胜感激。 activity_main.xml OurAdapter.java 包com.example.tadhg.uiuxAdapt
尝试使用python生成CGI屏幕。然而,当我从命令行运行它时,我总是得到一个错误,指出它在“print”content-type:text/html\r\n\r\n“行上缺少括号。非常感谢任何帮助。多谢了。
问题内容: 每次尝试编译时,它表明变量可能未初始化。我认为可能是问题所在。告诉我如何在中运行2条语句。 问题答案: d1不在else块中且仅在if或else if块中初始化,因此,如果if()和elseif()块中的所有语句均为false,则控制器进入else块,而d1仍然不是初始化。因此,当您尝试在system.out.println()中访问它时,编译器正确地抛出该错误。您可能想在一开始将值初
问题内容: 这个问题是建立在许多假设之上的。如果一个假设是错误的,那么整个事情就倒塌了。我对Python还是比较陌生,刚刚进入好奇/探索阶段。 据我了解,Python不支持无法创建子类的类( 最终 类)的创建。但是,在我看来,Python中的 bool 类不能被子类化。当考虑到bool类的意图时这是有道理的(因为bool仅应具有两个值:true和false),对此我感到满意。我想知道的是该班级 如