软件工程第6章(2-02)_第1页
软件工程第6章(2-02)_第2页
软件工程第6章(2-02)_第3页
软件工程第6章(2-02)_第4页
软件工程第6章(2-02)_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件的总体设计

与详细设计软件的总体设计与详细设计软件设计通常可分为总体设计和详细设计两个阶段。总体设计的重点是决定系统怎么做的问题,而详细设计的重点是确定应该怎样具体地实现要求的系统。前者是后者的前提和基础,后者是前者的延伸和细化。二者并重,才能有效地进行软件设计。本章主要介绍了软件总体设计和详细设计的基本概念、任务和原则,简要论述了总体设计和详细设计的方法与工具。2.1软件的总体设计软件的总体设计,作为软件设计过程中的首要阶段,对软件设计的全过程产生重大的影响,为软件详细设计提供框架和方向。总体设计从需求出发,系统而全面地构架软件设计的总体轮廓,并将系统划分成若干个模块,以及描述各模块之间的关联。软件总体设计质量的高低,直接关系到整个软件设计的成败。2.1.1

软件总体设计的概念、任务和目标1.软件总体设计概念的涵义软件总体设计又称概要设计,是指总体上系统构架软件设计所应包含的组成要素的设计方法。总体设计的基本任务是将系统划分成模块结构形式,决定每个模块要完成的功能,明确每个模块之间的调用关系,决定模块界面,定义数据传递关系。对同一用户需求,可以提出多个设计方案,然后在一定的限制条件下,从中选出一个方案并能使所期望的目标,较大限度地得到满足。总体设计阶段的主要产品是模块说明书,包括模块结构图和每个模块的描述。前者指系统的模块组成以及模块间的调用关系;后者包含功能、界面、过程和注释。功能是指描述每个模块的输入/输出及其功能。界面是指参数的传递关系。过程是指模块内部实现,它通常在该模块的详细设计完成后才补充进来。注释是指主要说明对该模块的一些限制和约束。2.软件总体设计的任务(1)软件系统结构设计按照结构化理论,实现一个系统目标需要程序和数据。所以,必须设计组成这个系统的所有程序结构和数据库文件的具体方法。有关这一问题,已在本篇第1章中做了介绍。将一个复杂的系统按功能划分成模块。确定每个模块的功能。确定模块之间的调用关系。确定模块之间传递的信息。评价模块结构的质量。(2)数据结构及数据库设计在结构化理论软件系统中,尤其是对于大型数据处理的软件系统,除了系统结构设计外,数据结构与数据库设计是很重要的。有关这一问题,本篇第1章中也亦做了介绍。(3)网络系统设计如果采用的是网络环境,则要进行网络系统的设计。(4)软件总体设计文档软件总体设计文档是总体设计阶段结束时提交的技术文档。软件设计文档可分为总体设计说明书、详细设计说明书和数据库设计说明书。(5)评审在该阶段,对设计部分是否完整地实现了需求中规定的功能、性能等要求,设计方案的可行性、关键的处理及内外部接口定义的正确性、有效性以及各部分之间的一致性等,都要一一进行评审。3.软件总体设计的目标软件设计的最终目标是要取得最佳方案。一般来讲,好的软件有如下三个特点:能够按照指定的要求进行工作,功能、性能都符合指定的要求;软件是可维护的,可方便地进行修改;软件不只是代码,还有一套配置齐全的文档。好的软件一般来自于最佳的设计方案。所谓“最佳”方案是指在所有候选方案中,节省开发费用、降低资源消耗、缩短开发时间、能够赢得较高的生产效率、较高的可靠性和可维护性的方案。2.1.2

软件总体设计的原则1.模块化原则2.抽象化原则3.信息隐蔽原则2.1.3

软件总体设计的方法与步骤1.软件总体设计方法从系统设计角度来看,软件总体设计常见的方法有两类:一类是以数据流图为基础构造模块的结构化程序设计方法;另一类是以对象、类、继承和通信为基础的面向对象设计方法。2.软件总体设计的步骤软件总体设计的典型过程,包括以下7个步骤:(1)选取合理的体系结构方案(2)推荐最佳方案(3)系统模块设计(4)数据结构和算法设计(5)交互设计(6)编写文档(7)审查和复审2.1.4

