真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

ABAP里的CodeInspector怎么使用

本篇內(nèi)容主要講解“ABAP里的Code Inspector怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“ABAP里的Code Inspector怎么使用”吧!

成都創(chuàng)新互聯(lián)公司專注于絳縣網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供絳縣營銷型網(wǎng)站建設(shè),絳縣網(wǎng)站制作、絳縣網(wǎng)頁設(shè)計(jì)、絳縣網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造絳縣網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供絳縣網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

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

ABAP里的Code Inspector怎么使用

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

ABAP里的Code Inspector怎么使用

Performance Check

Select-Statement can be transformed. X% of fields used - 檢查內(nèi)表字段的使用率

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

ABAP里的Code Inspector怎么使用

也就是說,你或許該考慮只SELECT真正需要的字段來替代SELECT *? 只需要在上圖設(shè)置里維護(hù)一個(gè)最低閥值,當(dāng)Code Inspector掃描代碼時(shí),一旦檢測到使用率低于維護(hù)的閥值就會(huì)報(bào)錯(cuò)。上圖的20意思是20%.

Search DB Operations in loops across modularization units

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

ABAP里的Code Inspector怎么使用

上圖是通過Code Inspector掃描出來的一個(gè)例子,在雙重LOOP循環(huán)里使用SELECT讀取數(shù)據(jù)庫表CRMD_DPP_HI_BLCK.

Nested Loops - 嵌套循環(huán)的檢測

盡管當(dāng)應(yīng)用代碼里嵌套循環(huán)的循環(huán)次數(shù)不大時(shí),對代碼運(yùn)行的絕對時(shí)間沒有太大影響——然而編寫具有至少指數(shù)級時(shí)間復(fù)雜度的代碼,在任何上下文里都不是一個(gè)好的編程習(xí)慣。

ABAP里的Code Inspector怎么使用

這個(gè)設(shè)置能夠幫助我們快速找到所有的嵌套循環(huán)。

Copy current table row for LOOP AT

ABAP里的Code Inspector怎么使用

找出所有LOOP AT ... INTO之處,理論上這些地方都可以用LOOP AT ... REFERENCE INTO或者ASSIGNING 替換。當(dāng)內(nèi)表的行結(jié)構(gòu)體字段很多時(shí),使用后兩種方式可以獲得一些性能的提升。

Low-Perform. Parameter Transfers - 檢測所有參數(shù)傳遞使用"Pass by Value"之處

Jerry關(guān)注了很多技術(shù)公眾號(hào),發(fā)現(xiàn)參數(shù)傳遞的"傳引用"和"傳值"這兩種方式的辨析,至今仍然是很多互聯(lián)網(wǎng)公司的面試題之一。

ABAP里的Code Inspector怎么使用

這個(gè)選項(xiàng)可以讓您指定針對何種類型的參數(shù)進(jìn)行參數(shù)傳遞方式的掃描:

ABAP里的Code Inspector怎么使用

在ABAP里理論上采用引用傳遞的方式進(jìn)行參數(shù)傳遞,性能上總是優(yōu)于值傳遞,具體性能會(huì)提高多少,依賴于具體傳遞的參數(shù)類型,無法一概而論。

Security Check – Dynamic and Client-Specific accesses in SELECT - 動(dòng)態(tài)SQL語句的檢測

符合下列范式的動(dòng)態(tài)SQL會(huì)被掃描出來:

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 …

這個(gè)選項(xiàng)并不是禁止您使用動(dòng)態(tài)SQL語句——事實(shí)上SAP應(yīng)用的持久層里有大量的動(dòng)態(tài)SQL語句的使用例子——而是提醒您別忘記了進(jìn)行SQL注入的預(yù)防措施:一旦掃描出來,如果有用戶輸入?yún)⑴c了這些動(dòng)態(tài)SQL語句的拼接,那就別忘記看看上下文有沒有使用CL_ABAP_DYN_PRG對用戶輸入進(jìn)行處理。

Search for APPEND and INSERT … INDEX in SORTED Tables

檢測所有在有序內(nèi)表上施加了APPEND操作的地方。有了這個(gè)掃描選項(xiàng),能夠幫助您避免下圖第13行這種類型的運(yùn)行時(shí)錯(cuò)誤。

ABAP里的Code Inspector怎么使用

Check of SY-SUBRC Handing - ABAP關(guān)鍵字調(diào)用后系統(tǒng)變量sy-subrc的檢測

Jerry至今仍清楚地記得,十多年前上研究生課程《UNIX環(huán)境高級編程》時(shí),老師不斷地強(qiáng)調(diào)在進(jìn)行系統(tǒng)調(diào)用之后一定要檢查返回值并進(jìn)行相應(yīng)的錯(cuò)誤處理。在Jerry看來,錯(cuò)誤檢測和處理是每一位編程人員都應(yīng)該具備的基本素養(yǎng)。

ABAP里的Code Inspector怎么使用

對應(yīng)到ABAP里,就意味著每次調(diào)用ABAP的關(guān)鍵字完成某項(xiàng)操作后,都必須檢查sy-subrc的值來確認(rèn)這次操作是否成功。

ABAP里的Code Inspector怎么使用

當(dāng)然也可以根據(jù)項(xiàng)目的實(shí)際情況,告訴Code Inspector只檢查某些類型的ABAP關(guān)鍵字調(diào)用。比如上圖意思就是只檢查READ TABLE關(guān)鍵字調(diào)用后是否進(jìn)行了sy-subrc的檢查。

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

