• 0
  • 0
分享
  • 测试设计中隐藏的边界有哪些——软件测试圈
  • 恬恬圈 2022-07-05 14:25:54 字数 2606 阅读 1161 收藏 0

概述:边界值分析是测试设计一个稳定的部分,但是对黑盒测试人员来讲有时候边界并不是那么明显。这些不明显的边界被称作隐藏的边界。本文提供几个隐藏的边界的例子,还有一些以让隐藏边界显露来设计测试计划的要点方法。

测试设计中隐藏的边界有哪些?这几个例子告诉你答案

使用边界值分析和等价类划分是测试设计的基础做法之一。该理论的含义是对于一个特定的输入,测试中更常使用的值是在这些输入范围的边界附近的值。在边界之间的一类值当用到测试时常被认为是“等价的”。

举个例子,如果你的APP有一个功能是让输入一个价格的打折值,有效的范围很可能就是0百分比到100百分比。将要测试的值就会是那些在边界附近的值,或-1百分比,0百分比,100百分比和101百分比。你很可能也会选择测试一个“正常的”20%的折扣。如果那些工作正确,你不大可能通过测试其他可能的折扣值来发现缺陷。你在寻找在边界和超过边界的正确行为。

然而,有时候有些边界并不那么显而易见。我曾经因为隐藏的边界栽过跟头,导致缺陷跑到了顾客面前。这种情形不常有,但是当其出现时,我就会听到那个有魔力的话:“你没测过这个吗?”

在本篇文章中,我会详细叙述隐藏边界的几个引起因素:潜在的执行中的数据类型边界(比如,16比特数据类型到32比特数据类型);信任边界,尤其是在一个重新设计或重构中;有特别含义的数据值和软件中有趣的边角。

Data-TypeBoundaries数据类型边界

我测试过的一个电信管理平台有一个功能是在远程设备上配置不断变化的参数。其中一个参数有个范围是1到1024000。前端UI将这个参数储存在一个32位的整型数种并正确地处理了输入的验证和系统的行为,或者说期望的边界值(0,1,1024000和1024001)和几个会被顾客使用的正常值。我们并没有穷举式地测试每个值,因为在边界值之间的值被视作彼此都是等价的。

但是,在该管理平台和远程设备之间的通信网络有个协议将数据类型限制在16比特位。通信模块将32位的值撕成2个16比特的值并分开将他们传输。这是缺陷所在的地方。

当顾客将那个参数设置成65536,它就被通信模块设置成0。代码本应该将发送两个值作为该参数,65535和1。65535是16比特所能代表的最大数值。撕开该值的代码有一位的偏差;它尝试将65536放进那个16比特的值中。

65535和65536之间的边界在UI端部那么明显。它在软件说明书或测试计划中并没出现。只有参与做该设置理解整个系统的人这个边界才显而易见。

现在,当我看到一个要输入较大数值的数字型输入,我就会测试可能会出现的数据代表(256,65535和429467295)。

TrustBoundaries信任边界

软件架构的一个要义是定义信任区。如果一个客户请求来自信任区,接收的API接口可以认为这些请求没有恶意意图并可以略过一些输入验证。这对提高系统性能和开发者效率非常有用。

有一个项目,我们正在按照商议好的约定快速向通过Web服务的外部公司展露我们潜在的商业逻辑。这个项目称作服务启动并在大量将Web服务包装在我们已有的API请求附近。

这些API请求原来只对我们程序的内部模块提供,而且他们被设计做内部模块。结果,那些输入被认为是来自信任源。输入验证以节省编码和处理时间。

然而,对这个服务启动项目,有些API请求被暴露给了外部的请求者。“快乐路径”测试用例使用跟我们的程序一样的输入,一切都很好--直到我们开始从Web服务层面测试并对输入产生怀疑。

一个特定的字段在该API中有读和写的能力,但是逻辑上,它只应该有读的能力。该条商业逻辑基于来自数据库的数据来计算那个值。前端UI只读到了该值,但是当开发人员暴露那个API,我们能够写入那个值,将不一致的数据写入数据库。

任何时候信任边界移动或被假定了,就很有可能是有严重的缺陷。明确地与开发人员检查信任边界然后相应地设计测试计划是一个好的工作做法。

SpecialDataValues特殊数据值

很多APP对特殊数据值有特殊的行为。这些行为可能在软件说明书或者界面上不可见,但是他们可能导致缺陷。

一个系统对测试有特殊规定,使用一个唯一的由那个用户个人资料中的信用卡号和其他数据组成的组合来付款。本来是不要对测试人员和测试账号收款的。然而,你猜到了--一个有关特殊信用卡检查的缺陷导致很多顾客可以免费使用我们的服务。

这种现象并不普遍或者会有灾难性的后果,当然顾客们并不在意,但是它却将使用特殊处理过的数据来猜测该账户是测试账户的危险暴露了出来。一个更好的设计应当是明确将那些账户指定为测试账户。

EasterEggs复活节彩蛋【软件中有趣的边角】

一个复活节彩蛋是建到一个APP里的有些特殊的功能--也许是一些有趣的事,像迷你游戏或有团队名称的信用卷。软件中的首个复活节彩蛋是在阿他瑞2600游戏毛线。如果游戏玩家拿起一个特定的不可见的物体,他们将进入一个秘密房间看到来自游戏创造者留的信息。这个房间不会在任何文档或测试中出现,因为没有人知道它。

