• 0
  • 0
分享

下面这道题是ThougthWorks的面试题,是用来面试开发人员的,我们来看看作为测试人员,我们如何对这个需求进行测试,首先让我们来看一下题目:

  面试题目:收银机

  需求描述:

  商店里进行购物结算时会使用收银机系统,这台收银机会在结算时根据客户的购物车中的商品和商店正在进行的优惠活动进行结算和打印购物小票。

  已知商品信息包含:名称,数量单位,单价,类别和条形码(伪)。

  已知我们可以对收银机进行设置,使之支持各种优惠。

  我们需要实现一个名为打印小票的小模块,收银机会将输入的数据转换成一个JSON数据然后一次性传给我们这个小模块,我们将从控制台中输出结算清单的文本。

  输入格式(样例):

  [

  'ITEM000001',

  'ITEM000001',

  'ITEM000001',

  'ITEM000001',

  'ITEM000001',

  'ITEM000003-2',

  'ITEM000005',

  'ITEM000005',

  'ITEM000005'

  ]

  其中对'ITEM000003-2'来说,"-"之前的是标准的条形码,"-"之后的是数量。

  当我们购买需要称量的物品的时候,由称量的机器生成此类条形码,收银机负责识别生成小票。

  该商店正在对部分商品进行"买二赠一"的优惠活动和对部分商品进行95折的优惠活动。其中:

  "买二赠一"是指,每当买进两个商品,就可以免费再买一个相同商品。

  "95折"是指,在计算小计的时候按单价的95%计算每个商品。

  每一种优惠都详细标记了哪些条形码对应的商品可以享受此优惠。

  店员设置,当"95折"和"买二赠一"发生冲突的时候,也就是一款商品既符合享受"买二赠一"优惠的条件,又符合享受"95折"优惠的条件时,只享受"买二赠一"优惠。

  要求写代码支持上述的功能,并根据输入和设置的不同,输出下列小票。

  小票内容及格式(样例):

  当购买的商品中,有符合"买二赠一"优惠条件的商品时:

  ***<没钱赚商店>购物清单***

  名称:可口可乐,数量:3瓶,单价:3.00(元),小计:6.00(元)

  名称:羽毛球,数量:5个,单价:1.00(元),小计:4.00(元)

  名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

  ----------------------

  买二赠一商品:

  名称:可口可乐,数量:1瓶

  名称:羽毛球,数量:1个

  ----------------------

  总计:21.00(元)

  节省:4.00(元)

  **********************

  当购买的商品中,没有符合"买二赠一"优惠条件的商品时:

  ***<没钱赚商店>购物清单***

  名称:可口可乐,数量:3瓶,单价:3.00(元),小计:9.00(元)

  名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元)

  名称:苹果,数量:2斤,单价:5.50(元),小计:11.00(元)

  ----------------------

  总计:25.00(元)

  **********************

  当购买的商品中,有符合"95折"优惠条件的商品时

  ***<没钱赚商店>购物清单***

  名称:可口可乐,数量:3瓶,单价:3.00(元),小计:9.00(元)

  名称:羽毛球,数量:5个,单价:1.00(元),小计:5.00(元)

  名称:苹果,数量:2斤,单价:5.50(元),小计:10.45(元),节省0.55(元)

  ----------------------

  总计:24.45(元)

  节省:0.55(元)

  **********************

  当购买的商品中,有符合"95折"优惠条件的商品,又有符合"买二赠一"优惠条件的商品时

  ***<没钱赚商店>购物清单***

  名称:可口可乐,数量:3瓶,单价:3.00(元),小计:6.00(元)

  名称:羽毛球,数量:6个,单价:1.00(元),小计:4.00(元)

  名称:苹果,数量:2斤,单价:5.50(元),小计:10.45(元),节省0.55(元)

  ----------------------

  买二赠一商品:

  名称:可口可乐,数量:1瓶

  名称:羽毛球,数量:2个

  ----------------------

  总计:20.45(元)

  节省:4.55(元)

  **********************

  在这里,我第一时间想到的是通过判定表的方式来解决这个测试问题,我们

  输入条件:

  C1:普通商品/称重商品。C1=T:普通商品;C1=F:称重商品。

  C2:买二赠一的商品。C2=T:有买二赠一的商品;C2=F:无买二赠一的商品。

  C3:95折的商品。C3=T:有95折的商品;C3=F:无95折的商品。

  输出结果:

  A1:无优惠购物清单。

  A2:仅有买二赠一商品的购物清单。

  A3:仅有95折商品的购物清单。

  A4:既有买二赠一的商品又有95折的商品的购物清单。

  我们用判定表来分析一下:图1.png

  第1列与第5列合并;

  第2列与第6列合并;

  第3列与第7列合并;

  第4列与第8列合并;

