软件测试设计的模式

上一篇 / 下一篇  2017-10-16 16:19:23

直达列车模式

 

在铁路运输上,为了适应不同旅客的需求,有站站停的慢车,也有号称“贼快”的直达列车。前面介绍过的吃甘蔗模式要求把软件功能分拆成尽可能小的功能单元,同时,我们同样需要直达列车模式,设计出一些测试用例,把主要功能串起来,以实现在最短的时间内做完测试,了解和掌握软件质量的状态。

再以12306.cn为例,下面是根据直达列车模式设计的两个测试用例:

1.       用户A从注册账号到买票成功。

(1)       注册

(2)       登录

(3)       查询

(4)       预定

(5)       支付

(6)       退出

2.       用户B从买票成功到退票成功。

(1)       登录

(2)       查询

(3)       预定

(4)       支付

(5)       退票

 

暴力拆迁模式

对于软件系统的核心功能,测试工程师一定不能仁慈,要下得下去手,敢于“暴力拆迁”。

12306.cn的核心功能毫无疑问是预定,就是抢票,如果你是这个功能的测试工程师,你怎么做测试设计?

这个“预定”在功能规模上是个简单的功能,但是在春运的背景下,一切都不再平常:

1.       一张火车票可能引来上千个购买请求,要保证“先到先得”的规则得到执行。

2.       要针对“锁”的功能做更多的测试。如果两个人买到了同一张火车票,这是很麻烦的事情。

3.       如果在排队的过程中,另有人退票,这张退票是否放入当前可以争夺的票池中?还是仅对正在查询的人可见?

4.       如果在排队的过程中,另有人未能及时支付导致预定被取消,这张票是否放入当前可以争夺的票池中?

5.       如果在排队的过程中,时间过了23点,怎么处理?

6.       预定成功后,时间过了23点,用户无法支付,这张票是否被正常收回?

7.       以服务器时间为准,用户修改客户端的时间不会影响到系统的规则。

8.       同一身份证不可以购买同一趟列车的多张车票。

9.       同一身份证可以购买同一天的多次列车的车票。

10.   在票池设计上,网上购票和电话购票是否共享一个票池?还是各自独立的票池?

11.   在同一时间内,购票的请求是否有优先级?例如,窗口售票要优先吗?(应该是没有的)

12.   如果一列火车的票是分**售的,要确保用户无法预定还未放出的票。

13.   用户能正常预定加挂车厢的票。

14.   是否允许同一个账号在多个浏览器中同时在线和预定?

15.   对不同浏览器的支持。

16.   对于黑客攻击的防护。

17.   对于每一次交易请求都要验明身份(例如令牌),而不仅仅是登录时。

18.   遵循当天取消三次就无法继续购票的处罚规定。

 

以上仅是我个人的一些临时的测试思路,相信读者朋友还会设计出更多的测试用例。从春运时抢票的惨烈程度来看,我们不必担心自己的测试是否过于暴力。

 

地久天长模式

有的软件是在桌面上运行的,例如微软Office办公软件,用户不会长年累月持续地用;有的软件是要长期运行的,特别是服务器端,例如运营商的通信软件,根本没有停下来的机会。软件在长期运行后,可能会遇到几个方面的挑战:

1.       数据库中数据量大增,在这个背景下数据存取和处理的速度可能出现问题。

2.       数据库中有大量数据时可能产生的报表问题。

3.       内存泄露问题显现。

4.       遇到某些时间点业务量大增。例如对于通信软件来说,春节时的拜年电话和短信带来了很大的压力;对于12306.cn来说,春运时的订票需求是平时的N倍。

5.       对于磁盘不够的情况的处理。

6.       系统是否有维护模式?

7.       系统如何升级?

8.       安全性方面是如何考虑的?

 

测试工程师要本着“地久天长”的思想,往远处想,设计出这方面的测试用例,更加深入地测试软件产品。

下跳棋模式

如果测试的设计仅仅按照红宝书和吃甘蔗模式来做,虽然完成了基础性的工作,但是还是不够的。例如,有功能AB,无论谁做测试设计的时候都不会漏掉它们。在测试的时候:测试A,通过。测试B,通过。但是,如果做完A之后再做Bbug,或者B之后再执行Abug,这是往往容易漏掉的。

实际测试工作中的场景要比上面所说的AB复杂多倍。面对着几十个功能点,互相之间有不同的关联,如何去做测试设计?我推荐的一种模式是——“下跳棋”:分析和总结出软件中存在的多个状态,找出这些状态相互转移的可能性,画出图来。做测试设计的时候,就以这幅状态变迁图来做。在术语中,这种标示状态和变迁关系的图叫做状态机(图)。

 
软件测试设计的模式 <wbr>(中)软件测试设计的模式 (中)" style="margin: 0pt auto; padding: 0px; border: 0px; list-style. none; display: block;">

在火车票网购系统中,有哪些状态呢?

1.       没有需要支付的订单:用户登录后,没有等待支付的订单。在这个状态下可以执行的主要操作是:查询,预定,退出登录。

2.       排队:用户提交订单后,因有多人购买而需要由排队机制来决定谁预定成功。在这个状态下用户可以执行的主要操作是:查询,自动更新排队状态,退出登录。不能预定。

3.       未支付:用户成功预定车票后,尚未成功支付,用户需要在45分钟之内支付完毕。在这个状态下可以执行的主要操作是:支付,主动取消预定,被动取消预定(超时),查询,退出登录。不能预定。

 使用下跳棋模式时,重点有三点:

1.       分析和总结出各个状态。

2.       分析和总结出状态之间是如何变迁的。

3.       在各种状态中,系统所允许的操作有哪些。

 软件测试设计的模式 <wbr>(中)

这种模式有一个好处,会让软件产品中复杂的逻辑简单化和形象化,弥补人的思维的局限性。记得有一个统计说,如果一个人要同时记住超过7件事情,就会开始犯糊涂。

下跳棋模式也可以用于测试用例的精简。例如,在一个测试用例中覆盖多个状态的变化,就好像跳棋连续跳几步。

地方紧跟中央模式

任何软件系统都有自己的架构和风格,子模块的开发应当遵循这些公共的规定,否则做出来的东西“不像一家人”,用户体验不好。对于这些公共要求的遵循,我称之为“地方紧跟中央”。这一点对于迭代式开发的软件特别重要,测试工程师也要注意这一点。测试工程师根据这个模式设计一些测试用例,往往就能比较容易地发现后开发的模块上的一些bug

例如,软件产品A中有下面这些公共的要求:

1.       各模块在权限管理模块中都要可灵活配置。

2.       各模块要提供主要操作的日志。

3.       各模块都要写log,而且可由配置文件控制log信息的详细级别。

4.       各模块都要有相应的报表。

5.       各模块都支持模块ABC

6.       各模块支持第三方软件DEF

7.       UI都要遵循公司或者团队内的标准。

 测试工程师在做测试设计的时候,不要忘了这些“中央的要求”。如果测试工程师局限在开发团队提供的功能上,则可能会出现大的遗漏,因为有些本应实现的功能在界面上并不存在。

 

子模块

公共要求1

公共要求2

公共要求3

公共要求4

公共要求5

公共要求6

模块A

TAG:

 

评分:0

我来说两句

日历

« 2024-04-23  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 343311
  • 日志数: 46
  • 图片数: 2
  • 文件数: 4
  • 书签数: 1
  • 建立时间: 2012-08-01
  • 更新时间: 2019-02-20

RSS订阅