复活节彩蛋很有趣,但是他们可能暴露系统的脆弱性,尤其是没有测试彻底的情况下。我见过的一个缺陷彩蛋是一个在特别的天里将我们在app上的正常品牌替换掉的特殊的标志。举个例子,在一个如独立日这样的节日里,该logo可能变化颜色有炮竹图像。尤其是除了那段时间它不工作,而用户看到的是一个404的错误。图像崩溃了,我们在发布之前没有那个特定的节日日期。

对隐藏边界可以做什么

基于隐藏边界的特性,他们难以发现,尤其是在黑盒测试里。随机地搜索隐藏边界是困难的而且有很少的成功可能。

但是,不是一切都迷失了。这里有一些可以处理隐藏边界的方法。

  • 参加设计评审,寻找数据类型的不匹配情形和任何数据转换的情形。询问有关转换的事情然后合适滴设计测试。

  • 对数字数据输入,测试由潜在的数据类型定义的潜在边界。

  • 学习代码包,寻找任何可能是复活节彩蛋的文件或资源。

  • 问开发人员可能存在的边界和任何复活节彩蛋。

隐藏边界的潜在存在给黑盒测试同行们充足的理由去测试程序中有些潜在的架构和执行。希望本篇文章启发你去探索你的程序并暴露出一些潜在的问题。


作者:Atstudy网校

原文链接:https://www.toutiao.com/article/7063335392656851486/?log_from=e6d7eb63109db_1646895299842

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •  背景介绍:  介绍搜狗输入法按键响应自动化测试的方法及工具,虽然本文中的工具是深度定制化的输入法测试工具,无法应用在其他项目,但相信本文中所使用的Xposed Hook技术、socket多进程通信技术以及自动化思想会对大家有帮助。  按键响应测试是什么?  当我们在手机上打一个字时,它大致经历了如下过程:  因此,在以上过程中,从用户按下软键盘上的按键到候选词显示的所花费的时间,是衡量输入法性能的一项重要指标。  按键响应怎么测试?  按键响应的测试方法有两种:日志方式和视频拍摄方式。  日志方式:在上述用户按下按键时,程序执行onKeyEvent函数中写日志记下时间戳T1;当开始显示候选词...
            0 0 2068
            分享
          •   我是去年上半年从销售行业转行到测试的,从销售公司辞职之后选择去培训班培训软件测试,经历了四个月左右的培训,在培训班结课前两周就开始投简历了,在结课的时候顺利拿到了offer。在新的公司从事软件测试工作已经将近半年有余,回想当时面试的过程,想分享一些自己的感悟,希望能够对大家有所帮助。  不知道从啥时候开始,互联网行业就开始卷起来了,除了开发岗,测试岗也是卷的不行,不少招聘信息都要求至少本学历、三年软件测试经验,除了功能测试,像接口、自动化、Linux命令都得会,甚至连性能测试都得会,虽然最后去了公司基本只是做功能测试,但是不妨碍面试官问你各方面的知识,不愧是大家所说的“面试造航母,上班拧螺...
            0 0 758
            分享
          • 1、TCP是互联网中的(1 A)协议,使用(2 C)次握手协议建立连接。当主动发出SYN连接请求后,等待对方回答(3 A)。这种连接的方法可以防止(4 D),TCP使用的流量控制协议是(5 B)。(1)A.传输层  B.网络层  C.会话层  D.应用层;(2)A.1  B.2  C.3  D.4;(3)A.SYN,ACK  B.FIN,ACK  C.PSH,ACK  D.RST,ACK;(4)A.出现半连接  B.无法连接  C.假冒的连接  D.产生错误的连接;(5)A....
            16 14 6528
            分享
          • 摘要:JMeter是性能测试中被普遍使用的一种工具,常用于压力测试。该工具具有丰富的扩展插件用以满足不同情况下性能测试的需求。消息队列(Message Queue)简称为MQ,作为目前的主流中间件,在很多软件或程序中均会得到使用,测试人员在测试过程中会遇到涉及MQ的系统改造,因而需要利用JMeter实现消息队列数据的发送和接收,完成性能测试工作。本文基于实际工作中遇到的项目情况,介绍了一种JMeter扩展插件Mqmeter的使用方法,完成消息队列的性能测试。1、引言消息队列是分布式系统中的重要组件,主要解决应用耦合,异步消息,流量削锋等问题,以实现高性能、高可用、可伸缩和最终一致性架构。作为大...
            0 1 2893
            分享
          •   前言  在做自动化的过程中,编写用例时候需要用到用例的前置和用例的后置,其中pytest中有setup_class和teardown_class可以帮助我们完成这些,但是不够完善而且灵活性不够强。举个简单的例子,一个calss中有3条用例,其中2条需要登录,1条不需要登录,这个时候如果在用setup和teardown来做就有点不方便。这个时候就引入了新的知识点fixture。  fixture简单介绍  fixture属于pytest中的一个方法。fixture可以用作测试用例的前置和后置操作,其中fixture命令规范没有像setup和teardown固定格式。可以随意命名。控制fixt...
            13 13 4793
            分享
      • 51testing软件测试圈微信