Submit Search
Upload
Static Code Analysis 靜態程式碼分析
•
4 likes
•
2,859 views
Bill Lin
Follow
Static Code Analysis 靜態程式碼分析
Read less
Read more
Software
Report
Share
Report
Share
1 of 20
Download Now
Download to read offline
Recommended
Reverse Engineering Dojo: Enhancing Assembly Reading Skills
Reverse Engineering Dojo: Enhancing Assembly Reading Skills
Asuka Nakajima
台科逆向簡報
台科逆向簡報
耀德 蔡
SFO15-202: Towards Multi-Threaded Tiny Code Generator (TCG) in QEMU
SFO15-202: Towards Multi-Threaded Tiny Code Generator (TCG) in QEMU
Linaro
逆向工程入門
逆向工程入門
耀德 蔡
テスト駆動開発の進化
テスト駆動開発の進化
Yukei Wachi
Web ブラウザで DRM
Web ブラウザで DRM
Yusuke Goto
最近の単体テスト
最近の単体テスト
Ken Morishita
Performance Wins with BPF: Getting Started
Performance Wins with BPF: Getting Started
Brendan Gregg
More Related Content
What's hot
Git 實務圖解
Git 實務圖解
Pokai Chang
Rouault imbert alpc_rpc_pacsec
Rouault imbert alpc_rpc_pacsec
PacSecJP
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
MITSUNARI Shigeo
TDOH Conf-APP檢測之經驗分享
TDOH Conf-APP檢測之經驗分享
Tzu-Ting(Fei) Lin
こわくない Git
こわくない Git
Kota Saito
NTUSTxTDOH - Pwn基礎 2015/12/27
NTUSTxTDOH - Pwn基礎 2015/12/27
Sheng-Hao Ma
あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿
MITSUNARI Shigeo
ROP 輕鬆談
ROP 輕鬆談
hackstuff
YOW2021 Computing Performance
YOW2021 Computing Performance
Brendan Gregg
BPF: Tracing and more
BPF: Tracing and more
Brendan Gregg
Linuxカーネルを読んで改めて知るプロセスとスレッドの違い
Linuxカーネルを読んで改めて知るプロセスとスレッドの違い
Retrieva inc.
nfcpy 0.10.0 でハマった話
nfcpy 0.10.0 でハマった話
Masaki Yamamoto
Performance Wins with eBPF: Getting Started (2021)
Performance Wins with eBPF: Getting Started (2021)
Brendan Gregg
わたしを支える技術
わたしを支える技術
yoku0825
超簡単!FirefoxブラウザをWindows Server 2019にインストール!
超簡単!FirefoxブラウザをWindows Server 2019にインストール!
Shin Tanigawa
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
Wen-Tien Chang
Linux Performance Analysis and Tools
Linux Performance Analysis and Tools
Brendan Gregg
Git超入門_座学編.pdf
Git超入門_座学編.pdf
憲昭 村田
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
ichirin2501
コンピュータフォレンジックにちょっとだけ触れてみる
コンピュータフォレンジックにちょっとだけ触れてみる
infinite_loop
What's hot
(20)
Git 實務圖解
Git 實務圖解
Rouault imbert alpc_rpc_pacsec
Rouault imbert alpc_rpc_pacsec
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
TDOH Conf-APP檢測之經驗分享
TDOH Conf-APP檢測之經驗分享
こわくない Git
こわくない Git
NTUSTxTDOH - Pwn基礎 2015/12/27
NTUSTxTDOH - Pwn基礎 2015/12/27
あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿
ROP 輕鬆談
ROP 輕鬆談
YOW2021 Computing Performance
YOW2021 Computing Performance
BPF: Tracing and more
BPF: Tracing and more
Linuxカーネルを読んで改めて知るプロセスとスレッドの違い
Linuxカーネルを読んで改めて知るプロセスとスレッドの違い
nfcpy 0.10.0 でハマった話
nfcpy 0.10.0 でハマった話
Performance Wins with eBPF: Getting Started (2021)
Performance Wins with eBPF: Getting Started (2021)
わたしを支える技術
わたしを支える技術
超簡単!FirefoxブラウザをWindows Server 2019にインストール!
超簡単!FirefoxブラウザをWindows Server 2019にインストール!
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
Linux Performance Analysis and Tools
Linux Performance Analysis and Tools
Git超入門_座学編.pdf
Git超入門_座学編.pdf
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
コンピュータフォレンジックにちょっとだけ触れてみる
コンピュータフォレンジックにちょっとだけ触れてみる
Similar to Static Code Analysis 靜態程式碼分析
有效的单元测试.ppt
有效的单元测试.ppt
test499702
Web testing automation
Web testing automation
kuozui
软件工程 第七章
软件工程 第七章
浒 刘
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第四天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第四天
Gelis Wu
常用JAVA代码质量静态检查工具
常用JAVA代码质量静态检查工具
dearhwj
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby
建興 王
Appium手机自动化测试 testerhome_bqcon版本
Appium手机自动化测试 testerhome_bqcon版本
延胜 黄
TDD (Test-driven development, 測試驅動開發) 基本教學
TDD (Test-driven development, 測試驅動開發) 基本教學
潘 冠辰
I os与android多平台开发心得
I os与android多平台开发心得
drewz lin
Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016
Kirk Chen
Android gradle 从入门到gg 0
Android gradle 从入门到gg 0
Jun Liu
Java DSL与动态代码生成技术的应用 (上集:DSL部分)
Java DSL与动态代码生成技术的应用 (上集:DSL部分)
悦 温
Android工作坊
Android工作坊
國立政治大學 數位內容碩士學位學程
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
Rick Hwang
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
twMVC
Xpp
Xpp
drewz lin
Flutter 踩雷心得
Flutter 踩雷心得
Weizhong Yang
twMVC#12 | 如何在實務上使用 TDD 來開發
twMVC#12 | 如何在實務上使用 TDD 來開發
twMVC
合久必分,分久必合
合久必分,分久必合
Qiangning Hong
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Gelis Wu
Similar to Static Code Analysis 靜態程式碼分析
(20)
有效的单元测试.ppt
有效的单元测试.ppt
Web testing automation
Web testing automation
软件工程 第七章
软件工程 第七章
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第四天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第四天
常用JAVA代码质量静态检查工具
常用JAVA代码质量静态检查工具
從 Java programmer 的觀點看 ruby
從 Java programmer 的觀點看 ruby
Appium手机自动化测试 testerhome_bqcon版本
Appium手机自动化测试 testerhome_bqcon版本
TDD (Test-driven development, 測試驅動開發) 基本教學
TDD (Test-driven development, 測試驅動開發) 基本教學
I os与android多平台开发心得
I os与android多平台开发心得
Open source的devops工具箱 公開版@coscup2016
Open source的devops工具箱 公開版@coscup2016
Android gradle 从入门到gg 0
Android gradle 从入门到gg 0
Java DSL与动态代码生成技术的应用 (上集:DSL部分)
Java DSL与动态代码生成技术的应用 (上集:DSL部分)
Android工作坊
Android工作坊
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
從理想、到現實的距離,開啟品味軟體測試之路 - 台灣軟體工程協會 (20220813)
如何在實務上使用TDD來開發 twmvc#12
如何在實務上使用TDD來開發 twmvc#12
Xpp
Xpp
Flutter 踩雷心得
Flutter 踩雷心得
twMVC#12 | 如何在實務上使用 TDD 來開發
twMVC#12 | 如何在實務上使用 TDD 來開發
合久必分,分久必合
合久必分,分久必合
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
Visual studio 2012 與 asp.net 4.5 (新功能與開發介紹) 第一天
More from Bill Lin
Dependency injection in asp.net core
Dependency injection in asp.net core
Bill Lin
Introduction the Repository Pattern
Introduction the Repository Pattern
Bill Lin
T-SQL: Pivot, Unpivot, Except, Intersect
T-SQL: Pivot, Unpivot, Except, Intersect
Bill Lin
Responsive Web Design 響應式網頁設計
Responsive Web Design 響應式網頁設計
Bill Lin
Internet Explorer相容性設計考量
Internet Explorer相容性設計考量
Bill Lin
Design pattern strategy pattern 策略模式
Design pattern strategy pattern 策略模式
Bill Lin
More from Bill Lin
(6)
Dependency injection in asp.net core
Dependency injection in asp.net core
Introduction the Repository Pattern
Introduction the Repository Pattern
T-SQL: Pivot, Unpivot, Except, Intersect
T-SQL: Pivot, Unpivot, Except, Intersect
Responsive Web Design 響應式網頁設計
Responsive Web Design 響應式網頁設計
Internet Explorer相容性設計考量
Internet Explorer相容性設計考量
Design pattern strategy pattern 策略模式
Design pattern strategy pattern 策略模式
Static Code Analysis 靜態程式碼分析
1.
靜態程式碼分析簡介 Visual Studio
2012 2013/9/26 1
2.
Overview 靜態程式碼分析是什麼
為何需要 靜態程式碼分析的種類 使用時機 優缺點 Visual Studio 2012所提供的功能 2
3.
靜態程式碼分析是什麼 檢測非執行期(run time)程式碼的錯誤或缺陷
3 分析並標定有問題程式碼的位置 確保程式開發風格的一致性 度量程式碼品質的指標(code metrics)
4.
為何需要做靜態程式碼分析 4 系統被掃出一堆弱點
程式上線後出現效能問題 花許多時間在討論命名跟風格的問題 花更多時間解釋一個很難懂,需要作者逐行解釋的函數 引用前輩的sample code卻出了一堆bug 好像在哪看過與這段一模一樣的程式碼 看一個函數捲了好幾頁還沒結束 總要花一堆時間教新進同仁內部的開發規範 想重構卻不知從何下手 ……
5.
為何需要做靜態程式碼分析 5 早期發現早期治療
Coding階段揪出問題,好過上線後開事件單 避免前朝遺毒發作 建立一致的coding規範 微軟開發Visual Studio 產品所得到的經驗: • Code review 過的程式碼仍有86% 的bug • 整體bug 中60% 是coding errors
6.
為何需要做靜態程式碼分析 6 品質指標:
撰寫風格一致性 複雜度 程式區塊深度 類別繼承深度 程式碼相似度 程式弱點掃描 目的: 可維護性 設計的彈性 安全 效能
7.
靜態程式碼分析的種類 靜態程式 碼分析
7 Code Review • 由不同角色的團隊成員分別 檢視 • 突破程式作者盲點 • 檢查資安漏洞及業務邏輯 • 較易理解審查規則 Automated Tools • 自動化及效率 • 擁有多種面向的檢測能力 • 完整的檢查涵蓋率 • 沒有偏見
8.
靜態程式碼分析的種類 資料來源:http://www2.swc.toshiba.co.jp/en/tech/design.htm 8
9.
使用靜態程式碼分析的時機 9 教育訓練
• 協助新進同仁遵循內部程式設計規定及風格 • 檢查新手的程式碼品質 • 教師可以快速評量學員的學習效果 系統平台移植 • 平台移植很難預知會遇到什麼問題 • 利用工具協助找出可能有問題的程式碼 風險評估 • 檢查程式外包或使用第三方開發的程式 • 檢查開放原始碼的程式庫 程式碼重構• 協助找出需要被重構的程式碼 找出程式設計缺 失 • 程式設計時期便可及早指出錯誤 • 穩定及易於維護的程式
10.
靜態程式碼分析的優點 改善程式碼品質及程式的穩定性、安全性 透過早期檢測,
以降低程式上線後修正錯誤的成本 建立內部開發一致的風格及規範 自動化工具可提供涵蓋完整程式碼的測試 發現很少使用到的程式碼裡的缺失 沒有系統環境或編譯器的限制 可產出標定錯誤的位置及清單 10
11.
靜態程式碼分析的不足之處 工具非100%可信,有誤報或漏報錯誤的機率 漏報(False-negatives)產生安全假像,
且可能增加維護成本 誤報(False-positives)產生不必要的檢查工作且延遲上線時程 自動化工具無法檢查業務邏輯和演算法的錯誤 導入已進行中的專案時,可能使預定開發週期延長 11 工作習慣及組織文化的改變 教育訓練及學習的時間成本
12.
Visual Studio 2012提供的功能
程式碼檢閱要求及回應(Code Review and Feedback) • 結合工作項目 • 透過「Team Explorer」視窗發出「要求檢 12 閱」 • 檢閱者透過Visual Studio自動以程式碼檢閱 的方式開啟原始檔,閱讀內容並加入註解 • 僅限Premium和Ultimate
13.
Visual Studio 2012提供的功能
分析程式碼複製品(code clone detection) 13 • 自動分析方案中相似的程式碼區塊 • 透過複選程式碼行以指定程式碼範本, 讓Visual Studio尋找近似的程式碼區塊 • 僅限Premium和Ultimate !?
14.
Visual Studio 2012提供的功能
14 程式碼度量(code metrics) • 將軟體設計或規格加以量測與量化
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.
Visual Studio 2012提供的功能
16 靜態程式碼分析 在執行或部署程式碼前先發現錯誤或弱點 大範圍的檢查 • 從程式碼寫作風格到減少安全疑慮 可以整合到原始碼控管與組建 • 程式碼分析簽入原則 • 定義不合分析的結果為警告還是錯誤 使用預先設計好的規範 可使用Rule Set editor 客製化 • 要涵蓋哪些檢測 • 要回報成錯誤還是警告 • 建立客製化的規則集 例外情況可以隱藏警告, 規避掃描及嵌入原則 • 使用功能表項目隱藏警告 • 使用SuppressMessage Attribute隱藏警告
17.
Visual Studio 2012提供的功能
程式建置時一併檢查 17 靜態程式碼分析 使用預設的規則集 客製規則集 詳細規則集說明請參考MSDN:http://msdn.microsoft.com/zh-tw/library/dd264925.aspx
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.
Visual Studio 2012提供的功能
初次導入,可從「最小建議規則」規則集開始導入建議 逐步加入更多規則或規則集來找出並更正其他問題 依專案特性來選擇適合的選項 可使用現成的規則集來修改 一般專案可以「Microsoft Managed建議規則」為主 Microsoft建議:為專案建立的任何自訂規則集中都包含這個規則集 由專案的架構師主持規則集討論及制定 19
20.
Q&A 20
Download Now