ydah/necropsy

GitHub: ydah/necropsy

Necropsy 是一个基于统一调用图的 Ruby 混合死代码检测器,结合静态与动态分析从框架入口点出发进行可达性分析,帮助开发者识别项目中不再被调用的代码。

Stars: 0 | Forks: 0

# 尸体剖检 Necropsy 是一个基于统一调用图构建的 Ruby 死代码检测器。它 使用 Prism 收集方法定义,添加来自静态和可选动态分析器的调用边证据, 然后从框架和配置的入口点运行可达性分析。 首个实现包括: - 基于 Prism 的 `def`、`define_method`、`attr_*` 和 `delegate` 方法收集 - 静态名称解析、CHA 以及对实例化类进行 RTA 风格的过滤 - Rails 路由/回调/视图辅助方法/组件、普通 Ruby 以及测试套件的入口点提供器 - `unreachable`、`unused` 和 `test_only_reachable` 分类 - 置信度级别、JSON/YAML/human/SARIF/GitHub 报告、基线/检查防护机制、隔离建议、TracePoint 记录以及基准评估器 ## 安装说明 将 gem 添加到 development/test 组: ``` gem "necropsy", require: false ``` ## 用法 创建基线: ``` bundle exec necropsy baseline --root . ``` 运行报告: ``` bundle exec necropsy analyze --root . --format human ``` 仅针对新的高置信度发现导致 CI 失败: ``` bundle exec necropsy check --root . --fail-on high ``` 从 Ruby 脚本记录动态证据: ``` bundle exec necropsy record --root . --output tmp/necropsy_trace_point.yml -- script/runner.rb bundle exec necropsy coverage --root . --output tmp/necropsy_coverage.yml -- script/runner.rb ``` 在运行外部命令时记录 Ruby Coverage: ``` bundle exec necropsy coverage --root . --output tmp/necropsy_coverage.yml -- bundle exec rspec ``` 子 Ruby 进程会继承收集器,并将其合并到该次运行的同一输出中。 对照黄金标准进行评估: ``` bundle exec necropsy bench --root . --gold-standard gold.yml --ablation ``` 配置示例: ``` analyzers: static: [name_resolution, cha, rta] dynamic: coverage: source: tmp/necropsy_coverage.yml min_observation_days: 30 coverband: source: redis://prod-redis:6379/2?key=coverband trace_point: source: tmp/necropsy_trace_point.yml custom: - "MyCompany::GraphqlEntryAnalyzer" cache: enabled: true path: .necropsy_cache/scan.yml entry_points: extra: - "PublicApi::*" ci: fail_on: high baseline: .necropsy_baseline.yml quarantine: days: 30 bench: precision_threshold: 0.85 ``` 当扫描的 Ruby 文件或配置值发生更改时,扫描缓存将失效。 动态输入可以提供包含方法 ID 的 `executed` 或 `nodes` 条目,包含 `caller_id`/`callee_id` 的 `edges`,以及一个 `observation` 哈希。可以通过 `--format sarif` 和 `--format github` 获取 SARIF 和 GitHub Actions 注释。 支持 Coverband 文件、Redis 字符串和 Redis 哈希导出。Rails 路由入口点检测涵盖常见的 `resources`、`resource`、`namespace`、`scope`、`controller`、`concerns`、`draw`、`mount`、`root` 以及动词路由形式。 `necropsy quarantine --write` 会添加 `# necropsy:quarantine since=YYYY-MM-DD`。 当配置的隔离窗口过期且未出现存活证据时, 该发现将提升为 `certain`。 ## 开发说明 检出代码库后,运行 `bin/setup` 安装依赖项。然后运行 `rake spec` 来执行测试。你也可以运行 `bin/console` 获取一个交互式提示符,以便进行实验。 要将此 gem 安装到本地计算机上,请运行 `bundle exec rake install`。要发布新版本,请更新 `version.rb` 中的版本号,然后运行 `bundle exec rake release`,这将创建该版本的 git tag,推送 git 提交和已创建的 tag,并将 `.gem` 文件推送到 [rubygems.org](https://rubygems.org)。 ## 贡献 欢迎在 GitHub 上提交 Bug 报告和 Pull Request。 ## 许可证 该 gem 作为开源软件提供,基于 [MIT License](https://opensource.org/licenses/MIT) 的条款。
标签:Ruby, 云安全监控, 批量扫描, 搜索引擎查询, 死代码检测, 知识库, 网络攻击, 静态分析