久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

ABAP里的Code Inspector怎么使用

158次閱讀
沒有評論

共計 3940 個字符,預計需要花費 10 分鐘才能閱讀完成。

本篇內容主要講解“ABAP 里的 Code Inspector 怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“ABAP 里的 Code Inspector 怎么使用”吧!

我們可以在 ABAP Code Inspector 的檢查變體 (Check Variant) 里,根據自己的需要靈活地選擇對 ABAP 代碼進行哪種類型的掃描動作。

下圖是一個例子,意思是對 ABAP 代碼中所有對數據庫表產生了讀寫訪問之處,進行 Table
Names from SELECT
Statements 的掃描。該掃描的具體行為,可以點擊藍底白色的感嘆號圖片,以獲得幫助文檔。下圖這個例子里勾取的選項,意思是檢查被訪問的數據庫表,在 SE11 的 ABAP 字段里的 Technical
Settings 是否正確被維護了,比如表的緩存類型是否設置正確。

Performance Check

Select-Statement can be transformed. X% of fields used – 檢查內表字段的使用率

假設我們使用 SELECT * 從一張表里讀取數據到 ABAP 內表,然后在后續代碼中只使用到了 A 個字段,而讀取的表在 SE11 里總共有 B 個字段,那么 A 除以 B 的結果越小,說明讀出來的內表字段使用率越低。

也就是說,你或許該考慮只 SELECT 真正需要的字段來替代 SELECT *? 只需要在上圖設置里維護一個最低閥值,當 Code Inspector 掃描代碼時,一旦檢測到使用率低于維護的閥值就會報錯。上圖的 20 意思是 20%.

Search DB Operations in loops across modularization units

Jerry 2007 年剛加入 SAP 開始學習 ABAP 編程時,前輩們就告誡過我,不要在 LOOP 里使用 SELECT 語句,這樣會極大影響代碼的性能。

上圖是通過 Code Inspector 掃描出來的一個例子,在雙重 LOOP 循環里使用 SELECT 讀取數據庫表 CRMD_DPP_HI_BLCK.

Nested Loops – 嵌套循環的檢測

盡管當應用代碼里嵌套循環的循環次數不大時,對代碼運行的絕對時間沒有太大影響——然而編寫具有至少指數級時間復雜度的代碼,在任何上下文里都不是一個好的編程習慣。

這個設置能夠幫助我們快速找到所有的嵌套循環。

Copy current table row for LOOP AT

找出所有 LOOP AT … INTO 之處,理論上這些地方都可以用 LOOP AT … REFERENCE INTO 或者 ASSIGNING fs 替換。當內表的行結構體字段很多時,使用后兩種方式可以獲得一些性能的提升。

Low-Perform. Parameter Transfers – 檢測所有參數傳遞使用 Pass by Value 之處

Jerry 關注了很多技術公眾號,發現參數傳遞的 傳引用 和 傳值 這兩種方式的辨析,至今仍然是很多互聯網公司的面試題之一。

這個選項可以讓您指定針對何種類型的參數進行參數傳遞方式的掃描:

在 ABAP 里理論上采用引用傳遞的方式進行參數傳遞,性能上總是優于值傳遞,具體性能會提高多少,依賴于具體傳遞的參數類型,無法一概而論。

Security Check – Dynamic and Client-Specific accesses in SELECT – 動態 SQL 語句的檢測

符合下列范式的動態 SQL 會被掃描出來:

Dynamic table accesses: SELECT * FROM (dbtab) WHERE …
Dynamic WHERE conditions: SELECT * FROM dbtab WHERE (where_cond)
Accesses to certain tables: SELECT * FROM dbtab WHERE …
Client-specific accesses: SELECT * FROM dbtab FROM WA … CLIENT SPECIFIED …

這個選項并不是禁止您使用動態 SQL 語句——事實上 SAP 應用的持久層里有大量的動態 SQL 語句的使用例子——而是提醒您別忘記了進行 SQL 注入的預防措施:一旦掃描出來,如果有用戶輸入參與了這些動態 SQL 語句的拼接,那就別忘記看看上下文有沒有使用 CL_ABAP_DYN_PRG 對用戶輸入進行處理。

Search for APPEND and INSERT … INDEX in SORTED Tables

檢測所有在有序內表上施加了 APPEND 操作的地方。有了這個掃描選項,能夠幫助您避免下圖第 13 行這種類型的運行時錯誤。

Check of SY-SUBRC Handing – ABAP 關鍵字調用后系統變量 sy-subrc 的檢測

Jerry 至今仍清楚地記得,十多年前上研究生課程《UNIX 環境高級編程》時,老師不斷地強調在進行系統調用之后一定要檢查返回值并進行相應的錯誤處理。在 Jerry 看來,錯誤檢測和處理是每一位編程人員都應該具備的基本素養。

對應到 ABAP 里,就意味著每次調用 ABAP 的關鍵字完成某項操作后,都必須檢查 sy-subrc 的值來確認這次操作是否成功。

ABAP 里的 Code Inspector 怎么使用

當然也可以根據項目的實際情況,告訴 Code Inspector 只檢查某些類型的 ABAP 關鍵字調用。比如上圖意思就是只檢查 READ TABLE 關鍵字調用后是否進行了 sy-subrc 的檢查。

Missing table content check before calling SELECT … FOR ALL ENTRIES IN

在使用 FOR ALL ENTRIES IN itab 之前,必須先檢查內表 itab 是否為空。這個選項能掃描出沒有按照這個規范來編寫的代碼。

