代码线每文件、方法每类的循环的复杂性等。开发商抗拒和解决办法大多数如果不是所有的人!有一个很好的 乔尔的文章 在就(没有时间找到它现在)。

什么代码指标(s)建议使用 自动 确定"蹩脚的代码"?

什么能说服大多数(你不能说服我们所有人的一些蹩脚的度量!O))的开发,这些代码是"胡扯".

唯一指标,可以自动测量数!

有帮助吗?

解决方案

没有关于指标编码式的一部分这样的警告。

对我来说这是关于 静态分析代码, ,这可以真正'on'所有的时间:

我会把复盖范围的试验,在第二个步骤,因为这种测试,可能需要时间。


不要忘记,"蹩脚"的代码有没有检测到的指标,但是通过的 组合演变 (如在"趋势)的指标:看看 什么是迷恋码的指标? 问题。

这意味着你没有只是建议代码的指标"自动识别"蹩脚的代码"",但你还有建议权的组合和趋势分析一起去那些指标。


在一旁注,我分享你的 沮丧 ;),和我不同的观点tloach(在评论的另一个答案)"提出一个模糊的问题,得到一个模糊的回答"他说...你的问题应该得到具体的答案。

其他提示

不是自动化解决方案,但我发现WTF每分钟有用。


(来源: osnews.com

编译时编译器吐出的警告数。

每行生产代码注释掉的行数。通常它表示一个不懂版本控制的邋program程序员。

开发人员总是关注针对他们使用的指标并调用“糟糕”的指标。代码不是一个好的开始。这很重要,因为如果您担心开发人员围绕他们进行游戏,那么请不要将指标用于任何对他们有利/不利的事情。

这种方式最有效的方法是不要让指标告诉您代码蹩脚的位置,而是使用指标来确定您需要查看的位置。您可以通过代码审查来查看,并且在开发人员和审阅者之间决定如何解决问题。我也会因开发人员违反指标而出错。如果代码仍然在指标上弹出,但审稿人认为它是好的,请不要管它。

但是,当您的指标开始改善时,请务必牢记这种游戏效果。太好了,我现在有100%的覆盖率,但单位测试有什么好处?该指标告诉我我没事,但我仍然需要检查一下,看看是什么让我们在那里。

最重要的是,人类胜过机器。

全局变量的数量。

  • 不存在试验(揭示了通过代码复盖)。这不是 一定是 一个指标,代码是坏的,但这是一个很大的警告标志。

  • 亵渎的意见。

指标本身并不能确定蹩脚的代码。然而他们可以识别可疑的代码。

有很多指标OO的软件。一些他们可以很有用:

  • 平均尺寸的方法(在LOC/报表或复杂程度).大型方法可能是一个迹象的糟糕的设计。
  • 许多方法被一个子类。一个大的数字表示坏类的设计。
  • 专业化指数(数字的复盖的方法*嵌套级别/总人数的方法)。高数字表明可能出现的问题类图。

有很多可行的指标,并且他们可以计算使用的工具。这可能是一个好帮助在识别蹩脚的代码。

  • 全球变量
  • 神奇的号码
  • 代码/评论比
  • 重耦合(例如,在C++你可以衡量这种看类的关系或数cpp/头文件的截包括彼此
  • const_cast或其他类型的铸造在相同的码基数(不w/外部库)
  • 大部分代码注释出,并留在那里

我个人最喜欢的警告标志:免费注释代码。通常意味着编码人员没有停下来思考它;加上它会让你很难理解,所以提高了比率。

乍一看:代码习语的货物崇拜应用。

我一看一眼:程序员明显的错误和误解。

我敢打赌:自组织复杂度(CC)与自动化测试(TC)的代码覆盖率相结合。

CC | TC

 2 | 0%  - good anyway, cyclomatic complexity too small

10 | 70% - good

10 | 50% - could be better

10 | 20% - bad

20 | 85% - good

20 | 70% - could be better

20 | 50% - bad

...

crap4j - 可能的工具(用于java)和概念说明 ...寻找C#友好工具:(

对有意义的评论毫无价值的评论:

'Set i to 1'
Dim i as Integer = 1

我不相信有这样的指标。除了代码实际上没有做到它应该做的事情(这是一个额外的疯狂程度)'糟糕'代码意味着难以维护的代码。这通常意味着维护者很难理解,这在某种程度上总是一个主观的东西,就像糟糕的写作一样。当然,有些情况下,每个人都认为写作(或代码)很糟糕,但很难为它编写指标。

另外一切都是相对的。代码执行高度复杂的功能,在最小的内存中,针对每个最后的速度周期进行了优化,与简单的功能相比,在没有限制的情况下看起来非常糟糕。但它并不蹩脚 - 它只是在做它必须做的事情。

不幸的是,没有我知道的指标。需要注意的是,无论您选择什么,程序员都会对系统进行游戏以使其代码看起来很好。我已经看到任何类型的“自动”公制已经到位。

许多与字符串之间的转换。一般来说,这表明开发人员并不清楚发生了什么,只是尝试随机的事情,直到有效。例如,我经常看到这样的代码:

   object num = GetABoxedInt();
//   long myLong = (long) num;   // throws exception
   long myLong = Int64.Parse(num.ToString());

当他们真正想要的是:

   long myLong = (long)(int)num;

我很惊讶没人提到 crap4j

  • 观看了比模式的类比.标准课程。一高比例表明Patternitis
  • 检查神奇的数字不定义为常量
  • 使用模式匹配的实用工具,以检测可能重复代码

有时候,当你看到它时,你就会知道它。例如,今天早上我看到了:

void mdLicense::SetWindows(bool Option) {
  _windows = (Option ? true: false);
}

我只是问自己'为什么有人会这样做?'。

代码覆盖率有一些价值,但除此之外,我倾向于更多地依赖代码分析来判断代码是否很糟糕。

包含亵渎的评论与不支持亵渎的评论的比率。

更高=更好的代码。

评论行/代码行

value> 1 - >不好(评论太多)

value< 0.1->糟糕(评论不够)

根据您自己的经验调整数值; - )

我采用多层方法,第一层是合理的可读性,只能通过所解决问题的复杂性来抵消。如果它无法通过可读性测试,我通常会认为代码不够好。

生产代码中的

TODO: 条评论。只是表明开发人员没有完成任务。

包含30个参数的方法。在Web服务上。就是这样。

嗯,有各种不同的方法可以指出代码是否是一个好的代码。以下是其中一些:

  1. 凝聚力:嗯,代码块,无论是类还是方法,如果发现服务于多个功能,那么可以发现代码的凝聚力较低。凝聚力较低的代码可称为可重用性较低。这可以进一步被称为可维护性较低的代码。

    1. 代码复杂性:可以使用McCabe圈复杂度(决策点数)来确定代码复杂性。代码复杂度很高可用于表示可用性较低的代码(难以阅读和理解)。

    2. 文档:从代码的可用性角度来看,文档不足的代码也可能导致软件质量低下。

  2. 请查看以下页面,了解有关核对清单的代码审核。

这篇关于 Code CRAP Metric 的热门博客文章可能是是有用的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top