• 12
  • 12
分享
  • 打开测试黑盒,从代码角度编写测试用例!——软件测试圈
  • 曼倩诙谐 2020-12-18 15:04:42 字数 2308 阅读 1303 收藏 12

  摘要:黑盒测试仅关注输入和输出,将程序看成一个黑盒子。在不遗漏需求的情况下,打开这个黑盒子,从代码实现的角度进行分析,可以更好的理解测试用例,帮助我们完善测试用例设计,更好地提升测试效果。

  本文从一元多项式的加法和乘法运算程序进行系统阐述,以期阐明作者思路。

  程序功能描述:设计程序分别求两个一元多项式的乘积与和。

  (1)Input :输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数,数字间以空格分隔

  (2)Output:输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。零多项式应输出 0,0

  (3)举例:

1.png

  执行加法运算后的结果:

2.png

  (4)程序输入及预期输出

  Input:

  3 9 12 15 8 3 2

  4 26 19 -4 8 -13 6 82 0

  Output:

  234 31 390 27 78 21 -36 20 -117 18 -60 16 -195 14 738 12 -12 10 1191 8 246 2

  26 19 9 12 11 8 -13 6 3 2 82 0

  一、程序框架思考

  (1)数据结构使用链表:链表较数组灵活、但较容易出错,因此比较适合在本文举例:

3.png

  (2)程序架构如下:

4.png

  i. 通过Creat( ) 函数构建链表,存储数据

  ii. 通过multiple( ) 函数执行乘法运算并返回结果

  iii. 通过add( ) 函数执行加法运算并返回结果

  iv. 通过PrintLink( ) 函数打印结果

  结合程序功能,从实现难度来看,multiple( ) 可能更容易出错。各子函数的具体实现在此不表,后面会结合测试点进行详细的阐述。

  二、测试验证

  1、临界测试:

  录入空多项式 运行程序,可以看到输出数据发生了混乱。

 5.png

  分析:通过排查代码发现,由于没有考虑 空指针场景(头指针的Next指向为NULL),指针指向了未知内存空间,导致数据异常。另外需要说明,空指针也会引发段错误 segmentation fault,这是我们在测试过程中、特别是项目初期较多遇到的情况:指针为空引发程序崩溃。

  解决方法:增加头指针的Next为NULL的判定和处理。

6.png

  2. 等价类测试

  I. add( ) 

  对于加法函数,它需要考虑三种基本情况:两个一元多项式进行比较,i.前者系数大于后者 ii.前者系数等于后者 iii.前者系数小于后者。If语句的三个分支对应了三个等价类测试点。

7.png

  相较 i , iii 两种情况,问题容易出现在 ii 两者系数相等:这里需要考虑一个较特殊的场景,当相加后的系数为0时,相关数据不记录,同时需要通过free( ) 函数释放对应的内存空间。

  因此在设计对应的测试用例时,需要考虑系数相加为0的场景,在判定输出的同时,同步关注内存占用情况。

8.png

  II. multiple( )

  乘法函数较加法函数复杂一些,需要通过两层while循环 、 insert() 子函数完成功能实现:

9.png

  两层while循环模拟 两个一元多项式相乘的步骤,insert( ) 将产生的结果插入到结果链表中。因此需要同步关注insert( )子函数。没有在multiple( )中直接实现insert功能,是程序编写的基本规则:避免代码冗余、增加灵活性。Insert( )部分代码如下:

10.png

  我们可以看到,这里的测试点类似于add( )函数,也需要考虑三种情况:指数大于、指数小于、指数相等。其中 指数相等的情况,会触发系数相加操作,当结果为0时,需要通过free( )函数进行内存释放。

11.png

  因此在设计测试用例时,需要进行全面考虑,不要遗漏系数相加为0的场景,同步关注内存占用。

  3. 关于循环

  分支和循环是程序代码中最常见的两个场景,从灰盒测试角度,分支对应于测试设计中的等价类划分,循环可以对应边界值。

  程序可能会在分支或循环处发生异常,比如没有正常退出循环,严重情况会导致程序崩溃,程序进入死循环。

  举个栗子

  描述:执行连接操作,人为使Sender进程异常,Receiver会执行反复重连尝试,点击 连接取消 按钮,但是Receiver仍然继续执行重连。

  分析:点击取消按钮后,并没有终止循环,取消操作存在代码缺失,导致循环未正常终止。

  三、一点思考

  由于测试的入门门槛较低,测试工程师更需要做好自身技能储备,提升竞争力,作者建议从如下几个方面进行提升:

  1. 凡事多思考,多考虑为什么?尝试弄清楚背后的原因。

  2. 软件版本没有测试出严重故障,并不代表没有严重故障,可能是没有在实验环境暴露或存在测试疏漏。因此还是要多思考、多使用,以期充分暴露产品缺陷。

  3. 增加自动化意识:凡是重复的操作都可以尝试通过自动化代替。我们可以从windows bat , Linux sh脚本处一点点做起:积沙成塔。但是要考虑性价比,从长期考虑,如果自动化的时间成本远远大于手动成本,那就维持手动。

  4. 从代码层面进行提升,至少熟练掌握一门编程语言(如C++),同时对数据结构有比较深入的理解。在工作之余,培养刷题的习惯:可以在牛客网、PTA、OpenJudge等网站进行编程实操,认真分析Not Accepted原因 及 编程网站的测试用例,反推出自己编程时的漏洞,据此完善自己的逻辑思维能力,强化测试用例编写时的逻辑性和全面性。


