| 网站首页 | 测试咨讯 | 新手入门 | 专注性能 | 测试技术 | 测试管理 | 测试工具 | 开发社区 | 工具下载 | 资料下载 | 测试论坛 | 

[CNTester联盟群]交流群:34446273/21968356/64461572 白盒群:18400216 自动化群:2706508 性能群:4498858 外包群:59649884 管理群(需有管理经验):64442523

新手入门
 入门指南
 经验之谈
测试咨讯
 行业新闻
 网站动态
 人才就业
 CNTester基金
 标准规范
专注性能
 性能测试知识
 性能测试工具
 程序设计性能
 数据库性能
 Web应用服务器性能
 操作系统性能
 服务器与网络性能
测试技术
 用例设计
 性能测试
 自动化测试
 Web测试
 面向对象测试
 综合技术
 阶段性测试
 行业类测试
测试管理
 项目管理
 项目案例
 质量管理
 软件过程
测试工具
 Mercury系列
 Rational系列
 测试管理工具
 性能测试工具
 功能测试工具
 单元测试工具
 其它测试工具
开发社区
 Java技术
 DotNet技术
 C技术
 数据库技术
 操作系统
 服务器与中间件
工具下载
 测试工具
 开发工具
 企业工程
 网络通信
 媒体桌面
 游戏娱乐
 其他工具
资料下载
 测试资料
 程序设计
 数据库
 操作系统
 应用服务器
 电子期刊
 其他资料
 
 
您现在的位置: 中国测试员网站 >> 测试技术 >> 阶段性测试 >> 单元测试 >> 文章正文
  [图文]经典之作《代码大全》中的单元测试---测试技巧         ★★★ 【字体:
经典之作《代码大全》中的单元测试---测试技巧
作者:Steve McConnell    文章来源:网络    点击数:    更新时间:2007-6-18    

为什么有可能利用测试确定程序中的错误呢?为了测试程序的性能,你不得不对你的程序
测试每一种输入数据或输入数据的组合。即使对一个简单的程序,这样的工作也令人难以容忍。
例如,你的程序接收人名、地址、电话号码并将其存在一个文件中。这是一个简单的程序,并
且比任何让你厌烦的程序都要简单。进一步假定每个可能的名字和地址是 20 个字符的长度,并
且它们要用到 26 个可能的字符。以下是可能的输入数据量:
名字 2620(20 个字符,每个字符有 26 种可能选择)
地址 2620(20 个字符,每个字符有 26 种可能选择)
电话号码 1010(10 个数字,每个数字有 10 种可能选择)
总的可能 =2620*2620*1010=1066
即使是这样较小输入量,你也将有 1066 种测试用例。如果诺亚走出其方舟并以每秒 1 兆次
的速度对程序进行测试,他即使到现在也才完成了全部工作量的 l%。显然,如果你增大实际数
据量,对全部可能性进行测试几乎是不可能的。
不完全测试
对各种可能全部进行测试是不可能的,实际说来,测试的艺术在于从所有测试用例中找出
最能发现错误的示例来。在 10 种可能测试示例中,只有少部分可能发现错误。你应侧重于从所
有测试示例中找出能提示不同点的用例,而不是那些不断地重复着的用例。
当你计划测试时,你应排除那些没有告诉你任何新东西的用例,这就是说,此时对新数据
的测试将不会产生错误。 人们已提出了不少有效的非实例测试法,下文将讨论其中的一些方法。
善于结构的测试
尽管其名字是粗糙的,基于结构的测试,其实是一个简单概念。其意思是你应对你程序中
的每一条语句至少测试一次,如果本语句是一条逻辑语句,通常是用 if 或 while,你就应根据
if 或 while 表达式中的复杂性仔细测试,这样才能确保每条语句都经过了测试。确保所有语句
都经过测试的最简单的方法是由程序计算路径数,然后设计最少数量的测试用例,以确保所有
路径都得到了测试。你可能听说过“代码覆盖”测试或“逻辑覆盖”测试;它们都是使你的测
试程序中所有路径的方法。由于这两种方法覆盖了所有路径,它们和基于结构的测试是相似的,
但是这二种方法覆盖所有路径时并不使用最小的测试用例集。如果你使用代码覆盖或逻辑覆盖
方法,你所需的测试用例可能比你用基于结构的测试所需的测试用例要多。
你可用表 25-1 所给出的方法计算所需的最少测试用例数。
表 25-l 确定基于结构的测试方法所需的测试用例
1.由程序的第一条直接路径开始,设定计数值为 1。
2.每遇到下一个关键词或其等价词: if,while,repeat,for,and 和 or 计数值加 1。
3.在 case 语句中每遇到一个 case, if 数值加 1。如果 case 语句中不含缺省语句,计数值再加 1。

