软件过程模型以瀑布模型为例,软件开发方法以结构化开发方法为例:
好的,这是一个非常核心的软件工程问题。要理解这两个概念,关键在于分清 "做什么" 和 "怎么做"。
- 软件结构化开发方法 解决的是 "做什么" 的问题,即技术方法论。它告诉我们如何像搭积木一样,用自顶向下、逐层分解的方式来设计和构建软件。
- 瀑布模型 解决的是 "怎么做" 的问题,即过程模型 或 生命周期模型。它规定了在项目开发中,应该先做什么阶段,后做什么阶段,以及各个阶段之间如何衔接。
下面我们来详细解析这两个概念及其关系。
一、软件结构化开发方法
这是一种指导思想 和工具箱。
1. 核心思想
其核心是"自顶向下,逐层分解"(Top-Down, Stepwise Refinement)。将一个复杂的、宏观的系统,像剥洋葱一样,一层一层地分解成更小、更简单、更易于管理和实现的模块,直到这些模块足够简单,可以直接用编程语言实现为止。
2. 主要组成部分
结构化方法贯穿于整个软件开发过程,主要体现在以下三个方面:
-
结构化分析(Structured Analysis, SA):主要用于需求分析阶段。
- 工具:数据流图(DFD)、数据字典(DD)、加工逻辑说明(如判定表/树)、实体关系图(ERD)。
- 目标 :建立逻辑模型,专注于系统需要"做什么",而不关心"如何实现"。它描绘了数据在系统中的流动路径和处理过程。
-
结构化设计(Structured Design, SD):主要用于软件设计阶段。
- 工具:结构图(SC)。
- 目标 :将SA阶段得到的逻辑模型,转化为软件的架构模型。它关注如何将系统划分为模块(模块化)、模块间的层次关系(调用关系)以及模块间传递的数据。
-
结构化编程(Structured Programming, SP):主要用于编码阶段。
- 核心原则 :使用三种基本控制结构(顺序、选择、循环)来构建程序,避免使用
goto语句,以创建清晰、易读、易维护的代码。
- 核心原则 :使用三种基本控制结构(顺序、选择、循环)来构建程序,避免使用
3. 打个比方
如果把建房子比作软件开发:
- 结构化分析 就像是和业主沟通,画出房子的功能布局图(哪里是客厅,哪里是卧室,水电怎么走)。
- 结构化设计 就像是建筑师根据布局图,画出详细的建筑结构图纸(承重墙、梁、柱的位置和关系)。
- 结构化编程 就像是施工队按照结构图纸,用标准的砖块和水泥砌墙盖楼。
二、瀑布模型
这是一个管理框架 和路线图。
1. 核心思想
将软件生命周期的各项活动规定为依固定顺序连接的若干阶段工作,形如瀑布流水,逐级下落。
- 核心特征 :
- 阶段性:过程划分为清晰、离散的阶段(如:需求、设计、编码、测试、维护)。
- 顺序性:前一阶段的输出是后一阶段的输入,必须完成前一阶段才能开始后一阶段。
- 文档驱动:每个阶段都必须完成规定的文档,并通过评审后才能进入下一阶段。文档是阶段间传递工作的唯一标准。
2. 典型阶段
- 问题定义与规划
- 需求分析 -> 产出《需求规格说明书》
- 软件设计 -> 产出《设计文档》
- 程序编码 -> 产出源代码
- 软件测试 -> 产出测试报告
- 运行维护
3. 优缺点
-
优点:
- 简单易用:模型直观,易于理解和操作。
- 强制纪律:要求每个阶段都有明确的文档和评审,降低了管理的随意性。
- 适合需求明确的项目:对于像国防、航天等需求极其稳定、变更极少的项目,它依然有效。
-
缺点:
- 缺乏灵活性:难以适应需求的变化。一旦进入后期阶段,修改前期的工作成果代价高昂。
- 客户反馈延迟:客户只有在项目末期才能看到可运行的软件,风险高。
- "阻塞"现象:前一个阶段没完成,后一个阶段就无法开始。
三、两者的关系:相辅相成
瀑布模型为结构化开发方法提供了最佳的实施舞台,而结构化开发方法是填充瀑布模型各个阶段的具体技术手段。
- 在瀑布模型的"需求分析"阶段 ,你使用 "结构化分析(SA)" 的方法和工具(如DFD)来产出《需求规格说明书》。
- 在瀑布模型的"软件设计"阶段 ,你使用 "结构化设计(SD)" 的方法和工具(如结构图)来产出《设计文档》。
- 在瀑布模型的"程序编码"阶段 ,你遵循 "结构化编程(SP)" 的原则来编写代码。
总结一下:
| 维度 | 结构化开发方法 | 瀑布模型 |
|---|---|---|
| 本质 | 技术方法论 、思维方式 | 过程模型 、管理框架 |
| 关注点 | 如何分析、设计、编码 | 项目阶段的划分与顺序 |
| 回答的问题 | "如何分析和设计软件?" | "先做什么,后做什么?" |
| 关系 | "血肉" - 具体做什么事 | "骨架" - 做这些事的顺序 |
在软件工程的早期,这两者几乎是密不可分的黄金组合。人们用瀑布模型来管理项目进程,并在其中的分析、设计、编码阶段普遍采用结构化的方法。
然而,随着软件项目变得越来越复杂、需求变化越来越快,瀑布模型的僵化缺点暴露无遗。== 因此,后来诞生了迭代、增量、螺旋乃至敏捷等各种更灵活的过程模型,而结构化方法也逐渐被面向对象等方法所补充或替代。==但理解这一经典组合,对于掌握软件工程的基本思想和演进脉络至关重要。