LP1-5:测试设计
在接到产品需求进行开发前,怎么样才能最大程度的降低开发错误或明显bug的情况?
答案是在「开发前做设计」。
通常,一个功能的设计要包含几个方面:
- 1.已有功能情况
- 2.需求情况
- 3.数据库设计
- 4.接口设计(包括request与response字段设计)
- 5.流程图
- 6.类图
已有功能情况
很多需求通常是在当前系统已有的功能上添加新的功能,此时弄清楚当前系统已有功能的情况就很重要,你需要了解这些功能对应的后端接口,以及代码大致的逻辑。
从代码层面理解了已有功能后,再去从第一视角去体验产品,因为我本身不太熟悉公司产品,所以这个阶段我通常会找测试同学或产品同学先跟我演示一下功能的完成流程,然后再去抓包看接口的参数情况。
如果已有功能很复杂,此时可以利用抓包软件代理转发的功能,将系统原本发送到服务器的数据转发到自己的计算机上,自己再本地运行服务,下断点,看业务具体的逻辑,此时会非常清晰。
我通常用「Charles」进行抓包和代理转发。
以转发APP请求为例,手机与计算机需要连接相同的wifi,然后在手机wifi处,设置wifi的代理,通常在高级设置那里,将代理的ip设置成计算机的ip,端口设置成Charles监听的端口,默认为8888。
如果手机访问的https协议的接口,那么还需要安装Charles提供的证书,可以自行Google,不多赘述。
连接上后,选择Tools->Map Remote Settings,然后点击Add进行添加则可,如下图。

注意要勾选「Preserve host in header fields」。
至此,APP中所有请求某个URL的数据都会转发到你本地服务的7777端口,只要你的服务启动的也是7777端口,那么就可以接收到相应的数据了。
需求情况
产品写需求时,无论写的多细,都会有信息损失,信噪比一直都存在,就算你完全理解了他的文档,依旧可能会实现错某些功能,因为产品可能会将他的一些默认理解认为也是你的默认理解。
为了最大限度的避免这种情况,好的方式就是用自己的话从技术角度再复述一遍,写在设计中,例如这些需要要实现的功能是1、2、3,功能1需要xxx接口需要从xxx表查询xxx关键数据等,目的是整理出实现的大致想法。
如果有预期效果图,最好将效果图中与该功能对应的部分截图放置在一起说明。
整理完后,与产品同学对一下,看看会不会有较大的偏差。
数据库设计
所有的业务功能简化来看就是对数据库的CRUD,所有数据库的设计非常关键,在这一步,你需要理清晰,当前的功能是否需要新增表、是否需要在原有表中新增字段、原有字段的含义变动一下是否可以满足需求等等。
我通常会将当前已有的相关表通过Create SQL列出来,然后将需要创建的新表或需要添加字段的表单独的通过SQL列出来。
随后就是通过数据库图的形式将当前功能涉及的表、表中的字段与相互之间的关系绘制出来。
非常不建议使用http://draw.io这类可视化软件来绘制,效率极低且每个人绘制的习惯不同,出来的图并不统一,难以形成文档沉淀。
这里推荐大家使用「mermaid」,算是一种DSL(领域特定语言),利用mermaid,在Markdown上就可以绘制出美观的数据库关系图。
mermaid本身是开源的,它可以绘制各种图,如类图、UML图等等,可以阅读它的文档:「https://mermaid-js.github.io/mermaid/#/」,几乎不用花精力学新的语法,照猫画虎的用就好了。
你可以访问「https://mermaid-js.github.io/mermaid-live-editor/」在线体验一下。
此外,vscode直接安装mermaid相应的插件,便可以在使用vscode写Markdown文件时,直接绘制了。

这里简单的用Mermaid绘制了数据库关系图(通过类图的形式绘制的)

