软件工程导论
Introduction to Software Engineering
📖这门课到底讲什么
软件工程导论回答一个问题:如何把一个人的编程变成一群人的工程。内容包括软件生命周期与过程模型(瀑布、迭代、敏捷与 Scrum)、需求获取与分析、软件设计(体系结构与详细设计)、编码规范与评审、测试与质量保证、配置管理与变更控制、项目管理与度量、以及软件维护与演化。它的核心不是某一种方法,而是权衡:需求变更与计划、质量与进度、文档与效率。学完你应能为一个中小型项目选择合适的开发过程、写出规范的需求与设计文档、组织代码评审与测试计划,并在团队中承担流程推进的角色。
🎯为什么必须学好
它是求职简历上的软实力背书:面试官问你在团队项目中担任什么角色、如何分工协作、遇到过什么工程问题如何解决,答案都来自这门课。大厂实习与校招的团队项目普遍使用敏捷与 Git 协作,懂流程的同学能迅速融入。对保研与读研而言,它是做科研项目与实验室工程的基础,也是软件工程方向研究的入门。它同时是软件测试、项目管理等后续课程的共同基础。
📌核心知识清单
- 软件与软件危机:软件的特性(复杂性、不可见性、易变性)、软件危机的表现与根源、软件工程的目标与原则
- 软件过程模型:瀑布模型与阶段评审、原型模型、增量与迭代、螺旋模型、敏捷与极限编程、Scrum 的角色与仪式(站会、评审、回顾)
- 需求工程:需求获取技术(访谈、观察、原型)、需求分类(功能性与非功能性)、需求规格说明书与用例、需求变更管理
- 软件设计:体系结构与详细设计的分层、模块化(信息隐藏与抽象)、耦合与内聚的七种类型、设计原则与评审
- 编码与代码质量:编码规范、命名与注释、代码评审流程、静态分析与检查工具、技术债务的概念与管理
- 软件测试:测试的层次(单元、集成、系统、验收)、黑盒与白盒方法、测试用例设计与等价类边界值、回归测试与自动化
- 配置管理与变更控制:基线、版本控制与分支策略、缺陷跟踪与变更请求、构建与发布流程、持续集成初步
- 项目管理与度量:工作量估算(COCOMO、故事点)、进度计划(甘特图与关键路径)、风险识别与应对、团队组织与沟通、软件维护的四种类型
✍️怎么学(可执行步骤)
- 教材用《软件工程导论》(张海藩)或 Sommerville《软件工程》为主线,同时读《人月神话》体会工程管理的经典教训
- 把课程项目按敏捷流程跑一遍:建需求列表、拆任务估故事点、每日记录进度、每周回顾,产出真实的燃尽图与回顾记录
- 写全一套项目文档并在答辩中展示:需求规格、体系结构设计、详细设计、测试计划与用例、用户手册,文档质量往往是课程分数的关键
- 把工具链用起来:用 Jira 或 GitHub Projects 管理任务、用 CI 自动跑测试、用 SonarQube 或 ESLint 检查代码质量,亲身体验工程流程的价值
📚推荐教材与书籍
国内主流教材,结构清晰、考点集中,适合配合课程与考试,覆盖全部阶段模型与文档规范
国际经典教材,案例与度量方法丰富,适合深入理解过程与质量保证
软件工程的思想名著,关于沟通成本、进度估算与没有银弹的论述至今有效,务必读一遍
敏捷开发与设计原则结合的经典,了解工程实践如何与技术设计结合
🎬视频课程 / 公开课
推荐北京大学或清华大学版本,过程模型与需求分析讲解规范
从敏捷实践角度讲工程流程,与课程项目结合紧密
🌐网站与文档
理解 Scrum 角色、事件与制品的权威定义,避免被各种二手解读带偏
技术债务概念的权威解释,写项目复盘或答辩时可直接引用
图文并茂地讲清看板、Scrum 与度量,团队协作实操参考
🐙GitHub 开源资料
项目工程规范清单,涵盖分支策略、文档、测试与依赖管理,可直接作为团队规范模板
其课程体系显示软件工程在整体培养中的位置,可用来对照自身课程完整性
虽为 Node 生态最佳实践,但其中的项目结构、测试、安全与监控实践具有跨语言参考价值
🧪动手实践任务
实践 1
为一门课程项目建立完整的过程档案:需求列表与优先级、两周迭代计划、每日站会记录、燃尽图、迭代回顾与改进项
实践 2
撰写一份规范的需求规格说明书:包含用例描述、非功能需求(性能、安全、可用性)、验收标准,并由同学做一次需求评审并提出十条修改意见
实践 3
搭建持续集成流水线:每次推送自动运行单元测试与代码检查,并让流水线在一次故意引入的错误中失败,记录修复过程
🧾考试与面试
💼 面试会怎么考
常见:你参与过的团队项目中如何分工与沟通、遇到最大困难是什么怎么解决;敏捷开发与瀑布的区别与适用场景;如何做需求变更管理;怎样保证代码质量(评审、测试、CI、静态检查);如果项目进度落后你会砍功能还是加人(考人月神话的理解);技术债务是什么、如何处理。软件岗面试非常看重候选人有没有真正参与过有流程的团队项目。
📝 期末与考研怎么过
期末多为概念与案例题:过程模型对比(瀑布、原型、增量、螺旋、敏捷的适用场景)、需求分析与用例描述、耦合内聚判定、测试用例设计(等价类、边界值)、项目进度与成本估算的计算、简答软件维护类型与项目管理要素。备考策略是背熟对比表(各模型优缺点与选项场景)加练习测试用例设计。目标八十五分以上,这类课分数主要靠知识点覆盖全面。
⚠️ 常见坑
- 把软件工程当成背概念的水课,项目里依旧按个人习惯开发,答辩时讲不出流程与数据支撑
- 文档写完不看不用,与代码脱节;应让文档成为团队沟通工具而非交差材料
- 盲目照搬重型流程(大量文档与阶段评审)到三人小项目,效率极低;应根据规模裁剪
- 忽视非功能需求(性能、安全、可维护性),系统能跑但不可用,真实项目中这是严重缺陷
- 测试只在项目末尾集中做,缺陷堆积导致无法按时交付;应把测试贯穿每次迭代