您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
从缺陷到创新:质量保障的新视角
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
从缺陷到创新:质量保障的新视角
jd****
2024-06-05
IP归属:北京
19浏览
### 1.背景: 最近一段时间研发大佬们在积极的治理告警,经过一段时间的治理,现在告警情况已经有了很大的改观,但难免还有漏网之鱼;具体我们可以以下边一个例子来看: ![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-06-03-12-21CbT24ZPUv8QiucCj.png) 这是一个生产的UMP告警,通过这个告警我们发现XXX这个应用的堆内存使用率为90.18%,超过了设置的告警阈值85%,所以产生了这样的一个告警;那什么是堆内存呢? #### 1.1.Java堆内存 ##### Java堆内存的定义 Java堆内存是JVM内存的一部分,专门用于动态分配对象和数组。它是一个运行时数据区,从JVM启动到JVM关闭,堆内存一直存在。堆内存的大小可以通过JVM启动参数进行调整,如`-Xms(`**表示java虚拟机堆区内存初始内存分配的大小**`)`和``` -Xmx( ```**表示java虚拟机堆区内存可被分配的最大上限**`)`。 ##### Java堆内存的特点 **动态分配**:Java堆内存允许在运行时动态分配和释放对象。 **自动管理**:Java具有自动垃圾回收机制(Garbage Collection, GC),自动回收不再使用的对象,防止内存泄漏。 **全局访问**:堆内存中的对象可以被程序中的任何部分访问,只要有对该对象的引用。 **分代回收**:Java堆内存通常被划分为不同的代(Generation),如新生代(Young Generation)和老年代(Old Generation),以优化垃圾回收性能。 ##### 堆内存的结构 Java堆内存通常划分为以下几个区域: **新生代(Young Generation)**:存储新创建的对象,分为Eden区、幸存者区(Survivor Space S0和S1)。大多数新对象首先在Eden区分配,经过几次垃圾回收后,如果对象仍然存活,则移到幸存者区,最终移到老年代。 **老年代(Old Generation)**:存储生命周期较长的对象。经过多次垃圾回收后仍然存活的新生代对象会被移到老年代。 **永久代(Permanent Generation)或元空间(Metaspace)**:存储类的元数据(如类定义和方法元数据)。Java 8及以后,永久代被移除,改为元空间,并且使用本地内存而不是堆内存。 ##### Java堆内存的工作原理 对象分配:当通过new关键字创建一个对象时,JVM会在堆内存中分配空间。比如:在这个例子中,new Person("John", 25)会在堆内存中分配空间来存储Person对象。 ```java public class Main { public static void main(String[] args) { // 创建一个对象 Person person = new Person("John", 25); } } class Person { String name; int age; //构造方法 Person(String name, int age) { this.name = name; this.age = age; } } ``` ##### 垃圾回收:Java的垃圾回收机制自动回收不再使用的对象,释放堆内存空间。垃圾回收器(Garbage Collector)会周期性地扫描堆内存,识别不再有任何引用指向的对象,并回收它们占用的内存。 垃圾回收的过程大致分为以下几步: 标记:标记出所有存活的对象。 清除:清除所有未被标记的对象,释放它们占用的内存。 压缩:(可选)将存活的对象移到堆的一端,减少内存碎片,提高分配效率。 ##### 堆内存管理中的问题 **内存泄漏**:虽然Java有垃圾回收机制,但不正确的代码设计仍可能导致内存泄漏,即对象虽然不再使用但仍然被引用,无法被回收。 **内存溢出(OutOfMemoryError)**:当堆内存被耗尽且垃圾回收无法释放足够内存时,会抛出`OutOfMemoryError`。 **性能问题**:频繁的垃圾回收会影响应用性能,因此需要优化内存使用和垃圾回收策略。 通过对堆内存和垃圾回收简单的了解\*\*(备注,由于不是专业开发可能对堆内存和垃圾回收阐述的不是特别专业,只是作为背景知识补充了解问题😭)\*\*,我们大概知道上述告警多数是由于内存泄露导致的,那么我们怎么做呢,才能避免此类问题的发生呢?先来看看我们目前的质量保障情况; ### 2.质量保障 #### 2.1.现有体系 ![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-05-31-13-28axWAjL6WUFOmA31f.png) #### 2.2.关键要素 ##### 需求质量维度 通过产品输出的PRD文档,研发会输出设计文档,测试对应的也会输出测试用例,这也是对于需求最直观的输出; ![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-05-31-11-589IozPT9DpwhRGQZ.png) ##### 过程质量维度 产品会进行需求评审,研发会进行设计评审,测试会进行测试用例评审,三方的目的是拉齐需求,以避免各自的理解有偏差; ![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-05-31-12-02TQvKtlEZpvd18enO.png) ##### 交付质量维度 测试会发送验收报告,产品会先进行需求的验收,上线前产品会同步业务验收,业务验收有问题会反馈到产品推进研发优化测试复测,形成循环; ![image.png](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-06-01-16-47EgRRqx0rQ1hMjjn.png) #### 2.3.质量把控 环境治理是有专门的团队负责,不做过多阐述 Diff&CR属于测试左移的范畴,会在改进措施中做说明 监控告警和质量大盘属于测试右移的范畴,也会在改进措施中说明 #### 2.4.交付过程 ##### 持续迭代 目前是两周一个迭代,基于这个节奏,去排需求,基本上每个迭代都会排满; ##### 持续集成 主要还是基于Coding集团的代码仓库管理工具▪持续发布▪目前由于特殊性,没有用到集团的JDOS,使用的是自己的[发布系统](发布系统) ##### 持续运营 专门团队负责 ##### 持续度量 建立线上问题处理群,通过群中Oncall对接 通过保险一线之声进行问题反馈 通过用户满意度评价进行问题反馈 #### 2.5.质量文化 质量&效率基本上就是我们的团队文化,可能也是大部分测试团队的文化,通俗一些就是要测的好还要测的快 ### 3.改进措施 #### 3.1.测试左移Diff&CR 传统的diff&cr基本上我都是通过去让开发大佬开放Coding仓库权限,手动拉取开发分支到本地仓库,进行diff和cr,效率较低,时间成本较高 基于大模型工程化进行CodeReview好处良多,具体接入方式可参照,虚拟账号可自行申请[diff&cr](diff&cr) ,效果如下,我们发现通过AI CR确实能够帮我们发现一些问题,这些问题可能就是潜在的风险,这样能够补充我们的测试Bad Case从而进行更充分的测试; ![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-05-31-15-06S9W3qzLaRDQxAVu.png) #### 3.2.测试右移监控&告警 通过最初我们的案例分析发现目前告警信息确实也存在一部分不完善的情况,只给出了具体的告警信息\*\*(当然这个对于专业水平较高的同学也是可以快速定位问题并解决的,但是对于稍微欠缺背景知识的同学比如说不是专业开发理解起来可能就稍微晦涩\*\*),所以我对自己所测试的业务告警信息也进行了优化下面是我的一个优化情况,多少对我个人而言我觉得还是有些帮助的😁; ![](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-06-03-18-10KSxzoW6r15hueoz8.png) #### 4.未来规划 基于现有质量保障框架下,我会持续探索、持续发现、持续优化,保障业务运转质量更丝滑
上一篇:ClickHouse内幕(1)数据存储与过滤机制
下一篇:大模型在推荐系统中的精准推荐策略与实践
jd****
文章数
6
阅读量
387
作者其他文章
01
HarmonyOS-安装篇(DevEco Studio)
一、下载可通过官网下载: https://developer.harmonyos.com/cn/develop/devevo-studio二、安装(经过实践了)三、配置nodejs&ohpm配置SDK配置等待(这块还是稍微有点慢,不要焦急)四、应用(demo)HelloWorld工程创建(选择应用模板,继续点击Next即可创建完成)添加设备(此处我添加的是手机虚拟设备)设备命名(我是使用的默认的
01
Autobots应用探索:实践中的思考与发现
背景背景1:作为一名测试,日常工作中必不可少的几个环节是查看需求文档、编写测试用例、处理线上问题、能力提升等,基于集团的https://xxx.jd.com/工具能一次性帮我们把这些事情都做了;背景2:作为XXX共建项目的成员之一同时也是第一批用户,我用它做了几个测试实践,和大佬们一起探讨交流。实践一,快速搜索需求文档模糊搜索这个场景多数用于我们不清楚自己到底要找的是哪个需求文档了,可能只是大概对
01
探索Playwright:前端自动化测试的新纪元
背景在前端开发中,自动化测试是确保软件质量和用户体验的关键环节。随着Web应用的复杂性不断增加,手动测试已经无法满足快速迭代和持续交付的需求。自动化测试通过模拟用户与应用的交互,能够高效地执行重复性测试任务,加快测试周期,提升测试覆盖率,从而更早地发现缺陷和问题。这不仅提高了软件的稳定性和可靠性,还降低了维护成本,并为创新和功能增强提供了更多的时间和资源。在众多自动化测试工具中,Playwrigh
01
测试聊并发-入门篇
背景在现代软件测试的广阔领域中,我们的工作不仅限于确保功能符合产品和业务需求的严格标准。随着用户对应用性能的期望水涨船高,性能测试已成为衡量软件质量的关键指标。特别是在服务端接口的性能测试中,我们面临的挑战不仅仅是处理单个请求的效率,更在于如何在多用户同时访问时保持系统的稳定性和响应速度。并发编程和测试,作为性能测试的核心,对于评估系统在高负载情况下的表现、识别潜在的性能瓶颈、以及优化资源配置具有
jd****
文章数
6
阅读量
387
作者其他文章
01
HarmonyOS-安装篇(DevEco Studio)
01
Autobots应用探索:实践中的思考与发现
01
探索Playwright:前端自动化测试的新纪元
01
测试聊并发-入门篇
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号