刚刚做了统计,当前我们的项目的函数已经达到了8000以上。这样多的代码,如何找出要优化的?
以往的做法都是用代码矩形法。这个矩形的长度为代码行数,宽度为代码嵌套深度,公式为: 代码矩形面积= 代码行X代码嵌套深度 [1000copy 2010.3]
面积越小,效果往往越好。
事实上,以往的代码评审,都是基于这样的一个理论,大概的看看代码行和嵌套深度,选择出要优化的代码,然后根据重构的思想来提出建议。
还有一个做法,叫做圈复杂度。什么是圈复杂度?它的基本想法是直线代码最好读,完全是直线的圈复杂度=1,然后多一个if foreach,for就加1,多一个and,or,not在加1,反正有控制指令出现,就要+1,因为控制指令比如导致代码变得曲曲折折的,因此会提升阅读代码和调试代码的时间。
圈复杂度最找我在《代码大全2》看到,Steve Mcconnel 在这本书上用了比较多的篇幅来讲圈复杂度。举了例子:
void foo()
{
if(!visible)
doSomething();
}
这个代码的圈复杂度就是3.因为初始值为1,有一个if ,一个not,因此圈复杂度为3.
依我看, 代码行X代码嵌套深度X圈复杂度 就是非常不错的代码复杂度度量了,为了简化问题:CCC = 代码行X代码嵌套深度X圈复杂度。
我常常会发现这样的案例:
尽管 CCC(代码A) > CCC(代码B), 但是实际代码的阅读效果并不比后者更困难。
这是因为 这个3维的CCC度量,并不是复杂度本身,而是一个复杂度的模型,并没有考虑到算法的选择,大小写,代码布局规范这样的、会影响到代码阅读的因素。
后者是需要人来判断的,而CCC规则,可以用于工具,从而让找到问题代码更容易,而找到后,是否真的需要修改和重构,也是需要人工来判断的。
因此,这样的思维是非常自然的——通过CCC规则,完成一个工具,帮助找到可能需要优化的代码,然后在人工判断是否需要重构,以及如何重构。
世界上的问题分两种,一种确定的问题,毫无争议,简单明快,比如直角三角形的公式 x2 + y2 = z2 . 还有一类问题是不确定的,因素很多的,比如“轮胎要多少公里需要更换?”,这样的问题才是现实世界的问题。
代码复杂度的评估,尽管可以有数字化的CCC,披着确定性的外衣,本质上却和“轮胎磨损”问题并无二致。这样的问题,研究方向上更多的基于统计原理。因此,厂家说我的轮胎30000公里更换,而作为个人的情况,1000公里换一个也并非不可能。
CCC 方法为很多工具支持,包括NDepend,SourceMonitor,Visual studio team options。在我看来,NDepend,Visual studio team options 过于复杂而且仅仅可以用于Dotnet,SourceMonitor就非常的直观,简单,并且可以用于多种语言,还是freeware。拿到 SourceMonitor ,可以说喜不自胜,溢于言表。原来我的做法都是遍历代码工程,一步步的找出需要优化的代码,现在——工作量大大减少——我可以现场的找出复杂度最高的代码,并且现场演示优化的方法。还可以比较优化前后的度量变化。
分享到:
相关推荐
综合评价法是一种多因素决策分析方法,用于对多个指标进行量化评估,并综合考虑各个因素的影响,从而得出一个全面的评价结果。在这个主题中,我们主要关注的是如何利用MATLAB编程来实现这一过程。MATLAB是一种强大的...
值得注意的是,使用任何第三方工具进行代码统计时,都应确保数据的安全性,避免敏感信息泄露,因此在使用前最好了解工具的隐私政策和数据处理方式。 总之,“统计源代码行数工具exe”是一款方便实用的工具,它简化...
代码行数(Lines of Code,简称LOC)是衡量代码规模的一个常见指标,但需要注意的是,仅仅依赖代码行数并不足以全面评价代码的质量或复杂性,因为不同编程风格和缩进方式会影响行数。然而,对于项目管理和初步评估,...
同时,"xdowns.url"可能是一个快捷方式或者链接文件,指向了该工具的下载来源或相关的帮助文档,便于用户获取更多关于工具的信息或者更新版本。 对于Java开发者来说,代码行数统计具有特殊意义。Java是一种广泛使用...
"图像质量评价指标和 MATLAB 实现" 图像质量评价是计算机视觉和图像处理领域中的重要研究方向。评价图像质量的目的是为了量化图像的...本文中介绍的六种评价指标可以帮助读者更好地理解图像质量评价的原理和实现方法。
每个团队成员可以统计自己的代码贡献,从而在团队内部建立一个公平的评价体系。同时,通过对历史版本的代码行数对比,可以观察项目在不同阶段的发展变化,为决策提供数据支持。 压缩包中的"SourceCounter"文件很...
`BLIINDS2_release.zip`和`BRISQUE_release.zip`则分别对应BLIINDS2和BRISQUE算法的发布版本代码,而`niqe_release.zip`可能包含的是另一个无参考质量评价算法NIQE(Natural Image Quality Evaluator)的代码。...
MATLAB源代码SSIM算法详细注释图像质量评价是图像质量评价的重要工具之一。该算法可以用来评价图像之间的相似度,并提供了图像质量的评估结果。该代码的实现可以帮助开发者快速实现SSIM算法,并应用于图像处理和图像...
"amilan-motchallenge-devkit-aa05c63476c9"很可能是一个开发工具包,包含了评价代码、库函数和其他必要的资源,帮助研究人员和开发者进行MOT算法的开发和评估。这个开发工具包可能包括了数据预处理工具、评估脚本、...
本资源“微信小程序评价问卷页面设计制作开发源代码.rar”提供了完整的微信小程序源码,用于创建一个用户评价问卷的功能。这个源码包不仅包含设计元素,还涉及开发流程,使得开发者可以快速移植并应用到自己的项目中...
文档很可能是为了提供一个标准化、全面的方法论,用于指导用户如何准确、公正地评价不同模型算法的表现。 2. 描述部分提示这份文档包含了评价方法的代码实现。这意味着文档中不仅有理论层面的评价方法介绍,还包括...
为了提高开发效率,程序员通常会使用一些辅助工具,其中“代码提示工具”就是一个不可或缺的助手。 “C++代码提示工具”是一种能够智能感知代码结构、自动补全语法、提供函数参数提示等功能的软件。这些工具通过...
代码行统计工具是一种用于软件开发过程中的...总结来说,代码行统计工具是软件开发过程中的一个重要辅助工具,它可以提供关于项目规模和进度的初步信息。然而,理解其局限性并结合其他评估指标,才能全面评价软件项目。
1. **多语言支持**:一个好的代码量统计工具应该能够处理各种编程语言,如C++、Java、Python、JavaScript等。它能够识别不同的语言并分别统计,确保结果的准确性。 2. **排除注释和空行**:在统计时,通常会忽略...
同时,对于学术研究,这样的评价工具也能够提供一个公正、客观的比较标准,促进图像去雾领域的进步。在实际应用中,如监控系统、自动驾驶、无人机拍摄等,准确的图像去雾和质量评价都至关重要,因为它们直接影响到...
这份"企业效绩评价行业基本分类与代码对照表"可能包含了中国国家标准GB/T 4754-2017《国民经济行业分类》中的信息,这是一个广泛应用于统计、经济分析和政策制定的标准。该分类体系将国民经济活动划分为大类、中类、...
通过巧妙结合这些技术,我们可以创建出一款用户友好的、动态的评价工具,提高网站的用户体验。在实际应用中,还应注意兼容性问题,确保在各种浏览器环境下都能正常运行。此外,为了提升用户体验,还可以考虑加入更多...
该资料包包含的是一个使用模糊神经网络对嘉陵江水质进行评价的Matlab实现项目。模糊神经网络是一种结合了模糊逻辑和神经网络的模型,它能够处理不确定性和模糊性较高的问题,非常适合于环境科学中复杂数据的分析。...
1. TCP&UDPTest2.0:这可能是一个测试工具的客户端应用程序,允许用户发送TCP和UDP数据包到服务器,并可能显示关于连接、传输速度和丢包率等信息。 2. IoCPServer:这很可能是实现IOCP的服务器端代码,可能包含两个...
MATLAB作为一种强大的数值计算和可视化工具,被广泛用于图像处理算法的实现和评估。在这个名为"图像处理评价标准MATLAB代码.zip"的压缩包中,包含了使用MATLAB编写的用于评估图像处理效果的代码。以下是对这些知识点...