提示:本章的核心逻辑在于理解**“怎么做软件”**。从宏观的生命周期(三阶段七环节),到具体的实施方法论(瀑布、增量、螺旋、敏捷),你需要掌握不同模型的优缺点及适用场景。

1. 什么是软件开发过程 (Software Development Process)

1.1 核心定义

软件开发过程(也称软件生命周期、软件开发流程)是指软件设计思路和方法的一般过程。

  • 它不只是写代码,而是包括了从功能设计算法实现结构设计编程调试测试提交的全过程。

1.2 核心框架:三阶段七环节 (考试重点)

这是本章最基础的骨架,必须熟记。整个软件生命周期被划分为三个大阶段,包含七个具体环节。

  • 阶段一:策划 (Planning)
    1. 问题定义
    2. 可行性分析
  • 阶段二:开发 (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)
  • 两个层次
    1. 概要设计 (High-level Design):确定系统组织结构、模块划分、接口设计。
    2. 详细设计 (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 最佳实践

  1. 完整团队 (Whole Team):开发、客户、测试在一起工作。
  2. 持续集成 (Continuous Integration):频繁合并代码,保证系统随时可用。
  3. 结对编程 (Pair Programming):两个人一台电脑,一人写一人看,实时复查。
  4. 测试驱动开发 (TDD):先写测试代码(Test First),再写业务代码。发现Bug先加测试用例。
  5. 重构 (Refactoring):持续优化代码结构而不改变其功能。

4.3 SCRUM 模型

  • 核心概念
    • Sprint (冲刺):一个短的迭代周期(通常1-4周)。
    • Backlog:需求列表(产品Backlog -> Sprint Backlog)。
    • 每日站会:快速同步进度。
    • 产出物:潜在可交付的产品增量。

5. 课程总结与助教建议

章节核心思想总结

本章的核心在于阐述**“软件是如何被制造出来的”。它不仅仅是编写代码,而是一个包含策划、开发、运维的完整生命周期。从传统的瀑布模型**(强调文档和顺序)向敏捷开发(强调变化和迭代)的演进,反映了软件工程对风险控制用户需求响应速度的日益重视。

复习建议

  1. 死磕“三阶段七环节”:这是基础中的基础,不仅要背下名称,还要知道每个环节的具体产出(如:需求分析产出需求文档,设计阶段产出架构图等)。
  2. 对比记忆模型:考试常考“瀑布 vs 敏捷”或“螺旋模型的最大特点是什么”。记住:瀑布=文档驱动+线性;增量=分块交付;螺旋=风险分析;敏捷=拥抱变化+迭代。
  3. 理解XP实践:特别是“结对编程”和“测试驱动开发”的概念,不要只记名字,要理解其背后的逻辑(质量保障)。