Blackberry平台代码质量安全解决方案

发布时间:2011-04-21 09:48:08

Blackberry平台代码质量解决方案

0 序言

软件质量(software quality)是与软件产品满足明确或隐含需求的能力有关的特征和特性的总和。高质量的软件在满足用户需要的同时,一般都具有扩展性和灵活性,能够适应一定程度的需求变化,且足够的强壮、足够的鲁棒,能够有效的处理例外的情况,同时也有可持续发展的能力。根据Paul Duvall的观点,一个程序代码质量的高低可以从下面五个方面进行检测:

编码标准

代码重复

代码覆盖率

依赖项分析

复杂度监控

Java平台下,有很多的工具可以完成这些功能,比如CheckStylePMD可以检测编码标准是否规范,代码重复率有多少;而Coverlipse可以测量代码覆盖率,JDepend提供了代码依赖项分析,可以用Eclipse Metric 插件有效地检查代码的复杂度

Blackberry本身就以其高安全性著称,作为其下的开发平台也有一些工具可以来检查代码的安全性,比如Memory Statistics, Object Statistics, Coverage, Profile等。分别用来进行内存分析,数据分析,覆盖率测试等等。

Blackberry07年开始,一直专注于Blackberry平台的开发,通过同事们不断地努力和积累,在这方面也有了一定的经验。在项目实践中,通过各种检测工具和方式,有效地提高了代码质量,一定程度上保证了代码自身的安全性,成功地发布了Webex Meeting等产品。

1 Java平台常用安全检测工具

Blackberry Team的开发平台是Eclipse,它是一个集成了Blackberry开发环境的开源工具,由于有了Eclipse的强大支持,从而也让我们抛弃了Blackberry自身的JDE,这不能不说是一大幸事。虽然Blackberry自身的JDE是一大败笔,想想最初的使用经历仍然心有余悸,但其还是有其可取之处的,稍后再做介绍。Eclipse有很多插件,可以有效地完成代码质量的检测,主要的几个工具如下:

1 Eclipse下检测工具

各个工具的作用各不相同,当然有些也是有相互重叠的,比如PMDCcheckStyle都能检测代码中不规范的一些编码习惯。Blackberry team一般都是用FindBugs去静态检查bugs,而使用CheckStyle去尽可能的规范代码;在项目不间断地使用PMDJTest等去检测代码的各个指标。

1.1 FindBugs

FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。不是通过分析类文件的形式或结 构来确定程序的意图,而是通常使用 Visitor 模式

FindBugs能检测出一些常见的bug,比如使用“!=”进行字符串的比较,在循环中使用“+,Null指针的冗余检验等问题。在扫描项目的代码查找出相应的bug之后,它会提出相应的修改建议,开发人员可以根据该建议自行决定是否需要进行修改。

它的扫描结果一般如下:

1 Findbugs 扫描结果

FindBugs会列出项目中它认为可能存在bug的情况,当开发人员选择其中一个时,会给出相应的分析以及修改建议。但是FindBugs也存在一些问题,比如针对String.subString()内存泄露的问题,它就不能检测出来,这就需要采用其它的工具进行协助检测。

1.2 JTest

Jtest是第一个自动化Java单元测试工具。Jtest自动测试任何Java类或部件,而不需要您写一个测试用例、驱动程序或桩函数。只要点击一个按钮,Jtest自动测试代码构造(白盒测试)、测试代码功能性(黑盒测试)、维护代码完整性(回归测试)和静态分析(编程标准执行和指标度量)。不需要复杂的设置,Jtest能够立即使用并指出问题。如果您使用按合同设计技术在代码中加入描述信息,Jtest能够自动建立和执行测试用例验证一个类的功能是否符合其功能描述。

Webex也有关于JTest的一套专门流程,并为此专门发布了邮件,建立了memo介绍JTest的推广和使用,以期能有效地提高公司的产品质量。具体的流程可以参memohttps://qaforum.webex.com/bug/memoaction.asp?Action=ViewDetail&MemoNum=13760

Webex Meeting项目为例,JTest的扫描结果如下:

2 JTest 扫描结果

公司使用的ruleCisco-WebEx-Security-Rule,也可以在Memo中下载得到;Jest在做自动化测试的同时,也可以检测出一些bug,比如之前提到的内存泄露等问题。从而它能很好地和FindBugs进行互补,达到相辅相成的效果。

1.3 CheckStyle

