|
公司基本資料信息
|
||||||||||||||||||||||||||
SonarSource簡介
我們建立了一個(gè) "商品" 解決方案來管理代碼質(zhì)量。要做到這一點(diǎn), 提供hao的產(chǎn)品是不夠的。產(chǎn)品也必須與整個(gè)生態(tài)系統(tǒng)在開發(fā)過程中發(fā)揮良好的作用, 否則它們將根本不會(huì)被使用 (至少在我們所期望的規(guī)模上)。正是基于這一點(diǎn), 我們建立了 SonarQube 和 SonarLint。與生成系統(tǒng)
SonarQube 與標(biāo)準(zhǔn)構(gòu)建系統(tǒng)緊密集成, 提供零配置方法。通過與liu行的構(gòu)建系統(tǒng) (如 Maven、MSBuild、Gradle 和 ANT) 集成, 我們提供了一種快速的掃描項(xiàng)目的方法, 很少或根本沒有配置。但這并不是唯yi的好處: 這種集成也意味著這種分析 "配置" 將始終是xin的, 因?yàn)樗怯脕順?gòu)建項(xiàng)目的, 因此在長期運(yùn)行過程中保持平穩(wěn)。生成系統(tǒng)ci 引擎與CI 引擎
SonarQube 集成了liu行的連續(xù)集成引擎, 如詹金斯和 TFS。SonarQube 與構(gòu)建系統(tǒng)的集成加上簡單的命令分析線機(jī)制, 意味著 SonarQube 已經(jīng)很容易地與 CI 引擎集成。但是, 我們已經(jīng)更進(jìn)一步地提供了額外的集成與 CI 引擎, 如詹金斯和 TFS 通過啟用一鍵式體驗(yàn)集成 SonarQube 掃描到構(gòu)建。與ide
開發(fā)人員在他們喜歡的 IDE 中獲得代碼質(zhì)量的反饋。SonarLint 為開發(fā)人員提供了在 IDE 中直接對(duì)代碼質(zhì)量的 real-time 反饋, 突出顯示了開發(fā)人員類型的問題, 以便將重點(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è)簡單的工具, 以集成到管道。SonarQube 提供了在連續(xù)交付過程的任何步驟中, 將代碼質(zhì)量驗(yàn)證 (稱為質(zhì)量門) 掛鉤的能力。這使您能夠在代碼是否已通過您的預(yù)定義的代碼質(zhì)量標(biāo)準(zhǔn)集的基礎(chǔ)上進(jìn)行升級(jí), 從而自動(dòng)化了升級(jí)審批過程。











SonarSource簡介
系統(tǒng)集成商、外包和應(yīng)用程序服務(wù)提供商在如何向其客戶提供下一級(jí)別的價(jià)值方面不斷受到挑戰(zhàn)。下載白皮書在服務(wù)、解決方案和軟件交付方面的質(zhì)量保證是一個(gè)關(guān)鍵的重點(diǎn)領(lǐng)域, 關(guān)鍵是尋找和利用能夠?yàn)榭蛻籼峁┲匾獌r(jià)值的工具, 并幫助引導(dǎo)他們走向成功, 并協(xié)助進(jìn)行內(nèi)部過程改進(jìn)。此 IDC 技術(shù)聚焦討論了服務(wù)提供商的策略, 以改進(jìn)軟件分析、缺陷管理、安全性和度量的方法, 從而通過主動(dòng)可見性來獲得業(yè)務(wù)和 IT 好處。提供商業(yè)價(jià)值的差異化服務(wù)是贏得未來業(yè)務(wù)的關(guān)鍵。服務(wù)提供者應(yīng)該定位自己, 并證明它們是客戶 IT 和業(yè)務(wù)組織之間必不可少的 "質(zhì)量門"。








