清华大学殷仁昆教授讲授《软件工程》讲义-03

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

软件工程94-114:46:59软件工程第三章软件设计3.1软件设计的概念3.2功能独立性3.3结构化设计方法3.4过程设计清华大学计算机系殷人昆软件工程94-214:47:003.1软件设计的概念软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,即软件设计是确定系统的物理模型。从技术观点来看,软件设计包括数据设计、体系结构设计、接口设计、过程设计。数据设计将实体关系图中描述的对象和关系,以及数据字典中描述的详细数据内容转化为数据结构的定义。软件工程94-314:47:00体系结构设计定义软件系统各主要成份之间的关系。接口设计根据数据流图定义软件内部各成份之间、软件与其它协同系统之间及软件与用户之间的交互机制。过程设计则是把结构成份转换成软件的过程性描述。软件工程94-414:47:00将分析模型转换为设计数据字典数据流图实体关系图状态转换图加工规格说明控制规格说明数据对象描述过程设计接口设计体系结构设计数据设计软件工程94-514:47:00从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。概要设计将软件需求转化为软件体系结构确定系统级接口全局数据结构或数据库模式。详细设计确立每个模块的实现算法和局部数据结构用适当方法表示算法和数据结构的细节软件工程94-614:47:00软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系统结构。设计编码测试维护测试编码维护有软件设计没有软件设计软件工程94-714:47:00软件设计既是过程又是模型。设计过程是一系列的迭代步骤,使设计人员能够描述目标系统的各个侧面。设计模型首先描述目标系统的整体架构,然后逐步细化架构得到构造每个细节的指导原则,从而得到系统的一系列不同的视图。良好的设计原则可为设计过程导航。衡量设计过程的技术原则:①设计必须实现分析模型中描述的所有显式需求,必须满足用户希望的所有隐式需求。衡量软件设计的原则软件工程94-814:47:00①对于开发者和未来的维护者而言,设计必须是可读的、可理解的,使得将来易于编程、易于测试、易于维护。②设计应该给出软件的全貌,包括从实现角度可看到的数据、功能、行为。衡量设计模型的技术原则①设计模型应该是一个分层结构。该结构:使用可识别的设计模式搭建系统结构。用显示良好设计特征的构件构成。可以用演化的方式实现。②设计应当模块化。软件工程94-914:47:00③设计应当包含数据、体系结构、接口和构件(模块)的清晰的视图。④设计应当根据将要实现的对象和数据模式导出合适的数据结构。⑤设计应当建立具有独立功能特征的构件。⑥设计应当建立能够降低模块与外部环境之间复杂连接的接口。⑦设计模型应当通过使用软件需求信息所驱动的可重复的方法导出。Davis的软件设计原则①设计应具有可跟踪性,能回溯到软件需求;软件工程94-1014:47:00②设计不必每次都从头做起,可以复用已有的设计模式和数据模式。③设计应当缩小软件与现实世界中问题的“智力距离”,尽量逼近问题领域的结构;④设计应具有一致性和集成性。整个系统应具有统一的风格和格式,具有良好的接口。⑤设计结果应能适应未来可能的变更;⑥设计不是编码,编码也不是设计。设计模型的抽象级别比源代码高。在编码级别上唯一的设计决策是补充一些实现细节。软件工程94-1114:47:00⑦设计应具有容错性和异常处理能力。对于异常数据、事件、操作条件等能够平滑处理。⑧在建立设计方案时就应能评估设计质量,而不是在系统编码之后。⑨应坚持设计评审,减少概念性(语义性)的错误。1)设计应遵循抽象化的原则,包含数据抽象和过程抽象。软件设计的主要手段软件工程94-1214:47:00过程抽象是指在软件设计中将处理过程的实现细节隐藏在数据抽象中,可以直接通过模块接口使用这些处理操作。数据抽象是指采用抽象数据类型表示数据,实现数据封装,使得使用者可通过接口使用数据而不必关心数据结构的实现。2.设计应遵循自顶向下、逐步细化的原则,建立一个层次的结构。将软件体系结构自顶向下,对过程细节和数据细节从抽象到具体,逐层细化,直到用编程语言的语句能够实现为止。软件工程94-1314:47:004)设计应当遵循模块化的原则。每个模块可独立地开发、测试,最后组装成完整的程序。其出发点是本着将一种复杂问题“分而治之”的原则。其目的是使程序的结构清晰,容易阅读、理解、测试、修改。Meyer的良好模块设计方法的标准a)模块可分解性可将系统按问题/子问题分解的原则分解成系统的模块层次结构;b)模块可组装性可利用已有的设计构件组装成新系统,不必一切从头开始。软件工程94-1414:47:00c)模块可理解性一个模块可不参考其他模块而被理解;d)模块连续性对软件需求的一些微小变更只导致对某个模块的修改而整个系统不用大动;e)模块保护将模块内出现异常情况的影响范围限制在模块内部;5)设计应遵循信息隐蔽的原则。Patnas主张在开发时,将每个程序的成分隐藏在模块内,定义每一个模块时尽可能少地显露其内部的处理。软件工程94-1514:47:00每个模块的实现细节对于其它模块是隐蔽的,将来修改软件时偶然引入错误所造成的影响就可以局限在一个或几个模块内部,不致波及到软件的其它部分。在可预见将来可能修改的场合,信息隐蔽可以提高软件的可修改性、可测试性和可移植性。软件工程94-1614:47:003.2功能独立性功能独立性是抽象、模块化和信息隐蔽的直接产物。如果一个模块能够独立于其他模块被编程、测试和修改,则该模块具有功能独立性。1978年Myers提出用两个准则来度量功能独立性,即模块间的耦合和模块的内聚。内聚性:内聚是一个模块内部各个元素彼此结合的紧密程度的度量。耦合性:耦合是模块间互相连接的紧密程度的度量,它取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。软件工程94-1714:47:00非直接数据标记控制外部公共内容耦合耦合耦合耦合耦合耦合耦合耦合性功能独立性模块间的耦合模块之间耦合性越强,功能独立性越差,这样形成的模块结构界面不好。软件工程94-1814:47:00非直接耦合(NondirectCoupling)两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。非直接耦合的模块独立性最强。主模块ABCEFGXYZ软件工程94-1914:47:00数据耦合(DataCoupling)一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的。p0(x0,y0)p1(x1,y1)数据耦合LINE(x0,y0,x1,y1)软件工程94-2014:47:00标记耦合(StampCoupling)一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。p0(x0,y0)p1(x1,y1)标记耦合LINE(p0,p1)软件工程94-2114:47:00控制耦合(ControlCoupling)如果一个模块通过传送开关、标志、名字等控制参数,明显地控制选择另一模块的功能,就是控制耦合。FlagFlagf1f2fn软件工程94-2214:47:00外部耦合(ExternalCoupling)一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。公共耦合(CommonCoupling)若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。软件工程94-2314:47:00公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合。common公共数据区ABcommon公共数据区AB松散的公共耦合紧密的公共耦合软件工程94-2414:47:00如果发生下列情形,模块之间就是内容耦合:一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一模块内部;两个模块有一部分程序代码重迭(只可能出现在汇编语言中);一个模块有多个入口。内容耦合(ContentCoupling)软件工程94-2514:47:00cAB进入另一模块内部模块代码重叠ABentry1……entry2……模块多个入口软件工程94-2614:47:00模块内聚巧合逻辑时间过程通信信息功能内聚内聚内聚内聚内聚内聚内聚内聚性功能独立性模块内聚性越强,功能独立性越好,对于形成的模块结构有比较好的作用。要求模块结构达到高内聚,低耦合。软件工程94-2714:47:00一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。功能内聚模块的功能独立性最强。功能内聚(FunctionalCohesion)软件工程94-2814:47:00这种模块完成多个功能,各个功能相互独立但都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。信息内聚(InformationalCohesion)软件工程94-2914:47:00初始化插入删除查找修改符号表软件工程94-3014:47:00如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。模块内各个功能是紧密相连的。通信内聚(CommunicationCohesion)软件工程94-3114:47:00打印检验结果读文件文件计算A计算B合并修改文件新文件加工记录软件工程94-3214:47:00使用流程图做为工具设计程序时,如果流程图太大,可以把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。过程内聚(ProceduralCohesion)软件工程94-3314:47:00时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。例如,初始化模块和终止模块就是时间内聚模块。时间内聚(ClassicalCohesion)软件工程94-3414:47:00这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。写一个记录读一个记录判定调用模块被调用模块逻辑内聚(LogicalCohesion)软件工程94-3514:47:00当几个模块内正好有一段代码是相同的,将它们抽取出来形成单独的模块,即巧合内聚模块。这种模块没有独立功能,各部分之间没有联系,或联系很松散。巧合内聚(CoincidentalCohesion)ABCMSTOREREC()TONREADMASTERFILEADD1TOx……软件工程94-3614:47:01结构化设计(structureddesign,SD)是一种面向数据流的设计方法,它可以与SA方法衔接。结构化设计是基于模块化、自顶向下细化、结构化程序设计等程序设计技术基础上发展起来的。基本思想是将系统设计成由相对独立、功能单一的模块组成的结构。该方法实施的要点是:1)首先研究、分析和审查数据流图。从软件3.3结构化设计方法软件工程94-3714:47:01的需求规格说明中弄清数据流加工的过程,对于发现的问题及时解决。2)然后根据数据流图确定数据处理的类型。典型的类型有两种:变换型和事务型。针对两种不同类型分别进行分析处理。3)由数据流图推导出

1 / 94
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功