1. 程式人生 > >軟體質量管理平臺-SonarQube

軟體質量管理平臺-SonarQube

從軟體開發這個事情一誕生開始,混亂就是一直伴隨著的。人們經常會問,“我做的對不對?”,對此下面這些回答:

  1. 最開始的一個回答:編譯通過了
  2. 它看上去在工作
  3. 普遍的情況是:使用者沒有抱怨(直到使用者開始抱怨或者我們必須新增新功能,那麼我們可以弄清楚我們做了多少)
  4. 最近的答案是自動測試用例(如何知道是否有足夠的測試,以及如何知道測試無法涵蓋的內容)

我們如何評估程式碼的質量和編寫程式碼的開發人員? 評估工廠工人(可接受的質量),律師(案例獲勝)等都很容易 我們是否可以評估軟體質量,這是一個可以回答的問題。軟體質量可以通過抽象,從不同的角度進行檢查,按不同的維度來打分。 我們來試驗一下。下面這段文字,你能否正確閱讀。 I cdnuolt blveiee taht I cluod aculaclty uesdnatnrd waht I was rdgnieg. The phaonmneal pweor of the hmuan mnid. It deosn’t mttaer in waht oredr the leteerrs in a wrod are, the olny iprmoatnt tihng is taht the frist and lsat ltteer be in the rghit pclae. The rset can be a taotl msess and you can sitll raed it wouthit a porbelm. Tihs is bcuseae the huamn mnid deos not raed ervey lteter by istlef, but the wrod as a wlohe. 上面這段文字所有單詞都沒有正確拼寫,但是還是可以閱讀的(中國人也有類似的例子:“研表究明,漢字的序順並不定一能影閱響讀,比如當你看完這句話後,才發這現裡的字全是亂的。”)。從一個產品的角度,有人會認為經文字順序不對,但這段話沒毛病,因為但不影響閱讀。但不好的一面是影響了閱讀體驗,需要一些額外的精力去重建單詞的順序。此外,文章的編輯者有點鬱悶。 把上面的場景換成軟體開發的原始碼。閱讀者是產品的終端使用者,編輯者是開發人員。兩者從不同的角度來看這段程式碼。終端使用者關注功能是否實現,開發者關注程式碼結構。 軟體質量測量是對一系列可描述軟體特性的屬性值進行加權歸一化的定量過程。每一個特性都有一組可測量的屬性。 現在的問題是什麼是軟體特性?它們可以是:

  1. 是否遵守了特定的編碼規範;
  2. 是否遵循了已知的最佳實踐,避免了已知的不良實踐;
  3. 是否有潛在的BUG和效能問題、安全隱患、重複程式碼;
  4. 程式碼邏輯是否很複雜;
  5. 公開的API是否有完善的文件和註釋;
  6. 是否有單元測試;
  7. 程式碼是否遵循了最佳的設計和架構;

如何來定義這些相關的屬性?

屬性 權重值
Blocker(障礙) 5
Critical(緊急) 4
Major(重大) 3
3Minor(次要) 2
Info(資訊) 1

定義了軟體特徵之後,下一個問題就是我們如何自動地去處理這些,獲取到特徵值。答案是靜態程式碼分析。

靜態程式碼分析

靜態程式碼分析是用於分析原始碼的演算法和技術的集合,以便自動發現潛在的錯誤或不良的編碼實踐。 這個想法與編譯器警告類似(可能對編碼錯誤有幫助),但是讓這一想法進一步發現,並發現使用執行時除錯技術(如測試)傳統發現的錯誤。 靜態程式碼分析(通常也稱為“白盒”)測試,在非執行時環境中檢視應用程式。 它是唯一被證明可以通過覆蓋整個程式碼庫並識別所有易受攻擊的模式的方法。 靜態程式碼分析也被認為是自動執行程式碼審查過程的一種方式。 靜態程式碼分析軟體解決的任務可分為3類:

  1. 程式中的錯誤;
  2. 程式碼格式的建議。一些靜態分析儀允許您檢查原始碼是否符合自己公司的程式碼格式標準;
  3. 指標計算。軟體指標是一種可以讓您獲取軟體某些屬性或其規格的數值的措施。

有許多靜態分析工具可用。 但是,Checkstyle,PMD和FindBugs是眾所周知的,用於大多數專案。 Checkstyle(聚焦:規範) Checkstyle是一個開源工具,可以幫助實施編碼標準和最佳實踐,特別注重編碼規範。 雖然Checkstyle確實涵蓋了一些靜態程式碼分析功能(與PMD和Findbug的方式大致相同),但是我們使用Checkstyle將主要集中在檢測和執行程式碼編寫規範。 CheckStyle檢驗的主要內容:

  • Javadoc註釋
  • 命名約定
  • 標題
  • Import語句
  • 體積大小
  • 空白
  • 修飾符
  • 程式碼問題
  • 類設計
  • 混合檢查(包括一些有用的比如非必須的System.out和printstackTrace) 從上面可以看出,CheckStyle提供了大部分功能都是對於程式碼規範的檢查,而沒有提供像PMD和Jalopy那麼多的增強程式碼質量和修改程式碼的功能。但是,對於團隊開發,尤其是強調程式碼規範的公司來說,它的功能已經足夠強大。

