汉中家园论坛's Archiver

beida_01 发表于 2008-3-3 11:11

三步改善Java码质量!

[b][size=2]一、充分利用单元测试、代码覆盖
[/size][/b][size=2]
单元测试、代码覆盖是最容易被接受和实现的方式。事实上,大多数开发人员都知道单元测试对他们很重要。在我们开始讨论这些东西之前,先看一下Google研究院主管Peter Norvig的一段话:“如果你认为你们不需要对自己的代码进行单元测试,那么就写在纸上写一所有的原因,并且仔细研究这张纸,然后扔了它,继续测试自己的程序吧”。看来Google也是非常推崇进行单元测试的。那么谁又来测试那么测试者呢?也就是说,我们怎么能验证对程序做了足够的测试呢?这是一个非常有价值的问题,因为那些未通过测试的程序才是我们更应该关注的地方。这个问题的一个解决方案就是使用代码覆盖工具,这种工具将告诉我们我们到底测试了多少代码(也就是被测试代码的百分比),然后使用一般的综合处理来合并覆盖核对结果。如果覆盖核对失败,那么我们建立应用程序的过程也就失败了。[/size]
[size=2]
对了本文所讨论的递增代码策略选择了代码覆盖工具Cobertura,这是由于它非常容易使用,而且拥有良好的定义格式,以及四个Ant任务接口。这些任务之一就是cobertura-check,当代码不能完成我们要求的覆盖率时,它就会失败。如下面的代码显示如果覆盖率未达到80%,Ant在建立工程时就会失败:[/size]
[size=2][/size]
[size=2][/size]
[size=2][url=http://www.027accp.com/][size=3][img]http://cms.it168.com/Images/OutliningIndicators/None.gif[/img][color=#0000ff]<[/color][color=#800000]target [/color][color=#ff0000]name[/color][color=#0000ff]="coverage_check"[/color][color=#0000ff]>[/color][/size][color=#000000][size=3][img]http://cms.it168.com/Images/OutliningIndicators/None.gif[/img]    [/size][/color][size=3][color=#0000ff]<[/color][color=#800000]cobertura-check [/color][color=#ff0000]totallinerate[/color][color=#0000ff]="80"[/color][color=#0000ff]/>[/color][/size][color=#000000][size=3][img]http://cms.it168.com/Images/OutliningIndicators/None.gif[/img][/size][/color][size=3][color=#0000ff]</[/color][color=#800000]target name="coverage_check"[/color][color=#0000ff]>[/color][/size]

[/url] [/size]
[size=2]
除了使用硬编码来指定这个覆盖率外,我们还可能以使用一个更容易建立的结果作为当前核对的覆盖率。我们可以通过使用两个核心Ant任务连接一对Cobertura任务来完成这个任务。并不不用担心各种覆盖率的具体的值。我们的目标是完成可测量的代码改善,而不是设置一个绝对的代码覆盖率。

在建立用于测试和运行我们的代码的targets后,我们可以将用于核对我们的建立脚本的增量覆盖率。第一步是使用一个cobertura报吿任务建立一个XML格式的覆盖报表。代码如下:[/size]

[size=2]<cobertura-report format="xml"/>

[/size]
[size=2]
下面是由一个cobertura报表任务产生的[/size]
[size=2]coverage.xml

[/size]
[size=2][/size]
[size=2][url=http://www.027accp.com/][size=3][color=#0000ff]<?[/color][color=#ff00ff]xml version="1.0"[/color][color=#0000ff]?>[/color][/size]
[size=3][color=#0000ff]<![/color][color=#ff00ff]DOCTYPE coverage SYSTEM "http://cobertura.sourceforge.net/xml/coverage-02.dtd"[/color][color=#0000ff]>[/color][/size]
[size=3][color=#0000ff]<[/color][color=#800000]coverage [/color][color=#ff0000]line-rate[/color][color=#0000ff]="0.43612334801762115"[/color][color=#ff0000] branch-rate[/color][color=#0000ff]="0.48344370860927155"[/color][color=#ff0000] version[/color][color=#0000ff]="1.8"[/color][color=#ff0000] timestamp[/color][color=#0000ff]="1181043899853"[/color][color=#0000ff]>[/color][/size]
[size=3][color=#0000ff]<[/color][color=#800000]sources[/color][color=#0000ff]>[/color][/size]
[size=3][color=#0000ff]<[/color][color=#800000]source[/color][color=#0000ff]>[/color][color=#000000]./src/java[/color][color=#0000ff]</[/color][color=#800000]source[/color][color=#0000ff]>[/color][/size]
[size=3][color=#0000ff]</[/color][color=#800000]sources[/color][color=#0000ff]>[/color][/size]
[size=3][color=#0000ff]<[/color][color=#800000]packages[/color][color=#0000ff]>[/color][/size][color=#000000][size=3]...[/size][/color][size=3][color=#0000ff]</[/color][color=#800000]packages[/color][color=#0000ff]>[/color][/size]
[size=3][color=#0000ff]</[/color][color=#800000]coverage[/color][color=#0000ff]>[/color][/size]

[/url] [/size]
[size=2]
现在要确保将这个文件保存在某个硬盘上,因为我们在后面会需要这个文件。[/size]
1

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.