结构化分析与结构化设计 (SA/SD)

2025年3月17日 | 阅读 10 分钟
Structured Analysis vs Structured Design (SA/SD)

结构化分析

结构化分析是一种软件工程方法,它侧重于以有组织和系统的方式理解、记录和评估系统需求。它使用数据流图 (DFD) 和实体关系图 (ERD) 等图形工具来描绘组织内部的流程、信息流和信息元素。结构化分析旨在以清晰有序的方式展示系统如何工作以及信息如何在其中流动。

关键组成部分

1. 数据流图 (DFD)

定义:数据流图 (DFD) 是描绘数据如何在系统中流动的图形工具。它们展示了数据如何在流程、数据存储和实体之间移动。

关键组件

- 流程:将输入数据转换为输出数据的操作或函数。

- 数据流表示流程、数据存储和外部实体之间的传输。

- 数据存储是存储数据的档案。

- 外部实体:这些与系统交互但不是系统一部分的元素。

2. 数据字典

定义:数据字典是数据项、结构以及关系定义和描述的集中存储库。

关键组件

数据元素是基本的数据单元。

数据结构是数据项的集合。

数据关系:有关数据元素或结构如何相关的信息。

3. 过程规范

定义:过程规范是对 DFD 中列出的过程的详细描述。它们关注每个过程中执行的操作以及数据转换。

关键组件

输入:对操作所需输入数据的描述。

处理逻辑:对过程执行的操作的分步说明。

输出:过程生成的数据的描述。

4. 实体关系图 (ERD)

定义: ERD 代表系统中的数据实体及其关系。它们提供了数据结构的视觉表示。

关键组件

实体:代表客户、产品等项目或概念。

属性是实体的特征或属性。

关系是至少两个实体之间的关联或联系

5. 控制流图 (CFD)

定义: CFD 显示模块或过程内的控制流或操作顺序。它们显示了操作执行的逻辑顺序。

关键组件

过程代表活动或任务。

控制流:定义执行操作的顺序。

6. 伪代码

定义:模块逻辑和功能的髙级描述。它是一种代数描述,不基于特定的编程语法语言。

主要部分

顺序语句描述必须按特定顺序执行的步骤。

条件语句表示决策或逻辑分支。

循环语句描述重复的操作。

结构化分析的优点

  1. 数据流图 (DFD) 和实体关系图 (ERD) 等图形表示提供了清晰简单的系统视觉表示。这有助于利益相关者沟通和相互理解。
  2. 沟通:结构化分析促进了系统设计的不同方法。将系统分解为更小的部分,使其更容易理解、维护和更改。
  3. 需求规格是以系统化的方式描述和指定系统需求的。过程需求和数据字典有助于全面理解系统的操作以及它所处理的数据。

结构化分析的局限性

1. 僵化

结构化分析可能很僵化,难以适应项目进展中的变化。系统中的任何更改都可能需要对分析工件进行大量修订。

2. 大型系统的复杂性

在较大的系统中,图表和文档可能会变得复杂难管。这种复杂性可能会限制结构化分析在这种情况下的效率。

3. 不适合敏捷开发

结构化分析方法不适用于敏捷开发方法,后者涉及频繁迭代、适应不断变化的需求以及在短周期内专注于产出可工作的软件。

4. 关注过程,而非用户界面

结构化分析侧重于过程和数据流,对系统用户界面的关注较少。在当前的软件开发中,用户体验是一个重要的考虑因素。

结构化分析的应用

i) 建模业务流程

结构化分析可用于建模和分析业务流程。通过使用数据流图 (DFD) 等工具,组织可以深入了解数据如何在各种流程中流动并提高效率。

ii) 设计信息系统

SA 用于构建信息系统,尤其是在理解数据流和不同实体之间的关系至关重要的情况下。这在数据库设计和信息系统架构等领域都很重要。

iii) 维护遗留系统

组织仍然使用结构化分析来维护和改进遗留系统。分析的框架有助于理解和修改现有系统。

iv) 教育和培训。