PMD(聚焦:不良做法) PMD是一種靜態程式碼分析工具,能夠自動檢測範圍很廣的潛在缺陷和不安全或非優化的程式碼(不良做法)。 而其他工具(如Checkstyle)可以檢查編碼規範和標準,PMD更側重於缺陷檢測(確保遵循良好做法)。它附帶了豐富且高度可配置的規則集,可以輕鬆地配置給定專案應使用哪些特定規則。 不良做法型別包括眾所周知的、總是會造成問題的行為。以下是不良做法的幾個例子:

  • 捕捉異常而不做任何事情
  • 死程式碼
  • 太多複雜的方法
  • 直接使用實現而不是介面實現
  • 重寫了hashcode()沒有實現或重寫equals(Object object)方法
  • Boolean的同步(可能導致死鎖)
  • 返回對可變物件的引用可能會對外暴露內部實現

Findbug(聚焦:潛在BUG) Findbug是Java的另一個靜態分析工具,在某些方面類似於Checkstyle和PMD,但是具有不同的重點。 Findbug不關心格式化或編碼標準,只對最佳實踐感興趣:實際上,它的目標是檢測潛在的錯誤和效能問題。它很擅長做這類檢查。可以檢測到許多常見但難以發現的錯誤。 事實上,Findbug能夠以比較高的精度檢測出與PMD或Checkstyle不同的問題。 因此,它可以是一個有用的補充。 HP Fortify(聚焦:安全漏洞) 根據HP Fortify網站,HP Fortify靜態程式碼分析器可幫助您驗證您的軟體是否值得信賴,降低成本,提高生產力並實施安全編碼最佳做法。 關鍵特性

  • 通過識別構成最大威脅的漏洞來降低業務風險
  • 通過可重複的過程快速識別和消除可利用的漏洞
  • 通過在SDLC早期識別漏洞來降低開發成本
  • 教育開發人員在安全編碼實踐中工作
  • 將開發和安全團隊攜手共同尋找並解決安全問題

SonarQube

SonarQube收集和分析原始碼,測量質量併為您的專案提供報告。它結合了靜態和動態分析工具,使質量隨時間持續測量。 影響程式碼的所有要素,從次要的樣式細節到關鍵的設計錯誤,都能被Sonar檢查和評估。開發人員可以訪問和跟蹤程式碼分析資料,包括樣式錯誤,潛在的錯誤和程式碼缺陷,以設計低效率,程式碼複製, 測試覆蓋率不足,複雜度過高。 Sonar平臺從不同方面分析原始碼,從而逐層向下逐步演進,從模組層次下降到類級別。 Sonar在每個級別都會產生測量值和統計資料,從而揭示源頭中需要檢查或改進的問題區域。 **聚焦:**通過使用Checkstyle,PMD,Findbug,Fortify以及許多其他靜態/動態程式碼分析工具,從不同角度分析各個維度進行分析。其實,有點Eclipse的感覺,是一個質量管理平臺。

為什麼使用SonarQube

  • 到目前為止,沒有哪個CI工具有一個外掛可以將所有上面這些工具整合到一起;
  • 沒有哪個CI工具可以提供良好的鑽取功能,但sonarqube有;
  • 沒有CI外掛可以將所有的軟體質量的度量資料整合到一起;
  • 沒有CI外掛提供管理視角;
  • 還沒有設計/架構問題相關的CI外掛
  • 沒有CI工具或外掛提供整體專案質量的儀表盤。

特徵:

  • SonarQube不會告訴你什麼是錯的,你自己判斷。它只是質量管理工具(平臺),幫助你走在正確的道路上;
  • SonarQube的商業競爭對手似乎將質量的定義主要集中在錯誤和複雜性上,而SonarQube的產品涵蓋了其創造者所稱的七大品質;
  • SonarQube不僅解決了錯誤,還解決了編碼規則,測試覆蓋,重複,API文件,複雜性和架構,並在儀表盤中提供所有這些詳細資訊;
  • 它為您提供了今天的程式碼質量的瞬間快照,以及落後的趨勢(已經出錯了)和未來的質量指標(今後可能出錯);
  • 它為您提供指標,以幫助您做出正確的決策(在幾乎每個行業,嚴格的領導者跟蹤指標。無論是製造缺陷和浪費,銷售和收入,還是棒球的命中率和RBIs,都有指標告訴您,目前做的怎麼樣。整體做的如何,以及你是否正在變得更好或更壞。)

SonarQube真正突出的是,它不僅提供程式碼的指標和統計資訊,而且將這些技術資料轉化為真實的商業價值,如風險和技術債務。 Sonar不僅針對核心開發人員和程式設計師,而且還針對專案經理以及更高的管理層面,因為它提供了管理視角。 SonarQube的報告功能和針對原始碼的基於不同視角的檢視更加強化了這一概念。 從管理角度來看,歷史資料的透明和持續訪問使經理能夠提出正確的問題。 注意:SonarQube與上述任何靜態分析工具都不會競爭,而是與這些工具非常緊密地連線在一起。事實上,如果這些靜態分析工具(Checkstyle,PMD和Findbug)不存在,SonarQube自己就會起作用。

結論

總之,SonarQube是個質量管理平臺,平臺的想象空間就大了。可以整合別人辛辛苦苦做的分析外掛,它就做好資料整合、整合之上的分析和報告。反正你通常能想到的軟體質量分析的工具很多都能在這個平臺上找到,現在找不到也能找到類似的或以後會找到。也就是ALL IN ONE的感覺。對小白來說,用SonarQube還能見識一些之前沒見過的工具,挺好。 參考/整理:https://reachmnadeem.wordpress.com/2013/11/17/why-sonarqube/