软件测试中次边界条件,软件测试Correct边界条件

a7f4a3f590493a1e451dd952a488fd7c.gif 软件测试Correct边界条件

(9页)

2041a959d44cf24bba58f88cb5d7ff60.png

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

9.9 积分

Correct边界条件代码中的许多Bug都出现在“边界条件”附近,也就是说,在那些条件下,代码的行 为可能不同于平常的、每天都能运行到的程序路径。例如,假设你有个接收两个整数的函数:pub lie int calculate (i nt a., int b) {return a/(a+b);人多数时候,代码会返冋你所期望的值。但是如果a和b的总和正好为零,则将会得到 ArithMcticExccption异常,而不是期望的返回值。这就是边界条件一在这种条件下代码可能 会突然出错,至少不像你所期望的那样运行。我们用首字母缩略词CORRECT來帮助你考虑要如何测试哪些边界条件。? 一致性(Conformance)—值是否符合预期的格式??有序性(Ordering)一一纟R值是该有序的,还是该无序的??区间性(Range)—值是否在一个合理的最大值和最小值的范围?引用,耦合性(Reference)—代码是否引用了一些不受代码本身直接控制的外部因素??存在性(Existence)—值是否存在(例如,非null,非零,包含于某个集合等)??基数性(Cardinality)—是否恰好有足够的值??时间性,绝对的或者相对的(Time)—所有事悄是否都是按顺序发生的?是否在正确的时 间?是否及时?下面让我们按顺序逐一来查看这些边界条件。请记住,在考虑上面的每一个方面吋,你 都需要同时考虑传入方法作为实参的数据和由方法或者类所维护的内部数据。你需要好好回答的根本问题就是:还有什么会出错一旦你想到有什么可能会出错,就写一个针对■它的测试。当测试通过之后,再问自己“还 冇什么会出错?”然后再写一个测试,如此往复。5. 1 一致性很多时候,你所期望的或产生的数据必须符合某种特定的格式。比如一个e-mail地址 并不仅仅是一个简单的字符串。你期望e-mail地址是这样的格式:[email protected](.)隔开的部分:firstname.last [email protected] n. somewhere, com甚至还有如下更为少见的格式firsmame?lasmame%somewh[email protected]?somewhere?com假设你正在写一个程序,这个程序可以把用户的名字从e-mail地址中抽取出来。你会 [email protected],[email protected],你的代码将会怎么 处理呢?代码还能工作吗?抛出一个异常吗?这是否也是一个你需要考虑的边界条件呢?验证诸如"e-mail地址、电话号码、账号和文件名”等格式化数据通常都是简单明了的。 但是对于结构相对复杂的数据乂该怎么处理呢?假设你正在阅读某一类报告数据,其中包括 一个头部记录,这个头部记录链接到了一些数据记录,最示是尾部记录。我们需要测试多少 种情况呢??如果没有头部记录,只有数据记录和尾部记录,耍怎样处理??如果没冇数据记录,只冇头部记录和尾部记录,要怎样处理??如果没有尾部记录,只有头部记录和数据记录,要怎样处理??如果只有一个尾部记录,要怎样处理??如果只有一个头部记录,耍怎样处理??如果只有一个数据记录,要怎样处理?就像那个简单的e-maid地址的例子一样,必须考虑到:如果数据不能像你期望的那样与 结构和一致,将会出现什么情况。当然,如果你正在创建一个像e;mail地址这样的数据(可能根据不同的信息來源來创建) 或者具有如上结构的数据,你就需要测试你的结果并确保具一致性。5. 2有序性另一个需要考虑的方面是数据的顺序,或者是在一个很大的数据集合中某一数据的位 置。比如在前一章中所列举的largest()的例子中,一个bug是否会暴露出来,取决于你所查 找的最人值是否是位于list的最前或者最后。这是有序性的一个方面。任何--种搜索程序都应该针对搜索目标位于最前或者最后的条 件做测试,因为许多常见的bug在这种情况下都能找出来。有序性还包含另一个方面。假设你正在写一个函数,它接收一个包含餐馆菜单的集合。 你期望开胃菜排在菜单的第一位,接着是沙拉(以及所有重耍的调味品),然后是主菜,最后 是甜点和巧克力。如果最前是甜点,主莱在最后,那你的代码怎么来处理?如果这种情况可能发生,并且在发生的吋候,你的程序需要处理它,那么你就需耍测试 这种情况,并且把这个问题说清楚。现在,也许你的方法并不需要担心这种情况。或许应该 在用户的输入层就解决这个问题(参见后面的“测试无效参数”)。如果你正在写一?个排序函数,在集合己经有序的情况下,可能会出现什么情况呢?或者 更糟糕的,原集合已经反向排序好了,会出现什么情况呢?询问你自己这是否会导致问题一 这些问题是否也值得编写一个测试。如果你的方法是让某些沅素维持有序,就应该检查一下它们是否真的有序。假设你有一 个方法,它属于GUI的一个部分,负责把点餐菜单发送到厨房,那么你就应该做一个测试 来保证菜单上的菜目顺序符合正确的上菜顺序:public void testKitchenOrder(){Order order = new Order();Foodltem desert = new Desert ( nChocolate Decadence11);Food工tem entree = new Entree ("'Beef OscarH);Fooditem salad = new Salad ("Tossed1', "Parmesan Peppercorn");// Add out of orderorder ? addFoodltem (deserts);order ?addFood工tem(entree);order.addFoodltem(salad); // But should come out in serving orderIterator itr = order.iterator();assertEquals(itr.next(), salad); assertEquals(itr

4d91c43bfc72ca913299809b07b4968f.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值