Showing posts with label 靜態檢查工具. Show all posts
Showing posts with label 靜態檢查工具. Show all posts

Sunday, February 27, 2022

[靜態檢查工具] cppcheck

Cppcheck是一種用於C和C ++ 程式語言的靜態代碼分析工具。 它是一個多功能工具,可以檢查非標準代碼


首先必須安裝cppcheck

sudo apt-get install cppcheck

cppcheck xxx.c --enable=all

cppcheck -DA xxx.c --enable=all

變數宣告

1
2
3
4
5
6
7
8
int a;
int b;
int c = 1;
int d = 2;

b++;
c++;
d = 4;

(style) Variable 'd' is reassigned a value before the old one has been used.

(style) Unused variable: a

(style) Variable 'b' is not assigned a value.

(style) Variable 'd' is assigned a value that is never used.

(error) Uninitialized variable: b

記憶體管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int *ptra;
int *ptrb;
int *ptrc;
int *ptrd = NULL;

ptra = (int*)malloc(100);
ptrb = (int*)malloc(100);

if (NULL == ptra) {
return *ptrd;
}

*(ptrc + 1) = 5;

free(ptrb);

*(ptrb + 2) = 6;

(error) Null pointer dereference: ptrd

(style) Variable 'ptrc' is not assigned a value.

(error) Memory leak: ptrb (error) Memory leak: ptra

(error) Dereferencing 'ptrb' after it is deallocated / released

(error) Null pointer dereference

(error) Uninitialized variable: ptrc

Buffer邊界

1
2
3
4
5
int i;
int a[10];

for (i = 0; i <= 10; i++)
a[i] = i;

(error) Array 'a[10]' accessed at index 10, which is out of bounds.

目前市面上的靜態程式檢查工具眾多,例如splint, coverity, cppcheck等等,每個工具都有其擅長的部分
就使用過splint和cppcheck的經驗來看例如對於不需要使用或不需要給初始值的狀況cppcheck > splint,但對於buffer overwrite的檢查splint > cppchek,因此若想讓程式更加完善,可以使用多些檢查工具達成目標

Sunday, January 2, 2022

[靜態檢查工具] index

 1、KLOCWORK:

適用語言:C, C++, JAVA

是否開源:否,

是否需要編譯:是

作用:程式碼靜態檢查工具。用於高效檢測軟體缺陷和安全隱患,提供優秀的靜態原始碼分析解決方案。軟體號稱是業界領導者,能夠快速、準確分析大規模(幾百萬,甚至幾千萬行)、高複雜度程式碼的工具。能夠自動化檢測和解決C/C++、Java等原始碼中的嚴重、安全和規範類的缺陷。通過對構建環境、原始碼和開發過程給出一個完整的分析,最終實現高質量軟體。


2、COVERITY:

適用語言:C, C++, JAVA,PYTHON,java scrip

是否開源:否,

是否需要編譯:是

作用:用於高效檢測軟體缺陷和安全隱患,提供優秀的靜態原始碼分析解決方案。軟體號稱是業界領導者,是第一個能夠快速、準確分析大規模(幾百萬,甚至幾千萬行)、高複雜度程式碼的工具。內部採用Prevent SQS(軟體質量系統)架構方法,能夠自動化檢測和解決C/C++、Java等原始碼中的嚴重缺陷。通過對構建環境、原始碼和開發過程給出一個完整的分析,最終實現高質量軟體。

Reference:

https://www.itread01.com/content/1546712855.html

3、FORTIFY:

適用語言:C, C++, JAVA,PYTHON,java scrip

 是否開源:否,

是否需要編譯:是

作用:程式碼安全測試工具。它通過內建的五大主要分析引擎:資料流、語義、結構、控制流、配置流等對應用軟體的原始碼進行靜態的分析,分析的過程中與它特有的軟體安全漏洞規則集進行全面地匹配、查詢,從而將原始碼中存在的安全漏洞掃描出來,並給予整理報告。