在使用FOR ALL ENTRIES IN 之前,必須先檢查內(nèi)表itab是否為空。這個(gè)選項(xiàng)能掃描出沒有按照這個(gè)規(guī)范來編寫的代碼。

Programming Conventions - Naming conventions

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

ABAP里的Code Inspector怎么使用

ABAP里的Code Inspector怎么使用

Metrics and Statistics

這個(gè)檢查類別下面的設(shè)置都是一些很有意思的統(tǒng)計(jì)信息。

ABAP里的Code Inspector怎么使用

還是舉例說明。下圖紅色區(qū)域的設(shè)置,意思是如果一個(gè)類的方法內(nèi)的可執(zhí)行語句行數(shù)超過150行,Code Inspector就報(bào)一條警告消息。這是為了避免大家寫出一個(gè)過于冗長的方法。

而藍(lán)色區(qū)域的設(shè)置是如果每100行可執(zhí)行代碼的對應(yīng)注釋量小于10行,就報(bào)一條警告消息。這些閥值可以根據(jù)實(shí)際情況自行修改或關(guān)閉。

ABAP里的Code Inspector怎么使用

FAN-OUT Structural Metrics - 統(tǒng)計(jì)一個(gè)方法的扇出值

方法的扇入值和扇出值在模塊化編程的上下文會(huì)經(jīng)常被提及,這對概念不是編程界首創(chuàng)的,而是源自半導(dǎo)體行業(yè)里的邏輯電路設(shè)計(jì):

ABAP里的Code Inspector怎么使用

邏輯門的扇出系數(shù)定義了該門能夠驅(qū)動(dòng)的數(shù)字信號(hào)輸入的最大量,而一個(gè)代碼模塊的扇出值則代表了其直屬下層的模塊個(gè)數(shù)。

這個(gè)選項(xiàng)能夠統(tǒng)計(jì)您方法的扇出系數(shù)。扇出系數(shù)太小,意味著該方法基本沒有調(diào)用其他下層的函數(shù),這有兩種可能:

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

  2. 這個(gè)方法的模塊化沒有做好,存在優(yōu)化的空間,比如某些直接寫在方法內(nèi)的語句,可以提煉成下層函數(shù)并在方法內(nèi)調(diào)用。

Comment Language Metrics

這個(gè)選項(xiàng)可以統(tǒng)計(jì)代碼中出現(xiàn)的德文注釋的函數(shù)。

ABAP里的Code Inspector怎么使用

Jerry不太明白該選項(xiàng)有什么用處,給非德國ABAP開發(fā)人員吐槽用的么?

ABAP里的Code Inspector怎么使用

OO Size Metrics

這個(gè)選項(xiàng)也是為了防止您不經(jīng)意間就創(chuàng)造出怪獸級的類(monster class)而生的:一旦您關(guān)注的類的屬性超過設(shè)置的閥值,比如類的成員,類的公/私有方法等關(guān)注點(diǎn)超過選項(xiàng)里設(shè)置的值時(shí),Code Inspector就會(huì)報(bào)警。

ABAP里的Code Inspector怎么使用

Program Complexity Test – cyclomatic complexity - 代碼環(huán)復(fù)雜度(圈復(fù)雜度)的測試?yán)?/h3>

這又是一個(gè)能幫助您寫出Clean ABAP code的強(qiáng)大工具。

什么是代碼的環(huán)復(fù)雜度?

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

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

環(huán)復(fù)雜度 = 圖的邊數(shù) - 圖的節(jié)點(diǎn)數(shù) + 2

ABAP里的Code Inspector怎么使用

這其實(shí)就是我們研究生專業(yè)課《圖論》里學(xué)的歐拉定理。

看下面這個(gè)例子:

ABAP里的Code Inspector怎么使用

上面這8行ABAP代碼,環(huán)復(fù)雜度為3,怎么計(jì)算出來的?

先把其對應(yīng)的有向無環(huán)圖畫出來:

ABAP里的Code Inspector怎么使用

這張圖的邊數(shù)為3,即圖中黑色,紅色和綠色三條粗線。
這張圖的頂點(diǎn)數(shù)為2,如圖中兩個(gè)菱形的藍(lán)色圖例所示。

最后環(huán)復(fù)雜度為3 – 2 + 2 = 3.

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

因此大家可以多用ABAP Code Inspector的這個(gè)掃描選項(xiàng),隨時(shí)監(jiān)控您代碼的環(huán)復(fù)雜度。

ABAP里的Code Inspector怎么使用

Search DB Operations

把您關(guān)注的在代碼中出現(xiàn)的SQL操作關(guān)鍵字全部羅列出來。

ABAP里的Code Inspector怎么使用

Search ABAP Statement Patterns

這個(gè)選項(xiàng)也很有用,能根據(jù)您指定的正則表達(dá)式掃描ABAP代碼。

ABAP里的Code Inspector怎么使用

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

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

ABAP里的Code Inspector怎么使用

ABAP報(bào)表RS_ABAP_SOURCE_SCAN也能實(shí)現(xiàn)完全一致的功能:

ABAP里的Code Inspector怎么使用

到此,相信大家對“ABAP里的Code Inspector怎么使用”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


當(dāng)前題目:ABAP里的CodeInspector怎么使用
本文URL:http://weahome.cn/article/pscdjg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部