以下是一个例子:
计算路径数目的一个简单的 Pascal 程序例子:
Statement1; ――开始计数 1
Statement2;
if X < 10 then ――遇到 if 计数 2
begin
Statement3;
End;1
Statement4;
本例中,你一开始将计数置为 1,在遇到 if 语句后计数值变为 2,这意味着你至少需要 2
个用例以便覆盖程序中的所有路径。在以上例子中,你应有以下示例:
· 受 if 控制的语句得到执行(X<10)
· 不受 if 控制的语句得到执行:(X>=10)
代码例子还应更实际一点,以便对测试工作有一个清晰的了解。例子中实际还包括有缺陷
的代码。
下面的程序稍复杂一点。在本章以后都使用这个例子并且它可能有一些错误。
确定基于结构的测试所需测试用例的一个 Pascal 例子;
1 { Compute Net Pay} 程序开始,计数 1
2
3 TtlWithholdings := 0;
4
5 for ID := 1 to NumEInPloyees ——for,计数 2
6 begin
7
8 { compute social security withholding, if below the maximum }
9 if(Employee[ID].SSWithheld<MAX_SOCIAL_SECURITY )then ——if,计数 3
10 begin
11 SocialSecurity := ComputeSocialSecurity(Employee[ID])
12 end;
13
14 {set default to no retirement contribution}
15 Retirement := 0;
16
17 {determine discretionary employee retirement contribution}
18 if(Employee[ID].WantsRetirement)and ——if,计数 4 and,计数 5
19 (EligibleFotRetirement( Employee[ID])) then
20 begin
21 Retirement := GetRetirement(Employee[ID]);
22 end;
23
24 GrossPay := ComputeGrossPay(Employee[ID]);

25
26 { determine IRA contribution }
27 IRA := 0;
28 if( EligibleForIRA( EmPloyee[ID]) ) then ——if,计数 6
29 begin
30 IRA := IRAContribution(Employee[ID],Retirement,GrossPay)
31 end;
32
33 { make weekly paycheck}
34 Withholding := ComputeWithholding(Employee[ID]);
35 NetPay := GrossPay-Withholding-Retirement-
36 SocialSecurity-IRA;
37 PayEmployee(EmPloyee[ID],NetPay);
38
39 { add this employee’s paycheck to total for accounting}
40 TtlWithholdings := TtlWithholdingst 十 Withholding;
41 TtlSocialb

[1] [2] [3] [4] 下一页

文章录入:root    责任编辑:root 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     
    最新热点 最新推荐 相关文章
    · 性能测试方法
    · Java 安全的演进
    · Java 安全性的演变和理念 第一部分:安全
    · 第 1 部分: Web 安全与 Rational AppScan
    · 自动化测试实施步骤和最佳实践
    · Web测试方法
    · 站点测试-WebTesting
    · 实施自动化功能测试的解决方案
    · 经典之作《代码大全》中的单元测试---测试
    · IP网络的测试方法
    · 第 2 部分: 使用 Rational AppScan 应对 
    · 第 1 部分: Web 安全与 Rational AppScan
    · 构建安全软件: 选择技术,第一部分
    · 软件安全性原则: 第一部分
    · Java 安全性的演变和理念 第一部分:安全
    · 安全的代价是什么?
    · 保护系统安全: 一个识别用户的三向解决方
    · 穿透企业网络
    · Java 安全的演进
    · 您的 Java 代码安全吗 — 还是暴露在外?
    浅谈C/C++内存泄漏及其检测工
    经典之作《代码大全》中的单
    经典之作《代码大全》中的单
    经典之作《代码大全》中的单
    经典之作《代码大全》中的单
    经典之作《代码大全》中的单
     
     
     
    ======> [CNTester联盟群]交流群:34446273/21968356/64461572 白盒群:18400216 自动化群:2706508 性能群:4498858 外包群:59649884 管理群(需有管理经验):64442523
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | 

    Copyright@2007 by CNTester.com 中国测试员网站 桂ICP备07005590

    本站为开源免费网站,非商业赢利性组织。本站文章部分从网络搜索获取,如果您认为某些侵犯了您的权益,麻烦您联系本站,我们会尽快删除相关内容,同时也希望您的谅解,我们的初衷是为了让更多人去学习这方面的知识,让行业有更好的发展。

    联系电话: 15021358905