1. 程式人生 > >iOS整合Sonar的詳細步驟, 業內經常說的是iOS程式碼質量管理

iOS整合Sonar的詳細步驟, 業內經常說的是iOS程式碼質量管理

1. Sonar介紹

     行業內提到"程式碼質量管理, 自動化質量管理", 一般指的都是通過Sonar來實現。本文的目標是實現在Sonar上顯示出iOS專案, 先看張最終的效果圖:

     用Sonar能夠實現什麼?

  • 技術債務(sonar根據"規則"掃描出不符合規則的程式碼)
  • 覆蓋率(單元測試覆蓋率)
  • 重複(重複的程式碼, 有利於提醒封裝)
  • 結構

問題1: "規則"指的是什麼? 

     在Sonar工具中配置檢測工具(規則), 然後sonar根據規則檢測"質量報告檔案", 得出問題數目。 比如本文配置的規則是OCLint

問題2: 技術債務的天數怎麼得出?

     每個規則都有對應的處理時間, 最後:問題型別1數目 * 對應時間 + 問題型別2數目 * 對應時間 +... 得到時間。

2. 概述

    Sonar原生並不支援iOS, 所以就需要我們自己按照Sonar原理來安裝各個工具, 並將各個工具連線起來, 生成質量結果, 並由Jenkins來實現自動化執行。

    但由於涉及到的知識範圍很廣, 不僅需要iOS開發技術, 還需要運維知識和各個命令工具的使用方法。 而且國內外的資料少的相當可憐, 沒有最佳實踐, 沒有專門的第三方平臺, 造成很多東西都是一步步試錯出來的, 一步一坎, 所以用了很長時間。

     不過最後都將每個工具, 每個步驟打通, 將各個工具連線起來, 整理成.sh指令碼 和 .properties配置檔案, 這樣在後續新添專案時會很輕鬆。

3. 巨集觀介紹

3.1 配置關係圖

3.2 涉及到的知識點

  • XCTool工具
  • OClint工具
  • Gcovr工具
  • Git, SVN命令
  • Linux命令
  • Jenkins工具
  • Sonar工具
  • Shell語法
  • Sonar-runner工具

3.3 關係邏輯講解

  1. 每個專案新增一個配置檔案(.properties), 為了在Jenkins上呼叫命令時能自動填充專案設定;
  2. 在Jenkins上安裝各個工具(XCTool, OCLint, gcovr, sonar-runner) 與 .sh指令碼, Jenkins伺服器可以從程式碼倉庫clone下程式碼, 然後通過.sh指令碼與.properties配置檔案來呼叫各個“工具”, 然後每個專案生成對應的“檔案”;
  3. 在 .sh指令碼 最後會通過sonar-runner將生成的 ”檔案” 傳給Sonar伺服器, Sonar伺服器以圖形化的形式顯示出對應的結果。
  4. 具體傳遞給哪個sonar伺服器與專案名, 都是在.properties中進行配置

4.環境配置

4.1 基礎知識

     其實Sonar的展示是將一系列的報告檔案轉換得到的, 檔案又是通過各個工具生成的, 所以需要先安裝工具。

     涉及到的工具包括(1.xctool 2.oclint, 3.gcovr, 4.sonar-runner), 雖然涉及的工具比較多, 每個用法都可詳細的單獨講, 但不建議在開始時就深入瞭解這些, 本文會將用到的地方進行講解, 後續深入瞭解請看給出的推薦資料。

     在接下來的步驟中, 需要具備基礎的Linuxl知識與Shell知識, 建議有空的話先學學。

4.2 工具-HomeBrew

    “gem管理器”, 通過該工具可以安裝別的gem工具, 類似cocoapods。

     有了此工具後, 以下的工具都可通過該工具來安裝, 正確的使用方式是先search 工具, 再install工具    

4.3 工具-XCTool

     此工具是用來代替XCode在伺服器上執行Build, Test等命令, 類似xcodebuild。

     安裝方法:$brew install xctool

4.4  工具-OCLint

     OCLint是一個靜態分析工具, 可以檢測OC程式碼, 發現語法漏洞。用該工具來生成程式碼質量報告(技術債務)。

     安裝方式:

     $ brew install Caskroom/cask/oclint

     或

     $ brew tap oclint/formulae

     $ brew install oclint  (不走上面的命令直接install oclint的話, 下載的版本不是最新版, 文件將不能正常生成)

4.5 工具-Gcovr

     該工具是用來生成單元測試覆蓋率的文件的

     安裝方式: $brew install gcovr

4.6 環境-JDK