总体设计中的模块划分选取体系结构与模块划分有很强的关联,实际上,在选取一个确定的体系结构的同时,在宏观上就已经明确:系统被划分成几个模块,每个模块应具有什么功能,模块间传递的信息是什么,模块应该放在体系结构的哪个位置。在选取体系结构时,还要考虑开发环境。2.1.4

总体设计中的模块划分1.模块划分的策略一个大的软件系统的所有功能不可能都用一个模块来实现,人的处理能力也限制了模块不能太大太复杂。将一个大的软件系统,用几个模块来协作实现,每个模块实现一部分功能,保证每个功能都用相应的模块来实现,将系统划分成模块就是把大的复杂的问题分解成许多容易解决的小问题,这就是大事化小、分而治之的思想,是人类对待复杂问题时采用的应对策略。究竟将系统划分成几个模块才好?哪些功能放在一个模块内较好?模块间如何组合成系统?模块间的调用关系是什么样的?模块间传递的信息及其结构如何?模块如何与用户界面相关?这些都是与模块划分相关的问题,是模块划分必须解决的问题,是设计阶段的难点,模块划分的好坏决定了系统设计的质量。不幸的是,虽然有许多指导如何进行模块划分的原则方法,但模块划分最终还是依赖于设计者个人的经验和能力,是设计者综合素质的体现。模块的好坏没有绝对的标准,一般来说模块设计追求高内聚、低耦合。也就是选定一种体系结构,能从宏观上将系统划分成多个高内聚、低耦合的模块。2.1.4

总体设计中的模块划分1.模块划分的策略下面介绍几个模块内聚与耦合的度量原则。内聚是一个模块内部各成分之间相关联程度的度量。耦合是模块之间相依赖程度的度量。内聚和耦合是密切相关的,与其他模块之间存在强耦合的模块通常意味着弱内聚,而强内聚的模块通常意味着与其他模块之间存在弱耦合。2.1.4

总体设计中的模块划分2.模块的内聚强度内聚按强度从低到高有以下几种类型:(1)偶然内聚如果一个模块的各成分之间毫无关系,则称为偶然内聚。(2)逻辑内聚几个逻辑上相关的功能被放在同一模块中,则称为逻辑内聚。如一个模块读取各种不同类型的外设输入,尽管逻辑内聚比偶然内聚合理一些,但逻辑内聚的模块各成分在功能上并无关系,即使局部功能的修改有时也会影响全局,因此对这类模块的修改也比较困难。(3)时间内聚如果一个模块完成的功能必须在同一时间内执行(如系统初始化);但这些功能只是因为时间因素关联在一起,则称为时间内聚;2.1.4

总体设计中的模块划分2.模块的内聚强度内聚按强度从低到高有以下几种类型:(4)过程内聚如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程内聚。(5)通信内聚如果一个模块的所有成分都操作同一数据集或生成同一数据集,则称为通信内聚。(6)顺序内聚如果一个模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚。(7)功能内聚模块的所有成分对于完成单一的功能是必须的,则称为功能内聚。2.1.4

总体设计中的模块划分3.模块的耦合强度耦合的强度依赖于以下4个因素:一个模块对另一个模块的调用;一个模块向另一个模块传递的数据量;一个模块施加到另一个模块的控制的多少;模块之间接口的复杂程度。耦合按从强到弱的顺序可分为以下几种类型:(1)内容耦合当一个模块直接修改或操作另一个模块中的数据,直接转入另一个模块,一个模块有多个入口,或者两个模块共用一部分代码时,就发生了内容耦合。应该尽可能地避免此种耦合。(2)公共耦合两个以上的模块共同引用一个全局数据项称为公共耦合。(3)控制耦合一个模块在界面上传递一个信号(如开关值、标志量等)控制另一个模块,接收信号模块的动作根据信号值进行调整,称为控制耦合。(4)标记耦合模块间通过参数传递复杂的内部数据结构,称为标记耦合。此数据结构的变化将使相关的模块发生变化。(5)数据耦合模块间通过参数传递基本类型的数据,称为数据耦合。(6)非直接耦合模块间没有信息传递时,属于非直接耦合。如果模块间必须存在耦合,就尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,坚决避免使用内容耦合。2.1.5

