1.Redis基本类型学习之Sorted Set
2.精准测试之过程与实践 | 京东云技术团队
Redis基本类型学习之Sorted Set
有序集合,数源一种结合了List和Hash特性的数源数据类型,存在于Redis中。数源与集合相似,数源有序集合由唯一的数源元素组成,但这些元素具有关联的数源android读书app源码分数,用于排序。数源在使用ZADD命令添加元素时,数源元素与分数相关联,数源随后,数源有序集合依据分数进行排序。数源有序集合的数源排序规则、命令格式、数源可选参数、数源整数值范围、数源返回值及示例均在文章中详细阐述。
在实际应用中,有序集合使用位浮点数表示分数,可以精确表示从-(2^)到+(2^)之间的整数。对于较大的整数或分数,可能会采用指数形式表示,导致可能只得到近似值。有序集合的命令包括ZCARD用于获取集合长度、ZSCORE查询元素分数、ZCOUNT统计元素数量以及ZREVRANGE等命令用于查询特定区间内的元素。
文章提供了命令的使用格式、描述、依赖设计源码返回值示例,以及命令版本和时间复杂度等信息。在后续命令如ZRANGE、ZRANGEBYSCORE、ZREVRANGE、ZREVRANGEBYSCORE等的描述中,文章强调了自6.2.0版本后,这些命令可能被废弃,建议使用ZRANGE命令加上相应的参数进行查询。文章最后总结了有序集合的关键命令,并提供了进一步学习资源链接。
精准测试之过程与实践 | 京东云技术团队
作者:京东工业 宛煜昕
・百度百科:
精准测试是一套计算机测试辅助分析系统。
精准测试的核心组件包含软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率分析、缺陷定位、测试用例聚类分析、测试用例自动生成系统,这些功能完整的构成了精准测试技术体系。
・其他定义
精准测试是中国自己有知识产权的完全的理论体系,它同时关注功能点和代码相关逻辑这样一个方法论,是一种灰盒的测试模式。
最开始在年的国际软件测试大会上发布精准测试的时候,它叫穿线测试,英文名字叫Threading Test,腾讯crm源码表达了精准测试的本质,Threading这个英文单词本身有两个含义,一个是穿线一个是线程,建立用例和代码的关系,相当于把黑盒和白盒关联起来,做黑盒测试也能看到白盒数据,同时把开发和测试能够关联起来,测试一做完,开发的逻辑马上就能自动生成。另一个层面,精准测试最本质就是线程测试,因为精准测试基于覆盖率白盒理论产生,它跟白盒最大的区别是它的覆盖率是线程级的,也就是说要追溯到用例这个级别。
・历史发展
・成熟度模型的五级划分
这里介绍两款,分别为JAVA和C/C++相关,
第一,开发的基础和核心(编程)知识及所需要用到的版本管理工具(GIT)等。
第二,领域特定的知识、技术需要具备如下:
JAVA:Javassist(官网 - https://www.javassist.org/),
ASM3.0(官网 - https://asm.ow2.io/),
JaCoCo(官网 - https://www.eclemma.org/jacoco/)。
C/C++:汇编、反汇编,PE,javawebjsp系统源码逆向工程(IDA)。
要用C/C++实现,通用与效率等方面没得说,但各协议的插桩,代码信息的收集,复杂程度和工作量都不是一般人所能承受,要做好心理建设。
直接使用JaCoCo需要注意覆盖率的误差,一些语句行,分支层级,其误差会被指数级放大。其更适用于偏向辅助个人开发者和小型项目组对项目覆盖率进行非常基础的评估。
・误差产生的具体成因:
1. 复杂系统通常由大量子模块组成,JaCoCo无法实现对于内部被调用的子模块进行插装,因此对于子模块覆盖率的评估会产生显著的误差。
2. 如果某个子模块没有被调用,那么对于JaCoCo来说,该模块内的方法等同于不存在。JaCoCo需要调用该子模块,才能将该子模块内的代码计入覆盖率计算的“分母”。
3. 除了几种既定的逻辑意外事件,JaCoCo无法正确处理例外情况(Exception),如果在控制流程中遇到Exception,JaCoCo会把这种情况直接标记为未覆盖,这种判定方式直接的影响到了对程序逻辑关系的把控,造成对于覆盖率无法准确评估。storm 源码语言
・误差引发的后果:
1. 伪瓶颈的产生,以及对测试质量的错误高估。第一种情况,测试人员投入大量工作之后,却无法进一步提升覆盖率,造成对资源和实践的浪费;第二种情况,会让用户误将未达标的系统判定为达标,有可能引发严重的生产事故。
2. 无法实现缺陷定位,大量的算法和应用依托覆盖率的输入,而缺陷定位更是其中最主要的实践。
3. 回归测试的精准度,受到了严重的影响。
・无损插桩技术(推荐)
精准测试推出的SABI和SASI是中国自己的技术
SABI,SouceCode Analyzer ByteCode Intrumentation,就是说源码分析,字节码查看,观测和分析是在源码,插桩是在字节码。
SASI,SouceCode Analyzer SouceCode Intrumentation,这是传统商用白盒最基础的技术,有时候对源码进行分析,直接在源码插装。源码插装以后,代码经过高级语言、高级编译器的编译,直接生成最后发布包。这种是完全无损的标准技术,插装代码经过编译器编译后执行可靠性更高。
四、总结与介绍大纲1、测试范围,代码分析2、差异化3、调用关系4、度量与分析5、质量评估6、知识库兼优化7、用例预分析8、自动化测试与精准测试
五、平台> 设计思路
从产品的需求、功能模块,开发的代码到测试的用例,从正向到逆向的覆盖,追溯和可视。
> 大纲> 调用链与代码覆盖
使用的是插桩,有点类似C++中的Hook技术,获取所需数据信息。
协议,HTTP,MySql,Dubbo,Redis等,需要先进行分析,找到关键插桩位置,然后结合使用设计模式进行收集(所需)信息。
设计模式推荐两个,1、反射 + 适配器,2、动态代理。
需要注意,代码膨胀问题。
> 影响范围
假如有个应用系统开发出A版本提测,通过前端功能发起HTTP接口,平台的实时快照收到HTTP接口信息,将该次的接口相关信息(类、方法、执行代码行数)保存为系统快照; 当A版本开发后变为A_版本,使用平台对两次版本(Jar包或War包)进行比对,通过系统快照中信息会分析出变更项与影响项,如:类、方法、接口。
根据影响用例中的菜单与接口,到接口测试工具中进行执行。
> 实现与应用
通过数据进行可视化,显示服务 / 应用的启动,拓扑图,调用链,代码覆盖,版本比对等信息。
>> 项目列表
添加,服务 / 应用
>> 项目动态
启动,服务 / 应用
1、搜索
可显示多个服务 / 应用的拓扑关系图
1)详情视图
・表结构,可查看接口与数据库表间的关联
・热点,可查看接口与数据库表的关联个数
2)展开快照
这里显示的节点是保存到系统快照的。
・表结构 - 数据库表,远程服务 - 调用的 rpc 接口,源码 - 代码关系图层;
・远程服务,显示远程调用接口,如 dubbo 接口;
・源代码关系图谱,可查看代码关联关系和覆盖程度;
・清除图谱,清除表结构、远程服务、源代码关系节点;
・详情页,跳转到快照详情页;
・概要,显示快照详情中;
・删除节点,删除显示的节点;
2)搜索
・搜索数据库表中,表名,字段名,筛选条件;
・搜索接口,HTTP 接口;
2、监控台
通过HTTP接口实时获取到协议、代码相关信息,不同于通过单元测试得到代码覆盖率,然后将这些信息保存下来(我的快照和系统快照)。
1)实时监控
实时展示接口的调用链及链上各节点信息
2)我的快照
实时监控中可保存为我的快照,
2.1)调用链和链路分析的可视化
调用链即是服务与中间件的调用链拓扑图层;链路分析即是代码链路分析关系图谱。
・"流程图(拓扑图)" 中可查看到覆盖后端及各中间件信息;
・"堆栈列表" 中展示服务与中间件的应用名,类型,服务 / 方法,用时等信息;
・点击 "" 弹窗为代码图谱(代码链路分析关系图谱),点击某个节点,即显示某个方法的方法名称、执行到的代码行数、代码总数、代码覆盖率和圈复杂度信息,
根据某个尾节点,能寻到开始节点;
2.2)查看代码覆盖率报告
代码覆盖率信息列表,显示我的快照列表中所有覆盖率信息,类名、方法名、执行代码行数、方法行数、覆盖率、圈复杂度;
3、应用中心
1)在线应用
2)应用
2.1)系统快照
快照目录,点击链接进入系统快照详情页
系统快照详情页,基本信息页签
系统快照详情页,流程图页签
系统快照详情页,堆栈列表页签,点击 打开代码关系图层(代码关系链)
2.2)版本比对
比对文件格式为 Jar 或 War 包,比对之后会产生记录报告
开始比对后的结果显示,能查看报告,显示差异项,(比对)日志输出(新增、修改、变更、删除的文件与方法,类与方法的影响数)
2.2.1)报告
比对成功后查看报告,显示变更项,影响用例,对比日志;点击影响用例链接,会跳转到(系统)快照详情页