www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > > 架構(gòu)師社區(qū)
[導(dǎo)讀]最近一段時(shí)間,我們團(tuán)隊(duì)在生產(chǎn)環(huán)境出現(xiàn)了幾次線上問題,有部分比較嚴(yán)重,直接影響用戶功能的使用,惹得領(lǐng)導(dǎo)不高興了,讓我想辦法提升代碼質(zhì)量,這時(shí)候項(xiàng)目工程代碼質(zhì)量檢測神器——SonarQube,出現(xiàn)在我們的視線當(dāng)中。

最近一段時(shí)間,我們團(tuán)隊(duì)在生產(chǎn)環(huán)境出現(xiàn)了幾次線上問題,有部分比較嚴(yán)重,直接影響用戶功能的使用,惹得領(lǐng)導(dǎo)不高興了,讓我想辦法提升代碼質(zhì)量,這時(shí)候項(xiàng)目工程代碼質(zhì)量檢測神器——SonarQube,出現(xiàn)在我們的視線當(dāng)中。?

一?sonarqube是做什么的

SonarQube?是一種自動(dòng)代碼審查工具,用于檢測代碼中的錯(cuò)誤,漏洞和代碼味道。它可以與您現(xiàn)有的工作流程集成,以實(shí)現(xiàn)跨項(xiàng)目分支和提取請(qǐng)求的連續(xù)代碼檢查。通過插件形式,可以支持包括 java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等二十幾種編程語言的代碼質(zhì)量管理與檢測。sonarqube可以從以下7個(gè)維度檢測代碼質(zhì)量,而作為開發(fā)人員至少需要處理前5種代碼質(zhì)量問題。

1.1 不遵循代碼標(biāo)準(zhǔn)

sonarqube可以通過CheckStyle等代碼規(guī)則檢測工具規(guī)范代碼編寫。

1.2?存在的缺陷漏洞

sonarqube可以通過Findbugs等等代碼規(guī)則檢測工具檢測出潛在的缺陷。

1.3? 糟糕的復(fù)雜度分布

文件、類、方法等,如果復(fù)雜度過高將難以改變,這會(huì)使得開發(fā)人員 難以理解它們, 且如果沒有自動(dòng)化的單元測試,對(duì)于程序中的任何組件的改變都將可能導(dǎo)致需要全面的回歸測試。

1.4? 重復(fù)

顯然程序中包含大量復(fù)制粘貼的代碼是質(zhì)量低下的,sonarqube可以展示源碼中重復(fù)嚴(yán)重的地方。

1.5? 注釋不足或者過多

沒有注釋將使代碼可讀性變差,特別是當(dāng)不可避免地出現(xiàn)人員變動(dòng) 時(shí),程序的可讀性將大幅下降 而過多的注釋又會(huì)使得開發(fā)人員將精力過多地花費(fèi)在閱讀注釋上,亦違背初衷。

1.6? 缺乏單元測試

sonarqube可以很方便地統(tǒng)計(jì)并展示單元測試覆蓋率。

1.7? 糟糕的設(shè)計(jì)

通過sonarqube可以找出循環(huán),展示包與包、類與類之間的相互依賴關(guān)系,可以檢測自定義的架構(gòu)規(guī)則 通過sonarqube可以管理第三方的jar包,可以利用LCOM4檢測單個(gè)任務(wù)規(guī)則的應(yīng)用情況, 檢測耦合。sonarqube可以很方便地統(tǒng)計(jì)并展示單元測試覆蓋率。


總覽:

使用了這個(gè)神器,讓我的代碼bug少了一半

在典型的開發(fā)過程中:

  1. 開發(fā)人員在IDE中開發(fā)和合并代碼(最好使用SonarLint在編輯器中接收即時(shí)反饋),然后將其代碼簽入ALM。

  2. 組織的持續(xù)集成(CI)工具可以檢出,構(gòu)建和運(yùn)行單元測試,而集成的SonarQube掃描儀可以分析結(jié)果。

  3. 掃描程序?qū)⒔Y(jié)果發(fā)布到SonarQube服務(wù)器,該服務(wù)器通過SonarQube界面,電子郵件,IDE內(nèi)通知(通過SonarLint)以及對(duì)拉取或合并請(qǐng)求的修飾(使用Developer Edition及更高版本時(shí))向開發(fā)人員提供反饋。


