docs: v1.0.0 独立代码审计 - 重新评估(58/100) + 制定v1.1~v1.5优化路线图 + TDD计划
This commit is contained in:
1 parent
c4bf43f58f
commit
60c3d868c5
3 files changed
+777
-875
No files matched your search
+270
-243
@@ -9,296 +9,323 @@
|
||||
| 日期 | 版本 | 评分 | 主要变更 |
|
||||
|------|------|------|----------|
|
||||
| 2026-04-04 | v0.1.0 | 56/100 | 初始骨架 |
|
||||
| 2026-04-04 | v0.2.0-alpha | 62/100 | UI 交互优化 |
|
||||
| 2026-04-05 | v0.2.0 | 82/100 | 功能基本完成 |
|
||||
| 2026-04-05 | v0.3.0 | 88/100 | 加密 + 端口转发 |
|
||||
| 2026-04-05 | v0.4.0 | 92/100 | 会话管理/UI 完善 |
|
||||
| 2026-04-05 | v0.5.0 | 94/100 | SFTP 传输队列优化 |
|
||||
| 2026-04-05 | v0.6.0 | 95/100 | 终端 rz/sz 支持 |
|
||||
| 2026-04-05 | v0.7.0 | 97/100 | 专业连接管理架构 |
|
||||
| 2026-04-05 | v0.8.0 | 98/100 | 架构模块化重构 |
|
||||
| 2026-04-05 | v0.9.0 | 99/100 | P0/P1 全面优化 |
|
||||
| 2026-04-06 | v0.10.0 | 95/100 | v0.3.0 核心功能发布 |
|
||||
| 2026-04-05 | v0.5.0 | 72/100 | SFTP 传输队列优化 |
|
||||
| 2026-04-06 | v0.10.0 | 78/100 | 核心功能实现发布 |
|
||||
| 2026-04-18 | v1.0.0-audit | **58/100** | 独立代码审计(本次) |
|
||||
|
||||
> **评分说明**: 此前评分(95-99)为开发过程自评,缺少客观基准。本次基于 7 维度独立审计重新评估,结果显著低于历史记录。这是正常的——自评往往偏高,独立审计才能暴露真实问题。
|
||||
|
||||
---
|
||||
|
||||
## v0.10.0 v0.3.0-release (2026-04-06)
|
||||
## v1.0.0 独立审计评估 (2026-04-18)
|
||||
|
||||
### 整体评分
|
||||
|
||||
| 维度 | 分数 | 趋势 | 说明 |
|
||||
|------|------|------|------|
|
||||
| **功能完成度** | 95/100 | 📈 | SSH/SFTP/端口转发全部实现 |
|
||||
| **代码质量** | 88/100 | ➡️ | 模块化架构,统一日志 |
|
||||
| **用户体验** | 92/100 | 📈 | 彩色日志,IP高亮,右键菜单 |
|
||||
| **安全合规** | 80/100 | 📈 | AES-256-GCM 加密 |
|
||||
| **测试覆盖** | 30/100 | 📈 | Vitest 框架,38+ 测试用例 |
|
||||
| 维度 | 分数 | 权重 | 加权分 | 说明 |
|
||||
|------|------|------|--------|------|
|
||||
| **功能完成度** | 82/100 | 25% | 20.5 | SSH/SFTP/端口转发主体完成,SFTP 上传为简化实现 |
|
||||
| **代码质量** | 45/100 | 20% | 9.0 | 调试日志残留严重,组件过大,Mock 数据残留 |
|
||||
| **测试覆盖** | 15/100 | 20% | 3.0 | 仅 34 测试用例,核心模块零覆盖 |
|
||||
| **架构设计** | 72/100 | 15% | 10.8 | IPC 分层合理,Store 有耦合,组件拆分不足 |
|
||||
| **安全合规** | 55/100 | 10% | 5.5 | 加密实现优秀,但密码明文传输风险、CSP 不严格 |
|
||||
| **依赖管理** | 50/100 | 5% | 2.5 | Electron v28 过旧,better-sqlite3 严重过时 |
|
||||
| **构建配置** | 75/100 | 5% | 3.75 | 配置合理,dev 脚本跨平台兼容性差 |
|
||||
|
||||
**综合评分**: 95/100 - v0.3.0 核心功能发布
|
||||
**综合评分: 58/100** — 功能原型阶段,距生产可用尚有差距
|
||||
|
||||
### v0.10.0 完成清单
|
||||
### 评分对比
|
||||
|
||||
| 模块 | 功能 | 状态 |
|
||||
```
|
||||
功能完成度 ████████████████████░░░░░ 82% 功能基本齐全
|
||||
代码质量 ██████████░░░░░░░░░░░░░░░ 45% 调试代码残留严重
|
||||
测试覆盖 ███░░░░░░░░░░░░░░░░░░░░░░ 15% 核心模块零测试
|
||||
架构设计 █████████████████░░░░░░░░ 72% IPC 分层好,Store 有耦合
|
||||
安全合规 █████████████░░░░░░░░░░░░ 55% 加密好,传输链路有风险
|
||||
依赖管理 ████████████░░░░░░░░░░░░░ 50% 多个依赖严重过时
|
||||
构建配置 ██████████████████░░░░░░░ 75% 基本合理
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 代码统计
|
||||
|
||||
### 总量
|
||||
|
||||
| 目录 | 文件数 | 代码行数 | 占比 |
|
||||
|------|--------|----------|------|
|
||||
| `electron/` | 17 | 2,862 | 25.3% |
|
||||
| `src/` | 55 | 7,480 | 66.0% |
|
||||
| `shared/` | 5 | 441 | 3.9% |
|
||||
| `test/` | 4 | 475 | 4.2% |
|
||||
| **总计** | **81** | **11,258** | **100%** |
|
||||
|
||||
### 需重点关注的文件
|
||||
|
||||
| 文件 | 行数 | 问题 |
|
||||
|------|------|------|
|
||||
| SSH 终端 | 密码/密钥认证 | ✅ |
|
||||
| SSH 终端 | XTerm.js 终端 | ✅ |
|
||||
| SSH 终端 | 多主题配色 | ✅ |
|
||||
| SSH 终端 | IP 高亮显示 | ✅ |
|
||||
| SFTP | 双栏文件管理 | ✅ |
|
||||
| SFTP | 上传/下载 | ✅ |
|
||||
| SFTP | 传输队列 | ✅ |
|
||||
| 端口转发 | 本地/远程转发 | ✅ |
|
||||
| 端口转发 | SOCKS5 动态代理 | ✅ |
|
||||
| 架构 | IPC 模块化 | ✅ |
|
||||
| 架构 | 统一日志系统 | ✅ |
|
||||
| 架构 | 连接池管理 | ✅ |
|
||||
| `src/components/TerminalView.tsx` | 645 | 🔴 单组件过大,含 30+ console.log |
|
||||
| `electron/services/ssh-service.ts` | 685 | 🔴 核心服务,20+ console.log |
|
||||
| `src/hooks/useSFTP.ts` | 510 | 🟡 Mock 数据残留,上传未实现 |
|
||||
| `src/stores/connection/poolStore.ts` | 402 | 🟡 合理但与 lifecycleStore 耦合 |
|
||||
|
||||
---
|
||||
|
||||
## v0.9.0 P0/P1 优化 (2026-04-05)
|
||||
## SWOT 分析
|
||||
|
||||
### 整体评分
|
||||
### Strengths (优势)
|
||||
- **加密实现专业**: AES-256-GCM + PBKDF2(100K迭代) + 随机 Salt/IV,业界最佳实践
|
||||
- **IPC 架构清晰**: 8 个模块化 IPC Handler,通道常量统一管理
|
||||
- **连接管理设计**: 状态机 + 连接池 + LRU 淘汰 + 保活,架构先进
|
||||
- **错误处理体系**: 统一错误码 + 错误推断 + ErrorBoundary + 高阶包装函数
|
||||
- **共享类型**: `shared/types/` 主进程/渲染进程共用类型
|
||||
|
||||
| 维度 | 分数 | 趋势 | vs v0.8.0 |
|
||||
|------|------|------|------------|
|
||||
| **功能完成度** | 99/100 | 📈 | +1 |
|
||||
| **代码质量** | 90/100 | 📈 | +2 |
|
||||
| **用户体验** | 97/100 | 📈 | +1 |
|
||||
| **安全合规** | 75/100 | ➡️ | +0 |
|
||||
| **测试覆盖** | 25/100 | 📈 | +10 |
|
||||
### Weaknesses (劣势)
|
||||
- **调试代码残留**: `TerminalView.tsx` 有 `const DEBUG = true`,50+ 处彩色调试函数
|
||||
- **测试严重不足**: 11,258 行代码仅 34 个测试用例,估算覆盖率 10-15%
|
||||
- **组件过大**: TerminalView 645 行承担终端初始化、连接、Shell 数据、快照恢复全部逻辑
|
||||
- **依赖过时**: Electron v28(当前v33+)、better-sqlite3 v9(当前v11)、ESLint v8(已停止维护)
|
||||
- **SFTP 上传未完成**: `useSFTP.ts:399` 标注 "Actual upload implementation would go here"
|
||||
|
||||
**综合评分**: 99/100 - P0/P1 全面优化 (↑1)
|
||||
### Opportunities (机会)
|
||||
- **Electron 升级**: v33+ 性能提升 30%+,内存占用更低
|
||||
- **Zustand v5**: 细粒度订阅,减少不必要的重渲染
|
||||
- **XTerm.js 插件生态**: Image addon、Web Links addon 可增强终端功能
|
||||
- **打包优化**: electron-builder + asar 可显著减小安装包体积
|
||||
|
||||
### v0.9.0 完成清单
|
||||
|
||||
| 任务 | 文件 | 状态 |
|
||||
|------|------|------|
|
||||
| 测试框架建立 | `vitest.config.ts` | ✅ |
|
||||
| SFTP 右键菜单 | `SFTPView.tsx` | ✅ 新建文件夹/复制路径/属性 |
|
||||
| WebGL 渲染优化 | `TerminalView.tsx` | ✅ WebglAddon |
|
||||
| 会话导入完善 | `App.tsx` | ✅ JSON + SSH Config |
|
||||
### Threats (威胁)
|
||||
- **安全风险**: 密码可能通过 IPC 明文传输;`sandbox: false` 降低安全性
|
||||
- **竞品压力**: Electerm、Tabby、Termius 等成熟竞品功能更完善
|
||||
- **跨平台兼容**: `dev` 脚本用 `&` 后台运行,Windows 不可用
|
||||
- **依赖锁定**: ssh2、socksv5 版本锁定,存在已知漏洞风险
|
||||
|
||||
---
|
||||
|
||||
## v0.7.0 完成评估 (2026-04-05)
|
||||
## 关键问题清单
|
||||
|
||||
### 整体评分
|
||||
### 🔴 Critical — 必须修复
|
||||
|
||||
| 维度 | 分数 | 趋势 | vs v0.7.0 |
|
||||
|------|------|------|------------|
|
||||
| **功能完成度** | 98/100 | ➡️ | +0 |
|
||||
| **代码质量** | 88/100 | 📈 | +6 |
|
||||
| **用户体验** | 96/100 | ➡️ | +0 |
|
||||
| **安全合规** | 75/100 | ➡️ | +0 |
|
||||
| **测试覆盖** | 15/100 | ➡️ | +0 |
|
||||
|
||||
**综合评分**: 98/100 - 架构模块化重构 (↑1)
|
||||
|
||||
### v0.8.0 架构重构亮点
|
||||
|
||||
| 重构项 | 文件 | 说明 |
|
||||
|--------|------|------|
|
||||
| IPC Handler 分层 | `electron/ipc/*` | 8 个独立文件,按领域分类 |
|
||||
| 共享类型统一 | `shared/types/*` | 统一类型定义,main/renderer 共用 |
|
||||
| 连接池拆分 | `src/stores/connection/*` | poolStore + lifecycleStore 分离 |
|
||||
| SFTP 组件拆分 | `src/components/sftp/*` | 6 个独立子组件 |
|
||||
|
||||
### 专业连接管理功能
|
||||
|
||||
#### 连接状态机
|
||||
|
||||
| 状态 | 说明 | 转换条件 |
|
||||
|------|------|----------|
|
||||
| `disconnected` | 未连接 | 初始/断开状态 |
|
||||
| `connecting` | 连接中 | 正在建立 SSH 连接 |
|
||||
| `connected` | 已连接 | 当前活跃标签 |
|
||||
| `background` | 后台保持 | 切换到其他标签 |
|
||||
| `suspended` | 已挂起 | 空闲 5 分钟超时 |
|
||||
| `error` | 错误 | 连接失败 |
|
||||
|
||||
#### 连接池管理
|
||||
|
||||
| 指标 | 配置 | 实现 |
|
||||
|------|------|------|
|
||||
| 最大连接数 | 10 | ✅ LRU 淘汰 |
|
||||
| 最大后台连接 | 5 | ✅ 自动断开旧连接 |
|
||||
| 空闲超时 | 5 分钟 | ✅ 进入 suspended |
|
||||
| 挂起超时 | 30 分钟 | ✅ 彻底断开 |
|
||||
| 保活间隔 | 60 秒 | ✅ 发送心跳包 |
|
||||
|
||||
#### 终端快照
|
||||
|
||||
| 功能 | 状态 | 说明 |
|
||||
|------|------|------|
|
||||
| 保存缓冲区 | ✅ | 最后 1000 行 |
|
||||
| 恢复光标位置 | ✅ | 准确定位 |
|
||||
| 快速切换 | ✅ | 无黑屏体验 |
|
||||
| 内存优化 | ✅ | 仅后台标签保存 |
|
||||
|
||||
### 功能完成度更新
|
||||
|
||||
| 模块 | 功能点 | 已完成 | 未完成 | 完成率 |
|
||||
|------|--------|--------|--------|--------|
|
||||
| **SSH 连接** | 连接/断开/重连/认证/状态机 | 6 | 0 | 100% |
|
||||
| **连接管理** | 连接池/LRU/保活/超时 | 5 | 0 | 100% |
|
||||
| **终端仿真** | 显示/输入/复制/粘贴/rz/sz/快照 | 7 | 0 | 100% |
|
||||
| **SFTP** | 浏览/上传/下载/队列 | 5 | 0 | 100% |
|
||||
| **端口转发** | 本地/远程/动态 | 3 | 0 | 100% |
|
||||
| **会话管理** | 创建/编辑/删除/复制/分组 | 5 | 0 | 100% |
|
||||
| **多标签管理** | 创建/切换/克隆/关闭/隔离 | 5 | 0 | 100% |
|
||||
| **设置系统** | 界面/持久化/生效 | 4 | 0 | 100% |
|
||||
| **主题系统** | 主题选择/应用 | 2 | 0 | 100% |
|
||||
|
||||
---
|
||||
|
||||
## 当前状态评估
|
||||
|
||||
### 整体评分 (2026-04-05)
|
||||
|
||||
| 维度 | 分数 | 趋势 | vs v0.5.0 |
|
||||
|------|------|------|------------|
|
||||
| **功能完成度** | 97/100 | 📈 | +2 |
|
||||
| **代码质量** | 80/100 | ➡️ | +0 |
|
||||
| **用户体验** | 94/100 | 📈 | +1 |
|
||||
| **安全合规** | 75/100 | ➡️ | +0 |
|
||||
| **测试覆盖** | 15/100 | ➡️ | +0 |
|
||||
|
||||
**综合评分**: 95/100 - 功能完善阶段 (↑1)
|
||||
|
||||
---
|
||||
|
||||
## v0.5.0 完成优化
|
||||
|
||||
### SFTP 传输队列优化
|
||||
|
||||
| 优化项 | 文件 | 状态 |
|
||||
|--------|------|------|
|
||||
| 传输队列显示 | `SFTPView.tsx` | ✅ |
|
||||
| 传输历史记录 | `SFTPView.tsx` | ✅ |
|
||||
| 可收起面板 | `SFTPView.tsx` | ✅ |
|
||||
| 多文件上传队列 | `SFTPView.tsx` | ✅ |
|
||||
| Downloads 目录默认路径 | `SFTPView.tsx` | ✅ |
|
||||
| 跨平台路径支持 | `preload.ts`, `main.ts` | ✅ |
|
||||
|
||||
### UI/UX 优化
|
||||
|
||||
| 优化项 | 文件 | 状态 |
|
||||
|--------|------|------|
|
||||
| SFTP 传输队列面板 | `SFTPView.tsx` | ✅ |
|
||||
| 移除 SFTP 删除按钮 | `SFTPView.tsx` | ✅ |
|
||||
|
||||
### 终端 rz/sz 支持
|
||||
|
||||
| 优化项 | 文件 | 状态 |
|
||||
|--------|------|------|
|
||||
| rz 命令拦截 | `TerminalView.tsx` | ✅ |
|
||||
| sz 文件接收 | `TerminalView.tsx` | ✅ |
|
||||
| 文件读写 API | `preload.ts`, `main.ts` | ✅ |
|
||||
|
||||
### 功能完成度评估
|
||||
|
||||
| 模块 | 功能点 | 已完成 | 未完成 | 完成率 |
|
||||
|------|--------|--------|--------|--------|
|
||||
| **SSH 连接** | 连接/断开/重连/认证 | 4 | 0 | 100% |
|
||||
| **终端仿真** | 显示/输入/复制/粘贴/rz/sz | 6 | 0 | 100% |
|
||||
| **SFTP** | 浏览/上传/下载/队列 | 5 | 0 | 100% |
|
||||
| **端口转发** | 本地/远程/动态 | 3 | 0 | 100% |
|
||||
| **会话管理** | 创建/编辑/删除/复制/分组 | 5 | 0 | 100% |
|
||||
| **设置系统** | 界面/持久化/生效 | 3 | 0 | 100% |
|
||||
| **主题系统** | 主题选择/应用 | 2 | 0 | 100% |
|
||||
| **加密存储** | AES-256/密钥环 | 1 | 1 | 50% |
|
||||
|
||||
---
|
||||
|
||||
## 待完成问题清单
|
||||
|
||||
#### 🟡 Minor (可优化)
|
||||
|
||||
| ID | 问题 | 模块 | 状态 |
|
||||
| ID | 问题 | 位置 | 影响 |
|
||||
|----|------|------|------|
|
||||
| m-1 | 文件列表右键菜单 | SFTP | 待实现 |
|
||||
| m-2 | 全局快捷键 | 快捷键 | 待优化 |
|
||||
| m-3 | WebGL 渲染优化 | 终端 | 待优化 |
|
||||
| C-1 | 生产代码中 `DEBUG = true` + 50+ 调试函数 | `TerminalView.tsx:16` | 控制台信息泄露、性能损耗 |
|
||||
| C-2 | 核心模块零测试(SSH/加密/IPC) | `electron/services/*` | 重构/修改无安全网 |
|
||||
| C-3 | SFTP 上传功能为占位实现 | `useSFTP.ts:399` | 核心功能不可用 |
|
||||
| C-4 | 密码可能明文通过 IPC 传输 | `preload.ts`, `session.types.ts` | 安全漏洞 |
|
||||
| C-5 | Mock 数据残留生产代码 | `useSFTP.ts:154-161` | 生产环境显示假文件 |
|
||||
|
||||
#### ✅ 已解决问题 (v0.7.0)
|
||||
### 🟡 Warning — 建议修复
|
||||
|
||||
| ID | 问题 | 模块 | 解决方案 |
|
||||
|----|------|------|----------|
|
||||
| f-1 | 多标签连接隔离 | 连接管理 | 独立 connectionInstance |
|
||||
| f-2 | 标签切换黑屏 | 终端 | 快照保存/恢复机制 |
|
||||
| f-3 | 连接无法复用 | 连接池 | LRU + 引用计数 |
|
||||
| f-4 | 连接资源泄漏 | 连接池 | 空闲/挂起超时机制 |
|
||||
| ID | 问题 | 位置 | 影响 |
|
||||
|----|------|------|------|
|
||||
| W-1 | TerminalView 645 行,职责过多 | `TerminalView.tsx` | 可维护性差 |
|
||||
| W-2 | Store 间直接耦合 | `lifecycleStore.ts:39` | 改一处动全局 |
|
||||
| W-3 | Electron v28 严重过时 | `package.json` | 性能和安全更新缺失 |
|
||||
| W-4 | better-sqlite3 v9 过时 | `package.json` | 功能和性能缺失 |
|
||||
| W-5 | react-router-dom 未使用 | `package.json` | 无用依赖增大包体积 |
|
||||
| W-6 | IPC 通道名硬编码 | `preload.ts` | 未引用 IPC_CHANNELS 常量 |
|
||||
| W-7 | `Math.random()` 生成 ID | `TerminalView.tsx:383` | 非唯一,应用 uuid |
|
||||
| W-8 | disconnect() 几乎空实现 | `useSFTP.ts:359-373` | 资源不释放 |
|
||||
| W-9 | CSP 允许 unsafe-inline | `index.html:7` | 削弱 XSS 防护 |
|
||||
| W-10 | 主进程 tsconfig 无未使用检查 | `electron/tsconfig.json` | 坏代码无编译警告 |
|
||||
|
||||
### 🟢 Good — 做得好的
|
||||
|
||||
| ID | 实践 | 位置 |
|
||||
|----|------|------|
|
||||
| G-1 | AES-256-GCM 加密 + PBKDF2 密钥派生 | `crypto.ts` |
|
||||
| G-2 | IPC Handler 按领域分 8 个模块 | `electron/ipc/*` |
|
||||
| G-3 | 共享类型定义 main/renderer 共用 | `shared/types/*` |
|
||||
| G-4 | contextIsolation: true, nodeIntegration: false | `main.ts` |
|
||||
| G-5 | 统一错误码系统 + 错误推断 | `error-handler.ts` |
|
||||
| G-6 | 连接状态机 6 状态 + LRU 淘汰 | `connectionPool.ts` |
|
||||
|
||||
---
|
||||
|
||||
## 安全合规评估
|
||||
## 依赖评估
|
||||
|
||||
| ID | 问题 | 严重性 | 状态 |
|
||||
|----|------|--------|------|
|
||||
| S-1 | 密码明文存储在 SQLite | 🔴 Critical | ✅ 已修复 (AES-256-GCM) |
|
||||
| S-2 | SSH 私钥内容未加密 | 🔴 Critical | 🟡 待实现 (路径不敏感) |
|
||||
| S-3 | `sandbox: false` | 🟠 Major | 待优化 |
|
||||
| S-4 | `contextIsolation: true` | ✅ 已配置 | - |
|
||||
|
||||
### 安全目标 (v1.0.0)
|
||||
|
||||
- [x] 实现 AES-256-GCM 加密
|
||||
- [x] 主密钥自动管理
|
||||
- [ ] 集成系统密钥环 (keytar)
|
||||
- [ ] 启用 sandbox 模式
|
||||
| 依赖 | 当前 | 最新 | 状态 | 风险 |
|
||||
|------|------|------|------|------|
|
||||
| `electron` | ^28.3.3 | v33+ | 🔴 严重过时 | 性能、安全、API 兼容 |
|
||||
| `better-sqlite3` | ^9.4.0 | v11.x | 🟡 过时 | 性能改进 |
|
||||
| `zustand` | ^4.4.7 | v5.x | 🟡 非最新 | 细粒度订阅改进 |
|
||||
| `lucide-react` | ^0.294.0 | 0.4xx | 🟡 过时 | 图标缺失 |
|
||||
| `socksv5` | ^0.0.6 | — | 🟡 不稳定 | 0.0.x 版本 |
|
||||
| `react-router-dom` | ^6.21.0 | 6.x | 🟢 未使用 | 死依赖 |
|
||||
| `eslint` | ^8.55.0 | v9.x | 🟡 已停维 | flat config 迁移 |
|
||||
| `react` / `react-dom` | ^18.2.0 | 18.3.x | 🟢 稳定 | — |
|
||||
| `@xterm/xterm` | ^5.5.0 | 5.5.x | 🟢 最新 | — |
|
||||
| `ssh2` | ^1.15.0 | 1.15.x | 🟢 稳定 | — |
|
||||
|
||||
---
|
||||
|
||||
## 测试策略
|
||||
## 测试评估
|
||||
|
||||
### 测试覆盖率目标
|
||||
### 现状
|
||||
|
||||
| 版本 | 单元测试 | 集成测试 | E2E |
|
||||
|------|----------|----------|-----|
|
||||
| v0.5.0 | 20% | 10% | 5% |
|
||||
| v1.0.0 | 60% | 30% | 15% |
|
||||
| 测试文件 | 用例数 | 覆盖模块 |
|
||||
|----------|--------|----------|
|
||||
| `test/stores/tabStore.test.ts` | 15 | tabStore(完整) |
|
||||
| `test/stores/connectionPool.test.ts` | 7 | poolStore(仅接口验证) |
|
||||
| `test/components/sftp/utils.test.ts` | 12 | sftp/utils.ts(完整) |
|
||||
| **总计** | **34** | — |
|
||||
|
||||
### 未覆盖的关键模块
|
||||
|
||||
| 模块 | 代码行数 | 优先级 | 说明 |
|
||||
|------|----------|--------|------|
|
||||
| `ssh-service.ts` | 685 | P0 | SSH 连接/Shell/端口转发核心 |
|
||||
| `crypto.ts` | ~100 | P0 | 加密/解密必须验证正确性 |
|
||||
| `database-service.ts` | 310 | P1 | 数据持久化 |
|
||||
| `TerminalView.tsx` | 645 | P1 | 核心终端组件 |
|
||||
| `useSFTP.ts` | 510 | P1 | SFTP 全部操作 |
|
||||
| `ipc/*.ts` (8个) | ~600 | P1 | IPC 通道处理 |
|
||||
| `error-handler.ts` | 330 | P2 | 错误处理工具 |
|
||||
| `poolStore.ts` | 402 | P2 | 连接池逻辑 |
|
||||
| `lifecycleStore.ts` | 235 | P2 | 生命周期管理 |
|
||||
|
||||
**估算覆盖率: ~10-15%**(vitest.config.ts 设定 50% 阈值,实际远未达到)
|
||||
|
||||
---
|
||||
|
||||
## 安全评估
|
||||
|
||||
### 加密实现 ✅ 优秀
|
||||
|
||||
| 评估项 | 状态 | 说明 |
|
||||
|--------|------|------|
|
||||
| AES-256-GCM | ✅ | 认证加密,防篡改 |
|
||||
| PBKDF2 密钥派生 | ✅ | 100,000 迭代 |
|
||||
| 随机 Salt + IV | ✅ | 每次加密独立 |
|
||||
| Master Key 文件权限 | ✅ | 0o600 |
|
||||
| Auth Tag 验证 | ✅ | 解密时校验完整性 |
|
||||
|
||||
### 安全隐患 ⚠️
|
||||
|
||||
| 问题 | 严重性 | 说明 |
|
||||
|------|--------|------|
|
||||
| 密码可能明文通过 IPC | 🔴 | Session 类型含 password 字段,需确认传输时是否加密 |
|
||||
| SSH 私钥通过 IPC 明文 | 🟡 | `sshConnect(config: any)` 私钥内容明文传递 |
|
||||
| `sandbox: false` | 🟡 | preload 未启用沙箱 |
|
||||
| CSP `unsafe-inline` | 🟡 | 削弱 XSS 防护 |
|
||||
| IPC 无输入验证 | 🟡 | 所有 IPC 调用参数无 schema 验证 |
|
||||
|
||||
---
|
||||
|
||||
## 性能指标
|
||||
|
||||
| 指标 | 当前值 | 目标值 | 说明 |
|
||||
| 指标 | 当前值 | 目标值 | 达标 |
|
||||
|------|--------|--------|------|
|
||||
| **冷启动时间** | ~3s | <2s | - |
|
||||
| **SSH 连接速度** | ~1s | <500ms | - |
|
||||
| **终端输入延迟** | <16ms | <10ms | - |
|
||||
| **内存占用** | ~200MB | <150MB | 10 标签并发 |
|
||||
| **标签切换延迟** | <50ms | <100ms | ✅ 达标 |
|
||||
| **后台连接保持** | 5 个 | - | ✅ 专业功能 |
|
||||
| **连接复用率** | >80% | - | 相同配置 |
|
||||
| **包体积** | ~120MB | <100MB | - |
|
||||
| 冷启动时间 | ~3s | <2s | ❌ |
|
||||
| SSH 连接速度 | ~1s | <500ms | ❌ |
|
||||
| 终端输入延迟 | <16ms | <10ms | ✅ |
|
||||
| 内存占用(10标签) | ~200MB | <150MB | ❌ |
|
||||
| 标签切换延迟 | <50ms | <100ms | ✅ |
|
||||
| 包体积 | ~120MB | <100MB | ❌ |
|
||||
|
||||
---
|
||||
|
||||
## 下一步计划
|
||||
## 优化方向与目标
|
||||
|
||||
### v1.0.0 Stable 完成条件
|
||||
### v1.1.0 — 代码质量清理 (预计 1 周)
|
||||
|
||||
| 优先级 | 功能 | 状态 |
|
||||
|--------|------|------|
|
||||
| P0 | 测试框架建立 | 🔴 待开始 |
|
||||
| P1 | 文件列表右键菜单 | 🟡 待实现 |
|
||||
| P1 | WebGL 渲染优化 | 🟡 待优化 |
|
||||
| P2 | sandbox 模式 | 🟡 待优化 |
|
||||
**目标**: 清除生产代码中的调试残留,提升代码质量评分至 70+
|
||||
|
||||
### v0.7.0 架构亮点
|
||||
| 任务 | 优先级 | 影响文件 | 预计工时 |
|
||||
|------|--------|----------|----------|
|
||||
| 移除所有 console.log / 调试函数 | P0 | `TerminalView.tsx`, `useSFTP.ts`, `ssh-service.ts` | 4h |
|
||||
| 移除 `DEBUG = true` 硬编码 | P0 | `TerminalView.tsx:16` | 0.5h |
|
||||
| 移除 Mock 数据 | P0 | `useSFTP.ts:154-161` | 1h |
|
||||
| 补全 SFTP 上传功能 | P0 | `useSFTP.ts` | 4h |
|
||||
| 补全 disconnect() 资源释放 | P1 | `useSFTP.ts:359-373` | 2h |
|
||||
| Math.random → uuid | P1 | `TerminalView.tsx` | 1h |
|
||||
| IPC 通道名引用常量 | P2 | `preload.ts` | 2h |
|
||||
| 移除未使用依赖 react-router-dom | P2 | `package.json` | 0.5h |
|
||||
|
||||
**验收标准**:
|
||||
- `grep -r "console.log" src/ electron/` 返回 0 结果
|
||||
- `grep -r "DEBUG = true" src/` 返回 0 结果
|
||||
- SFTP 上传功能端到端可用
|
||||
|
||||
### v1.2.0 — 组件拆分重构 (预计 1.5 周)
|
||||
|
||||
**目标**: TerminalView 拆分为可维护的模块,架构评分提升至 80+
|
||||
|
||||
| 任务 | 优先级 | 说明 |
|
||||
|------|--------|------|
|
||||
| TerminalView → useTerminal Hook | P0 | 提取连接管理、Shell 数据处理 |
|
||||
| TerminalView → useTerminalSnapshot Hook | P0 | 提取快照保存/恢复逻辑 |
|
||||
| TerminalView → useZmodem Hook | P1 | 提取 rz/sz 文件传输逻辑 |
|
||||
| useSFTP → useSFTPNavigation + useSFTPTransfer | P1 | 分离导航和传输职责 |
|
||||
| App.tsx → 导入/导出逻辑抽到 service | P2 | 分离业务逻辑 |
|
||||
| Store 解耦 | P2 | lifecycleStore 不直接操作 poolStore |
|
||||
|
||||
**验收标准**:
|
||||
- 单文件不超过 300 行
|
||||
- Hook 职责单一,可独立测试
|
||||
|
||||
### v1.3.0 — 测试覆盖达标 (预计 2 周)
|
||||
|
||||
**目标**: 核心模块测试覆盖率 60%+,测试评分提升至 50+
|
||||
|
||||
| 阶段 | 目标模块 | 用例目标 |
|
||||
|------|----------|----------|
|
||||
| 第一批(P0) | `crypto.ts`, `ssh-service.ts`(mock ssh2) | 30+ |
|
||||
| 第二批(P1) | `database-service.ts`, `error-handler.ts`, `poolStore.ts` | 40+ |
|
||||
| 第三批(P1) | `IPC handlers`(8个), `TerminalView`(组件测试) | 50+ |
|
||||
| 第四批(P2) | `useSFTP`, `lifecycleStore`, `tabStore`补充 | 30+ |
|
||||
|
||||
**验收标准**:
|
||||
- `npm test -- --coverage` 总覆盖率 ≥ 50%
|
||||
- 核心模块(crypto, ssh-service) 覆盖率 ≥ 80%
|
||||
|
||||
### v1.4.0 — 依赖升级 + 安全加固 (预计 1 周)
|
||||
|
||||
**目标**: 依赖更新到稳定版本,安全评分提升至 75+
|
||||
|
||||
| 任务 | 优先级 | 风险 |
|
||||
|------|--------|------|
|
||||
| Electron v28 → v33+ | P0 | Breaking changes 需逐一适配 |
|
||||
| better-sqlite3 v9 → v11 | P0 | API 有变化 |
|
||||
| ESLint v8 → v9 flat config | P1 | 配置迁移 |
|
||||
| Zustand v4 → v5 | P2 | 订阅 API 变化 |
|
||||
| 启用 sandbox 模式 | P1 | preload 需适配 |
|
||||
| CSP 移除 unsafe-inline | P1 | Tailwind 需配置 |
|
||||
| IPC 参数 schema 验证 | P2 | 引入 zod 或类似库 |
|
||||
|
||||
### v1.5.0 — 功能补全 + 性能优化 (预计 2 周)
|
||||
|
||||
**目标**: 补全缺失功能,性能指标全面达标
|
||||
|
||||
| 任务 | 优先级 | 说明 |
|
||||
|------|--------|------|
|
||||
| SFTP 拖拽上传/下载 | P1 | 界面就绪,补全事件处理 |
|
||||
| SFTP 断点续传 | P2 | 大文件传输可靠性 |
|
||||
| 会话分组树形显示 | P2 | 侧边栏优化 |
|
||||
| 终端分屏 | P3 | 水平/垂直分屏 |
|
||||
| 安装包体积优化 | P1 | asar + tree-shaking + 依赖瘦身 |
|
||||
| 冷启动优化 | P1 | 延迟加载非核心模块 |
|
||||
|
||||
---
|
||||
|
||||
## 里程碑总览
|
||||
|
||||
```
|
||||
专业级连接管理
|
||||
├── 连接状态机 (6 个状态)
|
||||
├── LRU 淘汰策略
|
||||
├── 终端快照机制
|
||||
├── 自动保活 & 超时
|
||||
└── 连接复用优化
|
||||
v1.1.0 代码质量清理 (1 周) → 代码质量 45→70
|
||||
v1.2.0 组件拆分重构 (1.5 周) → 架构 72→85
|
||||
v1.3.0 测试覆盖达标 (2 周) → 测试 15→50
|
||||
v1.4.0 依赖升级+安全 (1 周) → 安全 55→75
|
||||
v1.5.0 功能补全+性能 (2 周) → 功能 82→95
|
||||
|
||||
设计原则
|
||||
├── 资源隔离:每个标签独立连接实例
|
||||
├── 性能优化:快照避免重复渲染
|
||||
├── 资源控制:连接池上限管理
|
||||
└── 用户体验:无缝标签切换
|
||||
总计: ~7.5 周 → 综合评分 58→80+
|
||||
```
|
||||
|
||||
### 成功指标
|
||||
|
||||
| 指标 | v1.0 当前 | v1.5 目标 |
|
||||
|------|-----------|-----------|
|
||||
| 综合评分 | 58/100 | 80+/100 |
|
||||
| 测试覆盖率 | ~10% | ≥50% |
|
||||
| 代码质量(零console.log) | 50+ 处 | 0 处 |
|
||||
| 单文件最大行数 | 685 | ≤300 |
|
||||
| Electron 版本 | v28 | v33+ |
|
||||
| 安全评分 | 55 | 75+ |
|
||||
| 包体积 | ~120MB | <100MB |
|
||||
Reference in new issue
Block a user