测试人员前期参与设计方案时需要注意什么?

服务的健壮性跟系统设计有很大关系,前期设计时考虑多一些处理逻辑,可以避免后期出现问题带来的损失以及修复问题的成本。

在前期讨论设计方案时测试同学也需要参与,而不只是埋头设计用例和测试,开发同学可能因为思维局限或者思考疲劳,不一定能想到异常处理,测试同学可以利用自身优势多给一些建议。

如果等测试评审时再跟开发同学强调这些设计,或者是到测试中才发现这类问题,可能就有点迟了,因为越到后期改动代码的影响范围越大,改动的风险也越高。

补偿机制

业务中有一个功能,用户提交申请后要将数据回调给某个第二方系统或者是第三方系统,这时候你要考虑,如果请求失败了怎么办。

重要事件的处理要记录请求情况,特别是异步请求,虽然不影响主流程,但是如果失败了又没有记录就不方便回溯,想重新发起请求也没有入口。

不管是通过HTTP通信还是通过MQ进行通信,都是可以记录请求状态的:前一步成功后将状态置为待推送,推送前置为推送中(为什么先置为推送中,因为有可能结果更快回来),推送后再置为成功/失败,然后针对待推送、推送失败的记录要做定时任务来进行重试。

功能特性开关

假设原本交互逻辑是A直接请求B系统,后来新增了C系统作为中间处理系统,A不直接请求B了,或者是原本A请求B的方式由MQ改成了HTTP,接到这样的需求要第一时间想到做开关,即某个配置确定了业务是走方式1还是方式2的逻辑。

对旧功能的大逻辑修改最好做特性开关,新功能要能兼容开关的两种方式都能正常运行。

上线后,当有需求时再开启使用,功能下架时也可以直接将开关关闭,最重要的是,如果上线后出现问题不需要回滚代码,直接将开关关闭即可。

这样出现问题后改动的成本和影响范围是最小的,修复问题花费的时间也是最少的。

请求内部系统失败

如果外部请求进来网关时,网关要先请求内部系统A,然后处理完再返回最终结果,比如外部发起注册请求,而网关要先请求信用系统判断用户资质,这时候要考虑请求信用系统失败的处理。

如果将请求失败和信用系统返回失败一样处理,返回拒绝的结果给外部系统,那是不合理的,因为这属于内部系统的错误,并不是业务处理的结果。这时候应该要返回请求失败给外部系统,让外部系统自己重新发起请求进行重试。

从系统的角度说,请求A系统时失败,相当于并没有进行处理,那么返回失败十分合理;从业务的角度说,虽然是我们自己的服务挂了,但是我们不能就这样把用户拒绝,我们都希望做到收益最大化,那么最好的方式当然是能把用户留住,而不是直接就把用户拒绝。

获取配置失败

为了更灵活地方便产品同学配置维度,而不用每次都通过改代码上线来实现,降低业务逻辑实现难度,到配置系统获取配置结果并根据结果进行相应处理是非常常见的实现方式。

但是多请求一套系统就多增加一个不确定性,特别是对配置来说,需要考虑请求失败和返回的配置无法使用、有缺漏的情况如何处理,至少不应该阻塞正常流程,比如可以在请求配置失败时使用默认配置的方式降低风险。

其实这几个都是“兜底”的设计方式,遇到一个功能不要只想到正常场景,要思考可能出现的异常场景,最重要的是出现这些异常场景的处理方式,尽可能覆盖异常情况,才能做到胸有成竹地上线。

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

  1. 文档获取方式:

  2. 加入我的软件测试交流群:680748947免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/788057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssm018简易版营业厅宽带系统+jsp

营业厅宽带系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本营业厅宽带系统就是在这样的大环境下诞生,其可以帮助管理者在短时间…

