|
公司基本資料信息
|
SonarSource簡(jiǎn)介
我們建立了一個(gè) "商品" 解決方案來(lái)管理代碼質(zhì)量。要做到這一點(diǎn), 提供hao的產(chǎn)品是不夠的。產(chǎn)品也必須與整個(gè)生態(tài)系統(tǒng)在開(kāi)發(fā)過(guò)程中發(fā)揮良好的作用, 否則它們將根本不會(huì)被使用 (至少在我們所期望的規(guī)模上)。正是基于這一點(diǎn), 我們建立了 SonarQube 和 SonarLint。與生成系統(tǒng)
SonarQube 與標(biāo)準(zhǔn)構(gòu)建系統(tǒng)緊密集成, 提供零配置方法。通過(guò)與liu行的構(gòu)建系統(tǒng) (如 Maven、MSBuild、Gradle 和 ANT) 集成, 我們提供了一種快速的掃描項(xiàng)目的方法, 很少或根本沒(méi)有配置。但這并不是唯yi的好處: 這種集成也意味著這種分析 "配置" 將始終是xin的, 因?yàn)樗怯脕?lái)構(gòu)建項(xiàng)目的, 因此在長(zhǎng)期運(yùn)行過(guò)程中保持平穩(wěn)。生成系統(tǒng)ci 引擎與CI 引擎
SonarQube 集成了liu行的連續(xù)集成引擎, 如詹金斯和 TFS。SonarQube 與構(gòu)建系統(tǒng)的集成加上簡(jiǎn)單的命令分析線(xiàn)機(jī)制, 意味著 SonarQube 已經(jīng)很容易地與 CI 引擎集成。但是, 我們已經(jīng)更進(jìn)一步地提供了額外的集成與 CI 引擎, 如詹金斯和 TFS 通過(guò)啟用一鍵式體驗(yàn)集成 SonarQube 掃描到構(gòu)建。與ide
開(kāi)發(fā)人員在他們喜歡的 IDE 中獲得代碼質(zhì)量的反饋。SonarLint 為開(kāi)發(fā)人員提供了在 IDE 中直接對(duì)代碼質(zhì)量的 real-time 反饋, 突出顯示了開(kāi)發(fā)人員類(lèi)型的問(wèn)題, 以便將重點(diǎn)放在代碼上。ide公司系統(tǒng)與企業(yè)系統(tǒng)
作為企業(yè)產(chǎn)品, SonarQube 可以很容易地與現(xiàn)有系統(tǒng)集成, 例如授權(quán)和身份驗(yàn)證。SonarQube 帶有內(nèi)置功能, 可與常用的安全系統(tǒng) (如 Active Directory、LDAP、Oauth 等) 集成。身份驗(yàn)證以及授權(quán)可以委派給這些系統(tǒng)。它還可以集成到大多數(shù)其他系統(tǒng), 這得益于它強(qiáng)大的 API。與連續(xù)部署
SonarQube 提供了一個(gè)簡(jiǎn)單的工具, 以集成到管道。SonarQube 提供了在連續(xù)交付過(guò)程的任何步驟中, 將代碼質(zhì)量驗(yàn)證 (稱(chēng)為質(zhì)量門(mén)) 掛鉤的能力。這使您能夠在代碼是否已通過(guò)您的預(yù)定義的代碼質(zhì)量標(biāo)準(zhǔn)集的基礎(chǔ)上進(jìn)行升級(jí), 從而自動(dòng)化了升級(jí)審批過(guò)程。
SonarSource簡(jiǎn)介
系統(tǒng)集成商、外包和應(yīng)用程序服務(wù)提供商在如何向其客戶(hù)提供下一級(jí)別的價(jià)值方面不斷受到挑戰(zhàn)。下載白皮書(shū)在服務(wù)、解決方案和軟件交付方面的質(zhì)量保證是一個(gè)關(guān)鍵的重點(diǎn)領(lǐng)域, 關(guān)鍵是尋找和利用能夠?yàn)榭蛻?hù)提供重要價(jià)值的工具, 并幫助引導(dǎo)他們走向成功, 并協(xié)助進(jìn)行內(nèi)部過(guò)程改進(jìn)。此 IDC 技術(shù)聚焦討論了服務(wù)提供商的策略, 以改進(jìn)軟件分析、缺陷管理、安全性和度量的方法, 從而通過(guò)主動(dòng)可見(jiàn)性來(lái)獲得業(yè)務(wù)和 IT 好處。提供商業(yè)價(jià)值的差異化服務(wù)是贏(yíng)得未來(lái)業(yè)務(wù)的關(guān)鍵。服務(wù)提供者應(yīng)該定位自己, 并證明它們是客戶(hù) IT 和業(yè)務(wù)組織之間必不可少的 "質(zhì)量門(mén)"。
SonarSource交付管道,
持續(xù)的交付和 DevOps 是眾所周知的和廣泛傳播的做法現(xiàn)在。人們普遍認(rèn)為, 重要的是組建偉大的團(tuán)隊(duì), 首先定義共同的目標(biāo), 然后選擇和整合適合于給定任務(wù)的工具。通常, 它是一個(gè)輕量級(jí)工具的混搭, 它們集成在一起建立連續(xù)的交付管道并支持 DevOps 的計(jì)劃。在這個(gè)博客文章中, 我們放大到了整個(gè)管道的一個(gè)重要部分, 這就是經(jīng)常被稱(chēng)為連續(xù)檢查的學(xué)科, 它包括檢查代碼并在上面注入一個(gè)質(zhì)量門(mén), 并顯示在達(dá)到質(zhì)量門(mén)后如何上傳工件。DevOps 的啟用工具包括詹金斯、SonarQube 和 Artifactory。
的用例你已經(jīng)知道質(zhì)量不能在事后被注入, 而是從一開(kāi)始就應(yīng)該是過(guò)程和產(chǎn)品的一部分。作為一種常用的良好做法, 強(qiáng)烈建議您盡快檢查代碼并使結(jié)果可見(jiàn)。因?yàn)?SonarQube 是一個(gè)很好的選擇。但 SonarQube 不只是運(yùn)行在任何孤立的島嶼, 它是集成在一個(gè)輸送管道。作為管道的一部分, 代碼被檢查, 并且僅當(dāng)代碼根據(jù)定義的要求是好的, 換句話(huà)說(shuō): 它滿(mǎn)足質(zhì)量門(mén), 被建立的工件被上傳到二進(jìn)制存儲(chǔ)庫(kù)管理器。
讓我們考慮下面的場(chǎng)景。其中一個(gè)繁忙的開(kāi)發(fā)人員必須修復(fù)代碼, 并檢查對(duì)中央版本控制系統(tǒng)的更改。白天很長(zhǎng), 晚上很短, 而且對(duì)所有團(tuán)隊(duì)的承諾, 開(kāi)發(fā)人員沒(méi)有檢查本地沙箱中代碼的質(zhì)量。幸運(yùn)的是, 有構(gòu)建引擎詹金斯作為一個(gè)單一的真理點(diǎn), 實(shí)現(xiàn)交付管道與其本地管道功能, 并作為一個(gè)方便的巧合 SonarQube 有支持詹金斯管道。
此更改將觸發(fā)管線(xiàn)的新運(yùn)行。哦不!生成管線(xiàn)中斷, 并且未進(jìn)一步處理更改。在下面的圖像中, 您會(huì)看到已定義的質(zhì)量門(mén)被忽略。可視化是由詹金斯藍(lán)色海洋完成的。
01 PipelineFailedBlueOcean
SonarQube 檢驗(yàn)潛在的問(wèn)題是什么?我們可以打開(kāi) SonarQube 的 web 應(yīng)用程序并深入查找。在 Java 代碼中, 顯然沒(méi)有將字符串文本放在右側(cè)。
02發(fā)現(xiàn)
在團(tuán)隊(duì)會(huì)議中, 決定將其定義為一個(gè)阻止程序, 并相應(yīng)地配置 SonarQube。此外, 建立了一個(gè) SonarQube 質(zhì)量門(mén), 以打破任何建設(shè), 如果一個(gè)攔截qi被確定。現(xiàn)在讓我們快速查看代碼。是的, SonarQube 是對(duì)的, 下面的代碼段有問(wèn)題。
03 FindingVisualizedInCode
我們不希望詳細(xì)討論所有使用的工具, 也涵蓋完整的詹金斯構(gòu)建工作將超出范圍。但有趣的提取這里的檢查方面是在詹金斯管道 DSL 中定義的以下階段:
配置. xml: SonarQube 檢查階段 ("SonarQube 分析") {withSonarQubeEnv ("聲納") {mvn 組織 sonarsource 掃描儀. maven: 聲納-maven-插件: 3.3. 0.603: 聲納 +"-f 所有/pom" xml +"-Dsonar projectKey = com. huettermann: 全部: 主" +"-Dsonar" 登錄 = $ SONAR_UN +"-Dsonar" 密碼 = $ SONAR_PW +"-Dsonar" 語(yǔ)言 = java +"-Dsonar。' 的+"-Dsonar。' 的+-Dsonar 測(cè)試. 夾雜物 = ** 測(cè)試 *** +"-Dsonar. 排除** 測(cè)試 ***"}}用于運(yùn)行 SonarQube 分析的階段。允許選擇要與之交互的 SonarQube 服務(wù)器。運(yùn)行和配置掃描儀, 許多可用的選項(xiàng), 請(qǐng)檢查文檔。許多選項(xiàng)可用于集成和配置 SonarQube。請(qǐng)參閱文檔中的替代方案。同樣適用于其他覆蓋的工具。SonarQube 質(zhì)量門(mén)作為詹金斯管線(xiàn)階段的一部分, SonarQube 配置為運(yùn)行和檢查代碼。但這僅僅是第yi部分, 因?yàn)槲覀儸F(xiàn)在還想添加質(zhì)量門(mén), 以打破構(gòu)建。下一階段正好涵蓋了這一點(diǎn), 請(qǐng)參閱下一片段。管道被暫停, 直到質(zhì)量門(mén)被計(jì)算, 特別是 waitForQualityGate 步驟將暫停管道, 直到 SonarQube 分析完成并返回質(zhì)量門(mén)狀態(tài)。如果遺漏了質(zhì)量門(mén), 則生成將中斷。
如何在軟件開(kāi)發(fā)工作流中構(gòu)建質(zhì)量
遠(yuǎn)見(jiàn)卓識(shí)視圖, 顯示每個(gè)測(cè)試在運(yùn)行時(shí)的執(zhí)行時(shí)間
假設(shè)你是一個(gè)希望成長(zhǎng)為一家中型科技公司的初創(chuàng)企業(yè)--介于30到100工程師之間。招聘是快速發(fā)生的, 而且你的代碼數(shù)量也在快速增長(zhǎng)。在較早的階段, 貴公司專(zhuān)注于證明產(chǎn)品。一切都是規(guī)模較小, 你可以循環(huán)快速。現(xiàn)在, 隨著你的成長(zhǎng), 你有更多的開(kāi)發(fā)者在編寫(xiě)代碼和更多的變量的組合。
這是當(dāng)你注意到產(chǎn)品質(zhì)量開(kāi)始惡化, 你不能像你希望的那樣快速發(fā)布代碼。在擴(kuò)展業(yè)務(wù)時(shí), 有越來(lái)越多的變量需要進(jìn)行調(diào)整, 您可能會(huì)忽略更多測(cè)試的需要, 并在測(cè)試上花費(fèi)更多的時(shí)間。
如果你決定聘請(qǐng)一個(gè) QA 經(jīng)理, 而后者又帶來(lái)了一批自動(dòng)化工程師, 你就可以走出困境。硒測(cè)試的覆蓋率很高。但隨著時(shí)間的推移, 事情又開(kāi)始放慢了。所有的自動(dòng)化和善意, 你建立了硒覆蓋開(kāi)始打破和失敗, 它反復(fù)暫停軟件工廠(chǎng)。
我們開(kāi)始的地方
當(dāng)我加入 Shutterstock 時(shí), 我對(duì)公司的自動(dòng)化測(cè)試覆蓋率印象深刻。幾乎每一個(gè)功能的網(wǎng)站上都有測(cè)試覆蓋率的形式, 硒端對(duì)點(diǎn)測(cè)試。Shutterstock 有一個(gè)開(kāi)發(fā)工作流程的地方通過(guò)詹金斯, 將阻止部署到生產(chǎn), 如果硒測(cè)試失敗。我喜歡這樣;這意味著除非所有的測(cè)試都通過(guò)了, 否則任何人都不能將任何東西放到生產(chǎn)中。
但不久之后, 我意識(shí)到, 我們的公司, 這是每天發(fā)布多次, 已經(jīng)變成了一個(gè)公司, 現(xiàn)在被禁止發(fā)布多天一次, 主要是因?yàn)槭〉奈鴾y(cè)試。常見(jiàn)的情況是, 測(cè)試失敗不是因?yàn)楫a(chǎn)品損壞, 而是因?yàn)樗鼈兒艽嗳酢?/p>
一些事情導(dǎo)致了這一點(diǎn):
終端端 selenium-based 驗(yàn)收測(cè)試成為了每個(gè)人都依賴(lài)于測(cè)試的唯yi形式的自動(dòng)化測(cè)試。許多團(tuán)隊(duì)甚至停止編寫(xiě)單元測(cè)試。
測(cè)試框架是片狀的, 是由 QA 團(tuán)隊(duì)建立和擁有的。當(dāng)某件事情失敗, 整個(gè)軟件工廠(chǎng)停止運(yùn)轉(zhuǎn)時(shí), QA 團(tuán)隊(duì)中一小部分三到五人的錯(cuò)誤就落在了我們身上, 他們經(jīng)常被指責(zé)為放慢了組織的速度。
工程組織花了很多時(shí)間來(lái)研究如何構(gòu)建一個(gè)可以擴(kuò)展的產(chǎn)品, 但是沒(méi)有足夠的注意力去構(gòu)建一個(gè)支持這種產(chǎn)品開(kāi)發(fā)的開(kāi)發(fā)工作流程。
質(zhì)量完全由 QA 團(tuán)隊(duì)擁有。
在我們的核心, 我們有一個(gè) QA 組織, 它沒(méi)有與組織的其他部分進(jìn)行擴(kuò)展。雖然他們擁有自動(dòng)化所有內(nèi)容的技能, 但是他們?nèi)狈?gòu)建可伸縮的測(cè)試框架所需的核心技能。由于這種差距, 他們無(wú)法影響組織的其他人認(rèn)為質(zhì)量是所有人擁有的東西, 而不僅僅是 QA 團(tuán)隊(duì)。為了彌合這一差距, 我們不得不重新考慮我們對(duì) QA 整體的態(tài)度。
邁向新的開(kāi)始
我想完成兩個(gè)目標(biāo): 首先, 重建 Shutterstock 的測(cè)試基礎(chǔ)架構(gòu)/框架, 使其更加穩(wěn)定, 其次, 改變 Shutterstock 的工程文化, 使之成為一個(gè)質(zhì)量不是由測(cè)試工程團(tuán)隊(duì)擁有的, 而是由每個(gè)人來(lái)?yè)碛小?/p>
我們改變了招聘測(cè)試工程師時(shí)所期待的核心能力。我們希望我們的測(cè)試工程師成為強(qiáng)大的開(kāi)發(fā)人員, 他們知道如何構(gòu)建 object-oriented 的解決方案, 從而幫助他們創(chuàng)建一個(gè)穩(wěn)定且可擴(kuò)展的測(cè)試框架。我們也希望他們成為有影響力的人, 他們可以推動(dòng)他們的團(tuán)隊(duì)做正確的事情, 而不采取跳過(guò)單元測(cè)試這樣的捷徑。一旦我們建立了一個(gè) world-class 測(cè)試工程團(tuán)隊(duì), 我們就開(kāi)始了解如何快速發(fā)布, 同時(shí)保持一個(gè)高品質(zhì)的產(chǎn)品。
我們知道我們da的問(wèn)題是脆弱的測(cè)試, 所以我們建立了一個(gè)叫做 "睿智" 的工具來(lái)記錄每個(gè)測(cè)試的通過(guò)/失敗數(shù)據(jù)。我們所有的測(cè)試都把數(shù)據(jù)推入睿智, 每次他們作為我們的詹金斯工作流程的一部分運(yùn)行。然后, 我們?cè)谶@個(gè)數(shù)據(jù)庫(kù)之上建立了一個(gè)網(wǎng)站, 使數(shù)據(jù)的挖掘變得容易。我們現(xiàn)在能夠監(jiān)控工作的合格率、個(gè)別測(cè)試的及格率、常見(jiàn)的失敗消息、長(zhǎng)的運(yùn)行測(cè)試, 等等。有了這些數(shù)據(jù), 我們就可以保持自己和其他人的責(zé)任感。我們的一個(gè)核心團(tuán)隊(duì)受影響的失敗的測(cè)試認(rèn)識(shí)到, 他們通常的傳球率只有20%。(試想一下, 由于這一路障, 軟件工廠(chǎng)經(jīng)常停下來(lái)。通過(guò)使用遠(yuǎn)見(jiàn)卓識(shí), 他們能夠快速隔離測(cè)試的di合格率, 并在這些測(cè)試中看到常見(jiàn)的失敗消息。團(tuán)隊(duì)對(duì)測(cè)試腳本進(jìn)行了簡(jiǎn)單的修復(fù), 以提高其可靠性。