提示:本章的核心逻辑在于理解**“怎么做软件”**。从宏观的生命周期(三阶段七环节),到具体的实施方法论(瀑布、增量、螺旋、敏捷),你需要掌握不同模型的优缺点及适用场景。
1. 什么是软件开发过程 (Software Development Process)
1.1 核心定义
软件开发过程(也称软件生命周期、软件开发流程)是指软件设计思路和方法的一般过程。
- 它不只是写代码,而是包括了从功能设计、算法实现、结构设计到编程调试、测试及提交的全过程。
1.2 核心框架:三阶段七环节 (考试重点)
这是本章最基础的骨架,必须熟记。整个软件生命周期被划分为三个大阶段,包含七个具体环节。
- 阶段一:策划 (Planning)
- 问题定义
- 可行性分析
- 阶段二:开发 (Development) 3. 需求分析 4. 系统设计 5. 开发 (编码) 6. 测试
- 阶段三:上线 (Launch) 7. 运维
2. 详解“七个环节”
环节 1:问题定义 (Problem Definition)
- 核心任务:讲好故事,抓准痛点。
- 关键产出:明确系统要解决什么问题、系统的目标和范围。
- 助教补充:这一步是“做正确的事”,如果问题定义错了,后面做得再好也是徒劳。
环节 2:可行性分析 (Feasibility Analysis)
- 核心任务:判断这事儿能不能做?值不值得做?
- 分析维度:
- 技术可行性:现在的技术能实现吗?
- 经济可行性:投入产出比划算吗?
- 操作可行性:组织、人力、物力是否支持?
环节 3:需求分析 (Requirement Analysis) (重点)
- 核心任务:做什么?(What to do)
- 主要工作:
- 弄清用户全部需求,划分功能模块和信息架构。
- 产品经理和交互设计师深度参与,产出功能需求文档和交互稿。
环节 4:系统设计 (System Design)
- 核心任务:怎么做?(How to do)
- 两个层次:
- 概要设计 (High-level Design):确定系统组织结构、模块划分、接口设计。
- 详细设计 (Detailed Design):具体到算法、数据结构、类层次结构。目标是详细到可以直接编码。
环节 5:开发/编码 (Development/Coding)
- 核心任务:做出来。
- 工作内容:将设计“翻译”成程序代码。实现用户界面、逻辑结构和数据库。
- 核心理念:开发通常不是一次性通过,而是迭代进行的。
环节 6:测试 (Testing)
- 核心任务:做得怎样?
- 测试分类:
- 白盒测试 vs 黑盒测试
- 单元测试(针对具体模块,常用 Junit)
- 性能测试(常用 Jmeter, LoadRunner)
- 重要认知:测试是耗时的(可能占大型项目3个月-1年),且需要尽早介入。
环节 7:运维 (Operations & Maintenance)
- 核心任务:系统部署、硬件升级、反馈问题、收集新需求。这是软件生命周期中最长的阶段。
3. 常见软件开发模型 (Typical Models)
这部分是考试高频考点,重点在于对比各模型的优缺点及核心特征。
3.1 瀑布模型 (Waterfall Model)
- 定义:将各项活动按固定顺序连接,形如瀑布流水,上一阶段的输出是下一阶段的输入。
- 优点:
- 阶段划分清晰,有检查点。
- 文档规范,适合管理。
- 缺点 (重点):
- 线性过程,难以适应需求变化。
- 风险高:用户要等到最后才能看到产品,一旦发现需求理解错误,推倒重来成本巨大。
3.2 增量模型 (Incremental Model)
- 定义:将系统模块化,分批次开发、集成和交付。
- 核心逻辑:分片交付。先做核心功能(版本1),再做扩展功能(版本2)。
- 优点:用户能及时看到进展,降低风险;开发顺序灵活。
- 缺点:要求系统必须能被模块化,如果耦合度太高则很难实施。
3.3 螺旋模型 (Spiral Model) (核心特征:风险分析)
- 定义:结合了瀑布模型和快速原型的思想,并在每个阶段增加了风险分析。
- 核心思想:通过多次迭代(螺旋上升),不断降低风险。
- 适用场景:大型、复杂、高风险项目。
- 记忆口诀:螺旋模型 = 瀑布模型 + 快速原型 + 风险分析。
3.4 RUP (Rational Unified Process)
- 四个阶段:初始 (Inception)、细化 (Elaboration)、构建 (Construction)、交付 (Transition)。
- 特点:以架构为中心,用例驱动。
4. 敏捷开发模型 (Agile Development)
4.1 敏捷核心价值观
- 拥抱变化:承认需求是快速变化的,试图用详尽文档来锁定需求是不现实的。
- 平衡:在“无过程”和“繁琐过程”之间寻找平衡。
4.2 极限编程 (XP - eXtreme Programming)
XP 最佳实践:
- 完整团队 (Whole Team):开发、客户、测试在一起工作。
- 持续集成 (Continuous Integration):频繁合并代码,保证系统随时可用。
- 结对编程 (Pair Programming):两个人一台电脑,一人写一人看,实时复查。
- 测试驱动开发 (TDD):先写测试代码(Test First),再写业务代码。发现Bug先加测试用例。
- 重构 (Refactoring):持续优化代码结构而不改变其功能。
4.3 SCRUM 模型
- 核心概念:
- Sprint (冲刺):一个短的迭代周期(通常1-4周)。
- Backlog:需求列表(产品Backlog -> Sprint Backlog)。
- 每日站会:快速同步进度。
- 产出物:潜在可交付的产品增量。
5. 课程总结与助教建议
章节核心思想总结
本章的核心在于阐述**“软件是如何被制造出来的”。它不仅仅是编写代码,而是一个包含策划、开发、运维的完整生命周期。从传统的瀑布模型**(强调文档和顺序)向敏捷开发(强调变化和迭代)的演进,反映了软件工程对风险控制和用户需求响应速度的日益重视。
复习建议
- 死磕“三阶段七环节”:这是基础中的基础,不仅要背下名称,还要知道每个环节的具体产出(如:需求分析产出需求文档,设计阶段产出架构图等)。
- 对比记忆模型:考试常考“瀑布 vs 敏捷”或“螺旋模型的最大特点是什么”。记住:瀑布=文档驱动+线性;增量=分块交付;螺旋=风险分析;敏捷=拥抱变化+迭代。
- 理解XP实践:特别是“结对编程”和“测试驱动开发”的概念,不要只记名字,要理解其背后的逻辑(质量保障)。