专注于软件工程、信息系统和业务分析的学校课程经常涵盖结构化分析概念。它为学生理解系统需求和设计概念奠定了基础。

v) 文档记录

SA 有助于全面记录系统。此文档供开发人员、维护人员和利益相关者参考,以了解系统的结构和操作。

工作流程

i) 理解系统

首先理解问题域和系统需求。与利益相关者互动以了解更多有关系统预期用途的信息。

ii) 上下文图

创建一个概述系统及其外部实体的上下文图。在上下文图的帮助下,可以识别系统的主要输入和输出以及与外部环境的交互。

iii) 0 级数据流图 (DFD):创建一个 0 级 DFD,描绘系统的基本过程和数据流。此图从髙级角度描绘了系统的功能组成部分及其交互。

iv) 过程规范

为 DFD 中列出的每个过程创建详细的过程规范。这些规范解释了每个过程的逻辑,包括输入、处理步骤和输出。

v) 实体关系图:创建实体关系图 (ERD) 来表示系统中的实体及其关系。这使得数据结构以及不同数据部分之间的关系的视觉表示。

vi) 审查和验证

与利益相关者一起审查结构化分析工件,以确认它们是否准确反映了系统需求。验证对于识别分析中的任何不一致或遗漏至关重要。

结构化设计

结构化设计是结构化分析之后的产品开发阶段。它涉及根据分析阶段收集的规范来开发全面深入的系统设计。结构化设计通过将系统分解为更小、更合理的模块或子系统来促进模块化质量。结构化流程图、控制流图 (CFD) 和伪代码用于定义模块关系、接口和控制流。结构化设计的主要目标是创建一个可实现和可维护的设计。

关键组成部分

i) 模块化

定义:模块化是将更大的系统分解为更小、更合理模块或子系统的过程。系统按层级组织,每个模块的功能都清晰明确。

关键组成部分

模块是执行特定且明确定义的职能的独立单元。层级:模块在层级结构中的位置,髙层模块调用低层模块。

ii) 层级图

定义:层级图表示不同模块之间的层级安排和关系。

关键组件

模块名称是特定模块的名称。

层级:指定模块在层级中的级别。

iii) 控制流图 (CFD)

定义:控制流图显示模块内的控制流或操作顺序。它们显示了处理步骤的执行方式。

关键组件

过程代表模块内的活动或任务。

控制流:定义执行过程的顺序。

v) 伪代码

伪代码是模块逻辑和功能的髙级描述。它是以算法方式编写的,而不是使用特定的编程语言语法。

关键组件

顺序语句描述必须按特定顺序完成的步骤。

条件语句表示决策或逻辑分支。

循环语句描述重复的操作。

vi) 数据字典更新

定义:在结构化设计阶段更新数据字典,以包含每个模块创建的数据结构的信息。

关键组件

更新的数据元素:包括对数据项的任何添加或更改。

数据结构定义:包括有关新创建的数据结构的信息。

vii) 审查和验证

定义:结构化设计工件将与利益相关者一起审查,以确保设计满足结构化分析期间设定的规范。

关键组件

反馈和修订:收到的任何评论都用于对设计进行必要的更改。

结构化设计的优点

i) 模块化和可维护性

优点:将系统分解为模块化组件可提高可维护性。每个模块都可以独立开发、测试和调整,使系统更易于管理和更新。

ii) 清晰度和可读性

优点:层级图、控制流图和伪代码等结构化设计工具生成清晰易懂的文档。这种清晰度有助于开发和维护工作。

iii) 易于调试

优点:模块化和定义良好的控制流使调试更容易。可以隔离和解决模块内部的问题,而不会影响整个系统。

iv) 结构化文档

优点:结构化设计鼓励开发详细文档,如层级图、控制流图和伪代码。这些文档旨在作为开发人员和未来维护者的参考。

v) 可扩展性

优点:结构化设计的模块化特性便于扩展。可以通过添加或更改特定模块来实现新功能或修改,而不会影响整个系统。

vi) 可重用性

