SuperAPI AI 工具集

code-review

编程与开发

查看项目

更新于 10-16 02:12

技能介绍

用途

该清单用于审查 ServiceNow 服务端代码,包括 Business Rules、Script Includes、Scheduled Jobs 等。它把审查重点归纳为若干类别,并给出每类问题的错误示例与正确写法,帮助审查者系统性地发现并标注问题。

主要能力

1. ES5 合规性(CRITICAL)

清单要求检查并标记所有 ES6+ 语法为严重错误,包括:

  • const x = 5; 应改用 var
  • let items = []; 应改用 var
  • 箭头函数 () => {} 应改用 function() {}
  • 模板字符串 `template ${var}` 应改用 'string ' + var
  • for (x of arr) 应改用传统 for 循环
  • 解构赋值 {a, b} = obj 应改用 obj.a, obj.b

2. 安全问题

  • SQL/GlideRecord 注入:避免将用户输入直接放入查询,如 gr.addEncodedQuery(userInput);应验证并清理输入,例如使用 new GlideSysAttachment().cleanFileName(userInput)。
  • 跨站脚本(XSS):避免未转义输出,如 gs.addInfoMessage(userInput);应使用 GlideStringUtil.escapeHTML(userInput) 转义 HTML。
  • 访问控制:查询记录后应检查权限,例如 if (gr.get(userProvidedSysId) && gr.canRead())。
  • 敏感数据泄露:禁止在日志中记录密码、API Key 等凭据,只记录非敏感信息如用户名。

3. 性能问题

  • 循环内查询(N+1):避免在循环中逐条 gr.get(),应使用单次查询配合 addQuery("sys_id", "IN", userIds.join(","))。
  • 缺少 setLimit():查询前应设置 gr.setLimit(1000),避免返回海量记录。
  • 不必要的查询:仅检查单条记录是否存在时,应使用 gr.get("number", incNumber) 而非查询后判断 getRowCount()。
  • GlideRecord 与 GlideAggregate:计数应使用 GlideAggregate 的 addAggregate("COUNT"),而非循环累加。

4. 代码质量问题

  • 硬编码 sys_id:避免直接写死 sys_id,应使用系统属性 gs.getProperty() 或按名称查询获取。
  • 魔法数字/字符串:使用命名常量,如 var STATE_RESOLVED = 6。
  • 缺少错误处理:调用外部请求后应检查状态码并 try/catch,记录错误并返回。
  • 日志规范:日志应包含上下文,如脚本名、记录编号、用户名。

5. Business Rule 特有事项

  • 递归预防:在 Before 规则中调用 current.update() 可能导致无限循环,应使用 current.setWorkflow(false) 与 current.setWorkflow(true) 控制。
  • 规则类型选择:Before 规则应保持快速,重量级操作(集成、重处理)应移至 Async 规则。

使用方式

按清单逐项检查代码,并按照指定的输出格式组织反馈:

  • Code Review Summary
    • Critical Issues (Must Fix):如 [SECURITY]、[ES5]
    • Performance Issues (Should Fix):如 [PERF]
    • Code Quality (Nice to Have):如 [QUALITY]
    • Positive Observations:指出良好实践

严重级别分为:

  • CRITICAL:部署前必须修复,如安全漏洞、ES6 语法
  • HIGH:应当修复,如性能问题、缺少错误处理
  • MEDIUM:建议修复,如代码质量、硬编码值
  • LOW:可考虑修复,如风格、细微改进

适用场景

适用于对 ServiceNow 平台服务端脚本进行人工或自动化代码审查,尤其适合团队在部署前统一检查安全、性能与合规问题。

限制

该资料为审查清单,未提供自动化工具、安装命令、收费或价格信息,也未说明具体平台版本兼容范围;实际使用需结合具体代码环境判断。