4、CPPTEST:


適用語言:C, C++

 是否開源:否,

是否需要編譯:是

作用:Parasoft ®  C/C++test  TM –針對 C/C++ 開發的綜合性程式碼質量保障工具,使用C++test經時間驗證的重要最佳實踐—例如靜態分析,全面的程式碼審查,執行時錯誤檢測,整合覆蓋率分析的單元測試和元件測試—能夠在開發週期的開始階段,自動地在開發者的桌面上完成。能夠通過命令列模式自動化地執行迴歸和持續整合測試,為監測和分析質量趨勢提供資料。

5、TOX

適用語言:PYTHON

是否開源:是

是否需要編譯:否

 作用:TOX是一個通用的virtualenv管理和測試命令列工具,TOX的目標是提供最先進的自動化打包,測試和釋出的Python軟體的工具,可以用於控制檯或者基礎到你的持續構建平臺。

支援功能:

                 1)、檢查你的包被正確地安裝不同版本的Python和解析器

                 2)、在每個環境中執行你的測試,配置測試工具的選擇

                 3)、作為一個持續整合伺服器的前端,大大降低了測試工作量。


6、Flake8

適用語言:PYTHON

是否開源:是

是否需要編譯:否

作用:Flake8是Python程式碼規範利器,他封裝了三個工具:1)PyFlakes:靜態檢查Python程式碼邏輯錯誤的工具;2)pep8: 靜態檢查PEP 8編碼風格的工具;3)Ned Batchelder’s McCabe script:靜態分析Python程式碼複雜度的工具。flake8綜合了上述三個工具的功能,還提供了擴充套件開發介面。

主要特徵:

1)包含這行檔案將被忽略:#flake8: noqa

2)結尾包含#noqa註釋的行將不釋出告警

3)GIT和Mercurial鉤子

4)McCabe複雜度檢查器

5)可以通過flake8.extension入口點擴充套件

Flake8的下載地址:https://pypi.python.org/pypi/flake8

7、GO LINT:

適用語言:GO

是否開源:是

是否需要編譯:否

作用:編碼規範類檢查

8、GO VET:

適用語言:GO

是否開源:是

是否需要編譯:否

作用:檢查原始碼並報告可疑結構

9、SONAR:

適用語言:C, C++, JAVA,PYTHON,java scrip

是否開源:是

是否需要編譯:否

作用:Sonar (SonarQube)是一個開源平臺,用於管理原始碼的質量。Sonar 不只是一個質量資料報告工具,更是程式碼質量管理平臺。支援的語言包括:Java、PHP、C#、C、Cobol、PL/SQL、Flex 等。

開源中國程式碼質量管理系統 -> http://sonar.oschina.net/

主要特點:

 •程式碼覆蓋:通過單元測試,將會顯示哪行程式碼被選中

 •改善編碼規則

 •搜尋編碼規則:按照名字,外掛,啟用級別和類別進行查詢

 •專案搜尋:按照專案的名字進行查詢

 •對比資料:比較同一張表中的任何測量的趨勢

10、Scalastyle:

  適用語言:Scala

是否開源:是

是否需要編譯:否

作用:Scalastyle是個簡單易用的code style檢測工具,非常輕巧,有助於團隊風格一致。

1)目前有63條規則,主要集中在程式碼格式,如檔案行數、方法行數是否過多,是否指定了返回值,圈複雜度是否高於閾值等

2)有些規則和使用習慣不一致,如檔案首必須有license說明,if後必須有花括號等;

3)使用很簡單,一個配置,一行命令就可以,參見http://www.scalastyle.org/sbt.html

4)可以和CI結合

 建議:因為側重格式方面,因此可以有條件使用,即關閉若干與習慣嚴重不符的規則,配合另外的能夠做安全檢查的工具;

n8n index

 【n8n免費本地端部署】Windows版|程式安裝x指令大補帖  【一鍵安裝 n8n】圖文教學,獲得無限額度自動化工具&限時免費升級企業版功能