我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ABAP里的Code Inspector怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ABAP里的Code Inspector怎么使用

本篇内容主要讲解“ABAP里的Code Inspector怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ABAP里的Code Inspector怎么使用”吧!

我们可以在ABAP Code Inspector的检查变体(Check Variant)里,根据自己的需要灵活地选择对ABAP代码进行哪种类型的扫描动作。

ABAP里的Code Inspector怎么使用

下图是一个例子,意思是对ABAP代码中所有对数据库表产生了读写访问之处,进行"Table Names from SELECT Statements"的扫描。该扫描的具体行为,可以点击蓝底白色的感叹号图片,以获得帮助文档。下图这个例子里勾取的选项,意思是检查被访问的数据库表,在SE11的ABAP字段里的Technical Settings是否正确被维护了,比如表的缓存类型是否设置正确。

ABAP里的Code Inspector怎么使用

Performance Check

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

假设我们使用SELECT * 从一张表里读取数据到ABAP内表,然后在后续代码中只使用到了A个字段,而读取的表在SE11里总共有B个字段,那么A除以B的结果越小,说明读出来的内表字段使用率越低。

ABAP里的Code Inspector怎么使用

也就是说,你或许该考虑只SELECT真正需要的字段来替代SELECT *? 只需要在上图设置里维护一个最低阀值,当Code Inspector扫描代码时,一旦检测到使用率低于维护的阀值就会报错。上图的20意思是20%.

Search DB Operations in loops across modularization units

Jerry 2007年刚加入SAP开始学习ABAP编程时,前辈们就告诫过我,不要在LOOP里使用SELECT语句,这样会极大影响代码的性能。

ABAP里的Code Inspector怎么使用

上图是通过Code Inspector扫描出来的一个例子,在双重LOOP循环里使用SELECT读取数据库表CRMD_DPP_HI_BLCK.

Nested Loops - 嵌套循环的检测

尽管当应用代码里嵌套循环的循环次数不大时,对代码运行的绝对时间没有太大影响——然而编写具有至少指数级时间复杂度的代码,在任何上下文里都不是一个好的编程习惯。

ABAP里的Code Inspector怎么使用

这个设置能够帮助我们快速找到所有的嵌套循环。

Copy current table row for LOOP AT

ABAP里的Code Inspector怎么使用

找出所有LOOP AT ... INTO之处,理论上这些地方都可以用LOOP AT ... REFERENCE INTO或者ASSIGNING <fs>替换。当内表的行结构体字段很多时,使用后两种方式可以获得一些性能的提升。

Low-Perform. Parameter Transfers - 检测所有参数传递使用"Pass by Value"之处

Jerry关注了很多技术公众号,发现参数传递的"传引用"和"传值"这两种方式的辨析,至今仍然是很多互联网公司的面试题之一。

ABAP里的Code Inspector怎么使用

这个选项可以让您指定针对何种类型的参数进行参数传递方式的扫描:

ABAP里的Code Inspector怎么使用

在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行这种类型的运行时错误。

ABAP里的Code Inspector怎么使用

Check of SY-SUBRC Handing - ABAP关键字调用后系统变量sy-subrc的检测

Jerry至今仍清楚地记得,十多年前上研究生课程《UNIX环境高级编程》时,老师不断地强调在进行系统调用之后一定要检查返回值并进行相应的错误处理。在Jerry看来,错误检测和处理是每一位编程人员都应该具备的基本素养。

ABAP里的Code Inspector怎么使用

对应到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怎么使用

逻辑门的扇出系数定义了该门能够驱动的数字信号输入的最大量,而一个代码模块的扇出值则代表了其直属下层的模块个数。

这个选项能够统计您方法的扇出系数。扇出系数太小,意味着该方法基本没有调用其他下层的函数,这有两种可能:

  1. 该方法的逻辑本身非常简单,只有两三行代码,比如类的setter/getter方法;

  2. 这个方法的模块化没有做好,存在优化的空间,比如某些直接写在方法内的语句,可以提炼成下层函数并在方法内调用。

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怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ABAP里的Code Inspector怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

ABAP里的Code Inspector怎么使用

本篇内容主要讲解“ABAP里的Code Inspector怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ABAP里的Code Inspector怎么使用”吧!我们可以在ABAP Code
2023-06-03

怎么使用Visual Studio Code编写和激活ABAP代码

这篇文章主要介绍“怎么使用Visual Studio Code编写和激活ABAP代码”,在日常操作中,相信很多人在怎么使用Visual Studio Code编写和激活ABAP代码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
2023-06-04