软件总体设计文件与复审总体要设计完成,这一阶段应交付的文件包括:1.总体设计说明书总体设计阶段的文件主要是总体设计说明书。总体设计说明书又称为程序系统设计说明书。编制说明书的目的,是出于对程序系统的设计考虑,包括程序系统的基本处理流程、程序系统的组织结构、功能分配、模块划分、接口设计、运行设计、数据结构设计和出错处理设计等,以便为程序的详细设计打下基础。2.1.5

软件总体设计文件与复审第一章引言1.1编写目的1.2背景1.3定义1.4参考资料第二章总体设计2.1需求规定2.2运行环境2.3基本设计概念和处理流程2.4结构2.5功能需求与程序的关系2.6人工处理过程2.7尚未解决的问题第三章接口设计3.1用户接口3.2外部接口3.3内部接口第四章运行设计4.1运行模块组合4.2运行控制4.3运行时间第五章系统数据结构设计5.1逻辑结构设计要点5.2物理结构设计要点5.3数据结构与程序的关系第六章系统出错处理设计6.1出错信息6.2补救措施6.2.1后备技术6.2.2降效技术6.2.3恢复及再启动技术6.3系统维护设计2.1.5

软件总体设计文件与复审2.总体设计的复审总体设计的复审集中在软件的顶层结构设计和需求设计。复审应该有下列人员参加:个别的结构设计负责人和设计文档的作者、个别的课题负责人和行政负责人、对开发任务进行技术监督的软件工程师、技术专家和其他方面的代表。设计复审是一个非常有用的、有可能发挥的工序。2.2软件的详细设计1.软件详细设计的概念总体设计阶段以比较抽象概括的方式提出了解决问题的办法;而详细设计阶段的任务,是将解决问题的办法进行具体化。详细设计主要是针对程序开发部分来说的,但这个阶段不是真正编写程序,而是设计出程序的详细规格说明。这种规格说明的作用类似于其他工程领域中工程师经常使用的工程蓝图,包含所必需的基本细节,程序员可以根据其写出实际的程序代码。详细设计是将总体设计的框架内容具体化、明细化,将总体设计转化为可以操作的软件模型。在实际项目进行的过程中,这个过程可以省略,主要是根据项目的具体情况和项目要求而定,可以有详细设计,也可以直接按照总体设计进行编码。详细设计主要是保证编码的顺利进行,可以预先扫清编码过程中的障碍,提高代码的质量和编码的效率。可以根据项目的具体情况,将详细设计过程与总体设计过程合在一起,或者将详细设计过程与编码过程合在一起。详细设计的目标不仅仅是逻辑上要正确地实现模块的功能,更重要的是设计出的处理过程应该尽可能简明易懂。详细设计的结果基本上决定了最终程序代码的质量。衡量程序的质量不仅要看逻辑是否正确、性能是否满足要求,更主要的是要看它是否容易阅读和理解。2.2软件的详细设计2.软件详细设计的任务软件详细设计的基本任务如下:①数据结构设计。②物理设计。对数据库进行物理设计,即确定数据库的物理结构。③算法设计。可以用某种图形、表格、语言等工具将每个模块处理过程的详细算法描述出来。④界面设计。可以采用字符用户界面设计、图形用户界面和多媒体人机界面设计。⑤其他设计。根据软件系统的类型,还可能要进行以下设计:代码设计、输入/输出格式设计、人机对话设计、网络设计。⑥编写设计说明书。详细设计说明书有下列的主要内容:引言:包括编写目的、背景、定义、参考资料。程序系统的组织结构。程序1设计说明:包括功能、性能、输入/输出、算法、流程逻辑、接口。程序2设计说明。内容同上。程序N设计说明。内容同上。⑦评审。对处理过程的算法和数据库的物理结构都要评审。3.软件详细设计的原则软件详细设计主要有3项原则:①模块的逻辑描述一定要清晰易读、正确可靠。②采用结构化设计方法,改善控制结构,降低程序的复杂程度,从而提高程序的可读性、可测试性、可维护性。其基本内容归纳为如下几点:程序语言中应尽量少用GOTO语句,以确保程序结构的独立性。使用单入口单出口的控制结构,确保程序的静态结构与动态执行情况相一致。保证程序易理解。程序的控制结构一般采用顺序、选择、循环3种结构来构成,确保结构简单。用自顶向下、逐步求精的方法进行程序设计。结构化程序设计的缺点是存储容量和运行时间增加10%~20%,但易读易维护性好。③选择恰当的描述工具来描述各模块算法。2.2.2

