ThougthWorks面试题的解答

发表于:2017-4-20 13:15

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:顾翔    来源:51Testing软件测试网原创

  下面这道题是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列与第5列合并;
  第2列与第6列合并;
  第3列与第7列合并;
  第4列与第8列合并;
  我们假设条形码信息'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>',
  ]
  考虑到输入数据是条形码输入的,对于错误格式,长字符等特殊情况我们在这里不做处理
版权声明:本文出自《51测试天地》原创测试文章系列(四十五)投稿。51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

相关推荐:
《51测试天地》原创测试文章系列(四十五)

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号