图2.png

  我们假设条形码信息'ITEM000001' 包含名称,数量单位,单价,类别,格式为'<名称><数量单位><单价><类别>',其中,类别=0:表示无优惠产品、类别=1:表示买二赠一的商品、类别=2:表示95折的商品、类别=3:既有买二赠一的商品又有95折的商品的购物清单。

  于是我们得到一下四组测试输入数据

  [

  '<可口可乐><瓶><3.00><0>',

  '<可口可乐><瓶><3.00><0>',

  '<可口可乐><瓶><3.00><0>',

  '<羽毛球><瓶><3.00><0>',

  '<羽毛球><瓶><3.00><0>',

  '<羽毛球><瓶><3.00><0>',

  '<羽毛球><瓶><3.00><0>',

  '<羽毛球><瓶><3.00><0>',

  '<苹果><斤><5.50><0>'-2,

  ]

  [

  '<可口可乐><瓶><3.00><0>',

  '<可口可乐><瓶><3.00><0>',

  '<可口可乐><瓶><3.00><0>',

  '<羽毛球><瓶><3.00><0>',

  '<羽毛球><瓶><3.00><0>',

  '<羽毛球><瓶><3.00><0>',

  '<羽毛球><瓶><3.00><0>',

  '<羽毛球><瓶><3.00><0>',

  '<苹果><斤><5.50><2>'-2,

  ]

  [

  '<可口可乐><瓶><3.00><1>',

  '<可口可乐><瓶><3.00><1>',

  '<可口可乐><瓶><3.00><1>',

  '<羽毛球><瓶><3.00><1>',

  '<羽毛球><瓶><3.00><1>',

  '<羽毛球><瓶><3.00><1>',

  '<羽毛球><瓶><3.00><1>',

  '<羽毛球><瓶><3.00><1>',

  '<苹果><斤><5.50><0>'-2,

  ]

  [

  '<可口可乐><瓶><3.00><3>',

  '<可口可乐><瓶><3.00><3>',

  '<可口可乐><瓶><3.00><3>',

  '<羽毛球><瓶><3.00><3>',

  '<羽毛球><瓶><3.00><3>',

  '<羽毛球><瓶><3.00><3>',

  '<羽毛球><瓶><3.00><3>',

  '<羽毛球><瓶><3.00><3>',

  '<苹果><斤><5.50><3>'-2,

  ]

  然后我们还可以根据经验来扩展我们的测试输入数据,看看系统的容错性:

  1,空表单

  [

  ]

  2,同一种商品出现在两次

  [

  '<可口可乐><瓶><3.00><0>',

  '<可口可乐><瓶><3.00><0>',

  '<可口可乐><瓶><3.00><0>',

  '<羽毛球><瓶><3.00><0>',

  '<羽毛球><瓶><3.00><0>',

  '<羽毛球><瓶><3.00><0>',

  '<可口可乐><瓶><3.00><0>',

  '<可口可乐><瓶><3.00><0>',

  ]

  3,同一种名称商品单价不同

  [

  '<苹果><斤><5.50><3>'-2,

  '<苹果><斤><5.00><3>'-2,

  ]

  4,同一种名称商品数量单位不同

  [

  '<可口可乐><瓶><3.00><0>',

  '<可口可乐><瓶><3.00><0>',

  '<可口可乐><听><2.50><0>',

  '<可口可乐><听><2.50><0>',

  ]

  考虑到输入数据是条形码输入的,对于错误格式,长字符等特殊情况我们在这里不做处理