软件详细设计的方法和工具1.软件详细设计的方法详细设计不是具体的编程,而是为编程进行流程设计。提高软件的质量,最直接的是规范程序的流程结构,提高程序的易读性、可测试性、可维护性。结构化程序设计是实现该目标的关键技术之一,它指导人们用好的思想方法开发易于理解、易于验证的程序。采取结构化程序设计方法应包括以下几个要点:(1)采用自顶向下、逐步求精的程序设计方法在需求分析、总体设计中,都采用自顶向下、逐层细化的方法。使用“抽象”的方法,在软件定义阶段对问题进行抽象,产生模型和数据;在总体设计阶段,根据软件功能,对软件结构进行抽象,产生软件功能结构图并对结构进行分解优化,获得软件系统的结构体系。在详细设计中,主要任务就是设计程序的处理过程,虽然设计内容很具体,但在设计某个模块的内部处理过程中,仍可以逐步求精,降低处理细节的复杂度。2.2.2

软件详细设计的方法和工具(2)使用3种基本控制结构构造程序流程理论上讲,任何程序都可由顺序、选择和循环3种基本结构构造。这一种基本结构的共同点是单入口、单出口。它为自顶向下、逐步求精的设计方法提供了具体的实施手段。如对一个模块处理过程细化时,开始是模糊的,可以用下面的一种方式对模糊过程进行分解:用顺序方式对过程进行分解,确定各部分的执行顺序。用选择方式对过程进行分解,确定某部分的执行条件。用循环方式对过程进行分解,确定某部分进行重复的规则和条件。2.2.2

软件详细设计的方法和工具(3)主程序员的组织形式主程序员的组织形式指开发程序的人员应采用以一个主程序员、一个后备程序员和一个程序管理员3人为核心,再加上一些专家、其他技术人员组成小组的这种形式。这种组织形式突出了主程序员的领导作用,只将设计责任集中在少数人身上,有利于提高软件质量并且能有效地提高软件生产率。总之,结构化程序设计方法是综合应用这些手段构造高质量程序的思想方法。2.软件详细设计的工具模块内部的处理过程的表示方法称为详细设计的工具,它们可以分为:(1)图形工具利用图形工具可将过程的细节用图形描述出来。(2)表格工具可以用一张表来描述过程的细节,在表中列出各种可能的操作和相应的条件。(3)语言工具用高级语言来描述过程的细节,不论是哪类工具,对它们的基本要求都是相似的:应该能指明控制流程、处理功能、数据组织及其他方面的实现细节,并能提供对设计的无歧义的描述,从而保证在编码阶段能把对设计的描述迅速地翻译成质量好的程序代码。有无合适的软件详细设计,不仅直接影响软件开发人员的编程效率,而且对于软件测试和维护人员也是非常重要的,详细的软件设计说明使得他们不需要阅读程序代码,就能了解模块内部的程序结构。3.软件详细设计工具应具有的属性模块性:设计工具应能支持模块化软件的开发。简明性:软件工具应当比较容易学习,比较容易使用。便于编辑:在软件设计、软件测试期间,以及最后在软件生存周期的维护阶段可能要对详细设计进行修改。机器可读性:如果有一种设计工具能够直接输入到以计算机为基础的开发系统中,则将有极大的潜在好处。可维护性:软件维护是软件生存周期中最花钱的阶段。软件配置的维护意味着对详细设计表示的维护。强行结构化:鉴于采用结构化程序设计方法具有明显的好处,一种只允许使用结构化构造的设计工具将会促使人们养成良好的设计习惯。自动处理:详细设计中有一些信息可以用计算机进行处理,使设计人员对软件的正确性与质量有了新的深入了解。数据表示:描述局部数据和全程数据的能力是详细设计的重要因素,设计工具应当直接地表示这些数据。逻辑验证:设计逻辑的自动验证是软件测试期间要达到的首要目标。能够增强逻辑验证能力的软件工具将提高测试的完备程度。编程能力:在详细设计后面的软件工程步骤是编写程序。如果用软件工具表示的设计可以很容易转换成源程序的话,那么软件开发的工作量和可能出现的错误都将会减少。2.2.3

