防错设计之没有第一时间校验输入值——阿里测试之道(16)

发表于:2022-5-12 09:34

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

 作者:阿里巴巴技术质量小组    来源:51Testing软件测试网原创

  第一类:没有第一时间校验输入值
  案例1:接到业务临时需求,通过增加配置实现。在实现过程中,少了一对中括号,导致配置值格式出错,收银台无法加载渠道信息,进而导致某业务支付成功率下降。缺少一对中括号的直接原因是技术人员使用的编辑器在格式转换时自动去掉了中括号。
  案例2:新需求要求在交易回执解析模板中新增两个参数。在修改后的模板中,两个新字段分别多了一对引号,导致模板无法正常编译,交易回执无法解析,交易处于中间态,不能依据回执内容向前推进。
  案例3:线上渠道白名单变更,因配置中的双引号采用了全角格式,导致收银台支付渠道不可用,影响了多笔交易。
  案例4:原有合约中的商户服务名称中无“&”字符,为符合监管要求,需要将服务名称更新为带“&”符号的名称。合约改签时通过属性调整工单工具将服务名称做了更改,在后续合约改签费率时,服务名称中的特殊字符被再次提交。由于特殊字符“&”在XML解析的时候未转义,且内部对转义出现Exception返回null处理,导致签约成功后全部属性丢失,业务无法继续,某业务交易量跌至0。
  案例5:配置增加了新的渠道值,但渠道值存在空格,导致后期的对账脚本解析渠道值失败,影响了日切。
  案例6:商户入驻时,结算账号的SWIFTcode填写错误,导致后期结算出错,结算滞留在系统内,未及时下发给调拨系统,影响商户结算SLA。
  对这类输入值没有第一时间做校验引起的错误,要考虑的防错设计关键点是:
  需要人工输入的配置值,应尽量使用简单字符串,避免使用JSON、XML等复杂格式。如果配置值是一个很长的单行值,那么要设法拆成多行。总之,值要尽量简单,尽量可以在一屏/一页里面完整展示、一目了然,方便人工核对。
  JSON、XML等格式的输入值,在第一时间就要校验是否是合法的格式,以便及早发现问题。在新的解析模板生效前,系统要先运行一下,确保可以编译。
  含有非法字符的配置值,要在第一时间校验出来并拒绝,不能让它进入系统。如果已经进入系统,那么要在生效前做好校验。最好有这样一种设计模式:当发现配置值非法时,系统能够自我保护,不加载有问题的新配置,继续使用老配置;同时,为了确保新部署的系统能正常工作,配置要有多版本,否则,正在运行中的系统虽能自我保护,但一旦系统重启,就会加载有问题的新配置。
  一定要避免复制/粘贴操作。复制/粘贴非常容易出现各种问题。尤其是把内容文本临时粘贴到一个文本编辑器的时候,很容易出现多字符、少字符,以及全角和半角转换错误的问题。
  在案例3中,双引号从半角变成了全角。全角双引号是东亚开发者特别容易遇到的问题,很多富文本编辑器(包括MicrosoftOffice)都会自动地把半角引号变成全角引号。所以,如果需要临时保存文本,要用SublimeText、IDEA等代码编辑器。这些编辑器不会做半角或全角的自动转换。
  容易发生半角全角问题的除了引号,还有逗号、减号、括号。文本编辑器里的字体要设置成比较容易辨识半角与全角的。这个道理和识别0O和1lI是一样的。增强视觉辨识效果,是防错的一个很有效的手段。
  在进行各种解析和转义代码(例如,URLescape、Unicode到ASCII的转换、XML/JSON/CSV等格式在序列化和反序列化时对特殊字符进行处理等)时,尽量不要自己写代码,而选用成熟的二方或三方类库。要对转义有敬畏心,实现健壮完备的转义逻辑不是一件容易的事情,是需要投入一定的时间和精力去夯实的。宁可多花一点时间去找成熟的二方或三方类库,也不要为了节省时间自己写个简单的逻辑。
  接口和数据模型的各种字段要定义清楚:支持什么字符、不支持什么字符。需求文档如果有关于特殊字符的处理逻辑,例如“不支持特殊字符”,那么必须要求需求文档定义清楚什么是“特殊字符”。后面要增加支持的字符,就要改需求、走一个完整的设计编码测试闭环。对于输入值,要第一时间做校验,如果有不支持的字符,则第一时间抛错。
  SWIFTcode的长度一定是8位或11位,并且有一定的格式。在商户和用户填写SWIFTcode的地方,一定要充分做好校验,构筑好第一道防线,把长度和格式非法的SWIFTcode挡在系统外面。如果等到结算的环节再发现SWIFTcode非法,就太晚了。
  对于其他类似的值也是同样道理。特定长度的、特定格式的、ISO标准的,都要在值被输入的第一时间,对长度格式等做充分校验,校验发现不符合标准的,直接作为非法参数拒绝。
  对于没有提供账号验证API的支付渠道,尤其在流出场景下,要做“小额验证”设计。即:用户输入账户信息后,先做一笔随机的小额打款,用户只有确认收到并且验证金额后,才正式接受用户输入的账户信息。

查看《阿里测试之道》全部连载章节
版权声明:51Testing软件测试网获得作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任
21天更文挑战,赢取价值500元大礼,还有机会成为签约作者!

关注51Testing

联系我们

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

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

沪公网安备 31010102002173号