本文回應三個常見問題:是否有工具可以掃描 4GL 程式碼的漏洞?Genero 是否有 SonarQube 外掛?gslint 是什麼?
從 grep 到靜態分析工具
作者在加入 Four Js 之前,就曾使用 grep 模式比對來實作自動化的程式碼品質檢查。例如,用以下指令找出不當使用 ERROR 的程式碼:
grep -ic " ERROR " *.4gl | grep -v ":0"
然而,業界已逐漸轉向更完整的第三方靜態分析解決方案,例如 SonarSource 開發的 SonarQube。
SonarQube 與 Genero
SonarQube 是一款支援 29 種程式語言的靜態程式碼分析工具。目前尚無專為 Genero 開發的 SonarQube 外掛,但若有商業需求,可以透過客戶或支援管道聯繫 Four Js 評估開發可行性。
Genero 的解決方案:gslint
Four Js 在 Genero 3.20 版本中推出了 gslint,這是受 SonarLint 功能啟發所開發的內建程式碼品質工具。gslint 位於 Genero Studio 安裝目錄的 tools/gslint 中,並在建置過程中自動執行。
gslint 的運作原理
gslint 使用 fglcomp -Tx 指令產生抽象語法樹(AST,Abstract Syntax Tree),這是程式碼結構的 XML 表示形式。接著透過遍歷這個語法樹,對程式碼節點套用驗證規則。
範例:DECIMAL 精度規則
gslint 可以強制要求 DECIMAL 型別的變數必須明確指定精度。例如:
- 正確寫法:
DECIMAL(12,0) - 不符規則:
DECIMAL(12)(缺少小數位數參數)
gslint 函式會檢查 AST 中的 precScale 節點是否包含兩個 IntegerConst token,藉此驗證精度是否完整定義。
靜態分析工具的限制
作者強調,自動化工具無法偵測所有漏洞。某些不安全的寫法組合需要人工審查才能發現,例如:
RUN xEXECUTE IMMEDIATE xCALL ui.Interface.frontCall("standard","execute",[x],[result])DISPLAY x TO fieldnameDECLARE c CURSOR FROM x
正如文中所說:「沒有任何工具能自動找出這些不安全寫法的所有組合。」因此,手動程式碼審查與良好的開發實踐,仍然是保障程式安全的根本。
重點摘要
- 可使用 grep 做基本的程式碼品質檢查,但功能有限。
- SonarQube 目前尚無 Genero 外掛,如有需求可聯繫 Four Js。
- Genero 3.20 起內建 gslint,透過 AST 分析執行程式碼品質規則。
- 靜態分析工具是輔助手段,無法取代人工程式碼審查。
原文:https://4js.com/ask-reuben/ig-141/
· 有任何 Genero 技術問題或翻譯疑問,歡迎來信
support@t100.app