软件详细设计的过程详细设计是系统分析师与程序编写人员接触的唯一途径,因此详细设计的任务就是向程序员详细解释概要设计的内容,并以文档的形式交付程序员并来设计实现程序。详细设计按照时间进程分为两个阶段:模块功能说明阶段和程序流程编写说明。模块功能说明阶段的主要工作内容为:模块需求、功能细化、数据结构、数据操作和界面设计,主要是说明功能实现和数据操作的目的;而程序流程编写说明的主要工作内容包括:程序流程、关键技术等,主要目的是为编写程序提供方便。2.2.3

软件详细设计的过程1.设计公共模块2.子模块功能细化3.数据操作说明4.数据公式说明5.报表格式说明6.程序流程7.关键技术2.2.4

详细设计中的四种建模1.方法建模在设计类图上,需要确定方法的可见性、名称、参数、返回值和构造模型。其中,方法也称为操作或成员函数,方法的可见性是指外部对象对该方法的访问级别。(1)方法的命名方法要使用完整的描述进行命名,使用“methodName()”形式,如表2-2-2所示描述了一些有问题的方法命名实例,并给出了其改进方法和改进后的命名。2.2.4

详细设计中的四种建模有问题的命名改进方法改进后的命名CheckSta()应该使用完整的代词,以使意义更明确CheckStatus()BookQuery()动词应该移到名字开头表示一种主动语态QueryBook()Removereservation()使用大小写混合的方式可以增加可读性RemoveReservation()在Book类中的方法saveBook()两个Book的含义重复,去掉saveBook()中的BookSave()2.2.4

详细设计中的四种建模(2)方法的可见性一个方法被其他对象如何访问是由其可见性定义的,在UML语言中,可见性有三种级别:保护的(protected):只在类层次的内部被调用而不能由外部调用,使用符号“#”表示;私有的(private):只在定义它的类中被调用,使用符号“—”表示。为了降低系统的耦合,建立方法的可见性应遵从“让方法按照需要提供可见性,不要超过限度”的原则。例如,如果一个方法的可见性只需要protected,就将其设置为protected而不必是pubilic。2.2.4

详细设计中的四种建模(3)类的方法建模图2-2-1BorrowerInfo方法建模在这里以MiniLibrary系统中的BorrwerInfo类为例说明其方法的建模。在BorrowerInfo类中,需要增加一些成员函数,具体包括构造函数new()、存取成员属性的函数等,得到了如图2-2-1所示的BorrowerInfo类。2.2.4

详细设计中的四种建模2.属性建模与方法建模类似,类的属性建模也要进行命名和设置可见性。一般情况下,为了降低类之间的耦合度,属性建模包括以下原则:将所有属性的可见性设置为private。仅通过set方法更新属性。仅通过get方法访问属性。在属性的set方法中,实现简单的有效性验证,而在独立的验证方法中实现复杂的逻辑验证。2.2.4

详细设计中的四种建模3.状态建模状态建模是一种动态建模技术,它主要用于确定系统的行为。在详细设计时,状态建模一般只发生在依赖状态展示不同行为的类上。在状态建模中,状态通过对象属性的值来表示,转移是方法调用的结果,经常会反映业务规则。如图2-2-2所示显示了Minilibrary系统中Title类的状态图,其中Title对象具有不可借、可借和已预订等状态。2.2.4

详细设计中的四种建模4.关系建模在分析阶段,初步得到了类之间的关联关系。在详细设计阶段,需要进一步确定详细的关联关系、依赖关系和聚合关系等。此外,还可以根据类之间的共性和差异,利用泛化关系对整体结构进行优化。2.2.5

软件详细设计规格说明与复审1.详细设计说明建立设计文档的目的,是为了把设计师的思想告诉其他有关人员。程序是由计算机执行的,但可读性提高便于维护。在详细设计阶段的文档可作为详细设计说明书。它是程序工作过程的描述。详细设计说明的内容主要包括:表示软件结构的图表。对逐个模块的程序描述,包括算法和逻辑流程,输入/输出项,与外部接口等。2.2.5一个典型的详细设计说明书(1)引言①编写的目的:说明编写详细说明书的目的,并指明读者对象。②项目背景:包括项目的来源和主管部门等。③定义:列出文档中所用专门术语的定义和缩写词的原意。④参考资料列出有关资料的作者、标题、编号、发表日期、出版单位或资料来源。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论