baris2828/muda-audit

GitHub: baris2828/muda-audit

将丰田精益生产的七种浪费理论应用于代码库审计的 CLI 工具,通过帕累托分析帮助开发者识别并优先修复最关键的代码问题。

Stars: 0 | Forks: 0

# muda 無駄 **为你的代码库进行精益浪费审计。走近现场,看清七种浪费,持续改进。** [![ci](https://static.pigsec.cn/wp-content/uploads/repos/cas/99/993938d8ce5e902ccfb9d6747725c320d855dea3235ed9a304cedf0d94c9321f.svg)](https://github.com/baris2828/muda-audit/actions/workflows/ci.yml) [![self-audit](https://img.shields.io/badge/self--audit-waste_score_0-brightgreen)](#muda-audits-muda) [![python](https://img.shields.io/badge/python-3.11%2B-blue)](pyproject.toml) [![license](https://img.shields.io/badge/license-MIT-lightgrey)](LICENSE) ![muda 走近现场](https://static.pigsec.cn/wp-content/uploads/repos/cas/96/96a74b3c8e5d83f2d9eb24d6652be36387824ca97cfc97a71d8917d7d539075b.gif) 丰田教会了制造业在车间现场识别七种浪费(*muda*): 运输、库存、动作、等待、过度生产、过度加工、缺陷。 作为精益顾问,在真实工厂车间行走了六年后,我发现我所接触过的每个代码库中都存在这同样的七种模式。然而在软件行业,却从来没有人指出过它们。 `muda` 是一个 CLI 工具,它能对代码库执行一次**“现场巡视”**:它前往真实的工作场所, 不带评判地观察,将每一次观察映射为七种浪费之一,然后执行精益思想中必做的下一步——通过**帕累托分析**,向你展示最值得优先修复的关键少数浪费。 我的咨询原则是“*在自动化之前先消除*”。 这个工具正是该原则的可执行化身。 ``` ╭─────────────────────────────────────────────────╮ │ muda 無駄 · gemba walk of ./demo-shop │ │ 6 files observed · 11 findings · waste score 20 │ ╰─────────────────────────────────────────────────╯ The seven wastes ┏━━━━━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ Waste ┃ Findings ┃ Score ┃ Share ┃ Pareto ┃ ┡━━━━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ │ Defects │ 3 │ 8 │ 40% │ ██████████████████ ◀ focus │ │ Inventory │ 3 │ 5 │ 25% │ ███████████ ◀ focus │ │ Motion │ 2 │ 2 │ 10% │ ████ ◀ focus │ │ Overprocessing │ 1 │ 2 │ 10% │ ████ ◀ focus │ │ Waiting │ 1 │ 2 │ 10% │ ████ │ │ Overproduction │ 1 │ 1 │ 5% │ ██ │ └────────────────┴──────────┴───────┴───────┴─────────────────────────────┘ Pareto: the ◀ focus wastes account for ~80% of the score. Start there. ┃ fix now ┃ defects ┃ Debugger left in code ┃ src/app.py:15 ┃ ┃ fix now ┃ defects ┃ Possible hardcoded secret ┃ src/app.py:5 ┃ ┃ should fix ┃ inventory ┃ Dependency never imported ┃ requirements.txt ┃ ┃ should fix ┃ waiting ┃ Stale TODO (waiting 260d) ┃ src/app.py:4 ┃ ╭──────────────── Kaizen — built-in heuristics ────────────────╮ │ 1. Defects: Fix severity-3 items today: remove debuggers, │ │ rotate anything that looks like a committed secret … │ │ 2. Inventory: Delete what git already remembers … │ ╰──────────────────────────────────────────────────────────────╯ ``` ## 映射:车间现场 → 代码库 这个项目的核心思想是一张转换对照表。每种浪费都保留了其在制造业中的原始含义,并获得了具体、可检查的软件等价物: | 浪费 無駄 | 在车间现场 | 在你的代码库中 —— `muda` 检查的内容 | |---|---|---| | **Transport(运输)** | 在工位间搬运零件而不增加价值 | 仅用于穿梭导入/重新导出的穿透式模块 | | **Inventory(库存)** | 积压在货架上占用资金并掩盖问题的库存 | 声明了但从未导入的依赖;被注释掉的代码块 | | **Motion(动作)** | 工人来回走动寻找摆放位置不佳的工具 | 超大文件、过长函数、深度嵌套的路径 | | **Waiting(等待)** | 半成品排队等待下一个工序 | TODO/FIXME/HACK 注释 —— 通过 `git blame` 计算存在时间,越久越糟糕 | | **Overproduction(过度生产)** | 在任何实际需求产生之前提前生产 | 定义了但从未被引用的函数和类 | | **Overprocessing(过度加工)** | 在两个工位上对同一个零件进行两次加工 | 字节完全相同的重复文件 | | **Defects(缺陷)** | 流到下游的废品和返工 | 残留的调试器、裸露的 `except:`、动态 eval、硬编码的密钥 | 运行 `muda wastes` 即可在终端查看此表格。 ## 快速开始 ``` pipx install muda-audit # or: pip install muda-audit muda walk . # audit the current repo muda walk . --top 25 # show more findings muda walk . --report audit.md # Markdown report for the PR / wiki muda walk . --json audit.json # machine-readable, for dashboards muda walk . -x "*.ipynb" -x "docs/*" # exclude globs ``` 代码仓库和包名为 `muda-audit`;命令仅为 `muda`。 ## 30 秒试用 ``` python examples/build_demo.py # generates ./demo-shop — a tiny webshop full of deliberate waste muda walk demo-shop # watch the walk surface all seven wastes ``` 生成的测试工坊会有大约 8 个月前的 git 历史记录,因此 `git blame` 可以将这些标记标记为*过期的*。巡视过程会刻意忽略 `.gitignore`,因此在仓库根目录运行 `muda walk .` 也会扫到该工坊 —— 玩转完毕后,你可以直接删除 `demo-shop/`。 ## 改善层:可选的导师 发现浪费只是第一步;精益的核心在于采取对策。每次巡视后,一位**导师**会将帕累托分析结果转化为优先排序的改善建议。在同一个接口(策略模式)背后,有两个可互换的顾问: - **HeuristicSensei** —— 针对每种浪费提供精选指导,随工具自带,支持离线运行。默认选项。 - **AISensei** —— 发送匿名摘要(评分 + 主要发现,绝不会上传你的源代码文件)到 Anthropic API,以获取针对代码库的定制建议。 ``` pip install "muda-audit[ai]" # the SDK is an optional extra, never a hard dependency export ANTHROPIC_API_KEY=sk-ant-... muda walk . --ai ``` **优雅降级是一项功能,而非权宜之计:**无论没有密钥、没有 SDK、没有网络,还是调用失败——审计都会照常完成并给出启发式建议,同时告诉你原因。核心工具仅有两个依赖(`typer`,`rich`),并且绝不依赖云服务。 | 变量 | 用途 | 默认值 | |---|---|---| | `ANTHROPIC_API_KEY` | 使用 `--ai` 启用 AI 导师 | 未设置 → 使用启发式 | | `MUDA_MODEL` | 覆盖模型 | `claude-haiku-4-5-20251001` ([当前可用模型](https://docs.claude.com/en/api/overview)) | ## CI 质量门禁:拉动安灯拉绳 在丰田生产系统中,任何工人看到缺陷时都可以拉动**安灯拉绳**让生产线暂停。`--fail-on-score` 就是你的 pipeline 中那根安灯拉绳: ``` # .github/workflows/quality.yml - name: Lean waste gate run: | pip install muda-audit muda walk . --fail-on-score 25 --report muda-report.md ``` 预算由你来定:从你代码库当前的水平开始,然后逐渐收紧——这就是*改善*,即持续改进,被编码为一个 CI 数值。 ### muda 审计 muda 本代码库对自身要求极为严格。[CI](.github/workflows/ci.yml) 在每次推送时都会运行 `muda walk . --fail-on-score 0`:此代码库中的**任何**浪费都会导致流水线中断。实现这一目标意味着需要解决典型的扫描器自引用问题(浪费检测器发现了自己的检测模式)——解决方案是仅统计真实代码注释内的标记,并在测试中伪装测试字符串,这与安全扫描器使用的技术相同。 ## 架构 ``` flowchart LR A[walker.py
the gemba walk] -->|FileInfo| B{wastes/ registry} B --> C1[transport] B --> C2[inventory] B --> C3[motion] B --> C4[waiting] B --> C5[overproduction] B --> C6[overprocessing] B --> C7[defects] C1 & C2 & C3 & C4 & C5 & C6 & C7 -->|Findings| D[scoring.py
waste score + Pareto] D --> E[sensei.py
Heuristic / AI advice] D --> F[report.py] E --> F F --> G1[terminal · Rich] F --> G2[markdown] F --> G3[json] ``` 设计决策,按我做出的顺序排列: 1. **一次巡视,多个观察者。** 对代码库的遍历仅进行一次;各项检查接收不可变的 `FileInfo` 记录,不会重新读取文本内容。唯一的例外是刻意为之的:重复项检查会对文件字节进行哈希处理,而等待项检查会调用 `git blame`。 2. **注册表,而非框架。** 每种浪费都是一个实现某个 `Protocol` 的模块。第八种浪费只需一个新文件和一行导入语句——walker、scorer 和 reporters 保持不变(开闭原则)。 3. **导师的策略模式。** 启发式和 AI 顾问在 `get_advice()` 背后可互换;AI 路径在任何失败时都会降级为启发式,因此审计绝不依赖于网络。 4. **分析一次,渲染三次。** 终端、Markdown 和 JSON 视图使用相同的发现和评分结果。渲染过程绝不重新运行分析。 5. **标准库优先。** 解析使用标准库中的 `ast`、`tomllib`、`hashlib`、`subprocess`。仅有两个运行时依赖,且都仅用于呈现。 ## 诚实的局限性 `muda` 是一次现场巡视,而非法庭判决。这些检查是刻意保持保守的启发式算法:未使用依赖检测能识别常见的别名映射(`scikit-learn` → `sklearn`),但无法涵盖所有的插件系统;死代码检测会将任何文本提及视为引用,因此倾向于少报而不是多报;重复检测仅限字节完全相同。这些发现是带有严重性分级的、旨在引发改善讨论的切入点 —— 在删除前请务必自行验证。 目前在 Python 支持方面最为完善,并具备基础的 JS/TS 支持。这些检查是通过对 14 个真实世界的代码库进行实地测试校准而成的。 ## 路线图 近期目标:近似重复检测(规范化 AST 哈希)、一种仅在 PR 中审计已更改文件的 `--diff` 模式、通过 `muda.toml` 设定特定仓库的阈值,以及针对某些精益学派所增加的第八种浪费 ——“未利用的人才”即未记录的公共 API 的检查机制。 ## 关于 跨越不同行业的六年流程咨询经验。 这个工具之所以存在,是因为“七种浪费”被证明是一个通用的视角:它们既适用于车间现场,也同样适用于 `src/` 目录。 *“在自动化之前先消除。” [LinkedIn](https://www.linkedin.com/in/baris-aydin-engineering/) · [GitHub](https://github.com/baris2828) ## 许可证 [MIT](LICENSE)
标签:Blue Team, Python, 云安全监控, 动态分析, 无后门, 精益开发, 逆向工具, 静态分析