10-项目规划、测试、代码审查实战使用 Cursor 完成软件工程全流程项目规划、测试驱动开发、代码审查与质量保障。一、AI 驱动项目管理概述1.1 全流程覆盖项目启动 ↓ 需求分析 → AI 辅助需求拆解 ↓ 技术方案 → AI 生成架构设计 ↓ 任务分解 → AI 生成任务清单 ↓ 开发实现 → AI 辅助编码 ↓ 测试验证 → AI 生成测试、运行测试 ↓ 代码审查 → AI 自动审查 ↓ 文档生成 → AI 生成技术文档 ↓ 项目交付1.2 Cursor 在各阶段的作用阶段Cursor 功能使用场景项目规划Chat 讨论、Agent 生成文档架构设计、技术选型开发实现Agent 多文件编辑、Tab 补全多文件重构、代码生成测试Inline Edit 单文件测试单文件单元测试代码审查Review Selection、单文件审查深度代码审查二、项目规划阶段2.1 需求分析与拆解使用 Cursor Chat 进行需求分析打开 Chat 面板 (CtrlL) 输入 我有一个项目想法做一个在线笔记应用 请帮我分析需求并生成详细的功能清单。Claude 输出结构## 需求分析 ### 核心功能 1. 用户系统 - 注册/登录邮箱密码、OAuth - 个人资料管理 - 密码重置 2. 笔记管理 - 创建/编辑/删除笔记 - 富文本编辑Markdown 支持 - 笔记分类文件夹/标签 - 搜索功能 3. 协作功能 - 笔记分享链接/邀请 - 实时协作编辑 - 评论系统 4. 高级功能 - 版本历史 - 导出PDF、Markdown - 自动保存 - 离线支持 ### 技术选型建议 - 后端FastAPI PostgreSQL - 前端React TypeScript - 实时WebSocket / Socket.io - 部署Docker AWS/GCP2.2 技术方案设计使用 Agent 生成架构文档选中项目目录或新建文件 docs/architecture.md 按 CtrlI (Composer) 输入 基于在线笔记应用的需求生成技术架构文档 1. 系统架构图 2. 数据库设计 3. API 设计 4. 技术栈选型 5. 部署架构生成的架构文档结构# 在线笔记应用 - 技术架构 ## 1. 系统架构┌─────────────────────────────────────────────────┐│ 客户端层 ││ ┌──────────┐ ┌──────────┐ ┌──────────┐ ││ │ Web App │ │ Mobile │ │ Desktop │ ││ │ (React) │ │ (React │ │ (Electron)│ ││ └────┬─────┘ │ Native) │ └────┬─────┘ ││ └─────────┴──────────┴───────┘ │└─────────────────────────────────────────────────┘│ HTTPS↓┌─────────────────────────────────────────────────┐│ 网关层 ││ Nginx / AWS API Gateway │└─────────────────────────────────────────────────┘│↓┌─────────────────────────────────────────────────┐│ 应用层 ││ FastAPI (Python) ││ ┌──────────┐ ┌──────────┐ ┌──────────┐ ││ │ Auth │ │ Notes │ │ Share │ ││ │ Service │ │ Service │ │ Service │ ││ └──────────┘ └──────────┘ └──────────┘ │└─────────────────────────────────────────────────┘│↓┌─────────────────────────────────────────────────┐│ 数据层 ││ ┌──────────────┐ ┌──────────────┐ ││ │ PostgreSQL │ │ Redis │ ││ │ (主数据库) │ │ (缓存) │ ││ └──────────────┘ └──────────────┘ │└─────────────────────────────────────────────────┘## 2. 数据库设计 ### 2.1 用户表 (users) sql CREATE TABLE users ( id SERIAL PRIMARY KEY, email VARCHAR(255) UNIQUE NOT NULL, username VARCHAR(50) UNIQUE NOT NULL, hashed_password VARCHAR(255) NOT NULL, is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );2.2 笔记表 (notes)CREATETABLEnotes(idSERIALPRIMARYKEY,titleVARCHAR(200)NOTNULL,contentTEXT,user_idINTEGERREFERENCESusers(id),folder_idINTEGERREFERENCESfolders(id),is_publicBOOLEANDEFAULTFALSE,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,updated_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP);3. API 设计3.1 认证相关POST /api/v1/auth/register- 用户注册POST /api/v1/auth/login- 用户登录POST /api/v1/auth/refresh- 刷新 Token3.2 笔记管理GET /api/v1/notes- 获取笔记列表POST /api/v1/notes- 创建笔记GET /api/v1/notes/{id}- 获取笔记详情PUT /api/v1/notes/{id}- 更新笔记DELETE /api/v1/notes/{id}- 删除笔记4. 技术栈层次技术后端框架FastAPI 0.100ORMSQLAlchemy 2.0数据库PostgreSQL 15缓存Redis 7认证JWT bcrypt部署Docker Docker Compose### 2.3 任务分解与排期 **生成开发任务清单**选中 docs/tasks.md按 CtrlI (打开 Agent 面板选择 Agent 模式)输入“基于技术架构生成详细的开发任务清单包括任务名称、优先级、预计工时、依赖关系。”生成的任务清单 markdown # 开发任务清单 ## Phase 1: 基础设施 (Week 1) | 任务 | 优先级 | 工时 | 负责人 | 依赖 | |------|--------|------|--------|------| | [ ] 项目初始化 | P0 | 4h | AI | - | | [ ] 数据库设计 | P0 | 4h | AI | - | | [ ] 配置管理 | P0 | 2h | AI | 项目初始化 | | [ ] 日志系统 | P1 | 2h | AI | 项目初始化 | | [ ] Docker 配置 | P1 | 4h | AI | - | ## Phase 2: 用户系统 (Week 1-2) | 任务 | 优先级 | 工时 | 依赖 | |------|--------|------|------| | [ ] User 模型 | P0 | 2h | 数据库设计 | | [ ] JWT 认证 | P0 | 4h | User 模型 | | [ ] 注册 API | P0 | 2h | JWT 认证 | | [ ] 登录 API | P0 | 2h | JWT 认证 | | [ ] 用户资料 API | P1 | 2h | 注册 API | | [ ] 密码重置 | P2 | 4h | 登录 API | ## Phase 3: 笔记功能 (Week 2-3) | 任务 | 优先级 | 工时 | 依赖 | |------|--------|------|------| | [ ] Note 模型 | P0 | 2h | User 模型 | | [ ] Folder 模型 | P0 | 2h | Note 模型 | | [ ] 笔记 CRUD API | P0 | 4h | Note 模型 | | [ ] 文件夹 API | P0 | 3h | Folder 模型 | | [ ] 搜索功能 | P1 | 4h | 笔记 CRUD | | [ ] 标签系统 | P1 | 3h | Note 模型 | ## Phase 4: 高级功能 (Week 4) | 任务 | 优先级 | 工时 | 依赖 | |------|--------|------|------| | [ ] 分享功能 | P1 | 4h | 笔记功能 | | [ ] 版本历史 | P2 | 6h | 笔记功能 | | [ ] 导出功能 | P2 | 4h | 笔记功能 | | [ ] WebSocket 实时协作 | P2 | 8h | 分享功能 | ## Phase 5: 测试与优化 (Week 4-5) | 任务 | 优先级 | 工时 | 依赖 | |------|--------|------|------| | [ ] 单元测试 | P0 | 8h | 所有功能 | | [ ] 集成测试 | P0 | 6h | 单元测试 | | [ ] 性能优化 | P1 | 4h | 测试完成 | | [ ] 部署配置 | P1 | 4h | 优化完成 |三、测试驱动开发3.1 测试策略规划使用 Chat 生成测试策略打开 Chat 面板 (CtrlL) 输入 为在线笔记应用生成测试策略文档包括 1. 测试金字塔单元、集成、E2E 2. 测试覆盖率目标 3. 关键测试场景 4. 测试数据策略 5. CI/CD 中的测试流程 保存为 docs/testing-strategy.md生成的测试策略# 测试策略文档 ## 1. 测试金字塔/\ / \ E2E 测试 (10%) - Playwright /____\ / \ 集成测试 (30%) - pytest TestClient /________\/ \ 单元测试 (60%) - pytest mock/____________\## 2. 覆盖率目标 | 模块 | 单元测试 | 集成测试 | 总覆盖率 | |------|----------|----------|----------| | models | 90% | - | 90% | | services | 85% | 70% | 95% | | routers | 80% | 80% | 95% | | utils | 90% | - | 90% | ## 3. 关键测试场景 ### 3.1 认证模块 - [ ] 用户注册成功 - [ ] 注册时邮箱已存在 - [ ] 登录成功 - [ ] 登录时密码错误 - [ ] Token 过期处理 ### 3.2 笔记模块 - [ ] 创建笔记成功 - [ ] 创建笔记时标题为空 - [ ] 更新自己的笔记 - [ ] 更新他人的笔记权限检查 - [ ] 删除笔记 - [ ] 搜索笔记 ### 3.3 并发场景 - [ ] 同时编辑同一笔记 - [ ] 高并发下的数据一致性3.2 生成测试框架代码使用 Agent 生成测试基础设施选中 tests/conftest.py 按 CtrlI (Composer) 输入 生成测试基础设施代码 1. pytest fixtures 2. 测试数据工厂 3. 测试工具函数 4. 异步数据库支持生成的conftest.py# tests/conftest.pyimportasyncioimportpytestimportpytest_asynciofromhttpximportAsyncClientfromsqlalchemy.ext.asyncioimportAsyncSession,create_async_enginefromsqlalchemy.ormimportsessionmakerfromapp.mainimportappfromapp.databaseimportBase,get_dbfromapp.models.userimportUserfromapp.utils.securityimportget_password_hash# 测试数据库TEST_DATABASE_URLpostgresqlasyncpg://test:testlocalhost/test_dbenginecreate_async_engine(TEST_DATABASE_URL)TestingSessionLocalsessionmaker(engine,class_AsyncSession,expire_on_commitFalse)pytest_asyncio.fixture(scopesession)defevent_loop():Create an instance of the default event loop for each test case.loopasyncio.get_event_loop_policy().new_event_loop()yieldloop loop.close()pytest_asyncio.fixture(scopesession,autouseTrue)asyncdefsetup_database():创建测试数据库表asyncwithengine.begin()asconn:awaitconn.run_sync(Base.metadata.create_all)yieldasyncwithengine.begin()asconn:awaitconn.run_sync(Base.metadata.drop_all)pytest_asyncio.fixtureasyncdefdb_session():获取测试数据库会话asyncwithTestingSessionLocal()assession:yieldsession# 清理数据awaitsession.rollback()pytest_asyncio.fixtureasyncdefasync_client(db_session):获取测试客户端asyncdefoverride_get_db():yielddb_session app.dependency_overrides[get_db]override_get_dbasyncwithAsyncClient(appapp,base_urlhttp://test)asclient:yieldclient app.dependency_overrides.clear()pytest_asyncio.fixtureasyncdeftest_user(db_session):创建测试用户userUser(emailtestexample.com,usernametestuser,hashed_passwordget_password_hash(testpassword),is_activeTrue)db_session.add(user)awaitdb_session.commit()awaitdb_session.refresh(user)returnuserpytest_asyncio.fixtureasyncdefauth_headers(async_client,test_user):获取认证 headersresponseawaitasync_client.post(/api/v1/auth/login,json{username:test_user.username,password:testpassword})tokenresponse.json()[access_token]return{Authorization:fBearer{token}}3.3 单文件单元测试使用 Inline Edit 生成单元测试打开 src/routers/auth.py 选中 auth 相关代码 按 CtrlK (Inline Edit) 输入 为这段代码生成 pytest 单元测试 测试注册成功、注册失败、登录成功、登录失败场景生成的测试示例# tests/test_auth.pyimportpytestfromhttpximportAsyncClientfromsqlalchemy.ext.asyncioimportAsyncSessionfromapp.models.userimportUserpytest.mark.asyncioclassTestAuth:认证模块测试asyncdeftest_register_success(self,async_client:AsyncClient,db_session:AsyncSession):测试用户注册成功# Arrangeuser_data{email:newuserexample.com,username:newuser,password:password123}# Actresponseawaitasync_client.post(/api/v1/auth/register,jsonuser_data)# Assertassertresponse.status_code201dataresponse.json()assertdata[email]user_data[email]assertdata[username]user_data[username]assertidindata# 验证数据库userawaitdb_session.get(User,data[id])assertuserisnotNoneassertuser.emailuser_data[email]asyncdeftest_register_duplicate_email(self,async_client:AsyncClient,test_user:User):测试注册时邮箱已存在# Arrangeuser_data{email:test_user.email,# 已存在的邮箱username:anotheruser,password:password123}# Actresponseawaitasync_client.post(/api/v1/auth/register,jsonuser_data)# Assertassertresponse.status_code400assertemail already existsinresponse.json()[detail].lower()3.4 运行测试与分析在 Cursor 终端中运行测试# 打开终端 (Ctrl)# 运行测试pytest tests/-v--covapp --cov-reportterm-missing --cov-reporthtml# 分析结果# ✓ 45 个测试通过# ✓ 覆盖率: 87%# ⚠ 3 个测试跳过需要 Redis使用 Chat 分析测试结果分析 pytest 测试结果 1. 哪些模块覆盖率不足 2. 提供改进建议 3. 生成缺失测试的代码模板四、代码审查与质量保障4.1 配置自动化代码审查创建检查清单选中 .cursor/code-review-checklist.md 按 CtrlI (Composer) 输入 创建代码审查检查清单包括 1. 功能性检查 2. 代码规范 3. 类型安全 4. 安全性 5. 性能 6. 测试生成的检查清单# 代码审查检查清单 ## 功能性检查 - [ ] 代码是否实现了预期功能 - [ ] 边界条件是否正确处理 - [ ] 错误处理是否完善 - [ ] 日志记录是否适当 ## 代码规范 - [ ] 遵循 PEP8 规范 - [ ] 命名清晰有意义 - [ ] 函数长度合理50 行 - [ ] 类职责单一 ## 类型安全 - [ ] 所有函数有类型注解 - [ ] 复杂类型使用 TypeVar/Generic - [ ] Optional/Union 使用正确 - [ ] mypy 检查通过 ## 安全性 - [ ] 无 SQL 注入风险 - [ ] 无 XSS 漏洞 - [ ] 敏感信息不硬编码 - [ ] 输入验证完善 ## 性能 - [ ] 无 N1 查询问题 - [ ] 大数据集使用分页 - [ ] 缓存使用合理 - [ ] 无内存泄漏风险 ## 测试 - [ ] 单元测试覆盖核心逻辑 - [ ] 边界情况有测试 - [ ] 错误路径有测试 - [ ] 测试可重复运行4.2 单文件深度审查使用 Review Selection打开 src/services/note_service.py 选中 process_notes 函数 右键 → Review Selection 或 Chat 中输入 审查 src/services/note_service.py 中的 process_notes 函数 重点关注性能和错误处理4.3 使用 Agent 批量审查选中 src/ 目录下的所有 Python 文件 按 CtrlI (Composer) 输入 批量审查这些 Python 文件 1. 检查代码规范PEP8 2. 检查类型注解完整性 3. 检查安全漏洞 4. 检查性能问题 5. 生成审查报告生成的审查报告# 代码审查报告 生成时间: 2024-XX-XX 审查范围: src/ 审查标准: PEP8, mypy, security, performance ## 总体评分 | 模块 | 规范 | 类型 | 安全 | 性能 | 综合 | |------|------|------|------|------|------| | models | 95 | 90 | 100 | 95 | 95 | | routers | 85 | 80 | 90 | 85 | 85 | | services | 90 | 85 | 95 | 80 | 87 | | utils | 92 | 88 | 100 | 90 | 92 | ## 发现的问题 ### 高优先级 (必须修复) 1. **src/routers/notes.py:45** - SQL 注入风险 python # 问题代码 query fSELECT * FROM notes WHERE title LIKE %{keyword}% # 建议修复 query SELECT * FROM notes WHERE title LIKE :keyword result await db.execute(query, {keyword: f%{keyword}%})src/services/auth.py:32- 密码明文存储# 问题代码user.passwordpassword# 明文存储# 建议修复user.hashed_passwordget_password_hash(password)中优先级 (建议修复)src/routers/users.py- 缺少错误处理建议添加 try-except 块统一错误响应格式src/services/note_service.py- N1 查询建议使用 joinedload 优化查询低优先级 (可选优化)部分函数缺少文档字符串部分变量命名可以更有意义修复建议运行black src/自动格式化运行mypy src/检查类型添加 bandit 安全检查到 CI为所有 API 路由添加限速### 4.4 自动化质量门禁 **使用 Agent 生成 CI 配置**选中 .github/workflows/quality.yml按 CtrlI (Composer)输入生成 CI/CD 配置包含代码格式检查black, isort代码规范检查flake8类型检查mypy安全检查bandit单元测试pytest覆盖率检查80%生成的 GitHub Actions 配置 yaml # .github/workflows/quality.yml name: Code Quality on: push: branches: [ main, develop ] pull_request: branches: [ main ] jobs: quality: runs-on: ubuntu-latest steps: - uses: actions/checkoutv3 - name: Set up Python uses: actions/setup-pythonv4 with: python-version: 3.9 - name: Install dependencies run: | pip install -r requirements.txt pip install -r requirements-dev.txt - name: Check code formatting run: | black --check src/ tests/ isort --check-only src/ tests/ - name: Lint with flake8 run: | flake8 src/ tests/ --max-line-length100 - name: Type check with mypy run: | mypy src/ - name: Security check with bandit run: | bandit -r src/ -f json -o bandit-report.json || true - name: Test with pytest run: | pytest tests/ -v --covsrc --cov-reportxml - name: Upload coverage uses: codecov/codecov-actionv3 with: file: ./coverage.xml fail_ci_if_error: true五、完整项目流程示例5.1 项目启动到交付Week 1: 项目规划 ├── Chat 讨论需求 ├── Agent 生成架构文档 └── Agent 生成任务清单 Week 2-3: 开发阶段 ├── Agent 并行开发用户模块 ├── Agent 并行开发笔记模块 └── Inline Edit 生成单元测试 Week 4: 测试与审查 ├── 终端运行所有测试 ├── Agent 批量代码审查 └── Inline Edit 修复问题 Week 5: 文档与交付 ├── Agent 生成 API 文档 ├── Agent 生成部署文档 └── Agent 完善 README5.2 实际开发会话示例会话1项目初始化 打开 Chat (CtrlL) 初始化 FastAPI 项目 notes-app 包含完整目录结构、Docker 配置、CI/CD 会话2需求分析 分析需求在线笔记应用 生成功能清单、用户故事、技术方案 会话3数据库设计 Composer: 设计数据库模型 - User, Note, Folder, Tag, Share 生成 SQLAlchemy 模型和迁移脚本 会话4API 开发 Composer: 并行生成 API 路由 - Auth, Notes, Folders, Tags 包含完整的 CRUD 和权限控制 会话5测试生成 Inline Edit: 为当前文件生成完整的测试套件 会话6代码审查 Review Selection: 审查选中代码的质量 会话7文档生成 Composer: 生成技术文档和 API 文档六、最佳实践总结6.1 项目规划最佳实践分阶段交付每个阶段产出可验证的成果文档先行架构文档、API 文档先于代码任务明确每个任务有清晰的输入输出定义风险评估提前识别技术难点和风险点6.2 测试最佳实践测试先行核心功能先写测试再实现分层测试单元 → 集成 → E2E数据工厂使用工厂模式生成测试数据覆盖率目标核心代码 90%总代码 80%6.3 代码审查最佳实践自动化优先CI 中集成代码检查分层审查AI 初筛 → 人工深度审查问题分级高/中/低优先级修复跟踪确保所有高优先级问题修复七、Cursor vs Claude Code 对比阶段Cursor 优势Claude Code 优势项目规划Composer 可视化编辑CLI 快速生成文档开发实现多文件编辑、Tab 补全批量文件操作测试单文件 Inline Edit批量测试生成代码审查单文件深度 Review批量审查推荐组合复杂架构设计 → Claude Code 生成 → Cursor Composer 细化日常开发 → Cursor 为主批量审查 → Claude Code 为主