不要追求绝对的公平,红尘之中没有公平而言,人活一世,难得糊涂。
it is no use doing what you like, you have got to like what you do.
单元测试和事先测试开发
上一篇 /
下一篇 2007-02-25 10:56:02
/ 个人分类:单元测试
单元测试和事先测试开发#VGq`}
{*B9\Z051Testing软件测试网fU0l*n;S 要减少
软件中的错误数目,方法之一就是拥有一个专业的测试组,其
工作就是尽一切可能使软件崩溃。不幸的是,如果拥有测试组,那么即使是经验丰富的开发人员,也会倾向于花费较少的时间来保证代码的可靠性。
pKHLZ6DKo051Testing软件测试网#i/v}/O;r0PCk1i:Vd 软件界有一句俗语:“开发人员不应该测试他们自己的代码”。这是因为开发人员对自己的代码了如指掌,他们很清楚如何采用适当的方法对代码进行测试。尽
管这句俗语很有道理,但却忽略了非常重要的一点 - 如果开发人员不对自己的代码进行测试,又如何知道代码能否按照预期的方式运行?
{"j?Xi~x051Testing软件测试网 e}.?c\|j_v3Q
m 简单说来,他们根本无从得知。开发人员编写那种运行不正常或只在某些情况下运行正常的代码是一个严重的问题。他们通常只测试代码能否在很少的情况下正常运行,而不是验证代码能够在所有情况下均正常运行。
h8lN%B^ lJJ051Testing软件测试网6ZQH3r!sTA发现软件错误51Testing软件测试网]:S5XF$X 发现软件错误的情况有很多:
hT N@5k z0- 由首次编写代码的开发人员发现。
- 由尝试运行代码的开发人员发现。
- 由组中的其他开发人员或测试人员发现。
- 作为产品大规模测试的一部分。
- 由最终用户发现。
如果在第一种情况下发现软件错误,则修复错误比较容易,成本也很低。情况越靠后,修复软件错误的成本就越高;修复一个由最终用户发现的软件错误可能要耗
费 100 或 1000 倍的成本。更不用说用户通常因为软件错误导致工作无法继续,而一直等到下一个版本才能解决问题。
51Testing软件测试网1^f P4V
^G3PzfT 如果开发人员能够在编写代码期间发现所有的软件错误,那就再好不过了。为此,您必须编写能在编写代码时运行的测试。有一种很不错的方法,它恰好可以做到这一点。
51Testing软件测试网5_:D!U[x#UQ
V(?u'eh
zF*p1r6R:}0事先测试开发51Testing软件测试网z$_2Ak8xJ 所谓的事先测试开发是指在编写代码前编写测试。如果所有测试均正常运行,便可以断定代码运行正常;添加新功能时,这些测试会继续验证您是否破坏了代码的任何部分。
51Testing软件测试网 O7sZr {$H*W5WEtnq[Y9~)im.zy0 此概念于 20 世纪 90 年代初诞生于 Smalltalk 世界,Kent Beck 在当时编写了 SmalltalkUnit。在过去的几年中,大部分环境都具备了单元测试工具,其中有一个很出色的适用于 .NET Framework 领域的工具,即
nUnit(英文)。
51Testing软件测试网/m6Z~/aJX.Y:lj1y示例下面我将编写一个
IntegerList类来介绍事先测试开发的工作原理。
IntegerList是
ArrayList类的变体,用于在本地存储整数,因此不存在装箱和取消装箱的开销。
2M?W4Yua3V051Testing软件测试网yXJsBux+qR 第一步是创建一个控制台项目,并向其中添加一个
IntegerList.cs源文件。要连接 nUnit 框架,需要添加对 nUnit 框架的引用。在我的系统中,它们位于
d:\program files\nUnit v2.0\bin。
$W
y6sXfv051Testing软件测试网%O$z/_.yy"q
J^S 第二步是花些时间考虑如何对该类进行测试。这与确定类应该具备哪些功能的过程类似,但重点放在功能的特定用途(将值 1 添加到列表并检查是否成功),而不是功能本身(将一个项目添加到列表)。要生成此类,我们首先要提供一个要使用的测试列表:
51Testing软件测试网q~ ?7u+OUc- 测试该类可以构造
- 将两个整数添加到列表,并确保数目和项目都正确。
- 执行同一操作,但针对更多的项目。
- 将此列表转换为一个字符串。
- 使用foreach枚举此列表。
此示例从某种程度上代表了我开始时的想法,即希望这个类执行的操作。多数类一次只会创建一小部分,测试应随着类的增长而添加。
?0@f,I"Nj05m GR)k [0开始51Testing软件测试网"hnm.H P V.?"g 现在我可以开始了。我创建一个名为 IntegerListTest.cs 的新 C# 类文件,用于存放所有测试。下面是包含第一个测试的文件:
G[ Ys'G/B051Testing软件测试网~&q#C"D Zn
?1qusing System;
51Testing软件测试网5y%w;lR Tyusing System.Collections;
51Testing软件测试网0?s8{4z?3BY[tusing NUnit.Framework;
"q"R@8l!s
x051Testing软件测试网
{tzb`4\#s-znamespace IntegerList
51Testing软件测试网ngxAc,x0Y
E{
.xZFV
|5{0 /// <summary>
CaG)C N1T~0 /// IntegerClassTest 的摘要说明。
a6|:h-F$z&qh.w0 /// </summary>
51Testing软件测试网%Tzl5JT&A0L`s
f [TestFixture]
avJ$CKIN0 public class IntegerClassTest
!Dv/t Rz'k0 {
;^ko%nB\x e$e0 [Test]
`!f8T?2U-X0 public void ListCreation()
51Testing软件测试网(wt9L]I4}of {
I&@W
s:i"re4PaZ0 IntegerList list = new IntegerList();
51Testing软件测试网8{-~
m)m/P] Assertion.AssertNotNull(list);
&bAHQ'hVx+? NW0 }