1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        從缺陷到創(chuàng)新:質(zhì)量保障的新視角

        共 3025字,需瀏覽 7分鐘

         ·

        2024-06-26 15:15

        1.背景:

        最近一段時(shí)間研發(fā)大佬們在積極的治理告警,經(jīng)過一段時(shí)間的治理,現(xiàn)在告警情況已經(jīng)有了很大的改觀,但難免還有漏網(wǎng)之魚;具體我們可以以下邊一個(gè)例子來看:

        這是一個(gè)生產(chǎn)的UMP告警,通過這個(gè)告警我們發(fā)現(xiàn)XXX這個(gè)應(yīng)用的堆內(nèi)存使用率為90.18%,超過了設(shè)置的告警閾值85%,所以產(chǎn)生了這樣的一個(gè)告警;那什么是堆內(nèi)存呢?

        1.1.Java堆內(nèi)存

        Java堆內(nèi)存的定義

        Java堆內(nèi)存是JVM內(nèi)存的一部分,專門用于動態(tài)分配對象和數(shù)組。它是一個(gè)運(yùn)行時(shí)數(shù)據(jù)區(qū),從JVM啟動到JVM關(guān)閉,堆內(nèi)存一直存在。堆內(nèi)存的大小可以通過JVM啟動參數(shù)進(jìn)行調(diào)整,如-Xms(表示java虛擬機(jī)堆區(qū)內(nèi)存初始內(nèi)存分配的大小-Xmx(表示java虛擬機(jī)堆區(qū)內(nèi)存可被分配的最大上限。

        Java堆內(nèi)存的特點(diǎn)

        動態(tài)分配:Java堆內(nèi)存允許在運(yùn)行時(shí)動態(tài)分配和釋放對象。

        自動管理:Java具有自動垃圾回收機(jī)制(Garbage Collection, GC),自動回收不再使用的對象,防止內(nèi)存泄漏。

        全局訪問:堆內(nèi)存中的對象可以被程序中的任何部分訪問,只要有對該對象的引用。

        分代回收:Java堆內(nèi)存通常被劃分為不同的代(Generation),如新生代(Young Generation)和老年代(Old Generation),以優(yōu)化垃圾回收性能。

        堆內(nèi)存的結(jié)構(gòu)

        Java堆內(nèi)存通常劃分為以下幾個(gè)區(qū)域:

        新生代(Young Generation):存儲新創(chuàng)建的對象,分為Eden區(qū)、幸存者區(qū)(Survivor Space S0和S1)。大多數(shù)新對象首先在Eden區(qū)分配,經(jīng)過幾次垃圾回收后,如果對象仍然存活,則移到幸存者區(qū),最終移到老年代。

        老年代(Old Generation):存儲生命周期較長的對象。經(jīng)過多次垃圾回收后仍然存活的新生代對象會被移到老年代。

        永久代(Permanent Generation)或元空間(Metaspace):存儲類的元數(shù)據(jù)(如類定義和方法元數(shù)據(jù))。Java 8及以后,永久代被移除,改為元空間,并且使用本地內(nèi)存而不是堆內(nèi)存。

        Java堆內(nèi)存的工作原理

        對象分配:當(dāng)通過new關(guān)鍵字創(chuàng)建一個(gè)對象時(shí),JVM會在堆內(nèi)存中分配空間。比如:在這個(gè)例子中,new Person("John", 25)會在堆內(nèi)存中分配空間來存儲Person對象。

        public class Main {    public static void main(String[] args) {        // 創(chuàng)建一個(gè)對象        Person person = new Person("John", 25);    }}
        class Person { String name; int age; //構(gòu)造方法 Person(String name, int age) { this.name = name; this.age = age; }}
        垃圾回收:Java的垃圾回收機(jī)制自動回收不再使用的對象,釋放堆內(nèi)存空間。垃圾回收器(Garbage Collector)會周期性地掃描堆內(nèi)存,識別不再有任何引用指向的對象,并回收它們占用的內(nèi)存。

        垃圾回收的過程大致分為以下幾步:

        標(biāo)記:標(biāo)記出所有存活的對象。

        清除:清除所有未被標(biāo)記的對象,釋放它們占用的內(nèi)存。

        壓縮:(可選)將存活的對象移到堆的一端,減少內(nèi)存碎片,提高分配效率。

        堆內(nèi)存管理中的問題

        內(nèi)存泄漏:雖然Java有垃圾回收機(jī)制,但不正確的代碼設(shè)計(jì)仍可能導(dǎo)致內(nèi)存泄漏,即對象雖然不再使用但仍然被引用,無法被回收。

        內(nèi)存溢出(OutOfMemoryError):當(dāng)堆內(nèi)存被耗盡且垃圾回收無法釋放足夠內(nèi)存時(shí),會拋出OutOfMemoryError。

        性能問題:頻繁的垃圾回收會影響應(yīng)用性能,因此需要優(yōu)化內(nèi)存使用和垃圾回收策略。

        通過對堆內(nèi)存和垃圾回收簡單的了解**(備注,由于不是專業(yè)開發(fā)可能對堆內(nèi)存和垃圾回收闡述的不是特別專業(yè),只是作為背景知識補(bǔ)充了解問題??)**,我們大概知道上述告警多數(shù)是由于內(nèi)存泄露導(dǎo)致的,那么我們怎么做呢,才能避免此類問題的發(fā)生呢?先來看看我們目前的質(zhì)量保障情況;

        2.質(zhì)量保障

        2.1.現(xiàn)有體系

        2.2.關(guān)鍵要素

        需求質(zhì)量維度

        通過產(chǎn)品輸出的PRD文檔,研發(fā)會輸出設(shè)計(jì)文檔,測試對應(yīng)的也會輸出測試用例,這也是對于需求最直觀的輸出;

        過程質(zhì)量維度

        產(chǎn)品會進(jìn)行需求評審,研發(fā)會進(jìn)行設(shè)計(jì)評審,測試會進(jìn)行測試用例評審,三方的目的是拉齊需求,以避免各自的理解有偏差;

        交付質(zhì)量維度

        測試會發(fā)送驗(yàn)收報(bào)告,產(chǎn)品會先進(jìn)行需求的驗(yàn)收,上線前產(chǎn)品會同步業(yè)務(wù)驗(yàn)收,業(yè)務(wù)驗(yàn)收有問題會反饋到產(chǎn)品推進(jìn)研發(fā)優(yōu)化測試復(fù)測,形成循環(huán);

        2.3.質(zhì)量把控

        環(huán)境治理是有專門的團(tuán)隊(duì)負(fù)責(zé),不做過多闡述
        Diff&CR屬于測試左移的范疇,會在改進(jìn)措施中做說明
        監(jiān)控告警和質(zhì)量大盤屬于測試右移的范疇,也會在改進(jìn)措施中說明

        2.4.交付過程

        持續(xù)迭代

        目前是兩周一個(gè)迭代,基于這個(gè)節(jié)奏,去排需求,基本上每個(gè)迭代都會排滿;

        持續(xù)集成

        主要還是基于Coding集團(tuán)的代碼倉庫管理工具?持續(xù)發(fā)布?目前由于特殊性,沒有用到集團(tuán)的JDOS,使用的是自己的發(fā)布系統(tǒng)

        持續(xù)運(yùn)營

        專門團(tuán)隊(duì)負(fù)責(zé)

        持續(xù)度量

        建立線上問題處理群,通過群中Oncall對接

        通過保險(xiǎn)一線之聲進(jìn)行問題反饋

        通過用戶滿意度評價(jià)進(jìn)行問題反饋

        2.5.質(zhì)量文化

        質(zhì)量&效率基本上就是我們的團(tuán)隊(duì)文化,可能也是大部分測試團(tuán)隊(duì)的文化,通俗一些就是要測的好還要測的快

        3.改進(jìn)措施

        3.1.測試左移Diff&CR

        傳統(tǒng)的diff&cr基本上我都是通過去讓開發(fā)大佬開放Coding倉庫權(quán)限,手動拉取開發(fā)分支到本地倉庫,進(jìn)行diff和cr,效率較低,時(shí)間成本較高

        基于大模型工程化進(jìn)行CodeReview好處良多,具體接入方式可參照,虛擬賬號可自行申請diff&cr ,效果如下,我們發(fā)現(xiàn)通過AI CR確實(shí)能夠幫我們發(fā)現(xiàn)一些問題,這些問題可能就是潛在的風(fēng)險(xiǎn),這樣能夠補(bǔ)充我們的測試Bad Case從而進(jìn)行更充分的測試;

        3.2.測試右移監(jiān)控&告警

        通過最初我們的案例分析發(fā)現(xiàn)目前告警信息確實(shí)也存在一部分不完善的情況,只給出了具體的告警信息**(當(dāng)然這個(gè)對于專業(yè)水平較高的同學(xué)也是可以快速定位問題并解決的,但是對于稍微欠缺背景知識的同學(xué)比如說不是專業(yè)開發(fā)理解起來可能就稍微晦澀**),所以我對自己所測試的業(yè)務(wù)告警信息也進(jìn)行了優(yōu)化下面是我的一個(gè)優(yōu)化情況,多少對我個(gè)人而言我覺得還是有些幫助的??;

        4.未來規(guī)劃

        基于現(xiàn)有質(zhì)量保障框架下,我會持續(xù)探索、持續(xù)發(fā)現(xiàn)、持續(xù)優(yōu)化,保障業(yè)務(wù)運(yùn)轉(zhuǎn)質(zhì)量更絲滑

        瀏覽 37
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            特黄特爽特刺激的视频 | 国产草草影院ccyycom | 国产丝袜一区 | 丁香五月天婷婷综合潮喷 | 99精品成人影视 | 被黑人猛躁4O次高潮 | 91老夫老妻干老B | av无码偷拍 | 精品人妇一区二区三区 | 国产成人综合久久久久99 |