SonarSource交付管道,
持續(xù)的交付和 DevOps 是眾所周知的和廣泛傳播的做法現(xiàn)在。人們普遍認(rèn)為, 重要的是組建偉大的團(tuán)隊(duì), 首先定義共同的目標(biāo), 然后選擇和整合適合于給定任務(wù)的工具。通常, 它是一個(gè)輕量級(jí)工具的混搭, 它們集成在一起建立連續(xù)的交付管道并支持 DevOps 的計(jì)劃。在這個(gè)博客文章中, 我們放大到了整個(gè)管道的一個(gè)重要部分, 這就是經(jīng)常被稱為連續(xù)檢查的學(xué)科, 它包括檢查代碼并在上面注入一個(gè)質(zhì)量門, 并顯示在達(dá)到質(zhì)量門后如何上傳工件。DevOps 的啟用工具包括詹金斯、SonarQube 和 Artifactory。
的用例你已經(jīng)知道質(zhì)量不能在事后被注入, 而是從一開始就應(yīng)該是過程和產(chǎn)品的一部分。作為一種常用的良好做法, 強(qiáng)烈建議您盡快檢查代碼并使結(jié)果可見。因?yàn)?SonarQube 是一個(gè)很好的選擇。但 SonarQube 不只是運(yùn)行在任何孤立的島嶼, 它是集成在一個(gè)輸送管道。作為管道的一部分, 代碼被檢查, 并且僅當(dāng)代碼根據(jù)定義的要求是好的, 換句話說: 它滿足質(zhì)量門, 被建立的工件被上傳到二進(jìn)制存儲(chǔ)庫管理器。
讓我們考慮下面的場景。其中一個(gè)繁忙的開發(fā)人員必須修復(fù)代碼, 并檢查對(duì)中央版本控制系統(tǒng)的更改。白天很長, 晚上很短, 而且對(duì)所有團(tuán)隊(duì)的承諾, 開發(fā)人員沒有檢查本地沙箱中代碼的質(zhì)量。幸運(yùn)的是, 有構(gòu)建引擎詹金斯作為一個(gè)單一的真理點(diǎn), 實(shí)現(xiàn)交付管道與其本地管道功能, 并作為一個(gè)方便的巧合 SonarQube 有支持詹金斯管道。
此更改將觸發(fā)管線的新運(yùn)行。哦不!生成管線中斷, 并且未進(jìn)一步處理更改。在下面的圖像中, 您會(huì)看到已定義的質(zhì)量門被忽略。可視化是由詹金斯藍(lán)色海洋完成的。
01 PipelineFailedBlueOcean
SonarQube 檢驗(yàn)潛在的問題是什么?我們可以打開 SonarQube 的 web 應(yīng)用程序并深入查找。在 Java 代碼中, 顯然沒有將字符串文本放在右側(cè)。
02發(fā)現(xiàn)
在團(tuán)隊(duì)會(huì)議中, 決定將其定義為一個(gè)阻止程序, 并相應(yīng)地配置 SonarQube。此外, 建立了一個(gè) SonarQube 質(zhì)量門, 以打破任何建設(shè), 如果一個(gè)攔截qi被確定。現(xiàn)在讓我們快速查看代碼。是的, SonarQube 是對(duì)的, 下面的代碼段有問題。
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" 語言 = java +"-Dsonar。' 的+"-Dsonar。' 的+-Dsonar 測試. 夾雜物 = ** 測試 *** +"-Dsonar. 排除** 測試 ***"}}用于運(yùn)行 SonarQube 分析的階段。允許選擇要與之交互的 SonarQube 服務(wù)器。運(yùn)行和配置掃描儀, 許多可用的選項(xiàng), 請(qǐng)檢查文檔。許多選項(xiàng)可用于集成和配置 SonarQube。請(qǐng)參閱文檔中的替代方案。同樣適用于其他覆蓋的工具。SonarQube 質(zhì)量門作為詹金斯管線階段的一部分, SonarQube 配置為運(yùn)行和檢查代碼。但這僅僅是第yi部分, 因?yàn)槲覀儸F(xiàn)在還想添加質(zhì)量門, 以打破構(gòu)建。下一階段正好涵蓋了這一點(diǎn), 請(qǐng)參閱下一片段。管道被暫停, 直到質(zhì)量門被計(jì)算, 特別是 waitForQualityGate 步驟將暫停管道, 直到 SonarQube 分析完成并返回質(zhì)量門狀態(tài)。如果遺漏了質(zhì)量門, 則生成將中斷。




