2015 年 11 月

第 30 卷,第 12 期

本文章是由機器翻譯。

Microsoft Azure - 使用 SonarQube 和 TFS 管理技術債務

Cesar Solis Brito, Hosam Kamel | 2015 年 11 月

技術負債是集合的開發工作中進行客戶的值沒有效率的問題。它藉由程式碼難以理解、 脆弱且耗時變更,難以驗證破壞產能並建立未計劃的進度會封鎖的工作。技術負債對組織的強度因為高的客戶支援成本和這些問題的一些組合最後會產生較大的問題。

技術負債會因此升高。它一開始很小並隨時間緊迫的變更以及缺乏相關的內容和紀律透過不斷增長。它可以具體化警 — 即使是針對專案視為 「 乾淨的 」 — 因為在專案的情況下變更。例如原型美國市場所產生的程式碼可能會建議與相關可當地語系化的國際、 立即建立負債的。或技術發展過程,不將應用程式可能會保留。

債務有許多形式,包括透過程式碼分析、 重複的程式碼、 程式碼複雜度、 沒有足夠測試、 重疊及分流測試及"架構雜亂無章。"找到的問題

在管理其技術負債的開發團隊所面臨的核心問題包括:

  • 了解與識別負債和它位於程式碼中。
  • 評估補救措施的成本和非補救措施的成本。修正技術負債要付出的代價。不修正它也會有更複雜的成本評估並可以變大。
  • 就地放置原則著重於防止從中取得更糟以及管理下的債務。
  • 需要符合原則的方式,不是沈重,讓它們可以處理它做為其日常開發程序一部分自然且不會將它視為龐大相當耗時而且需要做法感到疲累負債的開發人員公開。
  • 追蹤負債經過一段時間以確保它是正確的方向趨勢並符合定義的原則。
  • 做為更有效率且儘可能自動修復負債。

所以這個負債具有管理 — 不一定是消除 — 並因此,對來測量。當管理向下,它應該優先處理其他新功能和所需的功能。應該測量影響,以及,就像在測量取得房屋貸款的財務影響。

您必須要了解您可能會在開發期間增加技術負債的決策。您應該能夠測量實際管理技術債務來達成的改進程度。這對左右對齊產品擁有者 (用戶端、 使用者、 經理等等) 非常重要投資。

從 SonarSource SonarQube 等解決方案共同作業與 Visual Studio Team Foundation Server (TFS) 提供策略來加速資料收集和呈現可協助管理並可降低技術負債的方式。SonarQube 是了解和管理技術債務的開放原始碼平台。

在本文中我們將著重在測量和主動管理技術債務的方法。呼叫基礎上生命週期的期望 (SQALE) 的軟體品質評量,是著重於非功能性的品質屬性的軟體程式碼基底的開放原始碼方法 (bit.ly/1JQ96qT)。SQALE 方法是由 Inspearit 法國 (先前稱為 DNV ITGS 法國) 開發。

根據 SonarSource 部落格文章技術負債就像主水流失 (bit.ly/1N0Y4A9)。當您在家裡有水流失時,您該怎麼做首先,插上遺漏或擦地板? 答案很簡單又直覺: 您插入流失。為什麼會這樣? 因為任何其他動作將是無用的。它會只有幾回地板上相同數量的水之前的時間。

技術負債"修正遺漏"表示將焦點放在 「 新增 」 程式碼。也就是已加入或自最後一個版本,或最後一個認可/簽入變更的程式碼。

實作 SonarQube 和 TFS

圖 1 顯示 TFS 和 SonarQube 企業安裝所需的參考架構 ; 有詳細指引容量、 設計、 實作和作業的 TFS 內部和在 Microsoft Azure 基礎結構即服務 (IaaS) 中的"TFS 規劃指南 」 和 「 TFS 上 Azure IaaS 手冊 」 可以從 Visual Studio ALM Ranger CodePlex 網站下載 (aka.ms/treasure5)。這個架構及其實作會被導向到企業層級支援考慮透過資料庫叢集中的資料層和應用程式層與伺服陣列中的高可用性功能。

