领导力大挑战
在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
该内容已经被标记书签!
标记书签错误,请重试!
作者 Floyd Marinescu 译者 张海龙 发布于 2007年5月22日
Java代码质量/静态分析领域又有了一位新成员,它来自Coverity——一个在C/C++领域从事了四年软件品质/缺陷检测方面工作的公司。Coverity于本月上旬发布了Prevent SQS(Software Quality System,软件质量系统),一个商业的品质/缺陷检测系统。它通过匹配源码与模板、编译时语法扫描、分析字节码并建立内部所有可能运行路径等多种分析引擎进行模组分析,以发现可能导致运行时异常、安全漏洞、不可预测行为和使性能下降的缺陷。
InfoQ从Coverity的CTO Ben Chelf那里得到了一些技术细节:
我们通过分析所有的字节码和与之相应的源码,建立了一个软件特征系统(软件DNA图谱)。基于这套系统,我们可以在整个代码库的基础上为所有的方法生成全面的控制流程图和调用关系图,所以在分析代码时,我们能够精确地知道是谁、在什么地方进行了调用。我们建立的代码图表不仅可以用于分析,还可以在发现缺陷时指出所有导致缺陷的关键位置。分析过程是我们的秘密武器,在经过多年的研究后,我们的分析技术已经可以对上百万行代码进行分析并确定极少数缺陷。
根据Converity的说明,Prevent SQS可以集成在桌面开发和持续集成环境中,大概每小时可以扫描数百万行Java代码。相应的Eclipse插件也提供了行级的问题代码检测。以下是Prevent SQS可以检测出的问题:
按照Ben的说法,Coverity强于其它字节代码扫描工具的能力是:它可以通过代码定义行为,确定可能导致出错的部分:
如果开发人员在重写方法时没有调用父类的实现,而该父类的方法在其它绝大多数被重写的情况下都被调用了的话,依赖于这个概念的检测功能就可以定位问题的所在。这样的约定是通过代码所在类和父类的正常行为来判定的,Prevent SQS会在检测中获取这些信息,随后用来标识出错误的行为。当然,用户也可将需要检测的约定告诉系统,但是系统可以在大部分情况下自动识别这些约定的功能,对于任何自动检查技术来说都是一个新的领域。
在分析中做方法边界检测,可以让我们找出那些没有被引用的块或方法。例如,当你调用一个方法去调用另外一个打开JDBC连接的方法,但又忘了关掉这个连接的情况,我们就可以标识出这种由不同类调用造成的关闭失败的情形。当然,并非所有路径上都会出现Bug的,通过我们的路径分析,我们可以识别包含缺陷的调用路径,并且不会太多噪音干扰。
当被问到Coverity是如何将他们C/C++领域中的专业技术转移在Java领域时,Ben说:
那是因为内在的分析技术是相似的!我们使用了很多与分析C/C++软件时相同的技巧。一个有明显区别对待的地方是解析虚方法。由于在Java中所有的方法调用都是“虚的(基于类型的动态查找)”,因此我们确保有合理的算法来计算对象可能的类型,以便于在跨程序分析代码时,对代码在哪里会产生调用分支了如指掌。尽管虚方法毫无疑问也存在于C++应用中,但是实际上在我们所看见的绝大部分现实C++应用中,他们被运用得少得多。正因为如此,我们选择了不同的方法和算法去处理两种语言间的差别。
Ben建议越早将Prevent SQS应用在开发周期中,越能发挥杠杆作用,并举了他们自己作为范例。在Coverity的Java团队中,Prevent SQS已被集成到自动构建系统中,同样也是配备了一个又老又大的标志灯,有时,在开发人员提交代码时,SQS发现了Bug,标志灯会由绿变红。开发人员可以在提交代码之前运行SQS,以避免被示红灯。
在静态分析领域,有不少的商业和开源工具,其中包括由Bill Pugh提供的开源分析工具FindBugs。
查看英文原文:Coverity Prevent SQS: Java Static Analysis Defect Detection在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
论道WP第三篇专栏,以应用程序栏的使用为中心,包括了软键盘带来的问题、应用程序栏介绍、如何绑定应用程序栏的属性等几个方面的具体话题,为开发者顺利使用应用程序栏开发提供了具体指导。
在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中对于锁的性能优化,以及锁的存储结构及升级过程。
本次分享将首先介绍现代富文本编辑器的组成和实现,然后结合UEditor的开发过程,与参会者分享UEditor在设计和实现的过程中,所涉及到的核心功能的细节实现。
本次演讲视频录制于百度技术沙龙。
我们所开发的应用程序大多都需要提供一个图形用户界面(GUI)。关于GUI应用的架构设计,已经有了Form & Control、MVC,、MVP、 Passive View等多种模式。模式可以帮助我们建立优雅的架构,但前提是弄清楚模式的应用场景。弄清楚GUI应用面临的设计上的问题,有助于我们正确的挑选设计方案。
MongoDB是一种非常易用的NoSQL方案,Brian C. Dilley在这篇文章里介绍了MongoDB的优劣势,并介绍了MJORM项目。MJORM用于MongoDB,是一个没有注解的Java ORM库。
随着网络基础设施的逐步成熟,从RPC进化到Web Service,并在业界开始普遍推行SOA,再到后来的RESTful平台以及云计算中的PaaS与SaaS概念的推广,分布式架构在企业应用中开始呈现出不同的风貌,然而殊途同归,这些分布式架构的目标仍然是希望回到建造巴别塔的时代,系统之间的交流不再为不同语言与平台的隔阂而产生障碍。
没有回复
关注此讨论 回复