• 12
  • 12
分享
  • 打开测试黑盒,从代码角度编写测试用例!——软件测试圈
  • 曼倩诙谐 2020-12-16 09:39:33 字数 2273 阅读 1007 收藏 12

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

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

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

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

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

  (3)举例:

。0.png

  执行加法运算后的结果:

0.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)数据结构使用链表:链表较数组灵活、但较容易出错,因此比较适合在本文举例:

1.png

  (2)程序架构如下:

2.png

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

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

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

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

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

  二、测试验证

  1. 临界测试:录入 空多项式 运行程序,可以看到输出数据发生了混乱。

 3.png

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

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

4.png

  2. 等价类测试

  I. add( ) 

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

5.png

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

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

6.png

  II. multiple( )

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

7.png

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

8.png

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

9.png

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

  3. 关于循环

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

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

  举个栗子

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

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

  三、一点思考

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

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

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

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

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



作者:Ron   

来源:51Testing软件测试网原创

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   Deepfake 人工智能系统最险恶的功能之一是能够复制一个人的声音,即使只是一段简短的录音。 人们声音的深度伪造版本以及伪造的视频可以用来使其听起来和看起来好像政客或名人说了一些他们实际上从未说过的话。此外,还有一些情况是,人们接到诈骗电话,其中朋友或家人的深度伪造声音要求他们因某种紧急情况尽快汇款。 此外,复制的声音可用于绕过语音识别安全系统。  然而,一种名为 AntiFake 的新软件工具可以帮助防止这种情况发生。  已经有技术可以确定所谓的声音是否是深度伪造的,AntiFake 是最早阻止此类伪造声音产生的系统之一。 简而言之,它是通过让人工智能系统更难读取真人声音录音中的关键声...
            0 0 406
            分享
          • 作为技术人员在工作中总是会遇到各种问题,简单的问题查下资料就能解决,而复杂的问题常常需要花费时间尝试各种办法,而这些问题其他同行也会用到,将项目遇到的问题输出博客,既能总结经验提升技术又能分享知识帮助别人学习。我认为写博客是一个很好的成长方式,另外,博客也可以作为个人作品。怎么写博客测试圈有很多写博客的平台都支持免费发布,随手一搜就找到啦,比如本文的发布平台:51testing软件测试圈。技术类的文章通常使用Markdown格式编写,语法很简单,基本上写一次就能学会。不管是解决方案,还是文章随笔都可以作为博客发表,前提是不违反平台规则。为什么要养成习惯有一阵子项目工作比较忙,遇到的问题查到资料...
            0 0 753
            分享
          • 2.功能测试        根据软件说明或用户需求验证 App 的各个功能实现,提炼App 的用户使用场景,构建测试点,并明确测试标准,若用户需求中无明确标准遵循,则需要参考行业或相关国际标准或准则。根据被测功能点的特性列出相应类型的测试用例对其进行覆盖。在测试实现的各个阶段跟踪测试情况,及时修正业务或需求理解错误的情况。 2.1 运行1)App 安装完成后的试运行,可正常打开软件。2)App 打开测试,是否有加载状态进度提示。 3)App 打开速度测试,速度是否可接受。 4)App ...
            0 0 898
            分享
          • 一、检查系统是否安装rpc服务使用LR监控Linux,首先查看系统是否开启了rpc服务,其次查看Linux系统守护进程rpc.restat是否启动,该进程是必须的。可以通过命令rpcinfo -p来查看,如下图:说明rpc服务没有安装二、 安装、启动rpc.rstatd1、下载rpc的安装包:下载地址:https://pan.baidu.com/s/1i44OMpB2、将下载的安装包通过rz命令上传到用户的家目录下,如下图:    3、解压文件:tar –zxvf rpc.rstatd-4.0.1.tar.gz4、进入解压后的目录执行 ./configure,如下图:发现报如下图所示的错误:通...
            13 13 1909
            分享
          • 1、引言小鱼:小屌丝, 这段代码为什么要开两个线程?小屌丝:因为我要读写文件,还要备份文件,所以就开两个线程了。小鱼:嗯,想法是对的,但是,还有一种简便的方法, 不需要开两个线程就能搞得定的。小屌丝:额…难道是with open?小鱼:不是。小屌丝:那还有啥呢? 我咋想不起来了。小鱼:嗯,这个方法很奈斯,但是很少人使用,因为大部分码农都是直接open 文件的。小屌丝:那你就别藏着掖着了,赶紧展示一下,让我也长长见识。2、 fileinput说到fileinput,可能90%的码农表示没用过,甚至没有听说过。这不奇怪,因为在python界,既然open可以走天下,何必要fileinput呢?。但...
            0 0 1009
            分享
      • 51testing软件测试圈微信