大多数工程团队会就同一套代码库展开两场不同的讨论。一场是关于安全性的:是否存在 SQL 注入风险、硬编码的密钥或可利用的依赖项?另一场是关于可维护性的:这个函数是否过于复杂、这段代码是否重复三次、是否存在无人敢删除的无用代码?
这些对话通常使用不同的工具,由不同的团队运行,并按照不同的时间表进行。安全扫描器会标记出哪些漏洞可被利用。而另一个质量控制工具(通常是独立购买和管理的)则会标记出哪些漏洞维护成本高昂。两个许可证,两个 dashboards,两个解析器遍历同一抽象语法树,以回答两个不同的问题。
这种划分是有代价的。可靠性缺陷(指那些导致运行时故障而非安全漏洞的缺陷)无法像安全问题那样得到同样的优先级排序,因为它们不属于安全团队的职责范围。 dashboard而且,当一个团队已经有一个静态分析引擎来解析每个文件以确保安全时,再搭建第二个不相关的引擎来检查代码质量是多余的工作,没有任何共同的好处。
为什么代码质量很重要(以及它与其他方面有何不同) Code Security)
代码质量和 code security 回答两个不同的问题。 Code security 代码质量会问:这段代码是否容易被利用?代码质量又会问:这段代码是否易于维护?一个函数可能完全安全,但仍然可能是一团五百行的乱码,没人愿意碰;一个组织良好、易于阅读的模块也可能存在严重的注入漏洞。这两者相辅相成,不可替代。
忽视代码质量的代价不会立即以安全漏洞的形式显现,而是以更缓慢的方式显现:新员工需要两周而不是两天才能完成一次安全的修改;一个常规功能需要三个迭代周期才能完成,因为没有人能够预测重复的代码块会在其他地方造成什么问题;值班工程师花费一个小时追踪一个本应在一年前就被移除的死代码中的错误。所有这些都不会触发安全警报,而是体现在开发速度上。等到在迭代回顾会议上发现这些问题时,修复它们的成本已经非常高昂了。
对待质量要像对待安全性一样严格:不是因为代码异味是一种威胁,而是因为任由可维护性债务累积而不加监控,代码库就会变成功能消亡的地方。
更佳方案:一台引擎,两套规则目录
Xygeni 的代码质量扫描器会分析源代码的可维护性和可靠性缺陷:代码异味、复杂性违规、死代码和重复代码——这些模式不会导致违规,但会导致服务中断、回归和团队行动迟缓。
这种独特的设计选择是架构层面的,而非表面装饰层面的。代码质量与……共享其静态分析引擎 Xygeni 的 SAST 扫描器相同的解析器、相同的抽象语法树 (AST) 构建方式、相同的文件发现机制。不同之处在于规则目录。质量规则的范围限定于质量而非安全,发现的结果会显示在 Xygeni 平台专门的质量部分,与安全性部分完全隔离。 SAST 以及其他安全风险表。
结果:团队可以从同一次底层分析中获得可维护性和安全性的双重视角,而无需将两个不同的问题合并成一个嘈杂的结果。 dashboard.
两种获取高质量信号的方法 Pipeline
并非所有“代码质量”功能在底层的工作原理都相同。许多 CI/CD-原生质量工具是聚合层: 他们不会自己分析你的代码。它们会导入你已运行的任何代码检查工具(JavaScript 代码检查工具、Python 代码检查工具、重复代码检测器)的结果,并将每个结果重新格式化为共享的 JSON 模式,每个结果都作为自己的组件进行连接。 pipeline 步骤。这很灵活,但这意味着你的质量信号的一致性取决于你整合了多少个独立的工具、格式和维护者,每种语言一个。
Xygeni 的代码质量扫描器采用了另一种方法:它使用一个原生引擎,该引擎本身就用于安全检查,并扩展了一个质量规则目录。无需安装针对每种语言的 linter,无需重新格式化报告格式,也无需为每个工具维护单独的作业。您只需一个命令、一个一致的严重性模型和一个 dashboard 本节,因为分析从一开始就没有跨工具进行。
它是如何运作的?
代码质量检测作为独立的命令行工具运行:
xygeni 质量 -d [选项](xygeni 代码质量可用作别名。)
它与……共享期权模式 西吉尼 sast因此,任何已经运行 Xygeni 安全扫描器的人都会立即识别出该界面:
| 附加选项 | 它能做什么 |
|---|---|
-d, --dir | 待分析目录 |
--detectors | 运行特定的检测器 ID,或者指定严重级别及其以上所有级别。 |
--fail-on | 对于给定的严重程度,退出值非零。 CI/CD 门 |
--baseline | 与基线进行比较,仅返回新发现 |
--upload | 将结果发送至 Xygeni 平台 |
生成代码质量报告
扫描会生成一份代码质量报告,您可以将其发送到平台、导出为 JSON 格式以用于持续集成 (CI) 工件,或者直接交给团队负责人。 dashboard 访问。两者都是单行命令:
# 扫描并直接上传至 Xygeni 平台
xygeni quality -n MyProject –上传
# 仅导出关键发现的代码质量报告(JSON 格式)。
xygeni 质量 -d –检测器关键 –格式为 json –输出质量.json
上传后,该代码质量报告就会填充到“质量”部分。 dashboard可筛选,每个发现均有滑出式详细信息、基线数据,并且报告行为与团队目前使用的相同。 SAST.
同时进行质量控制和安全扫描
对于希望通过一次传球同时传递两种信号的球队来说, SAST 扫描仪接受 –包含质量 旗:
西吉尼 sast -d –包含质量
计划 SAST 代码质量和安全性检查共享解析器阶段,这比连续运行两个扫描器效率更高。它会生成两份独立的报告:安全性报告和质量报告,每份报告都会分别保存在各自的文件夹中。 dashboard 本节。该标志位会改变扫描的执行方式,而不是结果的组织方式。
扫描时未连接
对于与外部网络隔离的环境或无法访问 Xygeni 平台的 CI 运行器,质量扫描可以在本地运行,稍后再上传:
xygeni 质量 -d -n 我的项目
# …稍后,从一台可以连接网络的主机上:
xygeni report-upload -n MyProject -r depsdoctor-quality.json
调查结果将直接进入质量部分,就像实时扫描的结果一样:相同的分类、相同的政策、相同的基线行为。
为什么将质量与安全分开至关重要
将代码异味与可利用漏洞归入同一严重级别列表很容易,但 Xygeni 刻意避免这样做。重复函数和 SQL 注入并非同一种风险,如果将它们视为同一类风险,会导致团队要么对可维护性问题反应过度,要么对真正的安全问题反应不足。保留规则目录、报告和…… dashboard 虽然底层引擎相同,但视图是分开的,这意味着每个团队都能获得对他们来说重要的信号,而无需为第二个静态分析工具付费。
试用一下: 现在可以通过 Xygeni CLI 使用代码质量功能。已经运行的团队 西吉尼 sast 可以添加 –包含质量 到他们现有的 pipeline 一句话概括,无需引入新工具,也没有第二个 dashboard 去检查。
常见问题解答
Xygeni代码质量是什么?
Xygeni Code Quality 是一款静态分析扫描器,可检测可维护性和可靠性缺陷,包括代码异味、复杂度违规、死代码和重复代码。它作为独立命令运行(xygeni 质量)并将结果报告到 Xygeni 平台的专门质量部分,与安全调查结果分开。
代码质量与 SAST?
否。代码质量和 SAST 共享相同的底层解析引擎,但使用独立的规则目录并生成独立的报告。 SAST 查找安全漏洞;代码质量检查可维护性和可靠性缺陷。
我可以同时运行质量扫描和安全扫描吗?
是的。跑步 西吉尼 sast -d –包含质量 它会在一次扫描过程中同时执行两套规则集,这比分别运行两个扫描器效率更高,因为它们共享解析器阶段。结果仍然会生成两份单独的报告,并显示在两个不同的窗口中。 dashboard 部分。
我需要单独的代码质量许可证吗?
上传和查看质量结果需要代码质量权限,与运行扫描所需的权限相同。
Code Quality 能否在没有网络连接的情况下运行?
是的。扫描可以在本地运行,无需…… 上传 标记,生成的报告稍后可以从连接的主机上传。 xygeni 报告上传。






