什么代码指标(s)说服你提供的代码是"蹩脚"?[关闭]
-
06-07-2019 - |
题
代码线每文件、方法每类的循环的复杂性等。开发商抗拒和解决办法大多数如果不是所有的人!有一个很好的 乔尔的文章 在就(没有时间找到它现在)。
什么代码指标(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服务上。就是这样。
嗯,有各种不同的方法可以指出代码是否是一个好的代码。以下是其中一些:
-
凝聚力:嗯,代码块,无论是类还是方法,如果发现服务于多个功能,那么可以发现代码的凝聚力较低。凝聚力较低的代码可称为可重用性较低。这可以进一步被称为可维护性较低的代码。
-
代码复杂性:可以使用McCabe圈复杂度(决策点数)来确定代码复杂性。代码复杂度很高可用于表示可用性较低的代码(难以阅读和理解)。
-
文档:从代码的可用性角度来看,文档不足的代码也可能导致软件质量低下。
醇>
-
请查看以下页面,了解有关核对清单的代码审核。
这篇关于 Code CRAP Metric 的热门博客文章可能是是有用的。