示例工程【免费下载链接】modern-software-dev-assignmentsAssignments for CS146S: The Modern Software Dev (Stanford University Fall 2026/2025)项目地址https://gitcode.com/GitHub_Trending/mo/modern-software-dev-assignments点击查看免费下载导读本指南围绕 Stanford CS146S《现代软件开发》课程 Week 7 作业展开核心任务是在一个具备分页、排序、筛选与 PATCH 更新能力的 FastAPI SQLite 全栈项目上实践AI 驱动的开发 人工逐行评审 Graphite Diamond AI 代码审查的完整工作流。读者学完后将掌握如何用 1-shot 提示让 AI 编码工具在独立分支上完成 4 个递进式任务、如何撰写高质量 PR 描述与测试总结、如何对比自己与 AI 的评审意见并形成可复用的信任启发式以及如何把每次 PR 的评审结果沉淀进writeup.md交付物。一、作业总览从 Agent 驱动开发到 AI 审查闭环assignment.md 把本周定位为在更进阶的代码库上练习 Agent 驱动开发与 AI 辅助代码审查。与前面几周相比Week 7 的价值不在实现功能本身而在流程每个任务都要走完建分支 → AI 实现 → 人工逐行评审 → 开 PR → Graphite Diamond 生成 AI 审查 → 记录到 writeup的完整闭环。Week 7 代码库是 Week 5 的增强版全栈 starter见 README.md技术栈包括FastAPI 后端 SQLiteSQLAlchemy ORM无 Node 工具链的静态前端pytest 最小测试集pre-commitblack ruff相比 Week 5 的后端增强点有模型时间戳created_at/updated_at、列表接口分页与排序、可选过滤器如按完成状态过滤 action item、以及支持部分更新的 PATCH 端点——这些正是 Task 1 和 Task 4 的改造对象。1.1 四个任务一览tasks.md 定义了四个递进式任务任务内容涉及领域Task 1增加更多 API 端点实现规范的输入校验与错误处理API 设计、Pydantic 校验、HTTP 错误语义Task 2扩展动作项action item抽取逻辑加入更复杂的模式识别与分析文本处理、正则/规则引擎Task 3新增数据库模型与关系并让应用支持它们SQLAlchemy 建模、外键关系、CRUDTask 4提升分页与排序功能的测试覆盖率测试设计、边界条件、查询参数语义从源码结构看这 4 个任务正好映射到仓库中可扩展的四个模块路由层backend/app/routers/、抽取服务backend/app/services/extract.py、模型层backend/app/models.py和测试目录backend/tests/。二、Graphite 入门与环境准备2.1 注册与免费额度按 assignment.md 的指引在 Graphite 官网注册账号注册后可领取30 天免费试用30 天后使用课程代码CS146S在教育计划下免费使用 Graphite。这一步是后续 Graphite Diamond AI 审查的前提——PR 审查功能依赖 Graphite 的托管服务而不仅仅是你本地的 git 工作流。2.2 本地项目初始化在动手前先准备好 Week 7 运行环境命令以仓库实际 Makefile 与 README.md 为准# 1) 创建并激活虚拟环境安装依赖 python -m venv .venv source .venv/bin/activate pip install -e .[dev] # 2) 可选安装 pre-commit 钩子 pre-commit install # 3) 启动应用进入 week7 目录 cd week7 make run启动后访问http://localhost:8000查看前端http://localhost:8000/docs查看 FastAPI 自动生成的 API 文档。从 main.py 可以看到FastAPI 以静态文件方式挂载了frontend目录根路径直接返回frontend/index.html。2.3 常用开发命令Makefile 封装了本周的全部高频操作cd week7 make run # 启动 uvicorn默认 127.0.0.1:8000支持 HOST/PORT 环境变量覆盖 cd week7 make test # 运行 pytest -q backend/tests cd week7 make format # black 格式化 ruff check --fix cd week7 make lint # ruff check cd week7 make seed # 按需灌入 ./data/seed.sql 种子数据注意make run内部使用uvicorn backend.app.main:app --reload开发期修改代码会自动热重载make seed调用的是backend/app/db.py中的apply_seed_if_needed()——该函数只在数据库文件首次创建时执行种子 SQL见 db.py因此重复执行不会重复灌入数据。2.4 数据库配置仓库支持通过.env覆盖默认配置把.env.example复制为.env即可覆盖DATABASE_PATH等默认值。backend/app/db.py中默认数据库路径为./data/app.dbDATABASE_PATH环境变量可覆盖引擎创建时指定了check_same_thread: False以适配 FastAPI 的多线程请求场景。三、任务工作流每个任务的标准操作步骤assignment.md 对每个任务规定了固定六步流程创建独立分支每个任务一个分支避免任务间相互污染用 AI 工具实现使用你选择的 AI 编码工具如 Cursor、Copilot、Claude 等采用1-shot 提示——即一次性给出完整任务描述不进行多轮对话修补人工逐行评审逐行审查改动修复发现的问题在需要解释的地方补上有说明性的 commit message也可以与同学结对互相评审对方的改动打开 PRPR 必须包含三类内容——问题描述与你的实现思路、测试总结含执行的命令与结果、新增/修改的测试、值得注意的取舍/局限/后续跟进用 Graphite Diamond 生成 AI 审查在 PR 上运行 Graphite Diamond 生成 AI 辅助代码审查记录结果把每个 PR 的结果写入 writeup.md。3.1 1-shot 提示的实战含义1-shot 提示要求你在一次消息里把所有上下文给足任务目标、涉及文件、验收标准、项目约束。以 Task 1 为例一个合格的 1-shot 提示大致是在 week7 仓库中为 notes 和 action-items 路由补充输入校验与错误处理 - 在 backend/app/schemas.py 中为 Create/Patch schema 增加字段长度与空值校验 - 在 backend/app/routers/notes.py 中为创建/更新端点补充明确的 4xx 错误响应 - 为新增行为在 backend/tests/ 下补充 pytest 测试。 完成后列出改动文件清单与测试命令。这种一次说清、不反复修补的提示方式正是本作业想训练的能力把需求拆解成机器可执行的任务描述这也决定了后续人工评审的难度起点。3.2 PR 内容模板作业明确要求每个 PR 包含三部分结合 writeup.md 的交付结构一份合格 PR 描述应覆盖问题与思路这个任务解决什么问题你的实现方案是什么为什么选这个方案测试总结列出运行的命令如make test、make lint与结果说明新增/修改了哪些测试文件、覆盖了什么场景取舍与后续有哪些已知 tradeoff如校验规则的宽松度、性能开销、局限和 follow-up 项。四、代码库基础四个任务的改造对象在让 AI 动手之前先理解仓库现状——这也是人工评审能看出问题的前提。4.1 数据模型时间戳与状态models.py 定义了三个类TimestampMixin为模型统一提供created_at插入时默认datetime.utcnow与updated_at插入和更新时自动刷新两个时间戳列NoteidtitleString(200)非空contentText非空ActionItemiddescriptionText非空completedBoolean默认False。目前两个模型是完全独立的——没有任何外键关系。这正是 Task 3新增模型与关系的切入点例如可以引入User、Project或Tag模型并让Note/ActionItem通过外键与它们建立relationship。种子数据 seed.sql 用 SQL 直接建表并插入两条示例笔记和两个动作项时间戳列用 SQLite 的STRFTIME生成 UTC 字符串——注意这与 SQLAlchemy 侧 Python 生成的datetime在格式上略有差异评审时值得留意的一致性细节。4.2 路由层分页、排序、筛选与 PATCHnotes.py 与 action_items.py 实现了本周的核心 API 能力分页与排序两个列表端点都用skip: int 0做偏移分页limit: int Query(50, le200)限制单页最大 200 条sort参数默认为-created_at前缀-表示降序。排序字段通过hasattr动态校验——字段不存在时回退到desc(created_at)而不是返回 400sort_field sort.lstrip(-) order_fn desc if sort.startswith(-) else asc if hasattr(ActionItem, sort_field): stmt stmt.order_by(order_fn(getattr(ActionItem, sort_field))) else: stmt stmt.order_by(desc(ActionItem.created_at))筛选/action-items/支持completed布尔过滤/notes/支持q关键词搜索对 title 与 content 做contains匹配。注意q为空时使用if q:判断空字符串不会触发搜索。部分更新两个资源都提供了PATCH /{id}只更新传入的字段if payload.field is not None逐个判断/action-items/{id}/complete是专用的完成标记端点未找到资源时统一返回404。校验现状从 schemas.py 看当前 Pydantic schema 只有类型约束str、bool、int | None没有长度上限、非空校验或自定义 validator——这正是 Task 1 要补的输入校验同时列表端点的非法limit目前依赖 FastAPI 的le200约束非法 sort 字段被静默降级Task 1 也要求把这类错误处理得更明确。4.3 抽取服务当前实现与 Task 2 的扩展空间extract.py 是 Task 2 的唯一改造对象当前实现是一个极简规则引擎def extract_action_items(text: str) - list[str]: lines [line.strip(- ) for line in text.splitlines() if line.strip()] results: list[str] [] for line in lines: normalized line.lower() if normalized.startswith(todo:) or normalized.startswith(action:): results.append(line) elif line.endswith(!): results.append(line) return results规则只有两条行首为todo:/action:不区分大小写或整行以!结尾。对应的测试 test_extract.py 验证了这三种命中场景。Task 2 的更复杂的模式识别和分析可以从以下方向扩展支持[ ]/[x]复选框语法、fix:/bug:等更多前缀、多行句子的跨行判断、去重与优先级排序、返回带类型的结构化结果如(类型, 文本)元组等——这些都属于可以从源码结构推断的合理扩展方向。4.4 测试设施临时数据库隔离conftest.py 提供了clientfixture每次测试创建一个tempfile.mkstemp()临时 SQLite 数据库通过app.dependency_overrides[get_db]覆盖依赖注入测试结束删除临时文件。这保证了测试不触碰开发数据库、互不污染。现有测试 test_notes.py 和 test_action_items.py 各有一个端到端用例覆盖创建 → 列表 → 筛选/搜索 → PATCH主链路但分页边界skip/limit 组合、limit 超上限 400、offset 超总量、排序字段合法性、404 分支等场景尚未覆盖——这就是 Task 4提升分页与排序测试覆盖率的明确空白点。五、Graphite Diamond AI 审查与结果沉淀5.1 在 PR 上运行 AI 审查PR 创建并推送后在 Graphite 界面打开该 PR使用 Graphite Diamond 生成 AI 辅助代码审查。审查意见会以行级评论的形式出现在 PR 上这也是交付要求Graphite Diamond AI review comments visible on the PR中可见二字的关键——评审结果必须呈现在 PR 评论区而不仅是你自己本地看到。5.2 writeup.md交付物的核心writeup.md 是本周唯一的文字交付物结构分两部分四个任务的 PR 记录每个任务三小节相关 commit/issue 链接、PR 描述、Graphite Diamond 生成的代码审查记录。Brief Reflection反思共 4 问a. 你在人工评审中通常发表哪类评论如正确性、性能、安全、命名、测试缺口、API 形态、UX、文档——作业希望借此让你意识到自己评审的盲区分布b. 对比你自己的评论与 Graphite AI 评论逐 PR 分析差异c. 指出 AI 评审何时比你强、何时比你弱并给出具体例子例如 AI 可能在未覆盖分支、边界条件上更全面但可能在项目特定上下文、命名语义上不如你;d. 描述你对 AI 评审的信任程度以及今后何时依赖 AI 评审的启发式规则。5.3 评审对比的方法论做 b/c 两问时建议按 PR 逐条列一张对照表PR我的评论Graphite 评论重叠AI 更优我更优Task 1...............这样既能识别 AI 的盲区往往是需要项目上下文的判断也能发现自己人工评审的盲区往往是 AI 更擅长的机械性检查如未覆盖的边界条件、资源泄漏、异常路径。结合作业给出的评论类型清单correctness、performance、security、naming、test gaps、API shape、UX、docs你可以为自己建立一套评审 checklist逐步逼近 AI 与人类的互补分工。六、提交与评分要点6.1 提交清单按 assignment.md 的 Submission Instructions确保所有改动已推送push到远程仓库供评分在作业仓库中把brentju和febielin添加为协作者通过 Gradescope 提交。6.2 评分构成共 100 分每个任务 20 分共 80 分技术正确性与完整性代码质量可读性、命名、结构、错误处理、测试人工评审笔记的思考深度Graphite Diamond AI 生成的代码审查。Brief Reflection 20 分你自己的评审与 Graphite AI 评审之间富有洞察力的对比对 AI 评审信任程度的个人化描述。注意评分点里Thoughtfulness and depth of manual review notes与Graphite Diamond AI generated code review是两个独立评分项——意味着人工评审和 AI 评审都要产出缺一不可这正是本周人机协同评审的核心设计。七、常见问题与实战提示make seed为什么看起来没效果apply_seed_if_needed()只在数据库文件首次创建时执行种子 SQL见 db.py。想重置数据需要删除旧数据库文件后重启应用。AI 生成的代码风格不一致怎么办提交前运行cd week7 make formatblack ruff --fix与make lintpre-commit 配置见 pre-commit-config.yamlblack、ruff、EOF 修复、去尾随空白四个钩子。人工评审从哪看起建议按schema 校验 → 路由错误分支 → 查询参数边界 → 测试覆盖的顺序逐文件过对照 schemas.py、routers/ 与 tests/ 的现状找差距。AI 审查意见与自己不一致怎么办这正是 Reflection 要写的素材以代码能否通过make test与边界用例为客观标准逐条判定意见是否成立并记录你的判断依据。赞分享示例工程【免费下载链接】modern-software-dev-assignmentsAssignments for CS146S: The Modern Software Dev (Stanford University Fall 2026/2025)项目地址https://gitcode.com/GitHub_Trending/mo/modern-software-dev-assignments点击查看免费下载相关推荐modern-software-dev-assignments Week 7 实战指南Agent 驱动开发与 AI 代码审查的四个核心任务modern software dev assignments Week 7 实战指南Agent 驱动开发与 AI 代码审查的四个核心任务 本文以 week7示例工程Lean Copilot智能代码辅助与审查利器Lean Copilot智能代码辅助与审查利器 项目简介 是一个强大的开源工具它旨在为开发者提供实时的代码建议和自动化代码审查服务。借助机器学习算法该工具人工智能大模型形式化验证AI 应用SWE-agent工具系统全解析从文件映射到代码审查的完整生态SWE agent工具系统全解析从文件映射到代码审查的完整生态 概述重新定义软件工程自动化 在当今快速迭代的软件开发环境中开发团队面临着一个核心挑战如何AI AgentAgent 框架代码智能体后端开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考