Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
靜態程式碼分析簡介 
Visual Studio 2012 
2013/9/26 
1
Overview 
 靜態程式碼分析是什麼 
 為何需要 
 靜態程式碼分析的種類 
 使用時機 
 優缺點 
 Visual Studio 2012所提供的功能 
2
靜態程式碼分析是什麼 
檢測非執行期(run time)程式碼的錯誤或缺陷 
3 
分析並標定有問題程式碼的位置 
確保程式開發風格的一致性 
度量程式碼品質的指標(code metrics)
為何需要做靜態程式碼分析 
4 
系統被掃出一堆弱點 
程式上線後出現效能問題 
花許多時間在討論命名跟風格的問題 
花更多時間解釋一個很難懂,需要作者逐行解釋的函數 
引用前輩的sample code卻出了一堆bug 
好像在哪看過與這段一模...
為何需要做靜態程式碼分析 
5 
早期發現早期治療 
Coding階段揪出問題,好過上線後開事件單 
避免前朝遺毒發作 
建立一致的coding規範 
微軟開發Visual Studio 產品所得到的經驗: 
• Code review 過的程...
為何需要做靜態程式碼分析 
6 
品質指標: 
 撰寫風格一致性 
 複雜度 
 程式區塊深度 
 類別繼承深度 
 程式碼相似度 
 程式弱點掃描 
目的: 
 可維護性 
 設計的彈性 
 安全 
 效能
靜態程式碼分析的種類 
靜態程式 
碼分析 
7 
Code Review 
• 由不同角色的團隊成員分別 
檢視 
• 突破程式作者盲點 
• 檢查資安漏洞及業務邏輯 
• 較易理解審查規則 
Automated Tools 
• 自動化及效...
靜態程式碼分析的種類 
資料來源:http://www2.swc.toshiba.co.jp/en/tech/design.htm 
8
使用靜態程式碼分析的時機 
9 
教育訓練 
• 協助新進同仁遵循內部程式設計規定及風格 
• 檢查新手的程式碼品質 
• 教師可以快速評量學員的學習效果 
系統平台移植 
• 平台移植很難預知會遇到什麼問題 
• 利用工具協助找出可能有問題的...
靜態程式碼分析的優點 
改善程式碼品質及程式的穩定性、安全性 
透過早期檢測, 以降低程式上線後修正錯誤的成本 
建立內部開發一致的風格及規範 
自動化工具可提供涵蓋完整程式碼的測試 
發現很少使用到的程式碼裡的缺失 
沒有系統環境或編譯器的限...
靜態程式碼分析的不足之處 
工具非100%可信,有誤報或漏報錯誤的機率 
漏報(False-negatives)產生安全假像, 且可能增加維護成本 
誤報(False-positives)產生不必要的檢查工作且延遲上線時程 
自動化工具無法檢查...
Visual Studio 2012提供的功能 
程式碼檢閱要求及回應(Code Review and Feedback) 
• 結合工作項目 
• 透過「Team Explorer」視窗發出「要求檢 
12 
閱」 
• 檢閱者透過Visua...
Visual Studio 2012提供的功能 
分析程式碼複製品(code clone detection) 
13 
• 自動分析方案中相似的程式碼區塊 
• 透過複選程式碼行以指定程式碼範本, 
讓Visual Studio尋找近似的程式...
Visual Studio 2012提供的功能 
14 
程式碼度量(code metrics) 
• 將軟體設計或規格加以量測與量化
Visual Studio 2012提供的功能 
15 
程式碼度量項目 
循環複雜度 
(Cyclomatic Complexity) 
• 程式碼分歧路徑越多,循環複雜度越高。 
• 循環複雜度太高,控制流程複雜的程式需要較多的測試,才能達...
Visual Studio 2012提供的功能 
16 
靜態程式碼分析 
在執行或部署程式碼前先發現錯誤或弱點 
大範圍的檢查 
• 從程式碼寫作風格到減少安全疑慮 
可以整合到原始碼控管與組建 
• 程式碼分析簽入原則 
• 定義不合分析的...
Visual Studio 2012提供的功能 
程式建置時一併檢查 
17 
靜態程式碼分析 
使用預設的規則集 
客製規則集 
詳細規則集說明請參考MSDN:http://msdn.microsoft.com/zh-tw/library/d...
Visual Studio 2012提供的功能 
Visual Studio 2012提供的警告(Warning)項目 
Design 設計• Follow Microsoft 開發.NET Framework設計方針的警告 
Globaliz...
Visual Studio 2012提供的功能 
初次導入,可從「最小建議規則」規則集開始導入建議 
逐步加入更多規則或規則集來找出並更正其他問題 
依專案特性來選擇適合的選項 
可使用現成的規則集來修改 
一般專案可以「Microsoft M...
Q&A 
20
Upcoming SlideShare
Loading in …5
×

