BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

静态分析工具可以突出更深层次的问题

| 作者 Geoffrey Wiseman 关注 0 他的粉丝 ,译者 苑永凯 关注 0 他的粉丝 发布于 2007年12月16日. 估计阅读时间: 3 分钟 | GMTC大前端的下一站,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。

FindBugsPMDCheckStyle以及IntelliJ IDEA等等提供的静态代码分析(Static code analysis,SCA)工具可以帮助开发团队捕捉到代码中的问题,来保证程序的高质量。但是当SCA工具标记了一个问题之后,团队应该如何作出反应呢?Vikas Hazrati在“静态代码分析仅仅是冰山一角”一文中建议:深入探索。

如果团队对SCA标记的问题达成了共识,那么他们会修复这个问题。然而,在很多情况下,被标记的问题可以突出一些更深层次的问题,而且这些问题隐藏较深,也不容易被代码分析工具侦测到:

当我对一个有数百万在线用户的大型系统进行审计的时候,我第一次深入洞察到更深层次的问题。在分析的过程中,我的审计助手(co-auditor)提议检查一下SCA工具高亮提示的热点。然后,我们深入到那块代码中并发现了更大的问题。

Vikas列举了五个由静态分析标记的问题发现代码中更深层次问题的例子。如,当发现一些servlet有3500行之巨,还包含长达800行的方法时:

一种快速的修改方式就是分离方法体来减小方法大小,将一些方法迁移到助手类(helper class)中减小类的大小,这样就解决了类大小和方法大小的违规。

但是,当我们尝试回答“为什么这些servlet包含了如此多的代码和巨大的方法?”来深入探索原因的时候,我们意识到所有的业务逻辑都放在了这些 servlet中。将所有的逻辑放入一个类中严重的违反了单一职责原则。表现逻辑、业务逻辑和数据访问逻辑掺杂在一起导致脆弱的设计,这样很难在不破坏原 有设计的基础上做出变动。各种关系之间没有任何分层和分离。

同样,当发现带有大量参数的方法时:

解决这个问题并让SCA工具不再警告的快捷方式就是引入一个对象,将所需的参数封装起来。

但是,当我们深入研究时就发现,这个系统中没有任何抽象。系统中也没有领域对象。当需要在方法调用之间传递数据时,所有的数据都是简单数据,大多是字符 串。这说明系统并没有采用领域驱动设计。在不同的场景下,需要根据需求来重载(overload)这些方法加入额外的参数,这暗示着这个系统对修改开放, 对扩展关闭。每一个小的修改都需要增加新的方法。这违反了开闭原则。

查看英文原文Static Code Analysis can Highlight Deeper Flaws


译者简介:苑永凯,软件设计师,毕业于山东大学。主要关注领域为Java EE企业应用、Java EE中间件技术以及敏捷开发方法实践,微有心得。他的Blog为http://blog.csdn.net/ai92,您也可以通过yuanyk@gmail.com与他联系。参与InfoQ中文站内容建设,请邮件至china-editorial@infoq.com

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT