【结构化分析】
一个结构化分析手法的例子
结构化分析（Structured Analysis，简称SA）是软体工程中的一种方法，结构化分析和结构化设计可以分析商业的需求，再转换为规格文件，最后再产生电脑软体、硬体组态及相关的手册及程序。
结构化分析及设计技术是系统分析的基础，是由1960到70年代的系统分析技术发展而成。
== 目的 ==
结构化分析在1980年代起开始广为使用。结构化分析包括将系统概念转换为用资料及控制的来表示，也就是转换为资料流程图。资料流程图中的程序以泡泡来表示，因此也称为「泡泡图」。不过完整的资料流程图中可能有许多的「泡泡」，使得很难去追踪资料流动的情形。此时可以先定义外界需要系统回应的事件，每一个事件指定一个泡泡，当系统定义完成后，再将事件的泡泡和回应的程序的泡泡相连接。也可以将程序对应泡泡加以分组，组合成较高阶的程序。资料字典用来描述资料和指令的流动，而用程序规格来描述交易或资料转换的相关资讯。
许多著名的分析方式都和结构化分析（SA）及结构化设计（SD）有关，包括结构图、资料流程图及资料模型图等。许多程序设计方法学也结合了结构化分析及结构化设计，包括结构化系统分析及设计方法（SSADM）及Structured Analysis and Design Technique（SADT）等。
==历史==
结构化分析是许多结构化方法中的一部份。「结构化分析是系统分析、设计及编程技术的组合，其目的是为了处理1960至1980年代软体开发所遇到的问题，这段期间多半是用COBOL和Fortran语言开发，后来也使用C语言及BASIC，也没有将需求及设计文件化的技术。随著系统越来越大也更加复杂，资讯系统的发展也变得越来越困难。」为了方便管理大而复杂的系统，演进出下列的结构化方法。
自1967年起出现了许多的结构化方法：
* 结构化编程：由艾兹格·迪杰斯特拉在1967年提出－《GOTO陈述有害论》。
* 逐步设计（Stepwise design）：由尼克劳斯·维尔特在1971年提出。
* 1972年出现的Nassi-Shneiderman图。
* 1974年提出的Warnier/Orr diagram－「Logical Construction of Programs」。
* 1974年提出的HIPO－IBM的层次化输入-处理-输出图。
* 结构化设计：由Larry Constantine、爱德华·尤登及Wayne Stevens在1975年提出。
* 杰克逊结构化程序设计：由Michael A. Jackson在1975年提出。
* 结构化分析：约在1978年由Tom DeMarco及尤登等人提出。
* Structured Analysis and Design Technique（SADT）：由Douglas T. Ross发展。
* 尤登结构化方法：由爱德华·尤登提出。
* 结构化分析及系统规格（Structured Analysis and System Specification）：由Tom DeMarco在1979年提出。
* 结构化系统分析及设计方法 (SSADM)：最早是由英国商务办公室在1983年提出。
* 以结构化分析及设计技术为基础的IDEF0，由道格拉斯·T·罗斯在1985年提出。
* Hatley-Pirbhai modeling：在 Derek J. Hatley及Imtiaz A. Pirbhai于1988年所著的《Strategies for Real-Time System Specification》中定义。
* 资讯工程：约在1990年代由Clive Finkelstein提出，后来因詹姆斯·马丁的推广而广为人知。
依照Hay在1999年提出的定义：「资讯工程是1970年代提出许多结构化技术的延伸。先由结构化编程进展到结构化设计，然后进展到结构化系统分析。这些技术使用的图也所不同：结构化设计中使用结构图，而结构化系统分析使用资料流程图。二者都可以帮助程式开发者及使用者的沟通，并且提升程式分析者及设计者的纪律。1980年起开始有工具可以自动绘制这类的图面，并追踪资料字典中的内容。」在电脑辅助设计及电脑辅助制造（CAD/CAM）名词广为使用之后，上述工具的使用也称为电脑辅助软体工程（CASE）。
==结构化分析主题==
=== 抽象化机制 ===
一个结构化分析的例子
结构化分析一般会建立一个使用单一抽象化机制（single abstraction mechanism）的阶层系统。结构化分析方法可以使用IDEF（如图），IDEF是一个程序驱动的分析方法，是由目的及观点开始进行。此方法一开始会先确认整体机能，再反复地将机能分割为更小的机能，保留程序最佳化需要的输入、输出、控制及机制。IDEF也被视为是一种functional decomposition的分析方法，著重在函式的内聚力及函式之间的耦合力。
功能分解的结构化方法单纯描述程序，而不去划定系统的行为，也不决定需要机能的系统架构。此方法只确认和活动有关的输入及输出。结构化分析受欢迎的一个原因是其本质适合描述一个高阶的程序及概念，即使企业层次的程序也相当适合。不过对于商业常用的物件导向过程中，物件需要有哪些机能，IDEF提供的资讯很有限。统一建模语言（UML）和IDEF相反，统一建模语言是介面驱动，并且有多重抽象化机制，适用于描述面向服务的架构（SOA）。
=== 分析方法 ===
结构化分析以资料在不同模组中流动的观点来看待一个系统，系统的功能可以用转换资料流的程序来表示。结构化分析善用了功能拆解（或由上到下设计）的资讯隐藏特性，因此可以关注在重要的细节，而不会被无关的细节干扰。当细节的层级提高时，资讯的广度也随之减少。结构化分析的结果是一组相关的图，程序描述以及资料定义，这些资料描述一个程式为符合机能性需求所需要的资料以及需进行的转换。
以程序物件观点及资料物件观点建立的结构化分析
汤姆·狄马克的分析方法包括以下几项 :
* 系统关系图
* 资料流程图
* 程序规格
* 资料字典
资料流程图是一个有向图，弧线表示资料，节点（用圆圈或泡泡表示）表示转换资料的程序。程序还可以再细分为更细的资料流程图，描述程序中的子程序，一直到清楚说明及了解程序机能为止。机能元（functional primitive）是指一些不需再细分的程序，一般会用程序规格（或微规格）来说明。程序规格可以包括虚拟码、流程图或Structured English。资料流程图将系统的架构表示为一个由许多互连的程序形成的网路，而各程序是由机能元所组合而成。资料字典是一组资料流、资料元素、档案及资料库的定义。资料流程图或其他资料字典可以参考资料字典中的内容。
=== 系统关系图 ===
一个系统关系图的例子
系统关系图（System Context Diagram）是表示系统和外界环境之间的作用，系统关系图可以表示一个系统和外界相关系统的输入及输出。
Kossiakoff将系统关系图定义为「系统关系图将系统放在整个图的中心，不描述其内部结构，周围则是和其有关的系统、活动及环境，环境图的目的是专注在哪些会影响系统需求及限制的外部因素及事件。」系统关系图和资料流程图有关，有助于了解系统和其他相关系统或事件之间的关系。
=== 资料字典 ===
实体联系模式图在设计资料库时非常重要
资料字典或是资料库字典是定义资料库基本组织的档案。资料字典包括资料库中所有的档案、每一个档案的栏位个数、栏位名称及型态。为了保护资料字典的内容不被破坏，大部份的资料库管理系统不允许使用者更改资料字典。资料字典没有资料库中的资料内容，只有一些存取资料库需要的资讯。资料库管理系统一定要配合资料字典才能存取资料库的内容。
=== 资料流程图 ===
一个资料流程图的例子
资料流程图（DFD）是用图像方式表示资讯系统中资料的流动方式。资料流程图和系统流程图不同，主要是表示资料在不同程序之间的流动，而不是程式的控制流程。资料流程图是由赖瑞·康斯坦丁所提出，是以Martin及Estrin的「资料流图」（data flow graph）为基础。
一般在绘制资料流程图前，会先绘制环境图，描述系统和外界环境的交互作用。资料流程图可以将系统分割为几个较小的部份，并且强调各部份之间的资料流动。资料流程图是结构化系统分析及设计方法（SSADM）的三个重要图表中的一个。
=== 结构图 ===
一个系统结构图
（SC）是一个将系统拆解为最小可管理程式单位的图。在结构化编程中，结构图可以将程式模组整理为树状结构，每一个模组以一个其中有模组名称的方框表示，树状结构可以清楚表示各模组之间的关系。
结构化分析中常用结构图表示程式的顶层架构。结构图有助于程式设计者用个个击破的方式处理软体问题，也就是将一直将问题拆解为更小的问题，直到最后问题小到可以被人类理解为止。此程序称为top-down design或是functional decomposition。结构图的作用类似建筑房屋中使用的蓝图。在设计阶段，结构图是客户和不同软体工程师沟通的方式。在代码实现的阶段，由结构图可以得知系统的完整架构。
=== 结构化设计 ===
结构化设计（SD）是有关软体模组的开发，及分析模组之间的「模组层次」（module hierarchy）。在结构化设计中，有以下二个主要的概念：
* 内聚力是指机能相关的程式组合成一模组的程度。
* 耦合力是指模组及模组之间资讯或参数流动的程度。
当耦合力调整到最佳情形时，会简化模组之间的介面，也会简化程式的复杂度。
Page-Jones在1980年提出的研究中有三个主题：结构图、模组规格及资料字典。「结构图的目的是表示模组层次，模组规格可以用虚拟码或程式设计语言来组成，资料字典类似结构化分析中的资料字典，在软体开发生命周期中，在已经进行了分析及设计后，就可以自动产生资料型态的宣告，以及程序或副程式的模版。」
=== 结构化查询语言 ===
结构化查询语言（SQL）是一种查询资料库的标准语言。结构化查询语言一开始是用在一个商用资料库系统中，后来成为在迷你电脑及大型计算机运作的资料库管理系统中，最受欢迎的资料库查询语言。结构化查询语言也可在一般个人电脑中的资料库管理系统中使用，并且可配合分散式资料库使用，因此允许许多使用者在网路上同时存取同一个资料库的内容。
== 相关条目 ==
* Event partitioning
* HIPO
* 杰克逊结构化程序设计
* Soft Systems Methodology
* 尤登结构化方法
* Flow-based programming