作者:Ron 

原文链接:http://www.51testing.com/html/36/n-4475436.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 随着软件行业的快速发展,接口测试用例在软件开发中扮演着越来越重要的角色。自动化测试作为软件测试的一个重要分支,一般可以提高测试效率和质量,节约测试成本和时间,但是在实际推行过程中,大多数团队最终却难以持续实施自动化测试,不是编写测试用例有多难,而是维护测试用例的成本非常高,通常是“编写用例一时爽,维护起来火葬场”。于是对于如何有效地编写和运行接口测试用例就成了一个重要的话题。根据调查,大多数团队推行自动化测试最后却不了了之的原因无非是:1、需求变更频繁随着产品和业务的快速发展,需求往往会频繁变更,这就要求自动化测试的脚本也需要经常更新和维护,否则会导致测试效果下降。如果团队无法及时维护测试脚本...
            0 0 850
            分享
          • 本文介绍如何打开IE和Chrome浏览器。web项目,需要做兼容性测试,最重要的是浏览器兼容性测试。如果只考虑windows平台,相信应该很多公司必须要测试IE、Firefox、Chrome这三大浏览器。所以webui 自动化测试,也需要在这三大浏览器上面运行和测试脚本。从前面文章,我们知道,要调用Firefox浏览器,我们需要下载geckodriver.exe这个文件,放到Python的安装路径下,例如在安装Python是默认安装,路径就是C:\Python27;同样的道理,如果要启动IE和谷歌浏览器,也需要下载相关的插件,放到Python安装路径(C:\Python27,和pyt...
            8 8 836
            分享
          •   大家好,今天我们来探讨一个问题,这个问题可能会影响到大家的职业规划,也可能会影响到人员招聘时选人的方向,希望本文对大家有帮助。  我想大家一定都思考过或者疑惑过:技术、经验、业务这三方面,哪个更重要一些?  在软件开发过程中,不管是开发人员、测试人员还是产品经理,无论是谁都要面临这个问题。  但是,我先不下结论,我们先来弄清楚如下几个问题。  技术、经验、业务的范畴  1.技术  一说到技术,有的人会说了:C++、Java、python这些就是技术。  但是不完全对,实际上这些编程语言是实现技术方案的工具。我个人认为,编程语言语法、数据结构是属于技术的,但是编写的代码是否为更优,这就是属于...
            0 0 1459
            分享
          •   饭圈文化是一种由热爱和支持自己喜欢的偶像所构成的文化。在这个文化中,粉丝们通常会通过多种方式来表达他们的爱意,例如关注偶像参与的综艺和电视剧,使用各种社交平台为偶像打榜投票,以争取让偶像获得更高的排名和更多的曝光。 为了能够投出更多的票数,一些粉丝会采用一些技巧来绕过平台的限制,例如使用代理IP,以便用不同的IP地址来重复投票。下面提供的一段代码使用Python和Selenium库编写,可以自动遍历HTML表格并找到“投票”链接进行单击,从而实现不同用户的自动化投票。如果有需要的小伙伴们可以参考一下。  1. 下载并安装Chrome浏览器。  2. 下载与您的Chrome浏览器版本相对应的...
            0 0 816
            分享
          •   当前,我国金融体系内交易量持续增长,业务场景日趋复杂。系统交易量的增加,临时产生的集中业务需求,都会使服务器面临考验,因此,需要对系统进行性能测试。在金融系统中,报文处理是必不可少的。各大金融机构间通过报文的交换进行信息流的传递,从而最终实现资金的跨机构流转。在对金融系统的性能测试中,自然也少不了与报文打交道,而性能测试往往伴随着大量数据准备。那么,如何高效地生成大量报文呢?  试想这样一种场景:某金融机构需在特定时间内进行一波资金划转,该业务是新增交易,且交易数量较大,需要准备大量报文对服务器进行性能测试。数据的准备有很多方法,其中Python由于易上手且兼具灵活性而逐渐受到测试工程师们...
            0 0 1285
            分享
      • 51testing软件测试圈微信