SuperAPI AI 工具集

find-untested-sources

测试与质量

查看项目

更新于 10-20 04:14

技能介绍

用途:Find Untested Sources 回答的问题是“哪些源文件没有任何测试文件引用其声明的类型/符号”,而不是“哪些代码行被执行”。它通过静态解析源文件,在数秒内生成确定性的测试配对映射,无需构建、依赖解析和编译,使智能体在编写新测试前无需通读整个代码库即可挑选下一个待测文件。

主要能力:技能提供两个可互换的分析引擎,输出兼容的 JSON 契约。Roslyn(C#)引擎位于 scripts/Find-UntestedSources.cs,使用 Roslyn 语法 API 解析每个 .cs 文件,并进行严格的命名空间消歧,对 Settings、Context 等重复短名更准确,适合纯 .NET 仓库。tree-sitter(多语言)引擎位于 scripts/find_untested_sources.py,适合非纯 C# 仓库或希望用一个工具覆盖 C#、Python、TypeScript/JavaScript、Go、Java、Rust、Ruby、Kotlin、Swift、PowerShell、C++ 的场景。

使用方式:Roslyn 引擎需 .NET SDK 支持文件式应用(dotnet run script.cs),仓库 global.json 固定 SDK 11 预览或更高版本,首次运行需 NuGet 还原 Microsoft.CodeAnalysis.CSharp,诊断信息输出到 stderr,JSON 输出到 stdout。命令示例:dotnet run scripts/Find-UntestedSources.cs -- <repo-root> [--top N]。tree-sitter 引擎需 Python 3.10+ 及 pip install tree-sitter-language-pack,命令示例:python scripts/find_untested_sources.py <repo-root>,支持 --lang 限定语言、--limit-untested 截断报告、--include-tested 额外输出 tested_sources。

输出与消费:报告包含 untested/untested_sources 列表(按声明数量降序)、suggested_test_path、source_to_tests 或 tested_sources、orphan_tests(多语言引擎)。建议测试路径遵循已有测试项目约定,Roslyn 引擎会利用已有的 ProjectReference 映射,无需 dotnet sln add;多语言引擎在找不到测试根目录时可能建议源文件同目录。

适用场景:用户询问“哪些文件没有测试”“找出未配对源文件”“基于源配对给出测试缺口列表”时;在调用测试生成智能体前生成工作清单;生成测试后验证新测试文件是否配对到目标源文件;枚举仅有一个引用测试的弱配对源文件以做后续深度检查。

限制:两个引擎均为静态、仅解析的启发式方法,以少量精度换取远低于覆盖率分析的成本。已知缺口包括:仅通过字符串名称或容器解析引用的反射/依赖注入类型无法检测;以实例方法调用的扩展方法(C#)不会记入其声明静态类;var、目标类型 new()、模式匹配会丢失类型标记;短标识符(多语言引擎,少于 4 字符)会被丢弃;单仓库路径别名(TS path mapping、Java module-info)不会解析。最终结果应标注为静态配对启发式,而非行或分支覆盖率证据。行/分支覆盖率、基于真实覆盖率数据的优先级、CRAP 评分/风险热点应使用 coverage-analysis;现有测试是否足够强应使用 test-gap-analysis 或 assertion-quality。