SonarQube實(shí)例包含三個(gè)組件:

使用了這個(gè)神器,讓我的代碼bug少了一半

  1. SonarQube服務(wù)器運(yùn)行以下過程:

  • 提供SonarQube用戶界面的Web服務(wù)器。

  • 基于Elasticsearch的搜索服務(wù)器。

  • 計(jì)算引擎負(fù)責(zé)處理代碼分析報(bào)告并將其保存在SonarQube數(shù)據(jù)庫中。

  • 該數(shù)據(jù)庫存儲(chǔ)以下內(nèi)容:

    • 代碼掃描期間生成的代碼質(zhì)量和安全性的度量標(biāo)準(zhǔn)和問題。

    • SonarQube實(shí)例配置。

  • 在構(gòu)建或連續(xù)集成服務(wù)器上運(yùn)行的一臺(tái)或多臺(tái)掃描儀可以分析項(xiàng)目。

  • 二 sonarqube如何搭建

    官網(wǎng)地址:https://www.sonarqube.org/,選擇“文檔”菜單

    使用了這個(gè)神器,讓我的代碼bug少了一半

    在出現(xiàn)的文檔頁面中可以選擇版本,目前最新的版本是8.5。筆者嘗試過三個(gè)版本:

    8.5:它是目前最新的版本,需要安裝JDK11,并且只支持oracle、sqlserver和PostgreSQL數(shù)據(jù)庫

    7.9:它是一個(gè)長期支持的版本,非常文檔,也需要安裝JDK11,并且只支持oracle、sqlserver和PostgreSQL數(shù)據(jù)庫?。

    7.6:它是一個(gè)老版本,只需安裝JDK8,支持oracle、sqlserver和PostgreSQL數(shù)據(jù)庫,以及mysql數(shù)據(jù)庫。

    剛開始我們?yōu)榱耸∈?,安裝了 7.6的版本,因?yàn)閙ysql數(shù)據(jù)庫我們已經(jīng)在用了,無需額外安裝其他數(shù)據(jù)庫,并且JDK8也在使用,安裝成本最小。但是后來發(fā)現(xiàn),如果需要安裝漢化版插件,或者mybatis插件,這些插件要求的SonarQube版本必須在7.9以上,并且需要運(yùn)行在JDK11以上。經(jīng)過權(quán)衡之后,我們決定安裝最新版的。

    2.1 安裝JDK11和postgreSQL

    ? ?JDK下載地址:https://www.oracle.com/java/technologies/javase-jdk11-downloads.html

    ? ?JDK的安裝比較簡單,我在這里就不過多介紹了,網(wǎng)上有很多教程。

    ? ?PostgreSQL它自己號(hào)稱自己是世界上最先進(jìn)的開源數(shù)據(jù)庫,具有許多功能,旨在幫助開發(fā)人員構(gòu)建應(yīng)用程序,管理員來保護(hù)數(shù)據(jù)完整性和構(gòu)建容錯(cuò)環(huán)境,并幫助您管理數(shù)據(jù),無論數(shù)據(jù)集的大小。除了免費(fèi)和開源之外,PostgreSQL也是高度可擴(kuò)展的。例如,您可以定義自己的數(shù)據(jù)類型,構(gòu)建自定義函數(shù),甚至可以使用不同的編程語言編寫代碼,而無需重新編譯數(shù)據(jù)庫。

    ? ?PostgreSQL的安裝與使用可以參數(shù):https://www.jianshu.com/p/7d133efccaa4


    2.3?從zip文件安裝sonarqube


    SonarQube無法在root基于Unix的系統(tǒng)上運(yùn)行,因此,如有必要,請(qǐng)為SonarQube創(chuàng)建專用的用戶帳戶。

    $ SONARQUBE-HOME(下面)指的是SonarQube發(fā)行版已解壓縮的目錄的路徑。

    設(shè)置對(duì)數(shù)據(jù)庫的訪問

    編輯$ SONARQUBE-HOME / conf / sonar.properties以配置數(shù)據(jù)庫設(shè)置。模板可用于每個(gè)受支持的數(shù)據(jù)庫。只需取消注釋并配置所需的模板,然后注釋掉專用于H2的行:

    Example for PostgreSQL
    sonar.jdbc.username=sonarqube
    sonar.jdbc.password=mypassword
    sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube

    配置Elasticsearch存儲(chǔ)路徑

    默認(rèn)情況下,Elasticsearch數(shù)據(jù)存儲(chǔ)在$ SONARQUBE-HOME / data中,但不建議將其用于生產(chǎn)實(shí)例。相反,您應(yīng)該將此數(shù)據(jù)存儲(chǔ)在其他位置,最好是在具有快速I / O的專用卷中。除了保持可接受的性能外,這樣做還可以簡化SonarQube的升級(jí)。

    編輯$ SONARQUBE-HOME / conf / sonar.properties以配置以下設(shè)置:

    sonar.path.data=/var/sonarqube/data
    sonar.path.temp=/var/sonarqube/temp

    用于啟動(dòng)SonarQube的用戶必須具有對(duì)這些目錄的讀寫權(quán)限。

    啟動(dòng)Web服務(wù)器

    默認(rèn)端口為“ 9000”,上下文路徑為“ /”。這些值可以在$ SONARQUBE-HOME / conf / sonar.properties中進(jìn)行更改

    sonar.web.host=192.0.0.1
    sonar.web.port=80
    sonar.web.context=/sonarqube

    執(zhí)行以下腳本來啟動(dòng)服務(wù)器:

    • 在Linux上:bin / linux-x86-64 / sonar.sh start

    • 在macOS上:bin / macosx-universal-64 / sonar.sh start

    • 在Windows上:bin / windows-x86-64 / StartSonar.bat

    調(diào)整Java安裝

    如果服務(wù)器上安裝了多個(gè)Java版本,則可能需要明確定義使用哪個(gè)Java版本。

    要更改SonarQube使用的Java JVM,請(qǐng)編輯$ SONARQUBE-HOME / conf / wrapper.conf并更新以下行:

    wrapper.java.command=/path/to/my/jdk/bin/java

    您現(xiàn)在可以在http:// localhost:9000瀏覽SonarQube?(默認(rèn)的系統(tǒng)管理員憑據(jù)為admin/?admin)。第一次訪問這個(gè)地址比較會(huì)停留在這個(gè)頁面一段時(shí)間,因?yàn)?span style="color: rgba(0, 0, 0, 0.8);font-family: -apple-system, system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-size: 15px;letter-spacing: 0.544px;text-align: start;">SonarQube會(huì)做一些初始化工作,包含往空數(shù)據(jù)庫中建表

    使用了這個(gè)神器,讓我的代碼bug少了一半


    初始化成功后運(yùn)行的頁面:

    使用了這個(gè)神器,讓我的代碼bug少了一半



    同時(shí)會(huì)生成20多張表:

    使用了這個(gè)神器,讓我的代碼bug少了一半

    2.3?安裝插件

    根據(jù)個(gè)人需要,可以安裝漢化插件,sonarqube默認(rèn)是英文界面。

    github地址:https://github.com/SonarQubeCommunity/sonar-l10n-zh


    將項(xiàng)目下載編譯打包后,將jar放到$SONARQUBE-HOME\extensions\plugins

    目錄下即可,然后執(zhí)行:./sonar.sh restart命令重啟sonarqube服務(wù)。


    此外,還有mybatis插件

    gitee地址:https://gitee.com/mirrors/sonar-mybatis

    我個(gè)人用過,覺得作用不大,不過可以基于這個(gè)代碼擴(kuò)展自己需要的功能。

    三 sonarqube如何使用

    3.1?在maven項(xiàng)目中集成sonarqube

    先在maven的settings.xml文件中增加如下配置:

    <pluginGroups> <pluginGroup>org.sonarsource.scanner.mavenpluginGroup>pluginGroups><profiles> <profile> <id>sonarid> <activation> <activeByDefault>trueactiveByDefault> activation> <properties>  <sonar.host.url> http://localhost:9000 sonar.host.url> properties> profile>profiles>

    然后在pom.xml文件中增加配置:

    ??org.sonarsource.scanner.maven??sonar-maven-plugin??3.3.0.603

    在項(xiàng)目目錄下運(yùn)行代碼檢測命令:? mvn?clean?complie -U?-Dmaven.test.skip=true sonar:sonar


    看到這幾句話,就表示檢測成功了

    使用了這個(gè)神器,讓我的代碼bug少了一半


    然后在sonar后臺(tái)查看檢測報(bào)告

    使用了這個(gè)神器,讓我的代碼bug少了一半

    報(bào)告里面包含:bug、漏洞、異味、安全熱點(diǎn)、覆蓋、重復(fù)率等,對(duì)有問題的代碼能夠快速定位。


    點(diǎn)擊某個(gè)bug可以查看具體有問題代碼:

    沒有關(guān)閉輸入流問題:

    使用了這個(gè)神器,讓我的代碼bug少了一半


    空指針問題:

    使用了這個(gè)神器,讓我的代碼bug少了一半

    錯(cuò)誤的用法:

    使用了這個(gè)神器,讓我的代碼bug少了一半

    SimpleDateFormat不應(yīng)該被定義成static的。

    檢測出的代碼問題類型太多,這里就不一一列舉了??傊涀∫痪湓挘簊onar很牛逼。它不光可以檢測出代碼問題,還對(duì)一些不好的代碼寫法和用法有更好的建議。

    彩蛋

    sonarqube非常強(qiáng)大,上面只介紹了它的基本用法。一般情況下,我們可以使用jenkins配置需要代碼檢測的項(xiàng)目,從gitlab上下載代碼,執(zhí)行maven編譯打包代碼測試命令,可直接生成報(bào)告。jenkins觸發(fā)執(zhí)行代碼檢測的時(shí)機(jī)是:1.有代碼提交,或者指定比如test分支有代碼提交,項(xiàng)目數(shù)量少可以這樣做。2.定時(shí)執(zhí)行,我們公司就是配置在凌晨定時(shí)執(zhí)行,因?yàn)閖enkins部署的項(xiàng)目太多了,為了不影響正常的項(xiàng)目部署。

    此外,我們可以自定義代碼檢測的執(zhí)行規(guī)則,根據(jù)實(shí)際的項(xiàng)目需求自己開發(fā)插件,比如:我們自己開發(fā)了mybatis插件,掃描mapper和xml文件名稱不一致的情況。

    使用了這個(gè)神器,讓我的代碼bug少了一半


    總之,sonar的功能非常強(qiáng)大,強(qiáng)烈建議大家在項(xiàng)目中使用,真的可以減少很多隱藏的bug,提高代碼質(zhì)量,如果你用過就會(huì)發(fā)現(xiàn)它的好處。如果想了解更多sonar的用法,可以在 公眾號(hào)中回復(fù):sonar,可以獲取更詳細(xì)的用法。

    特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:

    使用了這個(gè)神器,讓我的代碼bug少了一半

    使用了這個(gè)神器,讓我的代碼bug少了一半

    使用了這個(gè)神器,讓我的代碼bug少了一半

    長按訂閱更多精彩▼

    使用了這個(gè)神器,讓我的代碼bug少了一半

    如有收獲,點(diǎn)個(gè)在看,誠摯感謝

    免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場,如有問題,請(qǐng)聯(lián)系我們,謝謝!

    本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
    換一批
    延伸閱讀

    LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

    關(guān)鍵字: 驅(qū)動(dòng)電源

    在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

    關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

    LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

    關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

    根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

    關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

    電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

    關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

    在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

    關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

    LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

    關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

    在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

    關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

    開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

    關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

    LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

    關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
    關(guān)閉