SuperAPI AI 工具集

sap-unused-code

编程与开发

查看项目

更新于 10-15 11:46

技能介绍

用途

SAP Unused Code Discovery 技能用于查找 SAP 系统中从未在运行时被调用的 Z/Y 自定义对象。它是任何可信的自定义代码退役项目的前提条件。该技能将 SAP 调用监控器(SCMON)的运行时使用数据与静态 where-used(被使用位置)分析相结合,对每个对象进行分类。

主要能力

该技能将每个对象分类为:UNUSED / LIKELY_UNUSED / USED / INDETERMINATE。它支持三种数据来源方案:

  • 方案 A(首选):通过 ARC-1 直接连接 SCMON 表。适用于 SCMON 曾经处于活动状态的任何系统,不论 SUSG 聚合是否运行过。优点是无需等待批处理、无切片轮换,当天即可运行;缺点是保留窗口有限(约 7 天)。
  • 方案 B:通过 CDS 视图查询聚合后的 SUSG 数据。适用于客户正确调度了 SUSG 的生产系统。优点是历史更长(数月)、预连接(SQL 更简单)、官方支持的数据;缺点是需要 SUSG 批处理已运行,且如果 SCMON 在窗口期内被停用则无法工作。
  • 方案 C:手动 SUSG XML 导出(仅兜底)。需要客户已在事务 SUSG 中导出 5 个 XML 文件。该技能不捆绑 XML 解析器,如用户坚持使用方案 C,需使用 Kiro 的 parse-susg.py 或编写本地 Python 脚本。

使用方式

该技能强制要求提供过滤条件,必须至少提供以下之一:包、命名空间前缀、对象清单或意图说明。若无任何过滤条件则拒绝运行。

执行流程包括:

  1. 探测使用哪个方案:运行 COUNT 查询判断 SCMON_DATA 和 SUSG_I_DATA 的行数,按决策表选择方案。
  2. 枚举范围:根据用户过滤输入(包、命名空间/前缀或对象清单)构建候选列表 S。
  3. 查询运行时使用情况:方案 A 使用 SCMON 直接连接,方案 B 使用 SUSG 查询,构建运行时已用对象集 U。
  4. 对不在 U 中的对象进行静态 where-used 分析,构建集 W。
  5. 分类(首次匹配优先):U 中为 USED;W 中为 LIKELY_UNUSED;两者皆非为 UNUSED;无法解析为 INDETERMINATE。
  6. 输出报告:包含标题总览、UNUSED 表(删除候选,含最后更改信息)、LIKELY_UNUSED 表(含调用者提示)以及后续操作选项。

适用场景

  • 界定自定义代码退役项目的范围
  • 迁移之前:不要迁移用不到的内容
  • 项目后清理:删除为已回滚功能编写的代码
  • 需要死代码清单的许可证/合规审查

可与 sap-clean-core-atc 组合使用:迁移 USED Level-A 代码,审计 USED Level-C/D 代码,彻底删除 UNUSED 代码。

前置条件

  • ARC-1 服务器上需设置 SAP_ALLOW_FREE_SQL=true。
  • 用户需对 SCMON_DATA、SCMON_PROG、SCMON_SUB、SCMON_RDATA(或方案 B 的 SUSG 等同表)具有 S_TABU_NAM 授权。
  • SCMON 曾处于活动状态(方案 A)或 SUSG 聚合已运行(方案 B)。

若客户尚无 SCMON/SUSG 数据,需在 SAP GUI 中通过事务 SCMON 激活监控器并运行 N 天,事务 SCMONL 显示切片状态,SCMOND 显示原始数据;如需永久数据,可调度 SCMON_COLLECT 作为每日作业,随后运行 SUSG_COLLECT_FROM_SCMON,待数据流动后重新运行此技能。

限制

  • 不执行删除。仅生成报告,删除必须由人工决定,最好通过传输和 CTS 进行。
  • 不做跨系统合并(DEV + QAS + PRD 使用情况)。需要从每个系统导出,此技能一次只读取一个系统。
  • 不为已弃用但仍在使用的代码提供替换建议。
  • 不导入 XML(方案 C)。若客户只有 SUSG XML 转储,需要离线解析器。
  • 运行时数据无法反映的内容:覆盖率缺口(如每年年末运行的报表不会出现在一周的 SCMON 数据中);死代码检测不等于代码消除(UNUSED 对象可能是应急/灾备代码、仅考试期使用,或由窗口期内未激活的调度作业调用);动态调用可能无法正确归因,部分误判为 UNUSED 无法避免。
  • 若范围返回超过 500 个候选,将拒绝并要求缩小过滤条件。