Team Foundation Server 參考架構,包括 SonarQube
圖 1 Team Foundation Server 參考架構,包括 SonarQube

藉由設定個別小組為基礎的多個 SonarQube 伺服器或依技術納入考量下列可達成可調整的 SonarQube 伺服器部署:

SonarQube 資料庫可以安裝在提供安全的方式來處理高可用性服務的資料庫叢集中的一個執行個體。

SonarQube 分析器 (外掛程式) 至 SonarQube 資料庫實作可擴充的每個伺服器這種處理負載的分析資料。

資料庫和解析程式都必須位於相同網路中。SonarSource 一直致力於重整 SonarQube (版本 5.2) 使其具有三層式架構,就會使這個條件約束已過時。

所有機器 — 資料庫、 Web 伺服器、 分析器 — 必須是時間同步處理。

裝載 SonarQube 和 Azure 上的 TFS 的必要條件

若要設定 TFS 和 SonarQube 的環境需要有足夠信用額度在大小與環境的 Azure 訂閱的 Azure 上您要建立。您可以使用 TFS 規劃指南 》 (bit.ly/1JzfVJK) 的虛擬機器 (Vm) 大小決定。本指南也提供如獨立和擴充的網域和單向信任選項的驗證模型的建議。Azure 可幫助加速環境建立很棒的功能是提供現成的 TFS VM 範本、 所顯示的 圖 2

Microsoft Azure 上提供的虛擬機器範本
圖 2 Microsoft Azure 上提供的虛擬機器範本

網路組態應根據之外部存取 TFS 架構的內部層級的保護需求選取。在內部透過 VPN 連接 Azure 的各種方式應該檢閱用來擴充公司基礎結構並取得雲端的彈性。本指南描述最佳作法和很有幫助設定 TFS 環境在 Azure 上的效能提示。SonarQube 需要資料庫和解析程式都必須位於相同網路中。

規劃安裝時請遵循這些建議的步驟:

  • 決定 Azure IaaS 適用性。雲端運算提供運算能力為服務,讓您存取資源例如運算能力、 網路和存放裝置。決定是否可接受的條件約束和是否具有附加價值。
  • 規劃的 TFS。使用"TFS 規劃與嚴重損壞預防和修復指南 》 (bit.ly/1JzfVJK) 來判斷您的需求的最佳伺服器架構。
  • Azure IaaS 對應。對應至最接近的 Azure VM 組態根據成本和延展性。
  • Azure 平台控管。定義帳戶、 訂閱和系統管理和報告來滿足您企業的稽核需求的擁有權。清楚地定義擁有權和責任。
  • 規劃網路。定義您的網路,涵蓋了在內部部署需求、 網路位址區段、 同質群組、 名稱解析、 Azure 通道時間和監視。
  • 儲存體計劃。定義您的內部儲存體或 Azure 儲存體使用的儲存體策略。
  • 驗證。請連絡 Azure 主題專家來自 Microsoft 或 Azure 社群 (bit.ly/1fVTgz0) 並認可自己之前驗證計劃。請確定計劃的環境就技術上來說和財務支可行且可維護。

如本文的目的是為了設定 SonarQube 伺服器進行示範和試用版,額外的步驟是這裡未提及。如果您計劃或實際執行環境或從現有移轉的佈建,您應該檢閱完整的計畫指南 》 中的其他步驟。還有應該遵循的成功的安裝指南 》 中的部署檢查清單。

Azure IaaS 參考架構和安裝運用這裡根據隨附的概念證明 (POC) 指南詳述的 「 TFS 上 Azure IaaS,"用於範例實作。雖然本指南包含設定 TFS POC 環境的詳細的步驟,還有周圍 POC 環境或生產一個搭配使用的相同指示沒有條件約束。

SonarQube 安裝需求

