作者:京东工业 宛煜昕
测试的笼罩通常是指需要范畴的执行水平,如需要、测试用例、缺点的正向与逆向的双向追溯。便于对其相干属性的度量,即应用了覆盖率。
一、覆盖率与测试策略
覆盖率是度量测试完整性的一个伎俩,是测试有效性的一个度量。测试笼罩是对测试齐全水平的评测。
测试策略按测试过程个别分为单元测试、集成测试、零碎测试和验收测试四大阶段;按软件外部工作过程又有白盒、灰盒、黑盒;从过程是否执行软件又可将测试方法分为动态和动静。这样白盒测试对应着软件测试过程中的单元测试,个别由开发人员实现,而灰盒测试与黑盒测试个别测试人员染指较多,对应着集成测试、零碎测试和验收测试。
二、覆盖率的根本利用
测试时放心之一就是无止境的、没有范畴的,比方代码的改变或调整一个需要,须要全量回归测试,影响范畴不分明,某个性能或性能点是否须要测试,测试的水平如何不分明等等的问题。
举个例子:需要是查问 id 与展现 id 相干数据的性能,进一步剖析要做(开发)id 输入框,【查问】按钮,显示的列表,波及 1 个查问接口(HTTP),查库(数据库)的话,须要 1 条 SQL 语句。
开发后失去前端 id 输入框,【查问】按钮和后果列表,
后端是通过一个查询方法调到数据库失去数据,显示在前端页面。
利用测试覆盖率
1、建设测试范畴,这里简略些了,只是性能的
模块 / 性能 | 性能点 |
---|---|
查问 | 输入框 |
查问 | 查问按钮 |
后果列表 | 显示后果列表 |
2、需要剖析、用例设计、执行、提 bug 等,就是执行测试的过程
3、失去功能测试的后果
模块 / 性能 | 性能点 | 测试后果 |
---|---|---|
查问 | 输入框 | 测试通过 |
查问 | 查问按钮 | 测试通过 |
后果列表 | 显示后果列表 | 测试通过 |
这么看上去没什么问题,双相的追溯(需要、用例、缺点)曾经是全笼罩了,那怕在算上接口,但也仅仅是性能上的笼罩,实则缺失了对代码等层面上的笼罩,
比方:代码中要有对查问 id 的判断,这里可能会有所脱漏,因为仅从性能或黑盒测试来讲,不晓得这个判断是否执行。
这时测试笼罩是要由测试需要和测试用例的笼罩或已执行代码的笼罩示意。建设在对测试后果的评估和对测试过程中确定的变更申请(缺点)的剖析的根底上。
在 ”2、需要剖析、用例设计、执行、提 bug 等,就是执行测试的过程 ” 要染指代码覆盖率的工具,补救这一缺失,覆盖率的表格也须要优化下。
后边的类、办法的覆盖率能够依据状况不同自行获取
性能 / 模块 | 性能点 | HTTP 接口类型 | HTTP 接口 | 类名 | 办法名 | 覆盖率 | 测试后果 |
---|---|---|---|---|---|---|---|
查问 | 输入框 | 无 | 无 | 无 | 无 | 100% | 测试通过 |
查问 | 查问按钮 | POST | /api/queryById | query | queryById | 100% | 测试通过 |
后果列表 | 显示后果列表 | POST | /api/results | query | results | 100% | 测试通过 |
覆盖率的计算由浅入深来说个别从性能、性能点、接口、代码中类、办法等失去,如:两个性能、三个性能点,以性能点为笼罩,覆盖率公式为(至多执行一次的性能点 / 性能点总数) 100% = (1 / 1)100%,查问按钮的覆盖率为 100%
注:测试后果是否通过,不单是看覆盖率,还要通过测试用例的执行,缺点的敞开等状况来决定。
三、可视化零碎
通过齐全手工绘制曾经有了初步概念,思考些许状况,这种曾经不能满足于此。
面对简单的业务零碎,教训曾经把业务性能、逻辑关系等相干知识点深深的印在当事人的脑子里,而要积淀、展现于旁人,这就是一个让人很头疼的问题,就像通知一个人从哪里到哪里一样,讲的人分明,但听得人却有些一头雾水,此时如果有个地图就高深莫测了。
通过一些维度的图形展现,谁都能够直观、更好的加深对系统的理解。” 知识库 ” 中保留着波及到的性能、接口等信息。简略实现,当初有了共享表格,能够间接保护下来,模式是哪种并不重要,次要是把握了办法。
链路关系像这样,业务零碎 - 页面 - 性能 - 接口 - 代码(拓扑图),业务零碎 - 页面 - 性能 - 接口 - 架构(拓扑图)。
·性能层面
实现形式上比方能够像文件目录那样实现一颗树,某个页面下有哪些性能,性能中有哪些接口,而接口中有代码的类、办法及覆盖率等信息。
或者能够采纳相似常识图谱来构建一个结构化的语义知识库,页面、性能、接口信息,可视为实体 - 节点,而彼此间的关系既是连贯的线。或者接口信息也可看做是属性值。
·代码层面
从接口上来就到了代码层面,能够看到代码的关系拓扑图
这里不仅能看到单个接口中代码和关系图,还能展现出不同接口与代码的关系
当关注到代码层面的笼罩后,益处很多,其中之一是能够更好帮忙开发进步或束缚代码品质,比方:代码中有时判断会应用常量,而不是枚举或宏 / 全局变量。当然也能够看到执行的代码分支,每条代码逻辑分支是否执行到。
·架构层面
通过平台获取到的数据,不仅能够做性能、代码层面的笼罩,零碎架构也可实现可视化的出现,
比方:应用服务的环境模块拓扑图
分布式调用链的拓扑图
还是用查问性能举例,有时因为一些须要,该性能下应用了缓存。当第一次查问是间接从数据库中查问回来的数据,同时也在缓存中记录了该条数据,而在肯定工夫内再查问,实则是从缓存中查问回来的。同样的,如果只笼罩了性能,这里可能会有所脱漏,从性能来看,查问后数据是返回了,而至于是从数据库还是从缓存获取到的,就不得而知了。再有是获取到的数据可能未必是想要的,奇怪的是,为什么输出 / 申请的数据,性能、接口都是一样的,而返回的数据在一段时间后就产生了变动。两头产生了什么不分明,真的是 ” 黑盒子 ”。想要晓得 SQL 语句,只能吃力的从日志、代码或 xml 中查找,还有等等的不便问题。
除此之外,还能够展现不同接口与数据库的关系
只有脑洞够大,通过数据还能够实现出很多笼罩,并呈现出各种可视化图形。
四、将来已来
应用数据驱动将形象的字符、逻辑等等可视化展现,从而失去想要的成果,但这种成果无论是动态或动静产生的、被动或被动的等等,都会遇到工夫的问题,而对工夫有着强依赖的咱们,无论采纳哪种开发方式,即便在快,有着工夫的限度和束缚,这种苦恼始终会随同着,在事实世界中目前是无奈解决,但有了虚拟世界,当初叫元宇宙,那就不同了,外面有还原事实所有的 1 比 1 模型,在虚拟世界里,能够搭建出想要的零碎,每一个环节,无论是从我的项目或需要、产品设计、开发、测试到上线等,都能够清晰的关注到,无论性能与非性能均能够进行模仿,原来的我的项目或开发周期可能要 1 年,而当初可能半年不到的工夫,虚拟世界的所有贴近事实,最终是通过空间换取工夫从而失去这贵重的教训,而后这种虚构产物能够搬到事实世界进行利用,从而防止很多试错,也大大压缩、节俭了工夫。目前这种形式曾经缓缓被利用到各个行业、畛域,这种虚构与事实的联合能够更好地服务咱们的生存。