Programming Conventions – Naming conventions

在這個界面里為 ABAP 里不同類型的變量設置好您團隊里達成一致的命名規范,然后 Code Inspector 就能把代碼里所有違反了這些命名規范的地方掃描出來。

ABAP 里的 Code Inspector 怎么使用

ABAP 里的 Code Inspector 怎么使用

Metrics and Statistics

這個檢查類別下面的設置都是一些很有意思的統計信息。

ABAP 里的 Code Inspector 怎么使用

還是舉例說明。下圖紅色區域的設置,意思是如果一個類的方法內的可執行語句行數超過 150 行,Code Inspector 就報一條警告消息。這是為了避免大家寫出一個過于冗長的方法。

而藍色區域的設置是如果每 100 行可執行代碼的對應注釋量小于 10 行,就報一條警告消息。這些閥值可以根據實際情況自行修改或關閉。

ABAP 里的 Code Inspector 怎么使用

FAN-OUT Structural Metrics – 統計一個方法的扇出值

方法的扇入值和扇出值在模塊化編程的上下文會經常被提及,這對概念不是編程界首創的,而是源自半導體行業里的邏輯電路設計:

ABAP 里的 Code Inspector 怎么使用

邏輯門的扇出系數定義了該門能夠驅動的數字信號輸入的最大量,而一個代碼模塊的扇出值則代表了其直屬下層的模塊個數。

這個選項能夠統計您方法的扇出系數。扇出系數太小,意味著該方法基本沒有調用其他下層的函數,這有兩種可能:

該方法的邏輯本身非常簡單,只有兩三行代碼,比如類的 setter/getter 方法;

這個方法的模塊化沒有做好,存在優化的空間,比如某些直接寫在方法內的語句,可以提煉成下層函數并在方法內調用。

Comment Language Metrics

這個選項可以統計代碼中出現的德文注釋的函數。

ABAP 里的 Code Inspector 怎么使用

Jerry 不太明白該選項有什么用處,給非德國 ABAP 開發人員吐槽用的么?

ABAP 里的 Code Inspector 怎么使用

OO Size Metrics

這個選項也是為了防止您不經意間就創造出怪獸級的類 (monster class) 而生的:一旦您關注的類的屬性超過設置的閥值,比如類的成員,類的公 / 私有方法等關注點超過選項里設置的值時,Code Inspector 就會報警。

ABAP 里的 Code Inspector 怎么使用

Program Complexity Test – cyclomatic complexity – 代碼環復雜度 (圈復雜度) 的測試利器

這又是一個能幫助您寫出 Clean ABAP code 的強大工具。

什么是代碼的環復雜度?

根據維基百科的定義,我們把一段代碼的執行流畫成一張有向無環圖,然后環復雜度可以通過下面的公式計算出來:

https://en.wikipedia.org/wiki/Cyclomatic_complexity

環復雜度 = 圖的邊數 – 圖的節點數 + 2

ABAP 里的 Code Inspector 怎么使用

這其實就是我們研究生專業課《圖論》里學的歐拉定理。

看下面這個例子:

ABAP 里的 Code Inspector 怎么使用

上面這 8 行 ABAP 代碼,環復雜度為 3,怎么計算出來的?

先把其對應的有向無環圖畫出來:

ABAP 里的 Code Inspector 怎么使用

這張圖的邊數為 3,即圖中黑色,紅色和綠色三條粗線。
這張圖的頂點數為 2,如圖中兩個菱形的藍色圖例所示。

最后環復雜度為 3 – 2 + 2 = 3.

統計表明,代碼的高環復雜度和高故障率之間存在很強的正相關性,這不難理解,代碼的環復雜度越高,意味著里面嵌套的 IF-ELSE,SWITCH 等邏輯越多,無論是代碼原來的開發人員,還是后來接手的維護人員,讀起來都會覺得頭昏腦脹。

因此大家可以多用 ABAP Code Inspector 的這個掃描選項,隨時監控您代碼的環復雜度。

ABAP 里的 Code Inspector 怎么使用

Search DB Operations

把您關注的在代碼中出現的 SQL 操作關鍵字全部羅列出來。

ABAP 里的 Code Inspector 怎么使用

Search ABAP Statement Patterns

這個選項也很有用,能根據您指定的正則表達式掃描 ABAP 代碼。

ABAP 里的 Code Inspector 怎么使用

例如,您希望找出代碼里所有出現了 READ TABLE XXX WITH KEY X = X 的地方,只需要在上圖的輸入框里填入對應的正則表達式,即用 * 代表任意字符串:
READ TABLE * WITH KEY * = *

然后 ABAP Code Inspector 就會按照我們期望的行為去掃描代碼:

ABAP 里的 Code Inspector 怎么使用

ABAP 報表 RS_ABAP_SOURCE_SCAN 也能實現完全一致的功能:

ABAP 里的 Code Inspector 怎么使用

到此,相信大家對“ABAP 里的 Code Inspector 怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計3940字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 玉溪市| 南部县| 延安市| 土默特左旗| 亚东县| 津市市| 房产| 柳州市| 八宿县| 波密县| 鲁甸县| 英山县| 延寿县| 仁布县| 龙井市| 抚远县| 喀喇| 依兰县| 延川县| 衡阳县| 九龙县| 苗栗县| 厦门市| 浠水县| 南丹县| 西华县| 宜城市| 广饶县| 志丹县| 潼关县| 通渭县| 佛山市| 昌图县| 淮南市| 三台县| 色达县| 宜都市| 宝清县| 康平县| 封开县| 姜堰市|