5.Jenkins

     Jenkins一般被稱為"構建器", 說簡單點就是 "定時觸發 + 配置任務"。Jenkins可以通過協同很多別的工具工作, 本文就是通過.sh(指令碼)來協同SVN/Git 與 各個工具, 來生成檔案並傳給Sonar伺服器。

     更多Jenkins的知識具體看這兩篇教程。

5.1 新建一個工程

5.2 程式碼倉庫設定

5.2.1 SVN

關於credential:

          Jenkins檢測到當前伺服器訪問不了程式碼倉庫時, 會提示你設定許可權, 進入Credential, 設定賬號密碼就可以了。

5.2.2 Git方式

git的Credentials設定:

設定好username與private key(能訪問git電腦的私鑰)就可以了, Passphrase會自動生成。

關於公鑰私鑰的介紹:

     一般的SSH方式是在git伺服器的SSH設定裡面新增自己當前電腦的公鑰(id_rsa.pub)。然後當前電腦訪問Git伺服器時就能直接訪問了。

     但Jenkins需要在Git上設定好當前電腦的私鑰後, 還需要將當前電腦的私鑰(id_rsa)儲存在Jenkins配置中。猜測是訪問git時是以別的電腦來訪問的。

附:

5.3 構建設定

     Jenkins支援通過指令碼構建, 一般再次設定一些環境與變數, 然後執行指令碼。一般此處的設定要結合具體的指令碼呼叫方式來決定, 所以再第六節再詳細介紹。

我當前的設定是這樣的:

  1. 先設定環境變數
  2. 跳轉到工程根目錄下
  3. 把指令碼copy到當前目錄下
  4. 執行指令碼

5.4 定時構建

     可以指定每天幾點執行一次, 或每週五執行一次, 當然也可以點選左上角的"立即構建"立即執行。

例: 設定為週一到週五的9點30~9點45之間進行

6.更多說明

6.1 Sonar配置

     其實我對Sonar的配置不是很清楚, 先留個坑吧。 只知道最後通過runner-sonar工具將生成的檔案傳給了Sonar伺服器, 至於Sonar的配置引數, 則是從.sonar-project.properties檔案裡面獲取的。

    run-sonar.sh在第一個github連結裡面, 在6.4中將.sh修改了, 同學們請注意; .properties下載第二個連結裡面的。

附:

6.2 工程配置

     按照教程的指導, 將run-sonar.sh和sonar-project.properties放到根目錄下, 修改.properties檔案的內容, 然後執行run-sonar.sh就可以了。檔案下載地址:https://github.com/mjdetullio/sonar-objective-c

     我是將.properties隨專案走, 因為每個專案的配置不一樣, 而run-sonar.sh是固定不變的, 所以放在了Jenkins伺服器上, 再執行構建時將其拷貝到當前目錄下。

介紹些配置過程中用到的命令, 方便大家:

$ ssh 使用者名稱@伺服器地址     // 通過bash訪問遠端伺服器

$ scp /Users/xxx/Documents/svn/run-sonar.sh [email protected]:~/opt/iosShell/run-sonar.sh  // 將本地的sh檔案copy到遠端伺服器對應的位置

$ chmod u=rxw run-sonar.sh // 修改檔案許可權, 使其為可讀可寫可執行

6.3 指令碼執行流程與生成物介紹

     clear 

       ↓

     build

       ↓

     test        :     TEST-report.xml

       ↓

     gcovr     :     coverage-xxx.xml

       ↓

     oclint     :      oclint.xml

     TEST-report.xml 是通過xctool的test命令生成的, 如果生成失敗會有2, 3行的預設文字, 這時就可以證明是執行到test時失敗了, 建議先用xcode執行測試, 把環境調通了, 更多單元測試文章, 請看我的 "iOS單元測試入門與配置"篇;

     coverage-XiangMu.xml 是單測覆蓋率報告, 如果你的單測覆蓋率有誤, 看這個文件。走完test後, 在XCode的路徑檔案下, 會生成專案的覆蓋率報告, 然後gcovr命令根據這些報告生成覆蓋率報告。 一般覆蓋率報告有問題都是test環節有問題

     oclint.xml 是技術債務報告, 一般build環節沒有問題, 這個報告就沒問題。

6.4 指令碼分享

    因為github上的指令碼執行時到test命令就錯誤了, 所以將我修改後的分享出來。

    沒有找到能上次檔案的地方, 把指令碼所以內容全貼出來太浪費地方了, 就分享修改的地方吧, 大家從github上下載, 然後修改吧..

