剖析短迭代
敏捷教练Dave Nicolette提出:我们应该如何设定迭代长度?是要根据发布周期的时间么?使用短迭代又有哪些好处?
作者 Geoffrey Wiseman译者 苑永凯 发布于 2007年12月15日 上午2时14分
由FindBugs、PMD、CheckStyle以及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
本文主要讲述了如何用JBoss Portlet Container 和JBoss Portlet Bridge创建新项目,怎样配置一个JSF应用去使用JBoss Portlet Bridge,以及JBoss Portlet Bridge所具备的功能。
在这篇文章里,Bryon Jacob和Chris Berry将和我们继续探讨AtomServer,它是基于Apache Abdera的完整Atom存储实现。作者还创建了几个Atompub规范扩展,其中包括自动标记、批处理和Feeds聚合。
InfoQ中文站的电子杂志《架构师》试刊第二期出版了!相比于上期,我们在内容的选择安排和版式上都根据读者的意见重新做了修正。“细节决定成败”,我们希望基于InfoQ中文站的专业内容,《架构师》能逐渐成为大家喜欢的电子刊物!
在本文中,Steven Haines探讨了Web应用性能调优问题。该领域过去更像是一门艺术而不是一门科学。他提出了一种称为基于等待调优的方法,使整个调优过程更加可度量,也因此更具科学性。
通常来说,改变技术路线时最艰难的部分是辨别语言语法之间的不同。这篇文章就为Java开发者提供了一份如何转向Flex基础语言ActionScript的指南。
本视频主要以财帮子为例,介绍了如何创建一个PV为百万级的Rails应用。其中包括:Rails应用的服务器架构、Rails Cache的优化、负载均衡的处理、Web服务器的调试、分布式解决方案、Open API的设计等等。
InfoQ首席架构师Alexandru Popescu在采访中谈论了InfoQ架构、Webwork与DWR、Hibernate与JCR、Hibernate可扩展性、最新的InfoQ视频流系统和InfoQ的未来规划。
没有回复
回复