作者:顾翔   

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

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   1、前言  大家好!我是Meng  前段时间,很荣幸被一合作伙伴邀请发表一篇文章,主题为"这些年,我所从事软件测试的一些感悟",正好趁着这个机会,我也好好总结一下。  2、测试培训  对于软件测试,在培训之前也不知道是干什么的,只知道有软件开发,之后才知道有软件测试这个行业。  刚开始也是在徘徊是做开发还是做测试,经过多次被测试机构的招生老师洗脑后,开始进行了软件测试培训之旅。那时候测试培训机构就那么几家,基本都是机构,个人的很少,培训机构是线下的,线上的也很少。培训价格方面也是过万了,跟现在的培训机构差不多,也就便宜了几千而已。  回头一想想,那时候教的内容,真的很少...
            0 0 1337
            分享
          •   一、概述  Fiddler是一款免费且功能强大的数据包抓取软件。它通过代理的方式获取程序http通讯的数据,可以用其检测网页和服务器的交互情况,能够记录所有客户端和服务器间的http请求,支持监视、设置断点、甚至修改输入输出数据等功能。fiddler包含了一个强大的基于事件脚本的子系统,并且能够使用.net框架语言扩展。  二、Fiddler工作原理  Fiddler是位于客户端和服务器端之间的HTTP代理, 它能够记录客户端和服务器之间的所有 HTTP(S)请求,可以针对特定的HTTP(S)请求,分析网络传输的数据,还可以设置断点、修改请求的数据和服务器返回的数据。  Fiddler在浏...
            9 11 3226
            分享
          •   在上一篇《Jmeter系列(一)之我想做接口测试和性能测试》中,我勾起了大家对接口测试和性能测试的兴趣,既然兴趣有了,我们来动手练一练吧。由于我们先从基础学起,所以我们先聊聊windows下的安装和使用。后期我们能力提升了,再去看看linux下是如何使用的。  一.JDK安装  Jmeter是Java编写的,所以他运行是需要jdk支持的。如果你的机器已经安装了jdk,这一步就可以pass了。  在百度搜索jdk,进入官网(https://www.oracle.com/index.html)   点击顶部的products-->java,然后点击右边download java  选择一...
            2 2 3323
            分享
          •   大多数的性能测试工作人员分为以下三个阶段:  1、出了问题看资源,资源占用如果很高,报以窃喜的心态,恩,发现了,原理是资源瓶颈。  2、资源没有出现瓶颈,通过一些技术手段分析,发现是组件的配置文件有问题,例如:server的并发策略有问题,带宽有问题,找到了线路短板性能中的短板,到了这个阶段在我看来是比较牛的测试。  3、以上均无问题的情况下,考虑数据结构和算法我个人接触到的来说,现在大多数的人员都是在仰望第二阶段,摸索第三阶段,希望从代码级发现出性能的问题,进行问题的发现和解决,也符合我们的bug越早发现修复的成本越低的理论。同时,也是一名性能测试工程师高薪的象征。  性能测试调优哪些方...
            0 0 805
            分享
          •   虽然苹果公司错误地将iPad Air中的M2芯片列为 10 核 GPU 而不是 9 核 GPU,但它在MacBook Air发布会上和营销材料中宣称的性能是准确的。在提供给9to5Mac的一份声明中,苹果表示,它所分享的有关 iPad Air 性能的细节始终是基于9核GPU测算出的。  我们正在更新 Apple.com 以更正 M2 iPad Air 的核心数量。M2 iPad Air 的所有性能均准确无误,并基于 9 核 GPU。  苹果公司的网站称,M2 芯片&quo...
            0 0 550
            分享
      • 51testing软件测试圈微信