其他设计
数据库设计完后,还要进行接口设计、流程图和类图设计,这些图都可以通过mermaid绘制。
所谓接口设计,就是你这个功能,要通过什么方法请求哪个接口,请求时需要哪些参数,这个接口会返回哪些操作。
有点像与前端对接的文档,但意义不同,接口设计的目的是帮助你理清,你需要哪些字段,这些字段怎么来,之前的数据库设计是否可以轻松拿到这些值,如果不行,你可能就需要调整一下数据库设计了,后续开发时,按照接口设计定义接口则可。
流程图简而言之就是整个功能其数据的流动,比如列表数据请求哪个服务的哪个接口可以获得,它可以帮助你理清是否漏了某些功能没有设计出相应的接口或数据表。
类图通常是上述所有设计都弄完后才开始设计的,主要的目的就是定义好类的名称、类所拥有的属性和方法,通常类图定下后,这个需求的功能要如何实现,你已经很清晰了。
结尾
做设计需要花费很多时间,但其实很值得。一开始就写代码,很有可能出现的情况就是漏实现了某些细节、容易出现bug或者最严重的返工,做设计可以很大程度的避免这些情况。
此外,还可以加强程序的健壮性,比如,在设计里单独设一栏,写例外情况的考虑,针对你做的功能,针对你当前做的这个设计,是否存在某些例外情况,比如线上数据量很大,你的设计在测试环境没问题,但一上线,接口就变得很慢,比如是否可能会被别有用心之人钻空子等等。
做完这些设计后,再与产品聊一次,然后与组长讨论设计中的实现方式,看看是否有不合理之处。
在写代码前,考虑全面些,在写代码时,就不用东改一下西改一下,除了提前设计,你还可以提前写好单元测试,对于你能想到的各种可能出现的情况,都写好单元测试,然后再开始功能的开发,所谓测试驱动开发就是如此,这样能进一步减少上线时出问题的可能,但可惜的是,很多公司只求快,步子快,当然就没有那么稳。
LP1-5:测试设计的更多相关文章
- 云计算PAAS平台测试设计之镜像管理
下面是云计算PAAS平台页面概览: 今天我们要讲的是镜像管理页面的测试设计: 可以看到,这个页面主要有增删改查四个功能. 1. 查询镜像 (1)易用性:查看镜像查询界面,界面上各组件设计合理.美观.易 ...
- H5介绍与测试设计
近期的项目中接触的基本都为H5的测试工作,从项目初期评审到测试工作的完成过程中,遇到了很多问题是与APP测试方法不太相同的地方,在此希望总结测试过程遇到的问题及新思路给之后会接触到H5测试的同学. 这 ...
- MBIST:用于嵌入式存储器的可测试设计技术
MBist技术可以自动实现存储器单元或阵列的RTL级内建自测试电路,MBIST的EDA工具支持多种测试算法的自动实现,可针对一个或多个内嵌存储器自动创建BIST逻辑,并完成BIST逻辑与存储器的连接, ...
- 揭开华为云CodeArts TestPlan启发式测试设计神秘面纱!
摘要:质量是产品的生死线. 本文分享自华为云社区<揭开华为云CodeArts TestPlan启发式测试设计神秘面纱!>,作者:华为云PaaS服务小智 . 2019年12月20日,是美国波 ...
- 测试思想-测试设计 史上最详细测试用例设计实践总结 Part2
史上最详细测试用例设计实践总结 by:授客 QQ:1033553122 -------------------------接 Part1-------------------------- 方法:这里 ...
- 【Selenium-WebDriver自学】Selenium测试设计技术(十三)
Selenium页面对象模型 1.Selenium页面对象模型 优点 页面的对象模型是其中测试对象和功能被彼此分开,从而保持代码干净的实现. 对象保持独立的测试脚本.一个目的可以通过一个或多个测试脚本 ...
- 【测试设计】基于正交法的测试用例设计工具--PICT
前言 我们都知道成对组合覆盖是一种非常有效的测试用例设计方法,但是实际工作过程中当成对组合量太大,我们往往很难做到有效的用例覆盖. PICT是微软公司出品的一款成对组合命令行生成工具,它很好的解决了上 ...
- 【测试设计】性能测试工具选择:wrk?jmeter?locust?还是LR?
原文链接:http://www.51testing.com/html/49/n-3721249.html 前言 当你想做性能测试的时候,你会选择什么样的测试工具呢?是会选择wrk?jmeter?loc ...
- 【测试设计】使用jenkins 插件Allure生成漂亮的自动化测试报告
前言 以前做自动化测试的时候一直用的HTMLTestRunner来生成测试报告,后来也尝试过用Python的PyH模块自己构建测试报告,在后来看到了RobotFramework的测试报告,感觉之前用的 ...
- TDD:代码可测试设计
1 方法内部代码命令,查询分离. a . 命令方法:执行一系列动作. b. 查询方法: 执行查询动作,并返回值. 2 一个类中有好几个地方都用到了一个或多个全局变量,可以考虑把全局变量封装到另外 ...
随机推荐
- [Unity]Unity更改黑色主题(个人版)
前言 首先需要一款软件:Winhex,由于现在已经是2018年,大部分百度的软件都已经失效或者出现一堆bug,我费了九牛二虎之力才找到这个可用的,下面是下载地址: 链接:https://pan.bai ...
- 消息队列(Message Query)的初学习
消息队列(Message Query)的初学习 摘要:本篇笔记主要记录了对于消息队列概念的初次学习.消息队列的基础知识. 目录 消息队列(Message Query)的初学习 1.何为消息? 2. ...
- OpenMP 环境变量使用总结
OpenMP 环境变量使用总结 OMP_CANCELLATION,在 OpenMP 规范 4.5 当中规定了取消机制,我们可以使用这个环境变量去设置是否启动取消机制,如果这个值等于 TRUE 那么就是 ...
- 创建a标签使用get请求下载文件
创建a标签使用get请求下载文件 let url = `${BaseUrl.path}/aa/bb/cc?no=${this.sqcode}&pae=${this.wlName}&as ...
- Linux简易入门
安装Linux系统 VMware安装 首先安装VMware VMware下载地址 在镜像网站下载镜像,直接进行安装 虚拟机安装 镜像下载地址 这里使用\(16.04\)版本 点击创建新的虚拟机 根据向 ...
- SQL基本概念-SQL通用语法
SQL基本概念 1. 什么是SQL ? Structured Query Language : 结构化查询语言,其实就是定义了操作所有关系型数据库的规则.每一种数据库操作的方式存在不一样的地方,称为 ...
- Java集合 Map 集合 与 操作集合的工具类: Collections 的详细说明
Java集合 Map 集合 与 操作集合的工具类: Collections 的详细说明 每博一文案 别把人生,输给心情 师父说:心情不是人生的全部,却能左右人生的全部. 你有没有体会到,当你心情好的时 ...
- 12月22日内容总结——django中间件的三个了解要求的方法、基于django中间件的功能设计、cookie与session
目录 一.django中间件三个了解的方法 二.django中间件五个方法的执行流程详解 三.基于django中间件的功能设计 功能设计介绍 如何利用字符串导入模块 功能模拟 四.cookie与ses ...
- Python标准库pathlib及实例操作
Python标准库pathlib及实例操作 https://docs.python.org/zh-cn/3.9/library/pathlib.html 官网 讲的比较好的文章 https://zhu ...
- QSqlTableMode | QTableWidget 清除数据
当我使用QTableView绑定QSqlTableModel的时候,我需要清除数据,但我又不能使用QSqlTableModel::clear(),因为使用clear就会把表名等一些设置好的数据清除掉. ...