# Microsoft Azure - 通過 SonarQube 和 TFS 管理技術債務
通過?[Cesar Solis Brito](https://msdn.microsoft.com/zh-cn/magazine/mt149362?author=Cesar+Solis+Brito),?[Hosam Kamel](https://msdn.microsoft.com/zh-cn/magazine/mt149362?author=Hosam+Kamel)?| 2015 年 11 月
技術債務是一套開發工作,使客戶價值上的進度效率低下的問題。它通過使代碼難以理解、 脆弱、 耗時若要更改,難以驗證影響工作效率,并創建阻止進度的計劃外的工作。技術債務削弱組織的強度由于較高的客戶支持成本并最終,這些問題的某些組合將產生更大的問題。
技術債務是隱匿。它開始時很小,并隨著時間通過匆忙更改和缺少上下文和守紀。它可以將它們具體化這竟然莫名其妙 — 即使對于被認為是"干凈"的項目 — 由于項目環境中的更改。例如,生成針對美國市場的原型代碼可能會建議為國際、 立即創建與可本地化性相關的債務。或者,隨著技術的發展,應用程序可能無法承受。
債務有多種形式,包括通過代碼分析、 重復代碼、 代碼復雜性、 沒有足夠的測試、 重疊和變數測試和"體系結構意大利面一樣。"發現的問題
在管理其技術債務的開發團隊所面臨的核心問題包括:
* 了解和確定債務和在代碼中的位置。
* 評估補救措施的成本與非補救措施的成本。技術債務清償產生開銷。此外不修復有成本的這是到變得更加復雜的計算結果,可以是更大。
* 將策略放就地側重于阻止從越來越嚴重和管理向下的債務。
* 公開了開發人員能夠滿足不是人生畏,以便它們可以解決其作為一個自然組成部分其日常開發過程并不將其視為非常耗時且非常煩瑣麻煩的方式的策略所需的債務。
* 通過時間,以確保它是正確的方向趨勢分析,并滿足已定義的策略中跟蹤債務。
* 盡可能高效、 盡可能自動修正債務。
因此,此債務不得不進行管理不一定是消除 —,因此,必須進行度量。當管理時向下,它應該優先處理之間的其他新功能和所需的功能。應衡量產生的影響,以及,就像測量的財務影響的獲取房屋貸款申請。
您需要做出的、 在開發過程中可能會增加技術債務的決定必須意識到。您應能夠測量通過實際管理技術債務的改進。這是重要的產品所有者 (客戶端、 用戶、 經理等) 的正當理由投資。
解決方案 (例如從 SonarSource SonarQube 協作與 Visual Studio Team Foundation Server (TFS) 提供策略以簡化數據收集和提供可幫助管理并減少技術債務的方式。SonarQube 是一個開放源代碼平臺,可了解和管理技術債務。
在本文中,我們將重點介紹一種測量和主動管理技術債務方法。調用基于生命周期的期望 (SQALE) 上評估軟件質量,它是開放源代碼方法,主要從事軟件代碼庫的非功能性的質量特性 ([bit.ly/1JQ96qT](http://bit.ly/1JQ96qT))。SQALE 方法是由 Inspearit 法國 (以前稱為 DNV ITGS 法國) 開發的。
如家庭水泄漏的技術債務是根據 SonarSource 博客文章 ([bit.ly/1N0Y4A9](http://bit.ly/1N0Y4A9))。當您在家里有水泄漏時,做您執行第一次,插入泄漏或拖地? 答案很簡單和直觀: 您插入泄漏。為什么會這樣呢? 因為任何其他操作將無用;它將只需返回在地板上是相同數量的水之前的時間。
技術債務問題"修復泄漏"意味著將焦點放在"new"代碼 ;也就是說,添加或更改自最后一個版本中,或最后一個提交/簽入后的代碼。
## 實現 SonarQube 和 TFS
圖 1?顯示的 TFS 和 SonarQube 企業安裝程序參考體系結構 ; 那里詳細介紹了有關容量、 設計、 實施和操作的本地 TFS 并在 Microsoft Azure 基礎結構即服務 (IaaS) 中的"TFS 規劃指南"和"TFS 在 Azure IaaS 指南,"可以從 Visual Studio ALM Rangers CodePlex 站點下載該指南 ([aka.ms/treasure5](http://aka.ms/treasure5))。這種體系結構和其實現通過考慮在數據庫群集上,通過與數據層和應用程序層與服務器場中的高可用性功能定向向企業級支持。
?
圖 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](http://bit.ly/1JzfVJK)) 項的虛擬機 (Vm) 大小決定。該指南還提供有關身份驗證模型 (如獨立的擴展的域和單向信任選項的建議。可幫助加快環境創建的 Azure 的一個重要功能是可用的現成 TFS 虛擬機模板,如中所示?圖 2。
?
圖 2 可在 Microsoft Azure 上的虛擬機模板
網絡配置應根據自己的需求來保護對 TFS 體系結構的內部層的外部訪問選中狀態。作為一種方式擴展企業基礎結構并獲得云彈性,應查看的 Azure 連接到本地通過 VPN 的各種方法。本指南介紹最佳實踐和設置在 Azure 上的 TFS 環境有幫助的性能提示。SonarQube 要求數據庫和分析工具必須位于同一網絡中。
安裝在規劃時請按照這些建議的步驟操作:
* 確定 Azure IaaS 適用性。云計算提供了計算功能作為一種服務,為您提供對資源的訪問如計算電源、 網絡和存儲。確定是否可接受約束以及是否沒有增值。
* 規劃的 TFS。使用"TFS 規劃和災難避免和恢復指南"([bit.ly/1JzfVJK](http://bit.ly/1JzfVJK)) 來確定最佳的服務器體系結構適合您的要求。
* Azure IaaS 映射。將映射到最接近的 Azure VM 配置根據成本和可伸縮性。
* Azure 平臺管理。定義帳戶、 訂閱和管理和報告以滿足您企業的審核要求的所有權。明確定義的所有權和責任。
* 網絡規劃。定義您的網絡,這包括在本地要求、 網絡地址段、 地緣分組、 名稱解析、 Azure 隧道和監視。
* 存儲規劃。定義您使用在本地存儲或 Azure 存儲的存儲策略。
* 驗證。請聯系 Microsoft 或 Azure 社區中的 Azure 的主題事項專家 ([bit.ly/1fVTgz0](http://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](http://bit.ly/1itxhS9)) 如何設置 Azure 區域 (請確保將歸置到 SonarQube server 與 TFS 相同的區域中的虛擬機) 和 SQL Server 上具有足夠的詳細的信息和參考資料。SQL Server 配置和數據庫創建有特定的要求使其滿足 SonarQube。例如,SQL Database 應是區分大小寫和重音的而不是默認值。此外需要啟用 SQL 身份驗證并且 SQL 用戶配置為 SonarQube 工作。在 Azure 上托管時您需要更改 SQL Server 以啟用對從虛擬機之外的數據庫的以下某些步驟訪問的網絡協議。首先,使用 SQL Server 配置管理器中,啟用命名管道和 TCP/IP 協議為 SQL Express 數據庫中所示?圖 3。
?
圖 3 啟用命名的管道和 TCP/IP 協議為 SQL Express 數據庫
仍在服務器配置管理器中,編輯 TCP/IP 屬性中,和在 IP 地址選項卡中查看為采用 TCP 動態端口以及記端口 (此處 49419),如中所示?圖 4。將使用它來從外部到數據庫中啟用該連接。
?
圖 4 請注意在 TCP 動態端口的端口號以便連接到數據庫從外部
如中所示圖 5, 、 重新啟動通過在 SQL Server Express 上右鍵單擊 SQL Server 服務項中的 SQL Server 和選擇重新啟動。啟動 SQL Server Browser (在服務選項卡中它從已停止更改為自動,然后啟動它)。
?
圖 5 啟動 SQL Server Browser
現在需要在防火墻中打開一個端口,以便該數據庫是可從 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 服務器部分介紹的下載、 安裝和配置過程時配置和啟動 SonarQube,包括 Windows 防火墻設置。
在 Azure 上托管時您需要啟用對 SonarQube 服務器可從外部世界的訪問。若要這樣做,請先關閉匿名訪問。若要強制用戶身份驗證,以系統管理員身份登錄,請轉到設置 |常規設置 |安全性和組強制用戶身份驗證屬性設為 true。
在防火墻中為 Web 服務器打開的端口。現在您需要在防火墻中打開一個端口,以便 Web 服務器可從 Internet 訪問。在以管理員身份運行的 cmd.exe 提示符處,鍵入:
~~~
netsh advfirewall firewall add rule name="Sonar Web" dir=in action=allow
? protocol=TCP localport=9000
~~~
對于 Sonar Web 和數據庫在 Azure 中添加終結點。目前,可以登錄到使用遠程桌面 SonarQube 虛擬機并訪問數據庫和 Web 站點。您需要確保您可以連接到這兩個資源從您的計算機通過 Internet。為此,您需要在 Azure 中創建終結點:
* 請轉到 portal.azure.com 上。
* 瀏覽以查找虛擬機在其中設置 SonarQube。
* 在邊欄選項卡顯示此虛擬機,單擊所有設置。
* 在設置中,單擊終結點。
* 在終結點刀片中,單擊添加。
* 添加名為映射到專用端口 9000 的 TCP 公用端口 9000 Sonar Web 終結點。
* 添加名為 SQL 映射到專用端口 49419 的 TCP 公共端口 1433年的終結點: 端口 1433年應由 SQL Server Management Studio 或 Visual Studio 為發現 SQLEXPRESS)。請注意此步驟中不會是有必要再釋放 SonarQube 5.2 時。
SonarQube 可以對許多語言 ; 執行分析首先您需要安裝即插即用接程序項目從 SonarQube 插件庫中要分析的語言 ([bit.ly/1NdhnYF](http://bit.ly/1NdhnYF)) 或通過 SonarQube 更新中心 ([bit.ly/1NPKZet](http://bit.ly/1NPKZet))。然后您需要安裝和配置生成代理,具體取決于項目的類型上的某些必備組件: MSBuild.SonarQube.Runner ([bit.ly/1LOYzM3](http://bit.ly/1LOYzM3))、 一個有關。NET-基于項目);(對于 Java Maven 項目); SonarQube Maven 插件運行程序和 SonarQube 運行程序,泛型賽跑者對于所有其他項目類型。
與 Team Build 集成并測試修改后的生成定義中,如中所示?圖 6。SonarQube 運行程序工具也與生成代理集成,因此它可以輕松地執行編寫用于處理與 TFS 的開發團隊。

圖 6 SonarQube 執行與生成代理的分析
## 若要管理技術債務的策略
既然 SonarQube 環境設置了,我們將介紹一種策略利用敏捷的形成良性周期以提高其值改為產品所有者和企業內的技術債務度量。如 SQALE 方法所述,我們的意圖是什么創建技術債務清晰地定義、 估計正確此債務、 分析技術和業務角度來看和允許建立優化的回報計劃的產品/服務不同的優先次序策略后的債務。
SQALE 方法,如中所示?圖 7, ,用于制定和組織與代碼的質量相關的非功能性要求。它分為三個層次結構級別: 特性、 子特征和要求相關的代碼的內部屬性。(這些要求通常取決于軟件的上下文和語言。這些要求的任何違反引入了技術債務性。)

圖 7 SQALE 方法
SQALE 方法規范化因源代碼分析工具通過將它們轉換為修正成本和非修正成本的報表。它還定義聚合這些成本,按照 SQALE 方法的樹狀結構或后面的源代碼的項目的層次結構的規則。若要管理軟件項目的技術債務,應使可見債務。請確保產品所有者和市場營銷人員知道技術債務存在并且重復給他們通常情況下,"如果我們不計劃時間白費技術債務,您可能無法獲得所有所需的功能。"
水泄漏隱喻建議推遲了當前的技術債務而除非什么是真正重要、 最緊迫的問題是要修復 — 例如,安全問題。因此,需要一個基線、 確保您可以意識到任何新債務、 嘗試不引入任何新債務 (停止泄漏),并根據您正在使用并重構代碼,花時間來修復現有的債務。您是單元測試,因此這并不是很危險若要這樣做 (清理根據自己的意愿)。
不需要進行預算的管理技術債務。它是行為的整個組織中的更改。
中所示?圖 8, ,SonarQube 顯示儀表板基于 SQALE 為了使團隊具有了軟件項目的質量狀態的通用表示形式。

在項目生存期內圖 8 SQALE 基于方法的 SonarQube 儀表板
圖 9?顯示技術債務棱錐圖小組件。讀取圖形垂直從底部到頂部。首先,您想要確保您是可測試 (40 min),否則,當您更改時代碼,就不能保證不會將更多的問題。然后您想要可靠,這需要額外的 42 分鐘 ;因此總的來說,使其具有可靠性您需要花費 1 h 22 分鐘,等等。

圖 9 技術債務棱錐圖小組件
## 如何管理技術債務?
以下是管理技術債務所需的主要步驟:
步驟 1: 設置項目的目標。應了解哪些程序產生技術債務的定義。計算索引根據由開發團隊估計的平均修正工作。多個關系圖和關系圖用于有效地實現可視化效果的評估的源代碼的優缺點。您應提出:
* 哪些軟件部分最導致風險?
* 最受影響的質量標準?
* 標識非-符合性上項目或其用戶的影響是什么?
它們通過一個項目定義的目標。SonarQube 允許您以了解的原因和影響和,因此,計劃任務用于清償債務深化到在代碼內的特定問題。此分析應敏捷規劃期間所做并,如果可能,請設置沿產品積壓工作項 (Pbi) 的優先級。定義 Pbi 和計算以平衡或提高速度或其他體系結構特征。特征是從更嚴重,到那些將將潛在的商業價值,傳遞到可移植性或可重用性等的產品用戶定義的。
步驟 2: 隨著時間的推移,監視技術債務的量。能夠檢查執行的任務的結果或正在實現的最佳實踐。要問的問題包括是否在最后一天/沖刺 (sprint) / 版本和那里多少邊距與為此項目設置的目標的技術債務增加。
步驟 3: 分析過程和產生的影響。此外應能夠通過以下做法了不同的項目或團隊或轉包商除外之間對技術債務進行比較。這可能會提高時采取的最佳做法并將它們應用更有效地時測量技術債務結果也更好, 的團隊之間的做法。
則可以通過回答的問題如哪些當前的債務的一部分已創建在最后一天/沖刺 (sprint) / 版,當前的債務的哪一部分繼承自舊代碼和項目中的哪些部分具有最高的技術債務期間分析技術債務的來源。
團隊應還側重于技術債務的特定部分以優化結果。為此,提問如哪些是需要修復我的代碼中的最緊迫的問題的問題、 下一步要修復的問題是什么以及哪些違反規則的"正確的代碼"的不是那么嚴重影響修復并將生成高降低業務的影響。
最后,如果我花費 100 的數小時來減少技術債務,問我將在多少提高我的速度嗎? 以及哪些改進將用戶會認為對應用程序的質量?
這些問題的答案將提供一種自然的回饋機制用于查找的改進機會和填補到更好的產品。
SQALE 方法對于解決技術債務支持三種策略:
1. 遵循技術邏輯 (避免無用返工)。使用 SQALE 棱錐圖。
2. 通過修復非 conformities,具有最高業務影響降低對業務的影響。
3. 通過修復非 conformities,最高的投資回報率來優化您的投資回報率。
## 總結
技術債務具有要管理 — 不一定是消除 — 并且,因此,必須確認并測量。選擇可將其停止是一個良好的開端。您可以選擇對其進行管理,并且有不同的方式。您可能會清除現有債務因為觸摸代碼以修復 bug 或添加新功能。或者可能決定操作都必須采取安全或一致性問題的修正。在這種方式可能是您的組織認為它應解決該問題。在這種情況下,工作需要設置之間的其他新功能或功能所需的衡量鎖定的含義的影響的優先級。
您應該了解要做出的、 可能會增加技術債務的決定必須意識到并且應該能夠測量通過實際管理來實現的改進。
SonarQube 和 TFS 的集成組件可幫助簡化從 Microsoft Build Engine,或 TFS 和 Visual Studio Online 中生成的收集數據。SonarQube 可幫助您了解這一點并計劃如何以更好地投入解決它的方式顯示技術債務。沒有正在進行的工作由 Microsoft 和 SonarSource 完成 (請參閱?[bit.ly/1OeqftX](http://bit.ly/1OeqftX)) 來提高這種進一步集成并提供一流的解決方案來管理在平臺上的技術債務。
* * *
Cesar Solis Brito?*已專門從事 20 多年的軟件開發財務和醫藥字段中并在 Microsoft 的顧問。目前,他是在 Azure 平臺的 Microsoft 專家級工程師。他一直積極地從事 ALM 和相關的 Microsoft 開發技術。您可以通過?[Cesar.Solis@microsoft.com](mailto:Cesar.Solis@microsoft.com)?或關注他的 Twitter:?[@cesarsolis](https://twitter.com/@cesarsolis)。*
Hosam Kamel?*是一名高級首席現場工程師,在 Microsoft,并與 Visual Studio ALM Ranger 超過 10 年的軟件開發經驗。他目前從事 Visual Studio ALM 和 Team Foundation Server。您可以通過他的博客與他聯系?[blogs.msdn.com/HKamel](http://blogs.msdn.com/HKamel)?或關注他的 Twitter:?[@HosamKamel](https://twitter.com/@HosamKamel)。*
- 介紹
- Essential .NET - C# 異常處理
- 崛起 - 具備批判精神
- Windows 10 - 通過搜索索引器加快文件操作速度
- 最前沿的技術 - 利用用戶體驗驅動設計改善體系結構
- 異步編程 - 從頭開始執行異步操作
- 數據點 - Aurelia 與 DocumentDB 結合: 結合之旅
- ASP.NET - 將 ASP.NET 用作高性能文件下載器
- 測試運行 - 使用 C# 執行 t-檢驗
- Microsoft Azure - 通過 SonarQube 和 TFS 管理技術債務
- 孜孜不倦的程序員 - 如何成為 MEAN: Express 路由
- 別讓我打開話匣子 - Alan Turing 和 Ashley Madison
- 編輯寄語 - 歡迎使用 Essential .NET