软件工程
- 层级
- 本科生
- 状态
- 建设中
提示:本课程仍在持续设计和校准中,页面内容仅供参考,不代表最终教学版本。
教学大纲
课程概览
本课程面向已经具备基础编程能力的本科生,训练学生把一个模糊的问题转化为可维护、可测试、可演进的软件系统。课程参考 MIT 6.102 对软件构造质量的强调、CMU 17-313 对工程过程和团队协作的训练、Berkeley CS 169A 对敏捷迭代和用户价值的组织方式,以及 UW CSE 403 对真实项目交付的要求;但课程重心放在安全实验室语境下的软件工程:需求、设计、实现、测试、评审、部署和运维都要为可靠性、安全性和长期维护负责。
这是 55AA 课程体系中的工程入口课,也是后续软件安全、程序分析、安全基线与合规自动化课程的实践基础。
先修要求
- 至少掌握一门通用编程语言,能够独立完成 1000 行左右的程序。
- 理解基本数据结构、模块化、命令行、Git 和单元测试的基本概念。
- 愿意在团队中接受代码评审、重构建议和持续交付约束。
学习目标
- 把开放式需求分解为用户故事、质量属性、验收标准和可排期任务。
- 设计具有清晰边界的模块、接口和数据模型,并能解释设计取舍。
- 使用版本控制、代码评审、静态检查、测试和 CI 维护团队代码质量。
- 编写覆盖正常路径、边界条件、错误处理和回归风险的测试。
- 用迭代方式交付一个可运行系统,并通过监控、文档和发布流程支持后续维护。
- 识别常见工程风险,包括需求漂移、技术债、供应链依赖、安全缺陷和团队协作失效。
教学组织
- 每周 2 次课堂:一次概念与案例,一次设计评审、代码评审或项目工作坊。
- 每 2 周一次迭代交付,要求有可演示功能、测试结果和复盘记录。
- 课程项目采用 4 到 5 人团队,题目优先选择实验室工具、课程平台、数据处理或安全工程相关系统。
周计划
需求、用户故事与质量属性
把开放题目写成用户故事、验收标准和风险清单。
版本控制、分支策略与代码评审
完成第一次可运行迭代和一次正式代码评审。
测试策略:单元、集成、端到端
为关键路径补测试,并定义测试覆盖目标。
错误处理、日志与可观测性
为项目加入结构化日志、错误边界和基本监控指标。
持续集成、自动化检查与发布
建立 CI 流水线,自动运行格式、静态检查和测试。
安全需求与安全编码基础
做一次威胁建模,修复至少两个安全或健壮性问题。
团队协作、项目管理与工程伦理
更新 issue 计划、责任分工和风险登记表。
第三次迭代评审与可用性测试
邀请目标用户试用,记录反馈并确定最终修复清单。
文档、移交与长期维护
完成 README、运维手册、测试说明和已知问题清单。
考核方式
需求分析、接口设计、测试设计、重构和故障复盘等短作业。
四次迭代交付,评分关注用户价值、工程质量、测试证据、可维护性和安全意识。
Pull request 质量、评审反馈、issue 管理、设计记录和发布记录。
说明系统目标、架构、关键实现、测试与部署、已知限制和后续路线图。
参与讨论、评审、项目例会和同伴反馈。
课程项目
团队项目必须有真实用户或明确使用场景。最低交付要求包括:可运行部署、核心功能演示、自动化测试、代码评审记录、威胁建模记录、发布说明和维护文档。鼓励选择能被实验室后续复用的系统,例如课程资料管理、论文与项目展示、实验平台、数据采集清洗工具、轻量级安全扫描或合规检查工具。
课程政策
- 允许使用 AI 工具,但所有生成代码、实验记录和设计建议必须经过学生本人审查,并在报告中说明使用方式。
- 严禁提交不能解释的代码、证明、配置或实验结果;答辩时每名成员都需要解释自己负责部分的设计、测试和取舍。
- 迟交会影响迭代评分,但课程更看重可复现、可审计和可维护的结果,而不是临时堆砌。
参考课程
国际名校
- CMU17-313 Foundations of Software Engineering
- ETH ZurichRigorous Software Engineering
- Georgia TechCS 6300 Software Development Process
- MIT6.102 Software Construction
- OxfordSoftware Engineering Programme
- UC BerkeleyCS 169A Introduction to Software Engineering
- University of WashingtonCSE 403 Software Engineering