else

	echo -n 'Running tests using xctool'	
	# runCommand sonar-reports/TEST-report.xml $xctoolCmdPrefix -scheme "$testScheme" -reporter junit GCC_GENERATE_TEST_COVERAGE_FILES=YES GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES test
	# ctf:這個命令出錯, 用下面的命令代替
	$xctoolCmdPrefix -scheme "$testScheme" -reporter junit:sonar-reports/TEST-report.xml GCC_GENERATE_TEST_COVERAGE_FILES=YES GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES test

	echo -n 'Computing coverage report'

	# We do it for every xcodeproject (in case of workspaces)

7.成果

7.1 技術債務

          不僅可以顯示出有多少不符合”規則”的程式碼片段,還能根據程式碼倉庫的提交歷史對應到時誰的問題

7.2 覆蓋率

    可以檢測到單元測試的覆蓋範圍,監督單元測試覆蓋範圍。

7.3 重複

          檢測到相似的程式碼片段,提醒將常用的功能封裝起來,提高重用性。

7.4 結構

      專案的檔案結構    

7.5 程式碼

7.6 問題

8.未來接入方式與成本

  1. 專案中新增.properties配置檔案, 修改配置項;
  2. 在Jenkins新增對應的專案;
  3. 然後? 沒有然後了。

9.何去何從

      在XCode8之後, XCTool已不支援了, 對這點我用xcodebuild+xcpretty來進行了替換, 具體詳情看我的這篇文章: https://my.oschina.net/ChenTF/blog/806565

相關推薦

iOS整合Sonar詳細步驟, 業內經常說的是iOS程式碼質量管理