代码库的可维护性直接影响着软件的整个成本。另外,不佳的可维护性还会让开发人员十分头痛(进而导致开发人员的缺乏)—— 代码越容易修改,就越容易添加新的产品特性。像 CheckStyle 这样的工具可以协助寻找那些可影响到可维护性、与编码标准相冲突的地方,比方说,过大的类、太长的方法和未使用的变量等等。同样的,PMD的开源工具提供CheckStyle似的功能。

Blakcberry team一般使用CheckStyle来进行规范检测,它方便易用。使用 Eclipse CheckStyle 插件的好处是能够在编码过程中了解到源代码上下文的各种编码冲突,让开发人员更可能在签入该代码前真正处理好这些冲突。

CheckStyle的扫描结果如下图所示:

2 CheckStyle 扫描结果

Blackberry team使用的是基于sun 标准的规范,并在此基础上进行了修改,以使之符合我们自己的编码风格。在设置好规范进行扫描之后,CheckStyle会对不符合规范的程序进行提示,只需要根据提示进行修改即可。

1.4 Pmd

PMD是一个开源的Java原代码分析工具,它可以发现未使用的变量,空的catch块,不必要的对象创建,以及更多其他的。他还包括一个CPD(复制粘贴探测器)工具,能够检测大量相同的代码为在 Eclipse中使用这项便利的工具,需要安装具有 PMDEclipse 插件,通过该插件即可使用CPD功能

插件安装好之后,用右键单击一个Eclipse项目并选择 PMD->Find Suspect Cut and PastePMD就会运行这个功能。运行结束之后,它会在Eclipse 根目录下就会创建出一个report文件夹,其中包含一个叫做cpd.txt的文件,文件中列示了所有重复的代码。我们只需要根据这个文件的提示,进行相应的修改就行了。

扫描结果如下图所示:

3 PMD CPD扫描结果

除了上述四个常用的工具之外,CoverlipseMetricsJdepend等都可以在一定程度上提高代码的质量,我们可以选择合适的工具进行检测。

2 Blackberry平台常用安全检测工具

Blackberry平台作为一个成熟的开发平台,也有其自身的独特的安全检查工具,通过使用它们可以进一步提高代码的质量。目前,我们用的主要有profileCoverageMemory static Object static等。

2.1 profile

使用BlackBerry IDE profile工具优化你的代码。Profile工具显示了每个代码区所花费的时间百分比,一直到当前运行点。

(1) 在代码段的开始,按F9设置一个断点;在代码段的末尾,按F9设置一个断点。

(2) Debug菜单里,单击Go。在模拟器里使用应用程序运行合适的代码,直到它达到断点。

(3) View菜单,单击Profile。在profile区域,单击Options

(4) 选择方法属性的类型,一个有序的方法,以及信息的类型给Profile 单击OK

(5) 为删除profiler数据,并且重设运行时间,在profile区域,单击Clear

(6) Debug菜单,单击Go。在模拟器里使用应用程序运行合适的代码,直到它达到断点。

(7) 如果profile区域不可见,在View菜单里单击Profile

(8) 为了获得所有精确的profile数据,在profile区域里,单击Refresh

(9) 单击Saveprofile区的内容保存到. 以逗号分割的csv文件中。

扫描结果的分析描述如下:

1 profile结果分析

2.2 查找内存泄漏

内存统计工具显示了对象数以及对象处理RAM以及闪存用到的字节数的统计

(1) View菜单,单击Memory statistics在代码中设置2个或多个断点

(2) 运行你的程序到第一个断点单击Refresh刷新内存统计

(3) 单击Snapshot得到一个快照将程序运行到下一个断点单击Refresh 单击Compare to Snapshot

(4) 为了将内存统计的内容存储到一个逗号分隔的.csv文件中,单击Save

另外,也可以使用对象工具进行扫描。对象工具显示了内存中所有的对象,它帮助你定位到发生泄漏的对象对象泄漏可能导致VM在闪存的外部运行,从而导致程序的异常。而通过使用Coverage,可以显示已经运行代码的概括,这个工具在设计和运行测试案例时,有较好的效果。

3 总结

Eclipse中有很多工具插件,可以通过各个方面对代码的质量进行改进,但我们不能贪多务杂,只要选择合适自己的就行了。当我们行动起来,积极地去改进代码质量时,就可以通过各种工具让代码质量改进的过程变得更加有效。通过使用FindBugsPMD等开源工具,再加上Blackberry自带的一些工具,我们就会发现,打造一个高质量的代码工程并非是遥不可及的事情。

Blackberry平台代码质量安全解决方案

相关推荐