优点:定义良好的模块可以在其他项目或系统区域中使用,从而节省时间和精力。

结构化设计的局限性

i) 僵化,难以适应变化

局限性:结构化设计可能很僵化,使其难以适应需求的变化。修改可能需要更改多个模块,影响整个系统。

ii) 大型系统的复杂性

局限性:在较大的系统中,模块的依赖关系和控制流的复杂性可能使结构化架构难以管理和理解。

iii) 过分强调数据流

局限性:结构化设计可能会优先考虑数据流和控制,而忽略其他考虑因素,例如用户界面或外部系统交互。

iv) 学习曲线

局限性:对于不熟悉结构化设计技术的人来说,可能存在学习曲线。理解和提供所需的文档可能需要额外的培训。

v) 不适合敏捷环境

局限性:结构化设计不太适合敏捷开发方法,后者强调灵活性和对不断变化的需求的持续适应。

vi) 耗时

局限性:创建大量的文档并遵循严格的设计流程可能需要时间,特别是对于小型项目或需求频繁变化的项目。

应用

i) 软件开发包含

结构化设计已广泛应用于软件系统开发,尤其是在其作为主导方法论的时代。它提出了一种系统化的方法来构建和组织软件模块。

ii) 遗留系统维护

组织仍使用结构化设计概念来维护和更新其现有系统。结构化方法使得理解和适应遗留代码更加容易。

iii) 大型系统

在构建需要模块化、可维护性和清晰结构的大型系统时,结构化设计概念可以将复杂性分解为可管理的模块。

iv) 航空航天和国防系统

结构化设计原则长期以来一直用于创建航空航天和国防等重要系统的开发。对清晰组织和可靠性的关注与此类系统的需求一致。

v) 电信系统

结构化设计理念可用于电信系统设计,以构建模块化和可扩展的结构,从而有效地处理数据和流程。

工作流程

i) 接收规格

获取在结构化分析过程中开发的规范。这些需求包括分析结果,如数据流图 (DFD)、数据字典和过程规范。

ii) 识别模块

根据规范识别和定义模块。模块是系统中离散的功能单元。

iii) 创建层级图

创建层级图,以分层顺序显示模块的组织结构。此图描绘了模块之间的关系和依赖关系。

iv) 细化控制流

为每个模块创建控制流图 (CFD)。这些图描绘了每个模块内的操作顺序和控制流。

v) 请指定伪代码

为每个模块准备伪代码。伪代码是对模块逻辑和功能的髙级描述,以算法样式陈述,而不是遵循特定的编程语言语法。

以下是 SA 和 SD 之间的区别

方面结构化分析结构化设计
定义- 髙层软件系统结构。- 精心设计各个组件和模块。
重点- 系统级问题包括组件、模块及其交互。- 组件级问题指定如何实现每个系统组件。
范围涵盖整个系统。专注于各个模块或组件。
抽象髙层抽象。抽象级别从低到中。
决策主要的结构决策包括选择架构风格、模式和组件。关于算法、数据结构和代码风格的详细决策。
目的在满足髙层需求的同时,建立系统的整体结构和行为将髙层架构转换为每个组件或模块的详细要求。
工件架构图(如 UML 图)和架构文档。详细设计文档包括类图、序列图等。
示例Archi、Enterprise Architect。Visual Studio、Eclipse 和 Rational Rose

结论

结构化分析 (SA) 和结构化设计 (SD) 是软件工程历史上的关键范例,它们提供了系统地分析和开发软件系统的途径。结构化分析使用数据流图 (DFD) 等可视化表示来记录系统需求,从而提高清晰度和沟通效率。结构化设计强调模块化、良好的文档和层级结构,以提高可维护性。虽然这两种方法曾经被广泛使用,但 SA 和 SD 的僵化以及它们对不断变化的需求适应性有限,导致了在当前软件开发中转向更敏捷的方法。尽管如此,它们引入的结构化思想,如模块化和文档记录,继续影响系统设计,并经常被整合到现代方法中,尤其是在遗留系统维护和需要更系统化方法的场景中。