如何在軟件開發(fā)工作流中構(gòu)建質(zhì)量
遠(yuǎn)見卓識(shí)視圖, 顯示每個(gè)測試在運(yùn)行時(shí)的執(zhí)行時(shí)間
假設(shè)你是一個(gè)希望成長為一家中型科技公司的初創(chuàng)企業(yè)--介于30到100工程師之間。招聘是快速發(fā)生的, 而且你的代碼數(shù)量也在快速增長。在較早的階段, 貴公司專注于證明產(chǎn)品。一切都是規(guī)模較小, 你可以循環(huán)快速。現(xiàn)在, 隨著你的成長, 你有更多的開發(fā)者在編寫代碼和更多的變量的組合。
這是當(dāng)你注意到產(chǎn)品質(zhì)量開始惡化, 你不能像你希望的那樣快速發(fā)布代碼。在擴(kuò)展業(yè)務(wù)時(shí), 有越來越多的變量需要進(jìn)行調(diào)整, 您可能會(huì)忽略更多測試的需要, 并在測試上花費(fèi)更多的時(shí)間。
如果你決定聘請(qǐng)一個(gè) QA 經(jīng)理, 而后者又帶來了一批自動(dòng)化工程師, 你就可以走出困境。硒測試的覆蓋率很高。但隨著時(shí)間的推移, 事情又開始放慢了。所有的自動(dòng)化和善意, 你建立了硒覆蓋開始打破和失敗, 它反復(fù)暫停軟件工廠。
我們開始的地方
當(dāng)我加入 Shutterstock 時(shí), 我對(duì)公司的自動(dòng)化測試覆蓋率印象深刻。幾乎每一個(gè)功能的網(wǎng)站上都有測試覆蓋率的形式, 硒端對(duì)點(diǎn)測試。Shutterstock 有一個(gè)開發(fā)工作流程的地方通過詹金斯, 將阻止部署到生產(chǎn), 如果硒測試失敗。我喜歡這樣;這意味著除非所有的測試都通過了, 否則任何人都不能將任何東西放到生產(chǎn)中。
但不久之后, 我意識(shí)到, 我們的公司, 這是每天發(fā)布多次, 已經(jīng)變成了一個(gè)公司, 現(xiàn)在被禁止發(fā)布多天一次, 主要是因?yàn)槭〉奈鴾y試。常見的情況是, 測試失敗不是因?yàn)楫a(chǎn)品損壞, 而是因?yàn)樗鼈兒艽嗳酢?/p>
一些事情導(dǎo)致了這一點(diǎn):
終端端 selenium-based 驗(yàn)收測試成為了每個(gè)人都依賴于測試的唯yi形式的自動(dòng)化測試。許多團(tuán)隊(duì)甚至停止編寫單元測試。
測試框架是片狀的, 是由 QA 團(tuán)隊(duì)建立和擁有的。當(dāng)某件事情失敗, 整個(gè)軟件工廠停止運(yùn)轉(zhuǎn)時(shí), QA 團(tuán)隊(duì)中一小部分三到五人的錯(cuò)誤就落在了我們身上, 他們經(jīng)常被指責(zé)為放慢了組織的速度。
工程組織花了很多時(shí)間來研究如何構(gòu)建一個(gè)可以擴(kuò)展的產(chǎn)品, 但是沒有足夠的注意力去構(gòu)建一個(gè)支持這種產(chǎn)品開發(fā)的開發(fā)工作流程。
質(zhì)量完全由 QA 團(tuán)隊(duì)擁有。
在我們的核心, 我們有一個(gè) QA 組織, 它沒有與組織的其他部分進(jìn)行擴(kuò)展。雖然他們擁有自動(dòng)化所有內(nèi)容的技能, 但是他們?nèi)狈?gòu)建可伸縮的測試框架所需的核心技能。由于這種差距, 他們無法影響組織的其他人認(rèn)為質(zhì)量是所有人擁有的東西, 而不僅僅是 QA 團(tuán)隊(duì)。為了彌合這一差距, 我們不得不重新考慮我們對(duì) QA 整體的態(tài)度。
邁向新的開始
我想完成兩個(gè)目標(biāo): 首先, 重建 Shutterstock 的測試基礎(chǔ)架構(gòu)/框架, 使其更加穩(wěn)定, 其次, 改變 Shutterstock 的工程文化, 使之成為一個(gè)質(zhì)量不是由測試工程團(tuán)隊(duì)擁有的, 而是由每個(gè)人來擁有。
我們改變了招聘測試工程師時(shí)所期待的核心能力。我們希望我們的測試工程師成為強(qiáng)大的開發(fā)人員, 他們知道如何構(gòu)建 object-oriented 的解決方案, 從而幫助他們創(chuàng)建一個(gè)穩(wěn)定且可擴(kuò)展的測試框架。我們也希望他們成為有影響力的人, 他們可以推動(dòng)他們的團(tuán)隊(duì)做正確的事情, 而不采取跳過單元測試這樣的捷徑。一旦我們建立了一個(gè) world-class 測試工程團(tuán)隊(duì), 我們就開始了解如何快速發(fā)布, 同時(shí)保持一個(gè)高品質(zhì)的產(chǎn)品。
我們知道我們da的問題是脆弱的測試, 所以我們建立了一個(gè)叫做 "睿智" 的工具來記錄每個(gè)測試的通過/失敗數(shù)據(jù)。我們所有的測試都把數(shù)據(jù)推入睿智, 每次他們作為我們的詹金斯工作流程的一部分運(yùn)行。然后, 我們?cè)谶@個(gè)數(shù)據(jù)庫之上建立了一個(gè)網(wǎng)站, 使數(shù)據(jù)的挖掘變得容易。我們現(xiàn)在能夠監(jiān)控工作的合格率、個(gè)別測試的及格率、常見的失敗消息、長的運(yùn)行測試, 等等。有了這些數(shù)據(jù), 我們就可以保持自己和其他人的責(zé)任感。我們的一個(gè)核心團(tuán)隊(duì)受影響的失敗的測試認(rèn)識(shí)到, 他們通常的傳球率只有20%。(試想一下, 由于這一路障, 軟件工廠經(jīng)常停下來。通過使用遠(yuǎn)見卓識(shí), 他們能夠快速隔離測試的di合格率, 并在這些測試中看到常見的失敗消息。團(tuán)隊(duì)對(duì)測試腳本進(jìn)行了簡單的修復(fù), 以提高其可靠性。