我們建議使用相同的 IaaS SQL Server 執行個體 SonarQube 安裝只處理特定的 SQL Server 組態需求建立 SonarQube 資料庫時。「 SonarQube 安裝指南針對現有 Team Foundation Server 2013 單一伺服器環境 」 (bit.ly/1itxhS9) 有關如何設定 Azure 區域 (請務必共置 SonarQube server 與 TFS 相同的區域中的 VM) 和 SQL Server 有足夠的詳細的資訊和參考。SQL Server 組態與資料庫建立具有可 SonarQube 符合特定需求。例如,SQL Database 應該是區分大小寫和區分腔調字和這不是預設值。SQL 驗證也必須啟用而且 SQL 使用者設定 SonarQube 運作。在 Azure 上裝載時您需要變更 SQL Server 以依照特定的步驟啟用外部 VM 從資料庫的存取權的網路通訊協定。首先,使用 SQL Server 組態管理員啟用具名管道及 TCP/IP 通訊協定 SQL Express 資料庫中所示 圖 3

啟用具名的管道和 TCP/IP 通訊協定的 SQL Express 資料庫
圖 3 啟用具名的管道和 TCP/IP 通訊協定的 SQL Express 資料庫

仍在 [伺服器組態管理員] 中編輯 [TCP/IP 內容中,和 IP 位址] 索引標籤中尋找 TCP 動態通訊埠並記下連接埠 (這裡的 49419) 中所示 圖 4。您將使用它來從外部啟用資料庫的連接。

請注意在 TCP 動態通訊埠的通訊埠編號從外部啟用資料庫的連接
圖 4 請注意在 TCP 動態通訊埠的通訊埠編號從外部啟用資料庫的連接