LeetCode 977 有序数组的平方(双指针法)

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 […

QCustomPlot一、QCustomPlot基础及画图显示

1、QCustomPlot下载 QCustomPlot源码demo 根据需要选择需要的文件: 完整版。QCustomPlot.tar.gz 源代码例子帮助文档; 共享库。QCustomPlot-sharedlib.tar.gz 库编译和使用; 源代码。QCustomPlot-source.tar.gz 源代码 里面包含了很多QCusto…

夜晚兼职好选择:六大副业助你增收

晚上兼职,无疑是许多寻求额外收入人群的理想选择。以下为您精心推荐的六个副业,既适合晚间操作,又能让您在轻松愉悦中赚取额外收益。 网络调查与市场研究:利用晚上的闲暇时光,参与网络调查与市场研究,为企业…

TO-277肖特基二极管 散热效果好 型号齐全

市场对于肖特基二极管的需求非常旺盛,近日常有客户前来东沃电子咨询TO-277B 封装系列肖特基二极管选型、价格、交期、现货等方面的问题。东沃电子推出的TO-277B 封装系列肖特基产品,外形扁平,散热片外露设计,能够有效改善散热能力…

JAVA 100道题(25)

25.实现一个死锁示例,并解释如何避免死锁。 在Java中,死锁通常发生在两个或更多的线程无限期地等待一个资源,而该资源又被另一个线程持有,后者也在等待另一个线程释放资源。这形成了一个循环等待条件,导致所有涉及的线…

配置plsql链接Oracle数据库(新手)

配置plsql链接Oracle数据库 安装Oracle客户端 、安装plsql客户端并激活 配置tnsnames.ora文件(路径D:\app\peter\Oracle\InstantClient\network\admin根据你的实际路径设置) 配置文件如下 # tnsnames.ora Network Configuration File: D:\app\peter\O…

练习 16 Web [极客大挑战 2019]LoveSQL

extractvalue(1,concat(‘~’, (‘your sql’) ) )报错注入,注意爆破字段的时候表名有可能是table_name不是table_schema 有登录输入框 常规尝试一下 常规的万能密码,返回了一个“admin的密码”: Hello admin! Your password is…

HTML/XML转义字符对照

特殊字符转义表 字符十进制转义字符"&quot;&&amp;<<<>>>不断开空格(non-breaking space) 最常用的转义字符列表 显示说明实体名称十进制编号半方大的空白&ensp;全方大的空白&emsp;不断行的空白格 <小于<<>大于&g…

2024最新软件测试【测试理论+ app 测试】面试题(内附答案)

一、测试理论 3.1 你们原来项目的测试流程是怎么样的? 我们的测试流程主要有三个阶段&#xff1a;需求了解分析、测试准备、测试执行。 1、需求了解分析阶段 我们的 SE 会把需求文档给我们自己先去了解一到两天这样&#xff0c;之后我们会有一个需求澄清会议&#xff0c; …

JAVA基础02-Java语言基础以及编译准备工作

什么是JAVA语言 Java是一门面向对象的编程语言&#xff0c;不仅吸收了C语言的各种优点&#xff0c;还摒弃了C里难以理解的多继承、指针等概念&#xff0c;因此Java语言具有功能强大和简单易用的两个特征。 &#xff08;可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式…

nginx输出日志配置与查看

nginx日志配置 要配置Nginx输出日志&#xff0c;主要需要关注Nginx配置文件中的access_log和error_log指令。这些指令用于定义Nginx如何记录客户端的访问日志和错误日志。 下面是一些基本的配置步骤&#xff1a; 找到Nginx配置文件&#xff1a;Nginx的主配置文件通常位于/etc…

DEM高程数字模型制作技术分享

1. 引言 ​数字高程模型&#xff08;Digital Elevation Model&#xff0c;简称DEM&#xff09;是地形表面地形特征的数字表示。它提供了关于地面起伏、地形形态、地表特征等重要信息。在地理信息系统&#xff08;GIS&#xff09;、遥感、地质学、水利工程等领域&#xff0c;DEM…

Golang数据库事务实践

事务是很多业务的基础&#xff0c;本文介绍了如何在Golang里实现数据库事务操作&#xff0c;并以一个用户注册场景给出了完整实现。原文: Transactions in Go application Go 是一种年轻而强大的语言&#xff0c;专为编写小型、简单的服务而创建。但随着时间推移&#xff0c;越…

redis数据类型介绍

字符串string&#xff1a; 字符串类型是Redis中最为基础的数据存储类型&#xff0c;是一个由字节组成的序列&#xff0c;他在Redis中是二进制安全的&#xff0c;这便意味着该类型可以接受任何格式的数据&#xff0c;如JPEG图像数据货Json对象描述信息等&#xff0c;是标准的key…

分享几个可以免费使用的GPT网站吧

1. ChatGAI ChatGAI是一个界面简洁的AI平台&#xff0c;提供App和网页版&#xff0c;每日均有免费使用机会。 2. ChatGPT 本网站向大家开放了ChatGPT 3.5和4.0版本的免费体验&#xff0c;特别适合新用户。每天都有免费次数&#xff0c;响应迅速&#xff0c;注册便捷&#xff0…

Java中Filter和Interceptor的区别

概述 本文阐述Java中Filter和Interceptor的区别。 执行顺序不同 FIlter->Servlet->Interceptor->Controller 配置方式不同 FIlter在web.xml中配置 Interceptor在spring中的配置文件中、使用注解 是否依赖servlet Filter依赖servlet&#xff0c;而Interceptor不…

java中split(“.“)失效问题

来源&#xff1a;比较版本号_牛客题霸_牛客网 在写到这道算法题的时候&#xff0c;发现一个问题&#xff0c; String[] leftversion1.split("."); 返回结果为空&#xff0c;经过查阅得知&#xff0c;是split中的正则表达式里的问题&#xff0c;这个 . 代表的意思是…

深入理解数据结构第二弹——二叉树(2)——堆排序及其时间复杂度

看这篇前请先把我上一篇了解一下&#xff1a;深入理解数据结构第一弹——二叉树&#xff08;1&#xff09;——堆-CSDN博客 前言&#xff1a; 相信很多学习数据结构的人&#xff0c;都会遇到一种情况&#xff0c;就是明明最一开始学习就学习了时间复杂度&#xff0c;但是在后期…

12313124

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…