Static Code Analysis 靜態程式碼分析

2,629 views

Published on

Static Code Analysis 靜態程式碼分析

Published in: Software
  • Login to see the comments

Static Code Analysis 靜態程式碼分析

  1. 1. 靜態程式碼分析簡介 Visual Studio 2012 2013/9/26 1
  2. 2. Overview  靜態程式碼分析是什麼  為何需要  靜態程式碼分析的種類  使用時機  優缺點  Visual Studio 2012所提供的功能 2
  3. 3. 靜態程式碼分析是什麼 檢測非執行期(run time)程式碼的錯誤或缺陷 3 分析並標定有問題程式碼的位置 確保程式開發風格的一致性 度量程式碼品質的指標(code metrics)
  4. 4. 為何需要做靜態程式碼分析 4 系統被掃出一堆弱點 程式上線後出現效能問題 花許多時間在討論命名跟風格的問題 花更多時間解釋一個很難懂,需要作者逐行解釋的函數 引用前輩的sample code卻出了一堆bug 好像在哪看過與這段一模一樣的程式碼 看一個函數捲了好幾頁還沒結束 總要花一堆時間教新進同仁內部的開發規範 想重構卻不知從何下手 ……
  5. 5. 為何需要做靜態程式碼分析 5 早期發現早期治療 Coding階段揪出問題,好過上線後開事件單 避免前朝遺毒發作 建立一致的coding規範 微軟開發Visual Studio 產品所得到的經驗: • Code review 過的程式碼仍有86% 的bug • 整體bug 中60% 是coding errors
  6. 6. 為何需要做靜態程式碼分析 6 品質指標:  撰寫風格一致性  複雜度  程式區塊深度  類別繼承深度  程式碼相似度  程式弱點掃描 目的:  可維護性  設計的彈性  安全  效能
  7. 7. 靜態程式碼分析的種類 靜態程式 碼分析 7 Code Review • 由不同角色的團隊成員分別 檢視 • 突破程式作者盲點 • 檢查資安漏洞及業務邏輯 • 較易理解審查規則 Automated Tools • 自動化及效率 • 擁有多種面向的檢測能力 • 完整的檢查涵蓋率 • 沒有偏見
  8. 8. 靜態程式碼分析的種類 資料來源:http://www2.swc.toshiba.co.jp/en/tech/design.htm 8
  9. 9. 使用靜態程式碼分析的時機 9 教育訓練 • 協助新進同仁遵循內部程式設計規定及風格 • 檢查新手的程式碼品質 • 教師可以快速評量學員的學習效果 系統平台移植 • 平台移植很難預知會遇到什麼問題 • 利用工具協助找出可能有問題的程式碼 風險評估 • 檢查程式外包或使用第三方開發的程式 • 檢查開放原始碼的程式庫 程式碼重構• 協助找出需要被重構的程式碼 找出程式設計缺 失 • 程式設計時期便可及早指出錯誤 • 穩定及易於維護的程式
  10. 10. 靜態程式碼分析的優點 改善程式碼品質及程式的穩定性、安全性 透過早期檢測, 以降低程式上線後修正錯誤的成本 建立內部開發一致的風格及規範 自動化工具可提供涵蓋完整程式碼的測試 發現很少使用到的程式碼裡的缺失 沒有系統環境或編譯器的限制 可產出標定錯誤的位置及清單 10
  11. 11. 靜態程式碼分析的不足之處 工具非100%可信,有誤報或漏報錯誤的機率 漏報(False-negatives)產生安全假像, 且可能增加維護成本 誤報(False-positives)產生不必要的檢查工作且延遲上線時程 自動化工具無法檢查業務邏輯和演算法的錯誤 導入已進行中的專案時,可能使預定開發週期延長 11 工作習慣及組織文化的改變 教育訓練及學習的時間成本
  12. 12. Visual Studio 2012提供的功能 程式碼檢閱要求及回應(Code Review and Feedback) • 結合工作項目 • 透過「Team Explorer」視窗發出「要求檢 12 閱」 • 檢閱者透過Visual Studio自動以程式碼檢閱 的方式開啟原始檔,閱讀內容並加入註解 • 僅限Premium和Ultimate
  13. 13. Visual Studio 2012提供的功能 分析程式碼複製品(code clone detection) 13 • 自動分析方案中相似的程式碼區塊 • 透過複選程式碼行以指定程式碼範本, 讓Visual Studio尋找近似的程式碼區塊 • 僅限Premium和Ultimate !?
  14. 14. Visual Studio 2012提供的功能 14 程式碼度量(code metrics) • 將軟體設計或規格加以量測與量化
  15. 15. Visual Studio 2012提供的功能 15 程式碼度量項目 循環複雜度 (Cyclomatic Complexity) • 程式碼分歧路徑越多,循環複雜度越高。 • 循環複雜度太高,控制流程複雜的程式需要較多的測試,才能達到較高的程式碼涵蓋 率 繼承深度• 繼承的深度越深,代表父類別越無法彈性的修改 類別耦合程度 (Class Coupling) • 透過參數、區域變數、傳回型別、方法呼叫、泛型、基底型別、介面實作、外部類別 上定義的欄位、屬性修飾…等,測量類別的耦合程度 • 耦合程度高表示設計不易重複使用,因這種設計包含對其他類別的許多相依性 • 良好的軟體設計應具備高內聚(Cohesion)且低耦合(Coupling)的類別和方法 程式碼行數 • 數目以IL 程式碼為依據,因此不是原始程式碼檔案中精確的行數。 • 若數目非常大,表示類別/方法嘗試執行的工作可能過多,應分割工作。也表示該類別 /方法可能難以維護。 可維護性指數 (Maintainability Index) • 由SEI提出的綜合性的指標,參數由前面幾項指標算出可維護性的指數有多高 • 值介於0 到100 之間,愈高愈佳 • 微軟建議:門檻值20~100為高維護性,綠燈。10~20為中維護性,黃燈。0~10為 低維護性,紅燈。 • 計算公式:171 - 5.2 * log2(Halstead Volume) - 0.23 * (Cyclomatic Complexity) - 16.2 * log2(Lines of Code)
  16. 16. Visual Studio 2012提供的功能 16 靜態程式碼分析 在執行或部署程式碼前先發現錯誤或弱點 大範圍的檢查 • 從程式碼寫作風格到減少安全疑慮 可以整合到原始碼控管與組建 • 程式碼分析簽入原則 • 定義不合分析的結果為警告還是錯誤 使用預先設計好的規範 可使用Rule Set editor 客製化 • 要涵蓋哪些檢測 • 要回報成錯誤還是警告 • 建立客製化的規則集 例外情況可以隱藏警告, 規避掃描及嵌入原則 • 使用功能表項目隱藏警告 • 使用SuppressMessage Attribute隱藏警告
  17. 17. Visual Studio 2012提供的功能 程式建置時一併檢查 17 靜態程式碼分析 使用預設的規則集 客製規則集 詳細規則集說明請參考MSDN:http://msdn.microsoft.com/zh-tw/library/dd264925.aspx
  18. 18. Visual Studio 2012提供的功能 Visual Studio 2012提供的警告(Warning)項目 Design 設計• Follow Microsoft 開發.NET Framework設計方針的警告 Globalization 全球化•全球化設計的警告 Interoperability互通性•與COM元件用戶端互動的警告 Maintainability 維護性•程式庫和應用程式的可維護性警告 Mobility 行動力•針對著重節電的程式設計警告 Naming 命名•遵守.NET Framework 設計方針之命名慣例的警告 Performance 效能•著重高效能函式庫和應用程式的警告 Portability 可攜性•跨平台設計的警告 Reliability可靠性•函式庫和應用程式可靠性警告,如正確的記憶體和執行緒用法 Security 安全性•比Design所列項目更安全之函式庫及應用程式的警告 Usage 用法•妥善使用.NET Framework所提供功能的警告 Native 原生•針對撰寫C/C++等原生程式設計的警告 詳細說明請參考MSDN:http://msdn.microsoft.com/zh-tw/library/ee1hzekz.aspx 18
  19. 19. Visual Studio 2012提供的功能 初次導入,可從「最小建議規則」規則集開始導入建議 逐步加入更多規則或規則集來找出並更正其他問題 依專案特性來選擇適合的選項 可使用現成的規則集來修改 一般專案可以「Microsoft Managed建議規則」為主 Microsoft建議:為專案建立的任何自訂規則集中都包含這個規則集 由專案的架構師主持規則集討論及制定 19
  20. 20. Q&A 20

×