追求代码质量(2)-监视圈复杂度-java开发java经验技巧

追求代码质量(2)-监视圈复杂度-java开发java经验技巧

ID:30940732

大小:214.33 KB

页数:8页

时间:2019-01-04

追求代码质量(2)-监视圈复杂度-java开发java经验技巧_第1页
追求代码质量(2)-监视圈复杂度-java开发java经验技巧_第2页
追求代码质量(2)-监视圈复杂度-java开发java经验技巧_第3页
追求代码质量(2)-监视圈复杂度-java开发java经验技巧_第4页
追求代码质量(2)-监视圈复杂度-java开发java经验技巧_第5页
资源描述:

《追求代码质量(2)-监视圈复杂度-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、追求代码质量(2):监视圈复杂度-编程开发技术追求代码质量(2)监视圈复杂度原文出处:IBM中国每位开发人员对代码质量的含义都冇着自己的看法,并且大多数人对如何查找编写欠佳的代码也有口己的想法。甚至术语代码味道(codesmell)?也已进入大众词汇表,成为描述代码需耍改进的一种方式。代码味道通常由开发人员直接判定,有趣的是,它是许多代码注释综合在一起的味道。一些人声称公正的代码注释是好事情,而另一些人声称代码注释只是解释过于复杂的代码的一种机制。显然,Javadocs?很有用,但是多少内嵌注释才足以维护代码?如果代码已经编写得足够好,它述需要解释自己吗?这告诉我

2、们,代码味道是一种评估代码的机制,它具冇主观性。我相信,那些闻起来味道糟透了的代码可能是其他人曾经编写的最好的代码。以下这些短语听起来是不是很熟悉?是的,它初看起來冇点乱,但是您要看到它多么可扩展!!或者它让您感到迷惑,但显然您不了解它的模式。我们需要的是客观评估代码质量的方法,某种可以决定性地告诉我们正在查看的代码是否存在风险的东西。不管您是否相信,这种东西确实存在!用来客观评佔代码质量的机制已经出现了一段时间了,只是大多数开发人员忽略了它们。这些机制被称为代码度量(codemetric)。代码度量的历史几十年前,少数几个非常聪明的人开始研究代码,希望定义一个能

3、够与缺陷关联的测量系统。这是一个非常有趣的主张:通过研究带bug代码中的模式,他们希望创建止式的模型,然后可以评估这些模型,在缺陷成为缺陷捕获它们。在这条研究Z路上,其他一些非常聪明的人也决定通过研究代码看看他们是否可以测量开发人员的生产效率。对每位开发人员的代码行的经典度量似乎只停留在表面上:Joe生产的代码要比Bill多,因此Joe生产率更高一些,值得我们花钱聘请这样的人。此外,我注意到B订1经常在饮水机边闲黒我认为我们应该解雇Bill。但是这种生产率度量在实践屮是非常令人失望的,主要是因为它容易被滥用。一些代码测量包描内嵌注释,并且这种度量实际上受益于剪切粘

4、贴式开发(cut-and-pastestyledevelopment)。Joe编写了许多缺陷!其他每条缺陷也都是由他间接造成的。我们不该解雇B订1,他的代码实际上是免检的。可以预见,生产率研究被证实是非常不准确的,但在管理团队(mariagcrncritbody)广泛使用这种生产率度量以期了解每个人的能力的价值Z前,情况并非如此。来自开发人员社区的痛苦反应是有理由的,对于一些人而言,那种痛苦感觉从未真正走远。未经雕琢的钻石尽管存在这些失败,但在那些复杂度与缺陷的相互关系的研究屮仍然有一些美玉。大多数开发人员忘记进行代码质量研究已有很长一段时间了,但对于那些仍正在钻

5、研的人而言(特别是如果您也正在为追求代码质量而努力钻研),会在今天的应用中发现这些研究的价值。例如,您曾注意到一些长的方法有时难以理解吗?是否曾无法理解嵌套很深的条件从句小的逻辑?您的避开这类代码的本能是正确的。一些长的方法和带有大量路径的方法渥?难以理解的,有趣的是,这类方法容易导致缺陷。我将使用一些例子展示我要表达的意思。数字的海洋研究显示,平均每人在其大脑中大约能够处理7(±2)位数字。这就是为什么大多数人可以很容易地记住电话号码,但却很难记住大于7位数字的信用卡号码、发射次序和其他数字序列的原因。此原理还可以应用于代码的理解上。您以前大概已经看到过类似清单

6、1中所示的代码片段:清单1.适用记忆数字的原理if(entitylmplVO!=null){Listactions=entityTmplVO.getEntilies();if(actions==null){actions=newArrayList();}Iteratorenltr二actions,iterator();whi1e(enTtr.hasNext()){entityResultValueObjectarVO=(entityResultValueObject)actionltr.next();FloatentityResult=arVO.getAction

7、ResultIDO;if(assocPersonEventList.contains(actionResult)){assocPersonFlag二true;}if(arVL.getByName(AppConstants.ENTITY_RESULT_DENIAL_OF_SERVICE).getID().equals(entityResult)){if(actionBasisTd.equals(actionTmplVO.getActionBasisTDO)){assocFlag=true;if(arVL.getByName(AppConstants.ENTTTY_R

8、ESULT

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。