中所示圖 5, 、 重新啟動 SQL Server 以滑鼠右鍵按一下 SQL Server Express 中的 SQL Server 服務項目並選擇 [重新啟動。啟動 SQL Server Browser (在 [服務] 索引標籤中變更它從 [已停止為 「 自動 」 並加以啟動)。

啟動 SQL Server 瀏覽器
圖 5 啟動 SQL Server 瀏覽器

您現在需要在防火牆中開啟連接埠,讓資料庫可從 TFS 機器存取。以系統管理員身分執行的 cmd.exe 提示字元中輸入下列命令:

netsh advfirewall firewall add rule name="SQL" dir=in action=allow
  protocol=TCP localport=49419 49590

SonarQube 並不需要完整 JVM 安裝 — Java SE Runtime Environment (JRE) 應該足夠且有特定的建議如何設定和利用 x64 處理器架構。

安裝指南 》 中的 SonarQube Server 一節說明的下載、 安裝和設定程序時設定和開始 SonarQube,包括 Windows 防火牆設定。

在 Azure 上裝載時您需要啟用可從外界 SonarQube 伺服器的存取權。若要這樣做,請先關閉匿名存取。若要強制使用者驗證,以系統管理員身分登入和移至 [設定 |一般設定 |安全性和設定強制使用者驗證屬性設為 true。

在 Web 伺服器的防火牆中開啟的連接埠。現在您需要在防火牆中開啟通訊埠,使 Web 伺服器是從網際網路存取。在以系統管理員身分執行 cmd.exe 提示字元中輸入:

netsh advfirewall firewall add rule name="Sonar Web" dir=in action=allow
  protocol=TCP localport=9000

將端點在 Azure 中加入聲納 Web 和資料庫。目前為止,您可以登入與遠端桌面 SonarQube 機器並存取資料庫和網站。您必須確保您可以對這些兩個資源從您的電腦透過網際網路連線。為此,您需要在 Azure 中建立端點:

  • 請移至 portal.azure.com。
  • 瀏覽以尋找 SonarQube 設定所在的虛擬機器。
  • 在呈現此 VM blade 中,按一下 [所有設定。
  • 在 [設定] 按一下端點。
  • 在 [端點] 分頁中,按一下 [新增。
  • 加入名為對應到私用連接埠 9000 TCP 公用連接埠 9000 聲納 Web 端點。
  • 加入名為 SQL 對應到私用連接埠 49419 TCP 公用連接埠 1433年的端點 (通訊埠 1433年預期的 SQL Server Management Studio 或 Visual Studio 來探索 SQLEXPRESS)。請注意此步驟中不必要再放開 SonarQube 5.2。

SonarQube 可以執行分析上許多語言。您必須先安裝從 SonarQube 外掛程式文件庫要分析的專案語言的外掛程式 (bit.ly/1NdhnYF) 或透過 SonarQube Update 中心 (bit.ly/1NPKZet)。然後您必須在安裝及設定某些必要條件視專案類型而定的組建代理程式: MSBuild.SonarQube.Runner (bit.ly/1LOYzM3)、 針對。NET-架構專案)。(適用於 Java Maven projects); SonarQube Maven 外掛程式執行器和 SonarQube 執行程式,對於所有其他專案類型的泛型執行器。

Team Build 整合並測試修改過的組建定義中所示 圖 6。SonarQube 執行器工具整合與組建代理程式,讓它可以輕鬆地會接手開發團隊用來與 TFS 搭配使用。

SonarQube 執行分析與組建代理程式
圖 6 SonarQube 執行分析與組建代理程式

若要管理技術債務的策略

既然 SonarQube 環境設定,我們將說明運用在敏捷式軟體開發的正向循環來改善產品擁有者和企業的值內的技術負債度量的策略。SQALE 方法所提過,我們的目的是要清楚地定義什麼建立技術負債、 正確估計此負債,分析技術和商業觀點來看及提供不同的優先順序策略允許建立最佳化的回饋計劃而負債。

中所示的 SQALE 方法 圖 7, ,用來制定及組織程式碼的品質與相關的非功能性需求。它分為三個階層的層級: 特性、 子特性和需求相關的程式碼內部屬性。(這些需求通常依賴軟體的內容和語言。這些需求的任何違規介紹技術負債。)

SQALE 方法
圖 7 SQALE 方法

SQALE 方法會正規化轉換成補救成本和非補救成本原始程式碼分析工具所產生的報表。它也會定義彙總這些成本遵循 SQALE 方法的樹狀結構,或遵循的原始程式碼成品的階層架構的規則。若要管理軟體專案的技術負債,您應該要負債可見。請確定產品擁有者和行銷人員知道技術負債存在且重複它們通常 「 如果我們不要排程付清技術負債的時間可能不會得到所有您要的功能。 」

水流失比喻建議延後目前的技術負債,除了真正重要與迫切需要修正的功能 — 比方說,安全性問題。因此,採取基準、 請確定您所知的任何新負債、 盡量不要導入任何新的債務 (停止 leak) 和您正在使用及重構程式碼,花一些時間來修正現有負債。您是單元測試,因此這不是危險執行這項操作 (清除您隨時)。

管理技術債務不需要預算。它是行為的整個組織中變更。

如所示 圖 8, ,SonarQube 呈現小組有常見的軟體專案的品質狀態表示順序根據 SQALE 儀表板。

SQALE 以方法為基礎 SonarQube 儀表板內專案存留期 
在專案存留期間內圖 8 SQALE 以方法為基礎 SonarQube 儀表板

圖 9 技術負債金字塔 widget 會顯示。讀取圖形以垂直方式下至上。首先,您想要確保您正在測試 (40 分鐘),否則當您變更程式碼,並不保證不會帶來更多問題。然後您想要可靠,這需要額外的 42 分鐘。因此總共可靠您必須花 1 h 22 分鐘等等。

技術負債金字塔 Widget
圖 9 技術負債金字塔 Widget

如何管理技術債務?

以下是管理技術債務所需的主要步驟:

第 1 步: 設定專案目標。應該建立技術負債的定義。索引是根據開發團隊的估計平均補救付出心力來計算的。數個圖形和圖表可用來有效率地視覺化辦公的原始程式碼的優缺點。您應該自問:

  • 哪些軟體片段最變為風險?
  • 品質準則是最受影響的程度?
  • 識別非-符合專案或其使用者的影響為何?

這些是定義的目標專案。SonarQube 可讓您向下鑽研至程式碼內的特定問題以了解原因和含意並因而清償負債的計劃工作。這項分析應該會在 agile 計劃期間所做並且盡可能排定優先順序沿著產品待處理項目 (Pbi)。定義 Pbi 和評估來平衡或改進速度或其他架構特性。從更重要定義特性將潛在的商業價值為產品使用者提供的可攜性或可重複使用性等的項目。

第 2 步: 監視技術負債的量經過一段時間。要能核對工作執行的結果或所實作的最佳作法。要思考的問題包括是否在最後一天/衝刺 (sprint) / 版本與相關設定專案的目標那里多少邊界的技術負債增加。

步驟 3: 分析程序和影響。您也應該能夠比較向上作法不同的專案或小組或承包商之間的下列技術負債。這麼做可改善團隊時採取的最佳作法並將其套用更有效地同時也更好測量技術負債結果之間的作法。

可以回答問題如哪些目前負債的一部分建立期間最後一天/衝刺 (sprint) / 版本、 目前負債的哪一個部分繼承自舊版程式碼和專案的哪些部分具有最高的技術負債分析技術負債的來源。

小組也應該以最佳化結果專注於技術負債的特定部分。為此,發問如哪些是修正我的程式碼內的緊急問題、 什麼是下一步要修正的問題及哪些違反 「 權限的程式碼 」 不是那麼成本修正,而且會產生高降低商務的影響。

最後,如果我花費降低技術負債的 100 個小時,詢問多少會改善我速度嗎? 和使用者會覺得哪些改進應用程式的品質嗎?

這些問題的答案會提供自然的意見反應機制尋找改進的機會和落差更好的產品。

SQALE 方法支援三種策略來定址技術負債:

  1. 請依照下列技術的邏輯 (避免無用重新作業)。使用 SQALE 金字塔。
  2. 減少營運影響修正非-conformities 具有最高商業影響。
  3. 最佳化您的 ROI 修正非-conformities 具有最高的 ROI。

總結

管理對技術負債 — 不一定是消除 — 而且因此,必須認可而測量。選擇來停止它是一個不錯的起點。您可能會選擇管理向下而有不同的方式。您可能會清除現有負債如觸控程式碼來修正 bug 或加入新功能。或者您可能決定的補救動作很重要的安全性或一致性問題。這或許是方式組織認為需要解決問題。在此情況下,工作需要的其他新功能或功能需要,衡量方式影響的優先順序。

您應該了解要了解您可能會增加技術負債的決策和您應該可以測量實際管理它來達成的改進程度。

SonarQube 與 TFS 整合元件可以協助從 Microsoft Build Engine 或 TFS 和 Visual Studio Online 中建置收集資料。SonarQube 呈現技術負債可幫助您了解它與計劃如何使其更投資在解決它的方式。沒有 Microsoft SonarSource 所完成的進行中工作 (請參閱 bit.ly/1OeqftX) 來改善這項整合進一步並提供用來管理的平台上的技術負債第一級的解決方案。


Cesar Solis Brito已專精於軟體開發中的財務和製藥欄位和 microsoft 20 年以上的顧問。目前,他是在 Microsoft Azure 平台的高階工程師。他已在 ALM 中使用主動和相關的 Microsoft 開發技術。您可以透過他的連絡網址 Cesar.Solis@microsoft.com 或在 Twitter 上追隨他: @cesarsolis

Hosam Kamel是 microsoft 的資深的首要欄位工程師和使用 Visual Studio ALM Ranger 超過 10 年的軟體開發經驗。他目前擅長於 Visual Studio ALM 和 Team Foundation Server。您可以透過他他的部落格 blogs.msdn.com/HKamel 或在 Twitter 上追隨他: @HosamKamel

感謝以下的微軟技術專家對本文的審閱: Mathew Aniyan、 Brian Blackman、 Harysh Menon、 Duncan Pocklington 和 Jean Marc Prieur