软件工程复习同等学力硕士.ppt
课程名称:软件工程,(一)软件工程概念与基本要素,软件定义:,软件是(1)能够完成预定功能和性能的可执行的指令(计算机程序);(2)使得程序能够适当地操作信息的数据结构;(3)描述程序的操作和使用的文档。计算机系统中的程序及其文档称为软件。,相关考题:2007 一(1),软件特点,软件是一个逻辑部件,但不是一个物理部件。软件具有与硬件不同的特点:表现形式不同 生产方式不同 要求不同 维护不同(软件不会“磨损”),软件工程的定义,计算机科学技术百科全书中的定义:软件工程是应用计算机科学、数学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本。其中,计算机科学、数学用于构建模型与算法,工程科学用于制定规范、设计范型(paradigm)、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。,软件工程 一种层次化技术,软件工程四个要素:工具、语言、方法、过程,语言,方法,过程,质量焦点,工具,软件工程框架,软件工程的框架是由软件工程目标、软件工程活动和软件工程原则三个方面的内容构成的。,软件工程活动维,软件工程目标维,软件工程原则维,软件工程框架,软件工程目标,目标:生产具有正确性、可用性以及开销适宜的软件产品。正确性:软件产品达到预期功能的程度。可用性:软件基本结构、实现及文档为用户可用的程度。合算性:软件开发、运行的整个开销满足用户要求的程度。决定了:软件过程、过程模型和工程方法的选择。,相关考题:2009 二(1),软件工程活动,活动:生产一个最终满足需求且达到工程目标的软件产品所需要的步骤。1、需求:问题分析:需求获取和定义,又称软件需求规约。需求分析:生成软件功能规约。2、设计:概要设计:建立整个软件的体系结构,包括子系统、模块以及相关层次的说明、每一模块的 接口定义等。详细设计:产生程序员可用的模块说明,包括每一模 块中数据结构说明及加工描述。3、实现:把设计结果转换为可执行的程序代码。4、确认:贯穿整个开发过程,对完成的结果进行确认,保证产 品满足用户的要求。5、支持:修改和完善活动。,相关考题:2010 二(1),软件工程原则,软件工程的四条基本原则:1、采取适宜的开发模型,控制易变的需求;2、采用合适的设计方法:需要软件模块化、抽象与信息隐藏、局部化、一致性以及适应性等,需要合适的设计方法的支持。3、提供高质量的工程支持:软件工具和环境对软件过程的支持。4、重视开发过程的管理:有效利用可用的资源、生产满足目标的软件产品、提高软件组织的生产能力等。,软件生存周期过程(国际标准ISO 12207)基本过程:软件开发人员所从事的一 切活动;支持过程:软件需求方和软件开发方 各类支持人员所从事的一 切活动;组织过程:管理人员从事的一切活动,三类过程的关系,基本过程是针对不同的使用者而规定获取、开发、维护软件需要开展的活动及任务;支持过程是规定为支持实施基本过程而需要开展的活动及任务;组织过程是规定为支持实施基本过程和支持过程而在组织层面而需要开展的活动及任务。,相关考题:2008 一(5),2010 二(2),软件生存周期模型,软件生存周期模型是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。软件工程模式也常称为:软件过程模型 软件开发模型 软件工程模式 软件工程范型 等等,1.瀑布模型(线形顺序模型),一种系统的、顺序的软件开发方法 开发过程分为:系统需求分析 软件需求分析 设计 编码 测试 维护,各个过程的任务,需求分析:软件信息域及所要求功能、性能、接口设计:确定软件数据结构、软件体系结构、过程细节 和接 口编码:编写程序,将设计转化为机器可读的形式测试:对软件的内部逻辑和外部功能进行测试维护:软件投入运行后对软件错误进行修改、对软件 的功能进行完善,瀑布模型的优点:,1.可强迫开发人员采用规范化的方法;2.严格规定了每个阶段必须提交的文档3.要求每个阶段交出的所有产品都必须是经过验证(评审)的。,瀑布模型的缺点:,1.由于瀑布模型完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要。如果需求规格说明与用户需求之间有差异,就会发生这种情况。2.瀑布模型只适用于项目开始时需求已确定的情况。,2.原型开发模型(快速成型模型),基本思路:在项目的早期尽快的生产一个便宜的和简化的系统原型版本,也叫快速原型开发。,建造/修改 原型,用户测试运行原型,听取用 户意见,原型范型,采用原型模型的软件生存周期,原型开发模型的优缺点,优点:有助于满足用户的真实需求。不仅节省开销,还能够缩短软件的整个开发周期。缺陷:原型是临时搭起来的,还未能考虑软件的整体质量或今后的可维护性问题。为使原型尽快投入运行,开发人员经常采用一些折衷的解决方法。例:采用效率不高的算法。原型模型的关键:是定义开始时的游戏规则,即客 户和开发者两方面必须一致;,增量模型(递增模型),先完成一个系统子集的开发,再按同样的开发步骤增加功能(系统子集),如此递增下去直至满足全部系统需求。系统的总体设计在初始子集设计阶段就应作出设想。,分析,增量模型,设计,编码,测试,分析,设计,编码,测试,分析,设计,编码,测试,分析,设计,编码,测试,增量1,增量2,增量3,增量n,增量1交付客户,增量2交付客户,增量3交付客户,增量n交付客户,日历时间,.,增量模型的优点(1)能在较短时间内向用户提交可完成一些有用的工作产品,即从第1个构件交付之日起,用户就能做一些有用的工作。(2)逐步增加产品的功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给用户组织带来的冲击。(3)项目失败的风险较低,虽然在某些增量构件中可能遇到一些问题,但其他增量构件将能够成功地交付给客户。(4)优先级最高的服务首先交付,然后再将其他增量构件逐次集成进来。因此,最重要的系统服务将接受最多的测试。,采用增量模型需注意的问题(1)在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。(2)软件体系结构必须是开放的,即向现有产品中加入新构件的过程必须简单、方便。因此,采用增量模型比采用瀑布模型和快速原型模型更需要精心的设计。,螺旋模型,将瀑布模型与快速原型模型结合,加入风险分析。四个主要活动:计划:目标的确定,可选方案和限制。风险分析:可选方案的分析,风险的确定和解决工程:下一级产品的开发。用户评价:工程结果的评价。评价:是当前大型系统或软件开发的最现实的方法。采用一种软件工程逐步逼近的演化方法,使开发人员和用户能了解每一个演化级的风险,并作出反应。不足:很难让用户确信这种演化方法是可控制的。,螺旋模型,风险分析,工程,用户评价,计划,初始需求分析与项目计划,基于用户说明的计划,用户评价,基于初始需求的风险分析,基于用户反馈的风险分析,初始软件原型,第二次原型,工程系统,“基于版本发布”的特点,V1.0,功能,时间,V2.0,V1.1,螺旋模型的优点 对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标。减少了过多测试或测试不足所带来的风险。在螺旋模型中维护只是模型的另一个周期,因而在维护和开发之间并没有本质区别。,螺旋模型的缺点 螺旋模型是风险驱动的,因此要求软件开发人员必须具有丰富的风险评估经验和这方面的专门知识,否则将出现真正的风险:当项目实际上正在走向灾难时,开发人员可能还以为一切正常。,喷泉模型,进一步开发,实现和集成阶段,运行状态,实现阶段,面向对象设计阶段,计划阶段,面向对象分析阶段,需求阶段,维护期,喷泉模型特点,主要用于支持面向对象开发过程,体现了软件开发所固有的迭代性和无间隙特征。“喷泉”一词体现了迭代和无间隙特性。图中代表不同阶段的圆圈相互重叠,这明确表示两个活动之间存在重叠。,统一的软件开发过程,统一的软件开发过程是基于构件的,它使用新的可视化建模标准,即统一的建模语言(UML),并依靠三个关键思想:使用用例驱动、以体系结构为中心、迭代与增量开发。,统一过程,由Booch、Jacobson及Rumbaugh提出,统一过程模型如图所示。,版本,图2:一次循环所包含的阶段和迭代,时间,统一的软件开发过程,是生存期模型发展迄今的里程碑,它集中了所有生存期模型的优点。,基于构件的软件开发(CBD),使用可重用(reuse)的软件“构件”来设计和构造基于计算机的软件系统。从应用系统的结构来看,通常包括三类成分:通用基本构件、领域共性构件、应用专用构件。应用软件开发中的重复劳动主要存在于前两类构件上。,基于构件的软件工程(CBSE)过程模型,构 件 开 发分析 设计 编程 测试,领域分析,系统测试,构件提交,领域专家经验,现有系统资料,领域构件需求,构件/构架库,领域构架,领域构件,系统开发,系统专用构件,应用系统,构件生产线,领域构架,领域构件,问题域,用户需求,系统生产线,系 统 组 装 分析 设计 编程,构架细化,专 用 构 件 开 发分析 设计 编程 测试,软件生产线,要实现软件重用,要解决两方面的问题:,(1)重用软件(构件)的开发;(2)应用系统如何构造和组装。,解决上述两个问题的一些关键因素:,软件构件技术,软件体系结构,领域工程,再生工程,开放系统技术,软件开发过程,CASE技术,非技术因素,软件生存期模型相关考题:2007 一(2)2009 一(2),二(3)2010 一(2),二(4),软件过程成熟度的概念软件过程成熟度(Software Process Maturity)是软件过程改进的一个重要概念,它是指:一个特定软件过程得到清晰的定义、管理、测量、控制的有效程度。成熟度意味着能力的增长具有潜力,并表示组织软件过程是珍贵的,他在组织内所有项目中的应用是一致的。,什么是CMMCMM是能力成熟度模型Capability Maturity Model三个英文单词第一个字母组成的。事实上,该模型最早提出时,它指的是软件过程能力成熟度模型。20世纪90年代,SEI建立的评估一个组织开发软件能力的方法。该模型按软件过程的不同成熟度划分了5个等级,1级被认为成熟度最低,5级则成熟度最高。,基于CMM的模型自从CMM面世以来在各国软件界中产生了巨大影响,它在解决软件过程存在问题方面的成功使得相关领域也纷纷采纳和仿效它的模式,于是出现了多种基于CMM的模型,构成了一个CMM族。,过程能力,2、关键过程域,关键过程域:确定了要实现一个成熟度级别所必须解决的问题和目标。处于级别3的软件机构一定要解决级别2和级别3中所有关键域中的问题,4、5级类推。,CMMI模型的两种表示,两种表示的对比,两种表示的对比,从上表的对比中可以看出,分级表示为实施过程改进的组织规定了既定的软件能力成熟度提升的路径,即从初始级开始逐级看出。,3、共同特征,每个关键过程由5个部分组成,称为共同特性。执行约定执行能力执行活动度量和分析验证实现,4、关键实践,共同特性中的实践描述了要建立一个过程能力所必须完成的活动。即一个关键过程都要用关键实践的概念进行描述,CMM有316个关键实践。关键实践描述了对关键过程域的有效实施和在制度化中起重要作用的基础实施和活动。关键实践只描述“做什么”,不规定“怎么做”。如不指定生存期模型,不规定产品实现所采用的开发方法和开发工具,从而可以让各个机构选择自己的方法。但必须合理的说明关键实践,以判断是否有效的实现了关键过程域的目标。,CMM相关考题:2008 三(3)ISO相关考题:2009 二(4)2010 二(5),软件开发活动与支持软件工程活动的技术,软件开发的基本活动:需求规约设计实现测试,软件需求分析阶段的任务,可以把软件需求分析阶段的工作分为4个步骤,即获取需求、分析需求、定义需求和验证需求,如图所示。,软件需求分析阶段的工作步骤,结构化分析方法,结构化分析方法传统的分析建模方法称为结构化分析(structured analysis,SA)方法。最有代表性的是一种面向数据流进行需求分析的方法,最初于20世纪70年代由D.Ross提出,后来又经过扩充,形成了今天的结构化分析方法的框架。,结构化分析模型的结构,数据字典(DD),数据流图(DFD),实体关系图(E-R图),状态变迁图(STD图),加,工,规,格,制规格说,数,据,对象,描 述,说,明,控,明,信息流模型,任何基于计算机的系统都可以用数据流模型来描述数据流的基本模型如下:,信息流的基本要素,信息流中有哪些基本要素?外部实体 数据 数据的流动 对数据的处理,基本符号和概念,数据流图(DFD,Data Flow Diagram):也称为“泡泡图”,描述信息流和数据从输入到输出变换的应用图形技术,能表示数据在系统内的变化。,DFD可以分层表示信息流和功能的进一步的细节。,S,2,1,3,2.2,2.1,2.3,3.1,3.2,0层,1层,2层,细化时,应该注意信息流的连续性(也称:平衡)。,实例:简化的学生运动会管理信息系统,描述:注册员根据学生运动会的比赛规则,首先登记报名单的基本信息(队名,参加项目,运动员姓名,运动员号);裁判员根据比赛项目和系统确认的项目组织参加者比赛,并把各队项目参加者的比赛项目成绩录入系统;系统可在计算机屏幕上自动显示比赛的单项名次和团体名次;运动员可通过注册员查询运动员的号码单和各队比赛成绩。,确定系统与外界的关系,即系统的顶层(0层)DFD(系统环境图),第0层的DFD要扩展到第1层,我们应该怎么进行?,一个简单而有效的方法是:对该层圆圈所描述的处理说明进行“语法扫描”,即将说明中的所有名词(和名次短语)和动词(和动词短语)分离出来。即在所有第一次出现的名词下面加下划线,所有第一次出现的动词下面加波浪线 完成“语法扫描”后,我们可以看到一种模式:所有的动词可能是加工。即它们最终将被表示为后来DFD的圆圈,所有名词是外部实体(方框),数据、控制对象(箭头)和数据存储(双杆),进一步注意到名词和动词可以彼此相关。,对0层的细化 注册员根据学生运动会的比赛规则,首先登记报名单的基本信息(队名,参加项目,运动员姓名,运动员号);裁判员根据比赛项目和系统确认的项目组织参加者比赛,并把各队项目参加者的比赛项目成绩录入系统;系统可在计算机屏幕上自动显示比赛的单项名次和团体名次;运动员可通过注册员查询运动员的号码单和各队比赛成绩。,对1层加工的细化,什么是数据字典,数据字典也叫需求字典,在结构化过程中,把数据字典作为描述被定义对象内容的一种标准格式语法规则。数据字典是DFD的补充工具,它对数据流图中的组成要素进行补充说明,数据字典的条目,数据流条目数据存储条目外部项条目处理过程条目,数据字典条目包含的内容,数据字典的每一条目中应包括以下信息:1)名称:数据项或者控制项的主要名称,数据 存储或外部实体的主要名称别名:最早使用的另一个名称。何处用/怎么用:一个用于数据项或控制项的过程列表,及其使用方法(如,对过程的输入、从过程输出、作为一个存储、作为一个外部实体)。内容描述:表示内容的符号表示方法附加信息:关于数据类型、预置值(如果知道)、限制或极限等信息。,数据定义的符号,构成数据的基本形式有三种:顺序(sequence)数据项;从数据项大集合中选择(selection);数据项的重复组合(repeated grouping)。,符号表示可以用于开发内容的描述(如下表所示)能使分析员描述组合数据。,数据字典条目实例(1),数据存储:1)名称:团队成绩 别名:团体成绩 何处用/怎么用:存储各个团队的成绩 内容描述:队名总分 组织:按队名拼音递增排列 2)名称:运动员名单 别名:无 何处用/怎么用:存储运动员的基本信息 内容描述:队员运动员号姓名项目名3或更多 组织:按运动员递增排列数据流:1)名称:单项成绩 别名:无 内容描述:项目名运动员成绩破记录 2)名称:各队成绩 别名:无 内容描述:队名总分姓名项目名成绩破记录,数据字典条目实例(2),名称:电话号码别名:无何处用/怎么用:需要与外界通信(输出)拨号(输入)内容描述:电话号码=校内家属区号码|校办公区号码|桂林市号码|国内各地区号码|国外各地区号码校内家属区号码=受话号码校内办公区号码=校内办公区冠号+受话号码桂林市号码=国内冠号+受话号码国内各地区号码=出总机号+国内冠号+地区号+受话号码国外个地区号码=出总机号+国外冠号+国别号+城市号+受话号码,校内办公区冠号=54国内冠号=0国外冠号=00出总机号=8地区号=2-5位数字国别号=1-5位数字城市号各国不同,也由不同为数的数据组成受话号码=3-8位数字附加信息:有些国家城市号第一位的数字是“0”时,拨号时应将“0”去掉。,加工规格说明,在对数据流图的分解中,位于层次树最低层的加工也称为基本加工或原子加工,对于每一个基本加工都需要进一步说明,这称为加工规格说明。在编写基本加工的规格说明时,主要目的是要表达“做什么”,而不是“怎样做”。,加工规格说明,加工规格说明应满足如下的要求:(1)对数据流图的每一个基本加工,必须有一个加工规格说明。(2)加工规格说明必须描述基本加工如何把输入数据流变换为输出数据流的加工规则。(3)加工规格说明必须描述实现加工的策略而不是实现加工的细节。(4)加工规格说明中包含的信息应是充足的,完备的,有用的,没有重复的多余信息。,加工规格说明,决策表举例商店业务处理系统中“检查订货单”的决策表。,加工规格说明,建立决策表的步骤(1)列出与一个具体过程(或模块)有关的所有处理。(2)列出过程执行期间的所有条件(或所有判断)。(3)将特定条件取值组合与特定的处理相匹配,消去不可能发生的条件取值组合。(4)将右部每一纵列规定为一个处理规则,即对于某一条件取值组合将有什么动作。,加工规格说明,决策树决策树(decision tree)也是用来表达加工逻辑的一种工具,有时侯它比决策表更直观。检查订货单的决策树,需求分析与SA相关考题:2007 三(1),四(1)(2)2008 一(1),二(1),四()()2009 四(1)(2)2010 一(1),三(1)四(1)(2),计算机世界,现实世界,结构化开发方法,结构化分析,结构化设计,结构化编程,OOA,OOD,OOP,面向对象开发方法,类(class),具有共同属性和行为的对象的抽象 类与对象的关系类是对象的抽象对象是类的实例,类,对象,OO方法的开发过程,OO方法改进了在生存期各个阶段间的界面,因为生存期各个阶段开发出来的“部件”都是类,在面向对象生存期的各个阶段对各个类的信息进行细化,类成为分析、设计和实现的基本单元。,类的生存期模型,类的规格说明,从废弃类开发,既存类的复用,渐增式的实现,渐增式的测试,求精和 维护,测试用例和测试 的开发,实现,从既存类演变,Coad-Yourdon方法Coad-Yourdon的OOA过程概述:使用“寻找什么”标准来标识对象定义一般/特殊结构定义整体/部分结构标识主题(子系统构件的表示)定义属性定义服务,分析阶段由五个活动组成:(1)标识类及对象(2)标识结构(3)标识主题(4)定义属性及实例连接(5)定义服务及消息连接五个步骤常根据需要交叉进行,UML符号为开发者或开发工具使用这些图形符号和文本语法为系统建模提供了标准。这些图形符号和文字所表达的是应用级的模型,在语义上它是UML元模型的实例。UML模型由事物、关系和图组成,UML的基本模型,UML的基本模型,UML的事物,事物是对模型中最具代表性成分的抽象,在UML中,可以分为结构事物、行为事物、分组事物和注释事物4类。,UML的关系,依赖关系,依赖(Dependency)是两个事物之间的语义关系,其中一个事物发生变化会影响到另一个事物的语义,它用一个虚线箭头表示。虚线箭头的方向从源事物指向目标事物,表示源事物依赖于目标事物。,关联关系,关联(association)是一种结构关系,它描述了两个或多个类的实例之间的连接关系,是一种特殊的依赖。关联分为普通关联、限定关联、关联类,以及聚合与复合。,关联关系普通关联,普通关联是最常见的关联关系,只要类与类之间存在连接关系就可以用普通关联表示。普通关联又分为二元关联和多元关联。二元关联描述两个类之间的关联,用两个类之间的一条直线来表示,直线上可写上关联名。,关联关系普通关联,多重性(multiplicity):多重性表明在一个关联的两端连接的类实例个数的对应关系,即一端的类的多少个实例对象可以与另一端的类的一个实例相关。如果图中没有明确标出关联的多重性,则默认的多重性为1。,关联关系聚合,聚合(Aggregation)也称为聚集,是一种特殊的关联。它描述了整体和部分之间的结构关系。两种特殊的聚合关系:共享聚合(shared aggregation)和复合聚合(composition aggregation)。如果在聚合关系中处于部分方的实例可同时参与多个处于整体方实例的构成,则该聚合称为共享聚合。,关联关系聚合,如果部分类完全隶属于整体类,部分类需要与整体类共存,一旦整体类不存在了,则部分类也会随之消失,或失去存在价值,则这种聚合称为复合聚合。,泛化关系,泛化(generalization)关系就是一般类和特殊类之间的继承关系。在UML中,一般类亦称泛化类,特殊类亦称特化类泛化针对类型而不针对实例,因为一个类可以继承另一个类,但一个对象不能继承另一个对象。泛化可进一步划分成普通泛化和受限泛化两类。,泛化关系普通泛化,普通泛化与前面讲过的继承基本相同。但在泛化关系中常遇到抽象类。一般称没有具体对象的类为抽象类。抽象类通常作为父类,用于描述其他类(子类)的公共属性和行为。,泛化关系普通泛化,普通泛化可以分为多重继承和单继承。多重继承是指一个子类可同时继承多个上层父类。,泛化关系受限泛化,受限泛化关系是指泛化具有约束条件。一般有4种约束:交叠(overlapping)、不相交(disjoint)、完全(complete)和不完全(incomplate)。,UML的图,UML规范定义了6种类型的图:用例图类图交互图状态图活动图实现图,银行储蓄系统的用例图,教学管理系统的类图,交互图,UML中有两种类型的交互图:顺序图和协作图。顺序图描述对象之间的动态交互关系,着重表现对象间消息传递的时间顺序。顺序图中的符号如下:,移动电话系统的顺序图,:手机按键,:手机屏幕,:基站,手机使用者,按下发送键,显示按键数字,显示连接成功,连接成功,创建连接,按下数字按键,连接基站,:手机其他部件,协作图举例:协作图是顺序图的一种变化形式,用于描述相互协作的对象间的交互关系和链接关系。协作图和顺序图是同构的,它们可互相转换。,打印机忙保存打印文件,队列,计算机,打印机空闲,打印文件,打印机,打印服务器,打印文件,电梯状态图举例:,在一楼,上升,停滞,下降,回到一楼,回一楼,想要到达楼层,想要到达楼层,电梯行程,开始,向上,向上,向下,活动图中的符号,活动图举例描述从活动到活动的控制流,构件图描述软件构件及构件之间的依赖关系,显示代码的静态结构。构件是逻辑架构中定义的概念和功能(例如,类、对象及它们之间的关系)在物理架构中的实现。典型情况下,构件是开发环境中的实现文件。,构件图,画图系统的构件图,部署图描述处理器、设备和连接,它显示系统硬件的物理拓扑结构及在此结构上执行的软件。部署图可以显示计算节点的拓扑结构和通信路径、节点上运行的软件以及软件包含的逻辑单元。,部署图,典型的部署图,ATM系统部署图:,局域网,Internet,ATM客户机,银行储户,ATM应用服务器,ATM数据服务器,OOA相关考题:2007 一(5),四(3)2008 一(3),二(5),四(3)2009 一(5),三(3),四(3)2010 一(4)(5),三(3),四(3),什么是软件设计,软件开发过程中系统分析之后做什么呢?“不能在没有蓝图的情况下试图建造房子”。在计算机软件中,蓝图就是设计。,软件设计:应用各种技术和原理,对一个软件系统作出足够详细的决策,使之有可能在物理上得以实现的过程。设计的目标:是建立一个软件系统的物理模型,软件需求:解决“做什么”软件设计:解决“怎么做”,软件设计的任务,软件设计的阶段与任务从工程管理的角度,可以将软件设计分为概要设计阶段和详细设计阶段。从技术的角度,传统的结构化方法将软件设计划分为体系结构设计、数据设计、接口设计和过程设计4部分;面向对象方法则将软件设计划分为体系结构设计、类设计/数据设计、接口设计和构件级设计4部分。,软件设计的任务,软件设计的阶段与任务从管理和技术两个不同的角度对设计的认识。,软件设计的阶段与任务体系结构设计:体系结构设计定义软件的主要结构元素及其之间的关系。接口设计:接口设计描述用户界面,软件和其他硬件设备、其他软件系统及使用人员的外部接口,以及各种构件之间的内部接口。数据设计:传统方法主要根据需求阶段所建立的实体关系图(ER图)来确定软件涉及的文件系统的结构及数据库的表结构。,软件设计的阶段与任务过程设计:过程设计的主要工作是确定软件各个组成部分内的算法及内部数据结构,并选定某种过程的表达形式来描述各种算法。,设计的基本原理,抽象和细化模块化软件体系结构控制层次数据结构软件过程信息隐藏,模块化设计,模块类型模块的独立性 两个定量准则来度量:聚合(cohesion):模块功能相对强度的量度。耦合(coupling):模块之间相对独立性的量度。聚合 聚合是信息隐藏概念的一种自然的延伸。耦合,返回,采用模块化原理的优点:可以使软件结构清晰,容易设计、容易阅读和理解、容易测试和调试。提高软件的可靠性。易于软件开发工程的组织管理。,模块独立性,模块的独立性:是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他模块的接口是简单的。模块独立性是通过开发具有单一功能和与其他模块没有过多交互作用的模块来达到的。但通常,模块之间总是相互关联的,很少是相互独立的。因为完全独立的模块是无所谓构成系统的。模块独立性可用两个定量准则来度量:聚合:是模块功能相对强度的量度 耦合:是模块之间相对独立性的量度,返回,聚合(内聚),聚合是信息隐蔽概念的一种自然扩展。一个聚合度高的模块只完成软件过程内的一个单一的任务,且与程序的其他部分的过程交互作用很少。简而言之,一个聚合模块应当(理想的)只做一件事。我们要尽量争取高聚合。聚合性可分为7级。,偶然聚合:一个模块内的各种元素之间没有任何的联系,这种 关系比较松散的任务组成一个的模块。缺点是模块 的内容不易理解,不易修改和维护。(这种模块一般很少使用,通常是一些初始化或终止模块)例:Read disk File;Calculate current values;Produce user out put;逻辑聚合:一个模块内的各种元素之间逻辑相关。比巧合内聚 要好一点。例:input all 模块 读一张控制卡片;读一张异常处理卡片;从磁带上读一个正常交易记录;从磁盘上读一个主文件记录;应当指出,逻辑内聚模块执行的并不是某个单一操作,而是不同操作中的一种,它们使用时,分别由传递给模块的选择参数调用,时间聚合:一个模块各处理元素必须在一个有限的 时间间隔内完成。例:initialization 模块 读控制卡片;重绕各个磁带;打开磁盘文件;置计数器为0;置累加器为0;从这些任务来看,不仅时间相关,而且逻辑相关,因为它们都属初始化工作。过程聚合:模块各处理元素之间存在一定的关系,并且必须按照某一特定的次序执行。通常过程聚合模块可以是一个循环、一个判断或一个步骤的线性序列。如:把流程图中的某一部分划出组成模块,就得到过程聚合模块,通信聚合:模块内所有处理元素引用同一个数据,对同一输入数据进行操作或产生同一个输出数据。通信聚合虽然不是最高的聚合,但较已较前几种聚合要高很多。,顺序聚合:在这种模块内,一个元素的输出就是 另一个元素的输入。当问题解用数据流图表示时,顺序聚合把一串顺序的对数据的变换连接起来就可以得到顺序聚合模块。当然,顺序聚合模块也可以从高层流程图得到。这是一种聚合程度较高的聚合。功能聚合:在模块内的所有元素只执行一个单一 的功能。功能聚合是聚合程度最高的内聚。确定聚合的精确级别是不必要的,重要的是尽量争取高聚合和识别低聚合,这样就可以修改软件设计来实现功能独立性。,返回,耦合,耦合是程序结构中模块相互连接的度量。耦合的强度取决于模块间接口的复杂性、进入或调用模块的位置、方式以及通过接口传递数据的多少等。我们争取尽可能低的耦合。与内聚一样,耦合从低到高也可以分为7级:,非直接耦合:在软件结构中,两个模块之间没有直接联系。耦合程度最低,独立性最高。数据耦合:调用时,被调用模块的输入和输出都只是简单的数据。耦合程度较低。标记耦合:如果两个摸块都要使用同一数据结构的一部分,不是采用全程公共数据区共享,而是通过模块接口传递数据结构的一部分(不是简单的数据)。仍是低耦合。控制耦合:一个模块把控制信息传递到另一个模块,对其功能进行控制。中等程度的耦合。外部耦合:把一个模块耦合到指定的设备、格式和通信协议上。比较强的耦合。外部耦合是必不可少的,但是必须加以限制,即使在一个软件结构中,这种模块的数目也应该尽可能地少。,公共耦合:多个模块引用同一个全程数据区。较强的耦合公共耦合结构中,诊断问题既费时又困难。内容耦合:当一个模块要直接使用存在于另一个模块内的数据或控制信息,或转入另一模块时出现的耦合。最强和最坏的耦合。这种耦合应坚决避免。,数据设计,由于数据结构在很大程度上决定着程序结构和程序过程的复杂性,所以数据设计对软件质量有重大的影响。信息隐蔽和数据抽象概念给数据设计提供了基础。,体系结构设计,目的:开发一个模块化的程序结构,并给出各个模块之间的控制关系。另外,体系结构设计融合了程序结构和数据结构,接口定义能使数据流经程序。体系结构设计的一组原则:(1)模块大小(应该适中)Baker 建议一个模块最好只包含50-60条语句。过大的模块往往是由于分解不充分,需对功能进一步分解。一般说来,分解后,不应该降低模块的独立性。过小的模块开销大于有效操作,而且模块数目过多将使系统接口复杂。因此过小的模块有时不值得单独存在。,(2)深度和宽度与扇出和扇入(都应适当)经验证明,一个设计得很好的软件模块结构,通常顶层扇出比较高,中层扇出比较少,底层扇入到有公共的实用模块中,即底层模块有高扇入。(即清真寺形状),(3)判定的作用域和模块的控制域 一个好的结构,其作用域和控制域应满足下述条件:对任何出现的条件或判定,作用域应当是条件或判定所在模块控制域的一个子集。即所有受条件或判定影响的模块应从属于作出条件或判定的那个模块。,返回,过程设计,结构化程序设计 称为软件发展的第三个里程碑,其影响远比前两个里程碑(子程序、高级语言)更为深远。“GOTO语句有害论”:Dijkstra认为Goto语句太容易把程序搞乱,因此应从一切高级语言中把它去掉,而只用三种基本控制结构就可以写各种程序。图形设计表示法表格设计表示法过程设计语言(PDL),返回,图形设计表示法,流程图盒图(box diagram)PAD图(problem analysis diagram,问题分析图)HIPO图(hierarchy plus input-process-output,分层输入处理输出图),返回,“一张图胜过千句话”,流程图,盒图,盒图是另一种用于构件级(过程)设计表示的图形设计工具。它的目标是开发一种不破坏结构化构成元素的过程设计表示。盒图由Nassi和Shneiderman开发,Chapin对其进行了扩展,因此盒图又称为NassiShneiderman图、NS图或Chapin图。,盒图具有的特征:(1)是一种清晰可见的图形表达式,能定义功能域(重复或if-then-else的工作域)。(2)控制不能任意转移。(3)易于确定局部和全局的数据工作域。(4)易于表示递归。,返回,PAD图(problem analysis diagram,问题分析图),优点:结构清晰,能直接导出程序代码,并可对其进行一 致性检查。PAD图的基本原理:采用自顶向下,逐步细化和结构化设计的原理,力求将模糊的问题解的概念逐步转换为确定的和详尽的过程,使最终可采用计算机直接进行处理。PAD图为软件设计提供了系统设计应采用的步骤:(1)因为所有的问题解都可以用三种基本控制构造(顺序、重复、选择)来描述。所以,第一步要从系统设计的一种粗略、模糊的概念出发,将过程描述为过程顺序部分的表示、过程重复部分的表示和过程选择部分的表示。(2)重复以上步骤,直到过程完全确定和详尽为止。,PAD图的基本图式和语言的标准模式(表1)PAD图转换为相应的源程序的步骤:1)根据问题解画出PAD图。2)把PAD图看做横向生长的树,沿着树迹前进,写出源程序。写源程序时的原则:1)遇处理框,写出其处理的内容。2)遇选择框或重复框,则按表1所示的语言模式写出相应的语句。PAD图实例,基本图式和语言的标准模式(1),下一页,基本图式和语言的标准模式(2),返回,PAD图实例,例:边长为x,y,z的三角形面积公式为:现有三个三角形,它们的边长分别是:a1、b1 c1;a2、b2、c2;a3、b3、c3,求这三个三角形的面积和。根据问题解画出PAD图,表示如下:,下一页,返回,把PAD图看做横向生长的树,沿着树迹前进,写出 源程序,过程设计语言(PDL),也叫程序设计语言、结构化英语、伪码。格式(format)和语义(semantic)1)为了设计局部和全局数据结构的表示,PDL的一种结构表示:TYPE IS 2)一个模块结构方式:BEGIN;END,3)PDL的条件构造,一般采用if-then-else的形式:IF THEN;ELSE;ENDIF4)PDL的选择构造,其表现如下:CASE OF WHEN SELECT;WHEN SELECT WHEN SELECT;DEFAULT:;ENDCASE,5)循环三种(先测试循环、后测试循环、索引循环)DO WHILE;ENDDO REPEAT UNTIL;ENDREP DO FOR;ENDFOR 循环中另外还提供了两个关键的词:NEXT和EXIT。设计员依此能确定嵌套循环中的受限出口。6)子程序与相应的接口,PDL构造来定义:PROCEDURE INTERFACE;END,返回,将结构化分析模型转换为软件设计,数据字典,数据流图,E-R图,状态变迁图,加,工,规,格,制规格说,数,据,对,描 述,象,数 据 设 计,体系结构设计,接口设计,过程设计,分析模型,设计模型,明,说,明,控,面向数据流设计的概述,面向数据流的设计(data flow-oriented design)就是根据问题域的数据流定义一组不同的映射,把问题域的数据流转换为问题解的程序结构。这种方法通常又叫做结构化设计(简称SD)DFD 软件结构 软件结构是什么样子?怎样完成这一工作?,数据流图类型,数据流图有二种类型 变换型DFD(变换流)事务型DFD(事务流),变换流,变换型数据流图是一个线性结构,由输入、变换和输出组成,如下图所示。,变换是系统的中心。变换输入端的数据流为系统的逻辑输入,输出端为系统的逻辑输出。系统输入端的数据流为物理输入,输出端为物理输出。从输入设备获得物理输入,一般要经过一系列加工变成逻辑输入送给变换(主加工)同理,逻辑输出也要变为物理输出。,事务流,事务流与变换流不同见下图。,事务流的数据流图有一个事务处理中心。它将输入分为许多相互平行的加工路径,然后根据输入的属性,选择某一加工路径。,要求类型处理,有效图书管理要求,当前日期,2.1,新书入库,2.2,借,入库单,罚款单,借书,2.3,注销图书,2.5,借书,2.4,目录文件,借书单,书,单,注销单,变换流设计,事务流设计,混合流设计,采用以变换流为主,事务流为辅的方法进行设计。其步骤如下:先划出输入、变换和输出。设计软件结构的上层。再根据DFD各部分的特征,进行变换设计和事务设计。,