软件开发方法
- 背景:软件危机的产生使人们寻求更为有效的开发方法,从而逐步形成了软件开发方法学,又称为“软件工程方法学”, 我们主要学习影响力最大的以下两种,本节介绍第一种:
结构化开发方法
- 概述:1977年出现结构化方法学,又称为“生命周期方法学”,采用结构化技术来完成软件开发的各项任务。这种方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。
- 特点:
结构化分析(Structured Analysis,SA)
- 结构化分析方法:一种面向数据流的需求分析方法。
- 基本思想:自顶向下逐层分解,把一个大问题分解成若干个小问题,每个小问题再分解成若干个更小的问题,保证最低层的问题都足够简单,容易解决。
- 常见工具:
数据流图(Data Flow Diagram,DFD)
- 概念:数据流图是一种图形化技术,用来描述数据从输入到输出的发换流程。没有任何具体的物理部件,只描绘数据在软件中流动和被处理的逻辑过程。
- 基本成分:
- 1、数据流:由一组固定成分的数据组成,表示数据的流向。可以从源、文件流向加工, 也可以从加工流向文件和宿,还可以从一个加工流向另一个加工。通常每个数据流有 一个合适的名字,但是流向文件或从文件流出的数据不必命名,因为这种数据流的组成部分就是相应文件的组成部分。
- 2、加工:描述了输入数据流到输出数据流之间的发换,每个加工都有一个名字和编号, 编号反映了位于分层DFD的层次和在哪张图中,以及是哪个加工分解出来的子加工。
- 3、文件:表示数据文件或一个数据记录。流向文件的数据流表示写文件,流出文件的数据流表示读文件,双向箭头表示既读又写,每个文件都有一个文件名。
- 4、源/宿:源是指系统所需数据的发源地,宿是指系统所产生的数据的归宿地,也称 为数据池。源和宿均对应于外部实体,在框内应加注实体的名字,有些源和宿可以是 同一外部实体。基本成分示意图如图所示:
分层数据流图
- 概述:对亍一个大型系统,为了控制复杂性,结构化分析方法采用了数据流图分层技术,不是在一个数据流图中一次性引入太多的细节,而是有控制地逐步增加细节,实现从抽象到具体的逐步过渡。
- 组成:
- 1、顶层:说明了系统的边界;
- 2、中间层:描述了某个加工的分解,而他的组成部分又要进一步被分解;
- 3、底层:由一些不必分解的基本加工组成;
- 说明:处于上层的图称为父图,处于下层的图称为子图。
数据流图的基本原则和注意事项
- 1、自外向内,自顶向下,逐层细化,完善求精;
- 2、保持父图不子图的平衡;
- 3、保持数据守恒;
- 4、加工细节隐蔽;
- 5、简化加工之间的关系;
- 6、均匀分解;
- 7、适当地为数据流、加工、文件、源/宿命名,避免空洞的名字;
- 8、忽略枝节;
- 9、表现的是数据流而不是控制流;
- 10、每个加工必须既有输入数据流,又有输出数据流;在整套数据流图中,每个文件必须既有读文件的数据流,又有写文件的数据流,但在某一张子图中,可能叧有读没有写或者叧有写没有读。
数据字典
- 概述:数据字典是关于数据的信息的集合,对数据流图中包含的所有元素的定义的集合,与数据流图共同构成系统的逻辑模型。
- 数据字典中四种类型的条目:
- 1、数据项条目:给出某个数据单项的定义,例如数据项的值类型,允许的取值范围等;
- 2、数据流条目:给出某个数据流的定义,通常是列出该数据流的各组成数据项;
- 3、文件条目:给出某个文件的定义,通常是列出其记录的组成数据项;
- 4、加工条目:对数据流图中每一个不能再分解的基本加工的精确说明,例如加工的激发条件、加工逻辑、优先级、执行效率和出错处理等。其中加工逻辑是最基本的部分,常用的方法有结构化语言、判定表和判定树。其中判定树和判定表可以很好的表示在加工的一组动作依赖于多个逻辑条件的取值。
结构化诧言
- 背景:使用自然语言描述加工时最方便的,但是往往不够精确, 可能存在二义性,而且难以用计算机处理。而形式化语言可以严格精确地描述事物,易于被计算机处理,但不易被用户理解。 所以采用一种介于自然语言和形式化语言的结构化语言来描述 加工逻辑,可以解决这个矛盾。
- 结构化诧言:一种介亍自然语言和形式化语言之间的半形式化 语言,并没有严格的语法。其结构通常分为内层和外层,外层 接近亍形式化语言,用来描述控制结构,采用顺序、选择和重复三种基本结构,而内层可以用接近自然语言的描述。
实体-关系图(E-R图)
- 概述:E-R图包含实体、关系和属性3种基本成分。通常用矩形框代表实体,用连接相关实体的菱形框表示关系, 用椭圆形或圆角矩形表示实体或关系的属性,并用直线 把实体或关系与其属性连接起来。
- 优势:比较接近于人的习惯性思维方式,使用简单的图 形符号表达系统分析员对问题的理解,不熟悉计算机技术的用户也能理解,可以作为用户与系统分析人员之间有效的交流工具,通常用于数据库应用系统。
结构化设计
- 概述:一种面向数据流的设计方法,以结构化分析阶段所产生的文档为基础,自顶向下,逐步求精和模块化的过程。
- 模块化:就是将一个待开发的软件划分成若干个可完成某 一子功能的模块,每个模块可独立地开发、测试,最后组装完成完整的程序。
- 通常分为:
- 1、概要设计:确定软件系统的结构,进行模块划分,确定每个模块的功能、接口以及模块间的调用关系。
- 2、详细设计:为每个模块设计实现的细节。
模块内聚
- 概述:指一个模块内各个元素彼此结合的紧密程度,是信息隐藏和局部化概念的自然扩展, 设计时应力求高内聚,理想内聚的模块应当恰好做一件事情。
- 分类(由弱到强):
- 1、偶然(巧合)内聚:模块完成的动作之间没有任何关系,或者仅仅是一种非常松散的关系;
- 2、逻辑内聚:模块内部的各个组成在逻辑上具有相似的处理动作,但功能用途上彼此无关;
- 3、瞬时(时间)内聚:模块内部的各个组成部分所包含的处理动作必须在同一时间间隔内执行, 例如初始化模块;
- 4、过程内聚:模块内部各个组成部分所要完成的动作虽然没有关系,但必须按特定的次序执行;
- 5、通信内聚:模块的各个组成部分所完成的动作都使用了同一个公用数据或产生同一输出数据;
- 6、顺序内聚:模块内部的各个部分是相关的,前一部分处理动作的最后输出是后一部分处理动 作的输入;
- 7、功能内聚:模块内部各个部分全部属于一个整体,并执行同一功能,且各部分对实现该功能 都必不可少;
模块耦合
- 概述:对一个软件结构内不同模块之间互联程度的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。设计时应尽可能追求松散耦合(低 耦合)的系统,这样某一模块发生问题后传播到整个系统的可能性就会很小。
- 分类(耦合度由低到高):
- 1、非直接耦合: 模块没有直接联系,完全通过主程序的控制和调用来实现;
- 2、数据耦合:模块通过数据参数表传递简单数据;
- 3、标记耦合:两个以上的模块都需要其余某一数据结构子结构时,不使用全局发量方式,而是使 用记录传递的方式。
- 4、控制耦合:一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能。
- 5、外部耦合:当模块与软件之外的环境有关时发生外部耦合,例如输入/输出把一个模块特定的 设备、格式、通信协议耦合在一起。
- 6、公共耦合:多个模块都引用一全局数据区的模式,C语言中的外部数据类型就是全局数据区。
- 7、内容耦合:一个模块直接访问另一个模块的内部数据,或者通过非正常入口转入另一个模块内部,或者两个模块有一部分程序代码重叓,又或者一个模块有多种入口。设计时避免内容耦合!
常用的几个基本概念
- 深度:表示软件中控制的层数,层数过多应考虑合并;
- 宽度:软件结构中同一个层次上的模块总数的最大值,宽度越大,系统越复杂, 对宽度影响最大的是模块的扇出;
- 扇出:该模块直接调用的下级模块的个数,扇出大表示模块复杂度高,一般是因为缺乏中间层次;
- 扇入:指直接调用该模块的上级模块的个数,扇入大表示模块复用程度高;设 计良好的软件结构通常是顶层扇出比较大,中间扇出比较小,底层模块则有大 扇入。
- 作用域:指叐该模块内一个判定影响的所有模块的集合;
- 控制域:指该模块本身以及被该模块直接或间接调用的所有模块的集合;软件设计时,模块的作用域应在控制域之内,作用域最好是做出判断的模块本身, 以及他的直属下级模块。
- 功能的可预测性:指对相同的输入数据能产生相同的输出。
概要设计
- 概述:重要任务是设计软件的结构,即确定系统是由哪些模块组成的,以及这些模块相互之间的关系。
- 采用的主要描述方式:结构图、层次图和HIPO图;
- 设计过程:
- 1、复查基本系统模型;
- 2、复查并精化数据流图;
- 3、确定数据流图中的信息流类型,分为变换流和事务流;
- 4、根据流类型分别实施变换分析或事务分析;
- 5、根据软件设计原则对得到的软件结构图进一步优化。
详细设计
- 概述:为每个模块设计实现的细节,即确定应该怎样具体地实现所要的系统, 得出对目标的精确描述。
- 应用工具:
- 1、程序流程图:又称为程序框图,对控制流程的描绘很直观,但是用的比较混乱, 使用越来也少了。
- 2、盒图(N-S图):含有顺序结构、IF-THEN-ELSE分支结构、CASE型多分支结构、 DO-UNTIL型循环结构和子程序结构五种基本控制结构。
- 3、PAD图:即问题分析图,用二维树形结构的图表示程序的控制流,比较容易翻译成机器代码。
- 4、PDL:即程序设计语言,也称为伪码,非形式化语言,一种以文本方式表示数据和处理过程的设计工具。PDL程序不可执行,可以通过转换程序自动转换成某种高级语言的源程序。
- 说明:其他的设计工具还有判定树和判定表等。