1. Sonar介紹     行業內提到"程式碼質量管理, 自動化質量管理", 一般指的都是通過Sonar來實現。本文的目標是實現在Sonar上顯示出iOS專案, 先看張最終的效果圖:     用Sonar能夠實現什麼?技術債務(sonar根據"規則"掃描出不符合規則的程式碼)覆蓋率(單元測試覆蓋率)重複(重

JAVA中SSH三大框架整合詳細步驟_摘錄於尚矽谷視訊

S4h4s2整合步驟(Spring4.x.x,Hibernate4.x.x,Struts2.x.x) 1. 加入 Spring 1).加入 jar 包 2).配置 web.xml 檔案(1加入applicationContext.xml執行spring,2之後加入Strut

android APP整合系統詳細步驟及注意事項(amlogic平臺)

此說明用於amlogic平臺整合不簽名的apk。(如何判斷整合的apk需不需要簽名。簡單來說使用U盤安裝後,能正常開啟使用的就可以不簽名方式整合。) 各平臺的檔案系統有差異,但整體大同小異。其他平臺

SpringBoot整合Elasticsearch詳細步驟以及程式碼示例(附原始碼)

## 準備工作 ### 環境準備 JAVA版本 ```bash java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121-b13) Java HotSpot(TM) 64-Bit Server VM (bui

持續整合整合Jenkins與程式碼質量管理平臺Sonar並實現構建失敗郵件通知

一:Sonar是什麼?Sonar 是一個用於程式碼質量管理的開放平臺,通過外掛機制,Sonar 可以整合不同的測試工具,程式碼分析工具,以及持續整合工具。與持續整合工具(例如 Hudson/Jenkins 等)不同,Sonar 並不是簡單地把不同的程式碼檢查工具結果(例如FindBugs,PMD等)直接顯示在

程式碼質量管理工具】——sonar

   【前言】    bug越改越多,程式一換資料就崩,這就是目前我們系統的一個現狀。在這之前,進行過前後臺程式碼規範整理,程式碼判空等工作,但這是人工檢測的,有點慢,效率也比較低。當重新匯入資料之後

SonarQube程式碼質量管理平臺C++外掛sonar-cxx的安裝

SonarQube的問題,對於C/C++使用者來說,SonarQube的預設C/C++外掛CFamily是收費的,讓人絕望啊,一度讓我放棄了自己搭建SonarQube伺服器, 改為了使用Travis CI持續整合自己的專案,然後讓Travis CI轉SonarCloud來實現

程式碼質量管理-Sonar 使用手冊

持續整合之程式碼質量管理-Sonar簡介Sonar是一個用於程式碼質量管理的開源平臺,用於管理Java原始碼的質量。通過外掛機制,Sonar 可以整合不同的測試工具,程式碼分析工具,以及持續整合工具,比如checkstyle、findbugs、Jenkins。通過不同的外掛對

整合開源系統實現自動化構建、程式碼質量評估、專案資訊統計(1)——Jenkins安裝

Jenkins 是java 語言開發,需要JRE(JDK)的支援(注:我到現在還不知道JRE 和 JDK 的區別>_<),因需要支撐分散式部署支撐,因此採用直接部署jenkins.jar 包的方式進行安裝。 (一)  前期準備 確認安裝jenkins 的機器已

sonar程式碼質量管理工具

[原文地址:http://blog.csdn.net/hunterno4/article/details/11687269] Sonar簡介 Sonar是一個用於程式碼質量管理的開源平臺,用於管理原始碼的質量,可以從七個維度檢測程式碼質量 通過外掛形式,可以支援包括

使用 Sonar 進行程式碼質量管理

Sonar 是一個開源的程式碼質量管理平臺。通過外掛機制,Sonar 可以整合不同的測試工具,程式碼分析工具,以及持續整合工具(如Jenkins)。 Sonar 並不是簡單地把不同的程式碼檢查工具結果(例如 FindBugs,PMD 等)直接顯示在 Web

使用sonar進行java程式碼質量管理

前言 應公司要求,這一次的開發需要進行sonar進行靜態程式碼質量檢測。 接到這個任務的時候,我還並不知道sonar是什麼,但聽到靜態程式碼檢測幾個字的時候,我下意識的以為是類似checkstyle之類的工具,但是真正用過之後我發現我錯了。 我發現實際執行

快速搭建sonar程式碼質量管理平臺

安裝 新增mysql驅動至\extensions\jdbc-driver\mysql\建立mysql資料庫和使用者:10.22.10.139 db:sonar 使用者名稱/密碼:sonar/sonar修改sonar.properties,註釋掉預設的資料庫配置,新增以下配

使用sonar進行maven專案程式碼質量管理

 今天突然心血來潮想來搭建sonar檢測一下手上的專案程式碼質量, 首先當然是到sonar官網下載最新版本了, 地址在這 :http://www.sonarqube.org/downloads/   , 我下載的是SonarQube 4.0 , 然後解壓, 進根目錄裡的bin

整合騰訊Bugly日誌收集接入詳細步驟和錯誤解決方案-- IOS

一、登入BUGLY官網1、登入BUGLY官網以後,選擇新建產品,選擇IOS或ADNROID平臺,如圖: 完事以後點選儲存,點選當前專案檢視詳細資訊: 主要有:異常上報(異常概覽、崩潰分析、卡頓分析、高階搜尋、異常配置)、運營統計(運營概覽、使用者分析、渠道分析)、應用升級 2

iOS IAP應用內購詳細步驟和問題總結指南

最近公司在做APP內購會員功能 遇到了很多問題 總結記錄一下 首先一定要區分Apple pay 和IAP內購的區別 可以先去看一下官方文件地址 有每個步驟的詳細解釋 本篇文章分為:1、 內購支付流程; 2、開發整合步驟; 3、問題(遇坑)記錄解決方式 之前沒看官方文件走了很多彎路 網上部落格

iOS手動整合 facebook popSDK步驟

1.建立專案,將pop的SDK匯入工程, 2.匯入CoreGraphics.framework ,UIKit.framework, Foundation.framework新增到工程中。 3.編譯cmd+b。若編譯成功,不用看下一步操作;如編譯失敗,執行第4步 4.由於po

iOS巔峰之CocoaPods安裝及使用的詳細步驟

一、概要 iOS開發時,專案中會引用許多第三方庫,CocoaPods(https://github.com/CocoaPods/CocoaPods)可以用來方便的統一管理這些第三方庫。 二、安裝 由於網上的教程基本都大同小異,但細節之處還不是很完善,所以藉機會在這裡補充下: 注:要使用CocoaPods,那

iOS真機測試詳細步驟及圖解

關於開發者賬號分為三種: 個人、公司、企業,具體如何成為公司或者企業賬號,請百度 為什麼要真機除錯?模擬器除錯不行嗎? 模擬器除錯只能除錯一些普通的功能,對於一些特殊的功能是需要真機裝置上的硬體來支援的,如 感測器:磁力計、陀螺儀、距離感測器、拍照、打電話、發簡訊、藍芽

iOS 整合apple Pay 接入詳細教程

Apple Pay執行環境:iPhone6以上裝置,作業系統最低iOS9.0以上,部分資訊設定需要iOS9.2以上。目前還不支援企業證書新增。 環境搭建好後可以在模擬器上面執行,xcode7.2.1+iPhone6SP9.2系統下,系統會繫結幾種虛擬的銀行卡,和幾個聯絡人,