SAP ABAP的OPEN SQL怎么使用

本篇内容主要讲解“SAP ABAP的OPEN SQL怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SAP ABAP的OPEN SQL怎么使用”吧!当使用CDS实体的名称作为数据源访问SE
2023-06-04

jvm的Code Cache怎么使用

JVM的Code Cache是用于存储已编译代码的区域,以提高性能。下面是Code Cache的使用方式:设置Code Cache的大小:可以通过JVM启动参数来设置Code Cache的大小。例如,使用"-XX:InitialCodeCa
2023-10-23

ABAP report技术怎么使用

本篇内容介绍了“ABAP report技术怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!report z. INCLUDE ole2
2023-06-04

ABAP调试器怎么使用

这篇文章主要介绍“ABAP调试器怎么使用”,在日常操作中,相信很多人在ABAP调试器怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ABAP调试器怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧
2023-06-04

SAP的ABAP调试器怎么使用

这篇文章主要讲解了“SAP的ABAP调试器怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SAP的ABAP调试器怎么使用”吧!首先弄清楚ABAP Classic调试器和新调试器的区别:
2023-06-04

ABAP的include关键字怎么使用

这篇文章主要介绍“ABAP的include关键字怎么使用”,在日常操作中,相信很多人在ABAP的include关键字怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ABAP的include关键字怎么使用
2023-06-02

Hybris的extension和ABAP的package怎么使用

本篇内容介绍了“Hybris的extension和ABAP的package怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!这个概念和A
2023-06-04

怎么在SAP的ABAP编程环境里消费API的ABAP

这篇文章主要介绍“怎么在SAP的ABAP编程环境里消费API的ABAP”,在日常操作中,相信很多人在怎么在SAP的ABAP编程环境里消费API的ABAP问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么在SA
2023-06-04

怎么用ABAP连接SAP上的ABAP编程环境

这篇文章主要介绍“怎么用ABAP连接SAP上的ABAP编程环境”,在日常操作中,相信很多人在怎么用ABAP连接SAP上的ABAP编程环境问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用ABAP连接SAP上
2023-06-04

怎么查找Authorization object在哪些ABAP代码里使用到

这篇文章主要为大家展示了“怎么查找Authorization object在哪些ABAP代码里使用到”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么查找Authorization object
2023-06-04

怎么使用ABAP代码返回Attachment

这篇文章主要讲解了“怎么使用ABAP代码返回Attachment”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用ABAP代码返回Attachment”吧!在事务码 MM02里为ID为1
2023-06-04

怎么使用ABAP提高工作效率

本篇内容主要讲解“怎么使用ABAP提高工作效率”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用ABAP提高工作效率”吧!(1) 直接批量生成数据到ABAP内表里:* 2017-05-14
2023-06-04

怎么使用abap Git在ABAP On-Premises系统进行代码传输

本篇内容介绍了“怎么使用abap Git在ABAP On-Premises系统进行代码传输”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!SA
2023-06-04

SAP Hybris和ABAP Netweaver里的DAO怎么实现

本篇内容主要讲解“SAP Hybris和ABAP Netweaver里的DAO怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SAP Hybris和ABAP Netweaver里的DAO怎
2023-06-04

怎么使用ABAP获得生产订单的状态

这篇文章主要介绍“怎么使用ABAP获得生产订单的状态”,在日常操作中,相信很多人在怎么使用ABAP获得生产订单的状态问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用ABAP获得生产订单的状态”的疑惑有所
2023-06-04

ABAP的权限检查跟踪工具怎么使用

这篇文章主要介绍“ABAP的权限检查跟踪工具怎么使用”,在日常操作中,相信很多人在ABAP的权限检查跟踪工具怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ABAP的权限检查跟踪工具怎么使用”的疑惑有所
2023-06-04

你真的会用ABAP, Java和JavaScript里的constructor么?

如果constructor里调用了一个成员方法,这个方法被子类override了,当初始化一个子类实例时,父类的构造函数被的调用,此时父类构造函数的上下文里调用的成员方法,是父类的实现还是子类的实现?你能不用运行代码,就能准确说出这些语句会
2023-06-02

在SAP ABAP编程环境里怎么使用CAP模型创建Fiori应用

这篇文章主要介绍“在SAP ABAP编程环境里怎么使用CAP模型创建Fiori应用”,在日常操作中,相信很多人在在SAP ABAP编程环境里怎么使用CAP模型创建Fiori应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希
2023-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录