1、软件工程 Software Engineering,第4章 概要设计,主要内容: 1. 概要设计步骤 2. 软件结构设计的基本原理 3. 软件结构设计的图形工具 4. 概要设计方法 5. 代码设计 6. 数据输入/输出设计 7. 数据的安全设计,如果没有设计,只能建立一个不 稳定的系统结构,图4.1 把分析模型转变成软件设计模型,4.1 概要设计步骤,概要设计阶段基本任务:系统分析员审查可行性研究报告和需求分析 规格说明书,作为设计的基础。确定模块结构、数据文件结构、系统接口设计和测试策略。编写概要设计说明书、用户手册和测试计划。复审,概要设计的基本步骤:软件结构设计数据文件设计 系统接口设计
2、测试方案设计复审,4.1.1 软件结构设计,设计供选择的方案把数据流图中的某些处理进行逻辑组合,不同的组合可能就是不同的实现方案。抛弃不可行的,提供合理方案的资料。 2. 推荐最佳实现方案系统分析员选择一个最佳方案向用户推荐并制定详细的实现计划。 3. 设计软件结构确定模块及其之间的关系,程序结构,程序的系统结构图,4.1.2 数据结构及数据库设计,数据结构设计常采用逐步细化的方法,在需求分析的基础上进一步细化,可使用抽象的数据类型描述。数据库设计数据库设计主要是数据库结构设计。其依据为需求分析阶段用的E-R图表示的数据模型。数据库的概念设计对应于需求分析阶段,数据库的逻辑设计对应于概要设计阶
3、段,数据库的物理设计对应于详细设计阶段。,4.1.3 系统接口设计,系统接口包括内部接口、外部接口和用户接口。接口设计的任务是描述系统内部各模块之间如何通信、系统与其他系统之间如何通信,以及系统与用户之间如何通信。接口包括了数据流和控制等信息。概要设计阶段的接口设计,是在需求分析的基础上进一步明确系统的内部接口、外部接口和用户接口。,4.2 软件结构设计的基本原理,4.2.1 模块与信息隐蔽 模块(Module)是能够单独命名,能独立地完成一定功能,由边界元素限定的相邻的程序元素的序列,模块是可以组合、分解和更换的单元。像Pascal或Ada这样的块结构语言中的Beginend对,或者C,C+
4、和Java语言中的对,都是边界元素的例子。因此,过程、函数、子程序和宏等,都可作为模块。面向对象方法论中的对象是模块,对象内的方法也是模块。模块是构成程序的基本构件。,图4.2 模块化和软件成本,模块划分,模块有以下基本属性: 名称:模块的名称必须表达该模块的功能,指 明每次调用它时应完成的功能。模块的 名称由一个动词和一个名词组成。 接口:模块的输入和输出 功能:模块实现的功能 逻辑:模块内部如何实现功能及所需要的数据 状态:模块的调用与被调用关系,信息隐藏应用模块化原理时,自然会产生的一个问题是:“为了得到最好的一组模块,应该怎样分解软件”。信息隐藏原理指出:应该这样设计和确定模块,使得一
5、个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。,模块化就是把系统划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能,满足用户的需求。其目的是降低复杂性。,4.2.2 模块化,采用模块化策略的优点: (1)减少复杂性 (2)提高软件的可靠性 (3)提高可维护性 (4)有助于软件开发工程的组织管理,模块分割的方法: (1)抽象与详细化抽象就是抽出事物的本质特性而暂时不考虑它们的细节。抽象(abstract)的结果是抽象(abstraction) 。求精实际上是细化过程。求精要求设计者细化原始陈述,随着每个后续求
6、精(细化)步骤的完成而提供越来越多的细节。 (2)根据功能来划分模块横向分割:根据系统所包含的功能来分割纵向分割:根据系统对信息进行处理的过程中 不同的变换功能来分割,Meyer标准1 模块可分解性2 模块可组装性3 模块可理解性4 模块连续性5 模块保护性我们可以用这五条标准来评价一种设计方法定义有效的模块系统的能力。,Meyer提出了五条标准,我们可以用这五条标准来评价一种设计方法定义有效的模块系统的能力。下面列出这五条标准。,1 模块可分解性2 模块可组装性3 模块可理解性4 模块连续性5 模块保护性 1 模块可分解性如果一种设计方法提供了把问题分解为子问题的系统化机制,它就能降低整个问
7、题的复杂性,从而可以实现一种有效的模块化解决方案。,1 模块可分解性2 模块可组装性3 模块可理解性4 模块连续性5 模块保护性 2 模块可组装性如果一种设计方法能把现有的(可重用的)设计构件组装成新系统,它就能提供一种并非一切都从头开始做的模块化解决方案。,1 模块可分解性2 模块可组装性3 模块可理解性4 模块连续性5 模块保护性 3 模块可理解性如果可以把一个模块作为一种独立单元(无需参考其他模块)来理解,那么,这样的模块是易于构造和易于修改的。,1 模块可分解性2 模块可组装性3 模块可理解性4 模块连续性5 模块保护性 4 模块连续性如果对系统需求的微小修改只导致对个别模块,而不是对
8、整个系统的修改,则修改所引起的副作用将最小。,5 模块保护性如果在一个模块内出现异常情况时,它的影响局限在该模块内部,则由错误引起的副作用将最小。采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解。因为程序错误通常局限在有关的模块及它们之间的接口中,所以模块化使软件容易测试和调试,因而有助于提高软件的可靠性。因为变动往往只涉及少数几个模块,所以模块化能够提高软件的可修改性。模块化也有助于软件开发工程的组织管理,一个复杂的大型程序可以由许多程序员分工编写不同的模块,并且可以进一步分配技术熟练的程序员编写困难的模块。,4.2.3 模块的耦合和内聚,“模块独立”概念是模块化、抽象、逐步求
9、精和信息隐藏等概念的直接结果,也是完成有效的模块设计的基本标准。模块的独立程度可以由两个定性标准来度量,这两个标准分别称为内聚和耦合。耦合衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚衡量一个模块内部各个元素彼此结合的紧密程度。,耦合 耦合是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。 在软件设计中应该追求尽可能松散耦合的系统。在这样的系统中可以研究、测试或维护任何一个模块,而不需要对系统的其他模块有很多了解。此外,由于模块间联系简单,发生在一处的错误传播到整个系统的可能性就很小。因此,模块间的耦合程度强烈影响
10、系统的可理解性、可测试性、可靠性和可维护性。,耦合的种类:数据耦合两个模块间交换的信息仅仅是数据。控制耦合两个模块之间传递的信息中有控制信息。公共环境耦合两个或多个模块共享信息内容耦合某个模块直接访问另一个模块的内部数据;两个模块有相同的程序段;一个模块直接进入另一模块的内部。,总之,耦合是影响软件复杂程度的一个重要因素。为了降低模块间的耦合程度,应该采取下述设计原则: 尽量使用数据耦合,少用控制耦合,限制公共环境耦合,完全不用内容耦合。,内聚 内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。简单地说,理想内聚的模块只做一件事情。 设计时应该力求做到高内聚,通
11、常中等程度的内聚也是可以采用的,而且效果和高内聚相差不多;但是,低内聚很坏,不要使用。,内聚的种类:偶然内聚:模块内部各部分之间没有联系,或者即使有联系,这种联系也很松散。逻辑内聚:此模块把几种相关的功能组合在一起。时间内聚:模块的各个功能的执行与时间有关,通 常要求所有功能必须在同一时间段内执行。通信内聚:如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据。顺序内聚:又称信息内聚,这种模块完成多个功 能,各个功能都在同一数据结构上操作,每一项功 能有一个唯一的入口点。功能内聚:一个模块内各个部分都是完成某一具体功能必不可少的组成部分。,内聚和耦合是密切相关的,模块内的高内
12、聚往往意味着模块间的松耦合。内聚和耦合都是进行模块化设计的有力工具,但是实践表明内聚更重要,应该把更多注意力集中到提高模块的内聚程度上。模块独立性比较强的模块应是高内聚低耦合的模块。,4.2.4 软件结构设计优化准则,1. 提高模块独立性 2. 模块接口的准则模块的接口要简单、清晰,含义明确,便于理解,易于实现、测试与维护。 3. 模块的作用范围应在控制范围之内 4. 模块的深度、宽度、扇出和扇入应适当 5. 模块的大小应适中,4.3 软件结构设计的图形工具,4.3.1 层次图,通常使用层次图描绘软件的层次结构,特别适合于在自顶向下设计时使用。在层次图中一个矩形框代表一个模块,除顶层之外,每个
13、方框都加编号,且每个处理的下层处理的编号在上层编号后加“.”号及序号。序号可用数字也可用英文字母。框间的连线表示调用关系(位于上方的矩形框所代表的模块调用位于下方的矩形框所代表的模块)。,医疗费管理系统的HIPO图,正文加工系统(如Word)的层次图,4.3.2 结构图,结构图是进行软件结构设计的另一个有力工具。结构图反映程序中模块之间的层次调用关系和联系,结构图用于表达系统内部各分量之间的逻辑结构和相互关系。,1. 结构图的符号 (1)方框代表模块,框内注明 模块的名字和主要功能。 (2)方框之间的大箭头或直线 表示模块的调用关系。 (3)带注释的小箭头表示模块 调用时传递的信息及其传 递方
14、向。尾部加空心圆的小箭头表 示传递数据信息。尾部加实心圆的小箭头表 示传递控制信息。 (4)选择结构 (5)循环结构,模块 H 循环 调用模块 A,B,C。, 模块:模块用矩形框表示,并用模块的名字标记它。,模块的表示方法, 模块的调用关系和接口:模块之间用单向箭头联结,箭头从调用模块指向被调用模块。,模块的调用关系和接口, 模块间的信息传递:当一个模块调用另一个模块时,调用模块把数据或控制信息传送给被调用模块,以使被调用模块能够运行。而被调用模块在执行过程中又把它产生的数据或控制信息回送给调用模块。, 在模块A的箭头尾部标以一个菱形符号,表示模块A有条件地调用另一个模块B。当一个在调用箭头尾
15、部标以一个弧形符号,表示模块A反复调用模块C和模块D。,2. 结构图的绘制,结构图只描述一个模块调用哪些模块,没有描述调用次序,也没有表明模块内部的成分,通常上层模块除了调用下层模块的语句之外还可以有其他语句,结构图上体现不出这种情况。画结构图可以作为检查设计正确性和模块独立性的方法,通过检查数据传递情况分析数据传递是否齐全,是否正确,是否有多余的、不必要的数据传递,还可分析模块分解或合并的合理性,以便选用最佳方案。,【例4-6】学生成绩管理系统的结构图,4.4 概要设计方法,4.4.1 结构化方法,结构化方法又称面向数据流设计方法(Structured Design,SD)。设计步骤是先根据
16、系统数据流图建立系统逻辑模型,再进行结构设计。 1. 建立系统逻辑模型 ()变换型数据流 ()事务型数据流 2. 完成软件结构设计,在系统结构图中经常使用的模块传入模块传出模块变换模块协调模块,变换型系统结构图变换型数据处理问题的工作过程大致可以分为三步,即取得数据,变换数据和给出数据。,变换分析,变换分析方法由以下四步组成:重画数据流图区分有效(逻辑)输入、有效(逻辑) 输出和中心变换部分进行一级分解,设计上层模块进行二级分解,设计输入、输出和中心 变换部分的中、下层模块。,事务型系统结构图它接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果。,事务分析,与变换
17、分析一样,事务分析也是从分析数据流图开始,自顶向下,逐步分解,建立系统到结构图。,4.4.2 面向数据结构设计方法,Jackson系统开发方法是一种典型的面向数据结构的分析设计方法。Jackson系统开发方法的系统模型就是相互通讯的一组进程的集合。进程间的通讯方式有以下三种: 进程同步发生 通过数据通道发送/接受活动发生 访问公用存储信息,Jackson 把数据结构(或程序结构)分为以下三种基本类型 :(a)顺序 (b)选择 (c) 循环,(1)能对结构进行自顶向下分解,可以清晰地表示层 次结构 (2)结构易读、形象、直观 (3)既可表示数据结构也可表示程序结构,Jackson 设计方法的四个
18、步骤: 1、分析并确定输入数据和输出数据的逻辑结构; 2、找出输入数据结构和输出数据结构中有对应关系的数据单元; 3、从描述数据结构的Jackson 图导出描述程序结构的Jackson 图; 4、列出所有的操作和条件,并把它们分配到程序结构图中去。,Jacksan 图特点:,【例4.11】用Jacksan方法对学生成绩管理系统进行结构设计。,例3.2学生成绩管理系统在学生入学时输入学生基本信息。每次单科成绩是按班级内学生学号的顺序依次输入每位学生的平时成绩和考试成绩,成绩输入格式见表4.1。然后由计算机计算每位学生的单科成绩总评分。输出的学生个人成绩单格式,见表4.2;班级各科成绩汇总表格式,
19、见表4.3。,根据以上的输入数据和所需的输出表格,可写出输入数据结构、输出数据结构及程序结构的Jackson图。,4.5 代码设计,1. 代码的定义和作用代码是为了对数据进行识别、分类、排序等操作所使用的数字、文字或符号。 2. 代码的性质 简洁性:代码可以减少存储空间、消除二义性 保密性:不了解编码规则的人不知道代码的含义 可扩充性:设计代码时要留有余地,以方便在软 件生存期内增加代码 持久性:代码应在软件生存期内可以长久使用。,4.5.1 代码设计原则 1、标准化:国际标准、国家标准、部颁标准或习惯标准 2、 惟一性 3、可扩充性 4、 简单性 5、 规范化 6、 适应性,4.5.2 代码
20、种类 1. 顺序码 2. 信息块码 3. 归组分类码 见表4.4 归组代码示例 4. 助记码 5. 数字式字符码 6. 组合码,表4.4 归组代码示例,4.5.3代码设计方法,基本步骤如下: 1. 确定编码对象 2. 明确编码目的 3. 确定代码的个数 4. 确定代码使用范围和使用期限 5. 确定代码体系和代码位数 6. 确定编码规则 7. 编写代码 8. 编写代码词典,4.6 数据输入输出设计,4.6.1 输入设计 信息的发生、收集、介质化、输入和内容 4.6.2 输出设计 输出内容、方式和信息分配,4.7 数据安全设计,软件系统发生的事故类型:数据被破坏或修改、保密的数据被公开、数据和系统不能为用户服务。 数据安全控制方法: 1检查数据的正确性、完整性 2检查用户使用权限 3系统运行日志 4监督检查违规行为 5加密 6数据安全受破坏时的措施,