实用软件工程结构化设计

上传人:痛*** 文档编号:151263634 上传时间:2022-09-12 格式:PPT 页数:169 大小:914KB
收藏 版权申诉 举报 下载
实用软件工程结构化设计_第1页
第1页 / 共169页
实用软件工程结构化设计_第2页
第2页 / 共169页
实用软件工程结构化设计_第3页
第3页 / 共169页
资源描述:

《实用软件工程结构化设计》由会员分享,可在线阅读,更多相关《实用软件工程结构化设计(169页珍藏版)》请在装配图网上搜索。

1、第四章结构化设计结构化设计 第一节第一节 软件设计在开发阶段中的任务和地位软件设计在开发阶段中的任务和地位第二节第二节软件设计的概念和原则软件设计的概念和原则第三节第三节 结构化设计结构化设计第四节第四节 人机界面设计人机界面设计第五节第五节详细设计详细设计第六节第六节 面向数据结构的设计方法面向数据结构的设计方法在软件需求分析阶段确定了要让所开发的软件“做什么”的问题,接下来就是实现软件的需求,解决“怎样做”的问题。软件设计就是处理“怎样做”的问题,它被定义为“应用各种技术和原理,对设备、过程或系统作出足够详细的描述,使之能够在物理上的以实现”。第一节第一节 软件设计在开发阶段中的任务和地位

2、软件设计在开发阶段中的任务和地位开发阶段由设计、编码和测试三个互相关联的基本活动组成,每个活动都按照某种方式进行信息变换。软件设计是开发活动的第一步,需求规格说明书中对将要实现系统的信息、功能和行为方面的需求描述构成了软件设计的基础。从工程管理的角度看来,软件设计可划分为概要设计和详细设计两个阶段。首先做概要设计,将需求转化为软件系统结构和数据结构。然后详细设计,即过程设计 软件结构设计数据设计过程(算法)设计一个独立的界面设计活动。是确定软件系统各主要部件之间的关系。是把信息描述转换为实现软件系统所要求的数据结构。是把结构部件转换成软件系统的过程性描述。是根据这种过程性描述编制代码。然后把生

3、成的程序代码交由测试人员,最终得到完整有效的软件产品。软件设计是一个把软件需求逐步转换为软件源代码的过程,它提供了软件的表示,使得软件的质量评价成为可能。软件设计还是将用户要求准确地转化为最终软件产品的唯一途径,它也是后续开发活动及软件维护的基础。因而,软件设计是开发阶段最重要的活动。第二节软件设计的概念和原则第二节软件设计的概念和原则 一、模块化1、模块模块或组件是指具有一定功能的可以用名字调用的程序语句集合。例如,过程、函数、子程序和宏等都可作为模块。面向对象范型中的对象是模块,对象内的方法也是模块。2、模块化模块化是将软件划分成若干个相对独立的模块,而这些模块集成起来构成一个整体,可以完

4、成指定的功能满足用户的需求。模块化可以化繁为简,减少成本,但如果模块分得过多,会增加模块的接口成本,反而增加软件的整体成本。所以模块化的程度应该是适量的。模块是由边界元素限定的相邻的程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体标识符来代表它。像Pascal或Ada这样的块结构语言中的Beginend对,或者C,C+和Java语言中的对,都是边界元素的例子。因此,过程、函数、子程序和宏等,都可作为模块。面向对象范型中的对象(见第6章)是模块,对象内的方法也是模块。模块是构成程序的基本构件。模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起

5、来构成一个整体,可以完成指定的功能满足用户的需求Meyer提出了五条标准,我们可以用这五条标准来评价一种设计方法定义有效的模块系统的能力。下面列出这五条标准。(1)模块可分解性如果一种设计方法提供了把问题分解为子问题的系统化机制,它就能降低整个问题的复杂性,从而可以实现一种有效的模块化解决方案。(2)模块可组装性 如果一种设计方法能把现有的(可重用的)设计构件组装成新系统,它就能提供一种并非一切都从头开始做的模块化解决方案。(3)模块可理解性如果可以把一个模块作为一种独立单元(无需参考其他模块)来理解,那么,这样的模块是易于构造和易于修改的。(4)模块连续性如果对系统需求的微小修改只导致对个别

6、模块,而不是对整个系统的修改,则修改所引起的副作用将最小。(5)模块保护性如果在一个模块内出现异常情况时,它的影响局限在该模块内部,则由错误引起的副作用将最小。采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解。因为程序错误通常局限在有关的模块及它们之间的接口中,所以模块化使软件容易测试和调试,因而有助于提高软件的可靠性。因为变动往往只涉及少数几个模块,所以模块化能够提高软件的可修改性。模块化也有助于软件开发工程的组织管理,一个复杂的大型程序可以由许多程序员分工编写不同的模块,并且可以进一步分配技术熟练的程序员编写困难的模块。二、抽象抽象就是抽出事物的本质特性而暂时不考虑它们的细节

7、。一个复杂的问题首先可以用一些高级的概念构造和理解,这些高级的概念又可以用一些低级概念构造和理解性,如此进行下去,直至最低层次的具体元素。这就是所谓的,即用层次的方式考虑和处理一个复杂的问题。最高抽象较低级抽象较低级抽象具体基本元素低级概念构造和理解性软件工程的每一步都是对软件的较高一级抽象层的解的一次具体化的描述。在软件计划阶段,软件系统被描述为整个计算机系统中的一个部分。在软件需求分析阶段,软件用问题域约定的大家所熟悉的习惯用语描述。从概要设计向详细设计过度时,抽象级别再次被降低。编码完成后就达到最低的抽象层次。产能核算生产产品的消耗核算辅料核算主料核算优化分析用料统计报表其它核算软件结构

8、在这种从高级抽象到低级抽象的转换过程中,始终伴随着一系列的和。把完成一个特定功能的动作序列抽象为一个过程名和参数表,并通过指定过程名和实际参数调用此过程。把一个数据对象的描述抽象为一个数据类型名,用此类型名可以定义多个具有相同性质的数据对象。例.开发一个能够实现绘图系统全部功能的低级CAD软件包。抽象1:用问题域约定的大家所熟悉的习惯用语描述问题的解。该CAD软件具有能进行可视化通信的图形界面,能用鼠标代替绘图工具画出各种曲线和直线,能完成几何计算、截面视图和辅助视图设计,能将图形设计的结果存于图形文件中。抽象2:描述软件的任务,所用语言与问题域约定用语有所不同,但不是实现用的语言。CAD 软

9、件的任务:用户界面任务;创建二维图形任务;显示图形任务;管理图形任务。END CAD抽象3:给出初步过程性描述(以创建二维图形为例)PROCEDURE创建二维图形REPEAT UNTIL创建二维图形终止DO WHILE出现与数字仪交互时 数字仪接口任务;判断作图请求;线:画线任务;园:画园任务;END;DO WHILE出现与键盘交互时 键盘接口任务;选择分析或计算;辅助视图:辅助视图任务 ENDEND PRODEDURE在此抽象层次上,所有的术语都面向软件,模块结构也开始明朗,求精过程可以继续进行下去,直至获得源代码。三、信息隐藏软件设计应该降低模块与外部环境间的连接的复杂性。为此,D.L.P

10、arnas提出了信息隐藏的基本原则。1.模块内部的数据和过程,对于那些不需要这些信息的模块不可访问;2.每一个模块只完成一个相对独立的特定的功能;3.模块之间仅仅交换那些完成系统功能必须交换的信息。将信息隐藏作为模块化系统设计的标准,为软件测试和维护提供了极大的优点。1.每个模块只完成一个相对独立的特定功能,模块之间只交换那些为完成软件功能必须交换的信息。2.模块对数据和过程处理细节的隐藏可以减少错误向外传播。3.当软件系统扩充功能时,只需要插入新模块,原有的大多数模块不必改动。四、模块独立性是指软件系统中的每个模块只涉及软件要求的具体子功能,而与软件系统中其他的模块的接口是简单的。模块化,首

11、先要考虑模块如何划分,模块独立性是模块划分的一个标准。模块独立性较高的模块至少在两个优点:第一,具有独立性模块的软件比较容易开发。第二,独立的模块容易测试和维护。模块独立性的概念是模块化、抽象和信息隐藏等概念的直接结果,也是完成有效的模块设计的基本标准。模块的独立程度可以由两个定性标准来度量,这两个标准分别称为和。衡量不同模块彼此间互相依赖(连接)的紧密程度。衡量一个模块内部各个元素彼此结合的紧密程度。1、耦合耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。一般模块之间可能的连接方式有7种,构成耦合的7种类型,不同类型耦合强弱关系为:非直接耦合 数据耦合标记耦合

12、控制耦合外部耦合公共耦合内容耦合低强耦合性高弱模块独立性1)是指两个模块中的每一个都能独立的工作而不依赖另一个模块的存在,它们之间的联系完全是通过主模块的控制和调用实现。2)是指一个模块访问另一模块时,彼此之间通过参数表来交换输入、输出信息,而且交换的信息仅限于数据。3)是指一组模块通过参数表传递记录信息。4)是指一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能。如下图所示。5)是指一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息。6)是指多个模块都访问同一个公共数据环境。如下图所示。(a)松散公共耦合 (b)紧密公共耦合 一

13、个模块直接访问另一模块的内部数据;一个模块不通过正常入口转到另一模块内部;两个模块有一部分程序代码重叠;一个模块有多个入口。7)内容耦合合是指下列情形之一(a)进入另一模块内部(b)模块代码重叠(c)多入口模块的耦合程度最低,它表明模块之间无任何连接。但是,在一个软件系统不可能所有之间没有任何联系。是低耦合,软件系统必须存在这种耦合,因为只有当某些模块的输出数据作为另一些模块的输入数据时,系统才能完成有价值的功能。表明一组模块共享了一个记录信息,这个记录是某一数据结构的子结构,而不是简单变量。是中等程度的耦合,它实质上是在单一接口上选择多功能模块中的某项功能;控制耦合增加了系统的复杂程度,通常

14、把适当模块分解之后,可以用数据耦合代替它。的公共数据环境可以是全程变量、共享通信区、内存的公共覆盖区、任何存储介质上的文件以及物理设备等;公共耦合的复杂程度随耦合的模块个数而变化,当模块个数增加时复杂程度也增加。的耦合度最高,许多高级程序设计设计语言已经设计成不允许在程序中出现任何形式的内容耦合。耦合是影响软件复杂程度的一个重要因素。在软件设计中应该采取下述设计原则:2、内聚内聚是一个模块内各个元素彼此结合的紧密程度,好内聚的模块只做一件事情。不同类型内聚的强弱关系为下图所示。功能内聚顺序内聚通信内聚过程内聚时间内聚逻辑内聚偶然内聚高强内聚性低弱模块独立性功能单一功能分散1)是指一个模块内所有

15、处理元素属于一个整体,完成一个单一的功能。2)是指一个模块内的处理元素与同一个功能密切相关,且这些处理必须顺序执行。3)是指一个模块 内各功能部分都使用了相同的输入数据或产生了相同的输出数据,如下图所示。4)是指一个模块内的处理元素是相关的,而且必须以特定的次序执行。5)是指一个模块包含的任务必须在同一时间内执行。6)是指一个模块完成逻辑上相同或相似的一组任务,如下图所示。7)是指一个模块完成一组任务,这组任务彼此间即使有关系,其关系也是很松散的,如下图所示。,通常中等程度的内聚也是可以采用的,而且效果和高内聚相差不多;但是,低内聚很坏,不要使用。内聚和耦合是密切相关的,模块内的高内聚往往意味

16、着模块间的松耦合。内聚和耦合都是进行模块化设计的有力工具,但是实践表明内聚更重要,应该把更多注意力集中到提高模块的内聚程度上。事实上,没有必要精确确定内聚的级别。重要的是设计时力争做到高内聚,并且能够辨认出低内聚的模块,有能力通过修改设计提高模块的内聚程度降低模块间的耦合程度,从而获得较高的模块独立性。它是信息隐蔽概念的自然扩展。人们在开发计算机软件的长期实践中积累了丰富的经验,总结这些经验得出了一些启发式规则。这些规则往往能帮助人们找到改进软件设计、提高软件质量的途径,从而实现有效的模块化。下面介绍几条常用的启发规则。五、模块设计原则设计出软件初步结构之后,为了降低模块间的偶合度、提高模块内

17、聚度,应该进一步分解或合并模块。例如,多个模块共有的一个子功能就可以单独做成一个模块,由这些模块调用。通常一个模块以3060个语句行为宜。一个模块包含的语句行数过多,模块的可理解程度将迅速下降。1)深度是指软件结构中控制的层数。2)宽度是指软件结构中同一个层次上的模块总数的最大值。3)模块的扇出是指这个模块直接调用的下级模块数目。4)模块的扇入是指直接调用这个模块的上级模块数目。是指受该模块内一个判定影响的所有模块的集合。是指模块本身以及直接或间接从属于该模块的所有模块的集合。如果一个模块调用另一模块,则称前者为主控模块,后者为从属模块。如下图中模块M是主控模块,模块A、G是从属模块,模块M主

18、控模块A、G。模块B从属模块A,因此也从属模块M。模块A的控制域是A、B、C、D、E、F等模块的集合。在一个设计得很好的系统中,所有受判定影响的模块应该都从属于作出判定的哪个模块,最好是局限于做出判定的那个模块本身及它的直属下级模块。上图中模块A作出的判定只影响模块B。如果模块A作出的判定同时还影响模块G中的处理过程,那么,这种结构的软件是难于理解的。为了使模块A中的判定能影响模块G中的处理过程,通常需要在A中给一个标记设置状态指示判定的结果,并且把这个标记传递给A和G的公共上级模块M,再由M把它传给G。由于这个标记是控制信息而不是数据,因此模块间将出现控制偶合。使作用域是控制域的子集的方法是

19、把判断点上移或把那些在作用域内但不在控制域内的模块移到控制域内。例如,把判定从模块A中移到模块M中或把模块G移到模块A的下面。MBSXADC(其中X受A的影响)MBSXADC解决作用域超出控制域常见的方法有如下两种:1、适当提高判断所在层次,但最好不要将判断放到top层。2、把控制不住的模块拉进控制范围内。模块接口复杂或不一致是高偶合或低内聚的征兆,也是软件发生错误的主要原因之一,应该仔细分析模块的独立性和设计模块接口,使得信息传递简单并且与模块的功能一致。例 如,求 一 元 二 次 方 程 的 根 的 模 块QUAD_ROOT(CTAL,X),其中用数组CTAL传送方程的系数,用X数组回送求

20、得的根。这样的传输信息的方式不利于对这个模块的理解,下面这种接口就可能简单些。QUAD_ROOT(A,B,C,R!,R2),其中A,B,C是方程的系数,R1和R2是解方程求出的两个根。在软件设计中,不要使模块间出现内容偶合。当信息是从顶部进入模块并且是从底部推出来的时,软件就比较容易理解,也比较容易维护。模块功能可以预测是指对相同的输入数据能产生相同的输出。第三节 结构化设计结构化设计是在模块化,自顶向下细化,结构化程序设计等程序设计技术基础上发展起来的,其是面向软件系统结构,在比模块更高级别上研究结构问题,采用结构图来描述程序的结构。结构化设计方法是根据需求阶段对数据流的分析来设计软件结构,

21、它可以把数据流图变换成程序结构。由于任何软件系统都可以用数据流图表示,因此,结构化设计方法理论上可以用于任何软件系统的开发。由于结构化设计的工作与需求分析阶段的结构化分析相衔接,所以又说它是一种面向数据流的设计方法。结构化设计的概念源于70年代,它认为程序或系统是由一组功能操作构成的,软件设计者首先应该将需要实现的系统看作是逻辑功能(功能模块)的抽象集合,只分析模块之间关系,“无视”模块内部的情况。模块本身可以供其他程序使用,也可以是其他程序已编好的模块,模块按一定的层次结构组织起来就是软件结构。结构化设计的是将软件设计为结构简单,功能单一、相互独立的模块组织。它重视“模块度”概念,即软件系统

22、中的模块数目。这是因为模块的大小与模块的复杂性成正比。模块划分过小,虽然模块自身复杂度下降了,但又增加了模块间的接口复杂性,所以每个问题都有一个最佳模块度问题,即最佳模块数问题。如果存在一个适当的模块数目使得程序的整个复杂性最小,那么开发成本将被大大降低,结构化设计中为评价软件设计质量提供了两种方法:一种方法是评价模块本身质量(内聚)的相对效果。另一种方法是评价模块间关系(偶合)的相对效果,这里的“相对”是为了强调模块的简单性或关系的复杂性。软件结构是指软件的整体结构和这种结构提供系统在概念上的整体性方式。是由程序构件(模块)的层次结构、构件之间交互的方式及构件使用的数据结构。软件设计的目标之

23、一是导出系统结构,通常用结构图表示。软件结构是软件系统中元素之间的关系表示,它包括两个部分:1.是指软件系统中过程性部件(模块)的组织情况,并蕴涵了在程序控制上的的层次关系。在软件开发实践中,表达这种结构工具很多,但最常用的是下图所示的类树图。2.是指数据的各个元素之间的逻辑关系的一种表示。在软件结构设计中,数据结构与程序结构一样,可以在不同的抽象层次上表示。例如,一个是一种线性结构的逻辑模型,它可以用向量实现,也可以用链表实现。数据结构的组织方法和复杂程度多种多样,但典型的数据结构种类是有限的。关系层次结构和数据结构都是一个“逐步求精、分而治之”的结果,软件设计总是从需求定义开始,逐步分层导

24、出关系层次结构和数据结构,当需求定义中所述的每个部分最终都能由一个或几个软件元素实现时,求解过程即告结束。下图表明了从需求定义到软件设计的转变。软件结构的设计应该遵循模块设计原则,数据结构对软件结构和过程的复杂性有直接影响,它在很大程度上决定了软件质量。不管采用何种软件设计技术,没有良好的数据结构就不会导出良好的程序结构设计,因此数据结构设计在某种意义上讲是设计阶段中最重要的一个环节。1.结构图结构图是描绘系统结构的图形工具,它描述了系统由哪些模块组成、程序中模块之间的调用关系、每个模块“做什么”以及每个模块输入和输出。结构图是结构化设计中的一个十分重要的结果。作为结构设计的重要工具,结构图的

25、基本成分有模块、调用和数据。结构图中方框代表一个模块,框内注明模块的名字或主要功能;方框之间的箭头(或直线)表示模块的调用关系。在结构图中带注释的箭头表示模块调用过程中来回传递的信息。箭头尾部是空心圆表示传递的是数据,箭头尾部是实心圆表示传递的是控制信息。模块调用 数据信息控制信息AB模块A调用模块B子程序已定义的模块BABA查找学生成绩查找学生记录结构图描述了模块间的调用关系,它通过组织功能单一相互独立的模块来实现目标软件系统这样一个整体目标。结构图所显示的模块结构的偶合和内聚关系代表了系统的一种静态结构,它指出了模块间是否有关系,是否相互发生影响,但没有说明如何发生影响。结构图最主要的质量

26、指标是模块内聚度和偶合度。2层次图和HIPO图(H图)用于描绘软件的层次结构,层次图中一个矩形框代表一个模块,框间的连线表示调用关系,位于上方的矩形框所代表的模块调用位于下方的矩形框所代表的模块,下图是一个层次图的例子。层次图很适于在自顶向下设计软件的过程中使用。是美国IBM公司发明的“层次图加输入/处理/输出图”的英文缩写。为了使HIPO图具有可追踪性,在H图里除了顶层的方框之外,每个方框都加了编号。例如,把上图加了编号之后得到下图。与H图中的每个方框相对应,应该有一张IPO图描述这个方框代表的模块的处理过程,每张IPO图内都应该明显地标出它所描绘的模块在H图中中的编号,以便确定这个模块在软

27、件结构中的位置。”软件的概要设计,又称总体设计,它的主要任务是确定一个模块化的,确定每个模块的,定义,明确模块间的以及系统的。传统的软件工程方法学采用结构化设计方法来完成该项软件设计阶段的工作。概要设计需要完成的工作包括以下几个方面:1制定规范为软件开发组制定在设计时应该共同遵守的标准,以协调组内各成员的工作。2软件系统结构的总体设计在需求分析分阶段,系统按功能被逐次分割成层次结构,使每一部分完成简单的功能且各个部分之间又有一定的关系。设计阶段,在这个功能的层次结构的基础上把各个部分组合起来成为系统,它包括:(1)采用结构化设计方法,将一个复杂的系统按功能划分成模块的层次结构;(2)确定每个模

28、块的功能,并建立与已确定的软件需求的对应关系;(3)确定模块间的对应关系;(4)确定模块间的接口;(5)评估模块划分的质量及导出模块结构的规则。3处理方式设计(1)确定为实现软件系统的功能需求所必须的算法,评估算法的性能;(2)确定为满足软件系统的性能需求所必须的算法和模块间的控制方式即性能设计。性能设计包括周转时间响应时间吞吐量精度4个指标;(3)确定外部信号的接受和发送方式。4数据结构设计确定软件涉及的文件系统的结构、数据库模式、子模式。进行数据完整性和性设计,它包括:(1)确定输入输出文件的数据结构;(2)确定算法所必需的逻辑数据结构及其操作;(3)确定对逻辑数据结构所必须的的程序模块;

29、(4)确定和限制各个数据设计决策的影响范围;(5)如果需要与操作系统或调度接口所必须的控制表等数据时,确定其详细的数据结构及使用规则。5制定测试计划为了保证软件的可测试性,应指定测试计划,例如,黑盒测试计划。6概要设计文档评审概要设计阶段的输出是设计规格说明书,各条款内容是在设计求精过程中逐步确定的。为了确保文档质量,还必须对文档进行复审。复审的目的就是及早发现设计中的缺陷和错误,并纠正错误。复审的内容包括软件、三个方面,重点考虑:软件结构能否满足要求?结构形态是否合理?层次是否清晰?模块划分是否遵循模型化和信息隐藏思想?人机界面、各模块的接口以及出错处理是否合适?模块设计能否满足功能和性能要

30、求?在数据流图中,从系统的输入数据流到系统的输出数据流的一系列变换形成了一条信息流,这种信息流大体可分为两种类型,一种是变换流,一种是事务流。结构化设计方法就是根据数据流图的这种特性定义了两种“映射”,这两种映射可以机械地把数据流图变换成程序结构。1、变换流:在基本系统模型(顶级数据流图)中信息通常以“外部世界”的形式进入软件系统,经过处理以后再以“外部世界”的形式离开系统,如图4-21所示。输入信息流沿传入路径进入系统,同时由外部形式变换为内部形式,经过系统变换中心加工处理再沿输出通道变换成外部形式离开系统。如果数据流图所描述的信息流具有这些特性,则称这种信息流是变换流。变换流型数据流图有明

31、显的输入、加工或变换、输出三部分。变换型程序的功能是从某处获得数据,再对这些数据处理(变换),然后将结果输出。由三个部分组成:输入、处理、输出。变换分析与设计过程:1)区分输入流、变换中心和输出流,标出界线2)设计顶层和第一层顶层是主模块设计,第一层是输入、输出及处理设计。3)设计中下层AFDECBakhfedcbj物理输入物理输出逻辑输出逻辑输入信息处理中心(加工或变换)SystemGet bb in to j Out jIn aa in to bBCDEj in to k Out kbbjjbaakbh,fe,fcc,dhd,ekjj2、事务流信息沿传入路径(输入通道)进入系统,由外部形式

32、变换为内部形式后到达一个事务中心,事务中心根据输入信息(事务)的类型,在若干个动作序列或活动流中选择一个来执行。这种信息流称为事务流事务流有明显的事务中心,活动流以事务中心为起点表现为辐射状流出,事务型程序的功能是接受一项事务,然后根据事务的不同类型,选择某一类事务进行处理。事务分析与设计过程:1)分析并确定事务中心、多条动作路径的起点、数据接受部分和发送部分;2)设计主要模块;3)为每一个事务处理设计一个事务处理模块;4)为每一个事务处理模块设计操作模块;5)为每一个操作模块设计细节模块。TT1T2TnBaa1a2anb1b2bnbTT1T2Tnaba1a2anb1b2bn在开发大型软件系统

33、的活动中,数据流图中的变换流与事务流常常是交织在一起的。3、结构化设计方法的设计过程 下图描绘了结构化设计方法的逐步设计过程。特别需要指出的是:任何设计过程都不应该也不可能一成不变的,人的判断力和创造性往往会凌驾于方法的规则之上。精化数据流流类区分事务中心和数据接受选路区分输入和输出分支映射成事务结构映射成变换结构用启发式设计规则精化软件导出接口描述和全局数据结复查详细设计事务分析变换分析接口又解释为界面。接口设计主要包括有3个方面的描述:1.软件构件与构件之间的接口设计。如,构件之间的参数传递;2.软件内部与协作系统之间的接口 设计。如构件与其他外部实体的接口;3.软件与使用者之间的通信方式

34、。如,用户界面设计等。考虑设计优化问题时应该记住,“一个不能工作的最佳设计的价值是值得怀疑的”。软件设计人员应该致力于开发能够满足所有功能和性能要求,而且按照设计原理和启发式设计规则衡量是值得接收的软件。应该在设计的早期阶段尽量对软件结构进行精化。可以导出不同的软件结构,然后对它们进行评价和比较,力求得到“最好”的结果。这种优化的可能,是把软件结构设计和过程设计分开的真正优点之一。第四节第四节 人机界面设计人机界面设计人机界面设计是接口设计的一个组成部分。对于交互式系统来说,人机界面设计和数据设计、体系结构设计、过程设计一样重要。近年来,人机界面在系统中所占的比例越来越大,在个别系统中人机界面

35、的设计工作量甚至占设计总量的一半以上。人机界面的设计质量,直接影响用户对软件产品的评价,从而影响软件产品的竞争力和寿命,因此,必须对人机界面设计给以足够重视。一、人机界面设计问题在设计用户界面的过程中,几乎总会遇到下述四个问题:系统响应时间用户帮助设施出错信息处理命令交互 1.系统响应时间系统响应时间是许多交互式系统用户经常抱怨的问题。一般说来,系统响应时间指从用户完成某个控制动作(例如,按回车键或点击鼠标),到软件给出预期的响应(输出或做动作)之间的这段时间。系统响应时间有两个重要属性,分别是和。2.用户帮助设施几乎交互式系统的每个用户都需要帮助,当遇到复杂问题时甚至需要查看用户手册以寻找答

36、案。大多数现代软件都提供联机帮助设施,这使得用户可以不离开用户界面就解决自己的问题。常见的帮助设施有和两类。3.出错信息处理出错信息和警告信息,是出现问题时交互式系统给出的“坏消息”。出错信息设计得不好,将向用户提供无用的或误导的信息,反而增加了用户的挫折感。4.命令交互命令行曾经是用户和系统软件交互的最常用方式,而且也曾经广泛地用于各种应用软件中。现在,面向窗口的、点击和拾取方式的界面已经减少了用户对命令行的依赖,但是,许多高级用户仍然偏爱面向命令的交互方式。在多数情况下,用户既可以从菜单中选择软件功能也可以通过键盘命令序列调用软件功能。二、人机界面设计过程用户界面设计是一个迭代的过程,也就

37、是说,通常先创建设计模型,再用原型实现这个设计模型,并由用户试用和评估,然后根据用户的意见进行修改。用户界面设计主要依靠设计者的经验。总结众多设计者的经验而得出的设计指南,有助于设计者设计出友好、高效的人机界面。本节介绍三类人机界面设计指南。1.一般交互一般交互指南涉及信息显示、数据输入和整体系统控制,因此,这些指南是全局性的,忽略它们将承担较大风险。下面叙述一般交互指南。1)保持一致性。为人机界面中的菜单选择、命令输入、数据显示以及众多的其他功能,使用一致的格式。提供有意义的反馈。向用户提供视觉的和听觉的反馈,以保证在用户和界面之间建立双向通信。2)在执行有较大破坏性的动作之前要求用户确认。

38、如果用户要删除一个文件,或覆盖一些重要信息,或请求终止一个程序运行,应该给出“您是否确实要”的信息,以请求用户确认他的命令。3)允许取消绝大多数操作。UNDO或REVERSE功能使众多终端用户避免了大量时间浪费。每个交互式应用系统都应该能方便地取消已完成的操作。4)减少在两次操作之间必须记忆的信息量。不应该期望用户能记住一大串数字或名字,以便在下一步操作中使用它们。应该尽量减少记忆量。提高对话、移动和思考的效率。应该尽量减少击键次数,设计屏幕布局时应该考虑尽量减少鼠标移动的距离,应该尽量避免出现用户问:“这是什么意思”的情况。5)允许犯错误。系统应该保护自己不受致命错误的破坏。6)按功能对动作

39、分类,并据此设计屏幕布局。下拉菜单的一个主要优点就是能按动作类型组织命令。实际上,设计者应该尽力提高命令和动作组织的“内聚性”。7)提供对工作内容敏感的帮助设施。8)用简单动词或动词短语作为命令名。过长的命令名难于识别和记忆,也会占据过多的菜单空间2.信息显示如果人机界面显示的信息是不完整的,含糊的或难于理解的,则应用软件显然不能满足用户的需求。可以用多种不同方式“显示”信息:用文字、图片和声音;按位置、移动和大小;使用颜色、分辨率和省略。下面是关于信息显示的设计指南。1)只显示与当前工作内容有关的信息。用户在获得有关系统的特定功能的信息时,不必看到与之无关的数据、菜单和图形。2)不要用数据淹

40、没用户,应该用便于用户迅速地吸取信息的方式来表示数据。例如,可以用图形或图表来取代巨大的表格。使用一致的标记、标准的缩写和可预知的颜色。显示的含义应该非常明确,用户不必参照其他信息源就能理解。3)允许用户保持可视化的语境。如果对图形显示进行缩放,原始的图像应该一直显示着(以缩小的形式放在显示屏的一角),以使用户知道当前观察的图像部分在原图中所处的相对位置。4)产生有意义的出错信息。5)使用大小写、缩进和文本分组以帮助理解。人机界面显示的信息大部分是文字,文字的布局和形式对用户从中吸取信息的难易程度有很大影响。6)使用窗口分隔不同类型的信息。利用窗口用户能够方便地“保存”多种不同类型的信息。7)

41、使用“模拟”显示方式表示信息,以使信息更容易被用户吸取。例如,显示炼油厂储油罐的压力时,如果使用简单的数字表示压力,则不易引起用户注意。但是,如果用类似温度计的形式来表示压力,用垂直移动和颜色变化来指示危险的压力状况,就能引起用户的警觉,因为这样做为用户提供了绝对和相对两方面的信息。8)高效率地使用显示屏。当使用多窗口时,应该有足够的空间使得每个窗口至少都能显示出一部分。此外,屏幕大小应该选得和应用系统的类型相配套(这实际上是一个系统工程问题)。3.数据输入用户的大部分时间用在选择命令、键入数据和向系统提供输入。在许多应用系统中,键盘仍然是主要的输入介质,但是,鼠标、数字化仪和语音识别系统正迅

42、速地成为重要的输入手段。下面是关于数据输入的设计指南。1)尽量减少用户的输入动作。最重要的是减少击键次数,这可以用下列方法实现:用鼠标从预定义的一组输入中选一个;用“滑动标尺”在给定的值域中指定输入值;利用宏把一次击键转变成更复杂的输入数据集合。2)保持信息显示和数据输入之间的一致性。显示的视觉特征(例如,文字大小、颜色和位置)应该与输入域一致。3)允许用户自定义输入。专家级的用户可能希望定义自己专用的命令或略去某些类型的警告信息和动作确认,人机界面应该允许用户这样做。4)交互应该是灵活的,并且可调整成用户最喜欢的输入方式。用户类型与喜欢的输入方式有关,秘书可能非常喜欢键盘输入,而经理可能更喜

43、欢使用鼠标之类的点击设备。5)使在当前动作语境中不适用的命令不起作用。这可使用户不去做那些肯定会导致错误的动作。让用户控制交互流。用户应该能够跳过不必要的动作,改变所需做的动作的顺序(在应用环境允许的前提下),以及在不退出程序的情况下从错误状态中恢复正常。对所有输入动作都提供帮助。消除冗余的输入。尽可能提供缺省值;绝对不要要求用户提供程序可以自动获得或计算出来的信息。第五节第五节 详细设计详细设计软件的概要设计已经明确了软件系统的结构,给出了组成系统的各个模块的功能和模块之间控制分层关系,但它不关心模块内部的细节。软件的详细设计,又称过程设计是在数据设计、关系层次结构设计和接口设计完成之后进行

44、,它的基本任务就是要在概要设计的基础上,对系统中的每个模块给出足够详细的过程性描述,以及局部数据结构的设计。这里过程是指有关处理的精确说明,诸如事件的顺序,确切的判断位置,循环操作以及数据的组成等等。关系层次结构与软件过程相互关联,关系层次结构中的任何模块的所有从属模块肯定被引用出现在该模块的过程说明之中,因而,软件过程对应的程序结构也是一个层次结构。过程设计的主要任务是为软件结构中的每一个模块确定采用的算法和块内数据结构、明确接口细节、设计测试用例。一、结构化程序设计结构化程序设计的概念最早由E.W.Dijkstra提出,1966年Bohm和Jacopini证明了只用“顺序”、“选择”和“循

45、环”这三种基本控制结构就能实现任何单入口单出口的程序。(a)顺序结构,先执行A再执行B;(b)IF-THEN-ELSE型选择(分支)结构;(c)DO-WHILE型循环结构 Bohm和Jacopini证明为结构程序设计奠定了理论基础。那么,什么是结构程序设计?目前尚无定论,一个比较流行的定义是:结构程序设计是一种设计程序技术,它采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。在概要设计阶段采用自顶向下逐步求精的设计方法,可以把一个复杂问题的解分解和细化为一个由若干模块组成的层次结构的软件系统;在详细设计阶段采用自顶向下逐步求精的设计方法,可以把一个模块的功能逐步分解和细化为一系列具体的处

46、理步骤。如果只允许使用顺序、IF-THEN-ELSE型分支和DO-WHILE型循环这三种基本控制结构,则称为;如果除了上述三种基本控制结构之外,还允许使用DO-CASE型多分支结构和DO-UNTIL型循环结构,则称为,其流程图如图(a)和图(b)所示;如果再加上允许使用LEAVE(或BREAK)结构,则称为。(a)DO-UNTIL型循环结构;(b)多分支结构二、过程设计的工具描述程序处理过程的工具称为过程设计的工具,它们可以分为图形、表格和语言三类。1.程序流程图程序流程图又称为程序框图,它是历史最悠久使用最广泛的一种图形描述工具。程序流程图大家太熟悉了,此处不讲了。2.盒图(N-S图)出于要

47、有一种不允许违背结构程序设计精神的图形工具的考虑,Nassi和Shneiderman提出了盒图,又称为N-S图。下图给出了结构化控制结构的盒图表示,也给出了调用子程序的盒图表示方法。盒图没有箭头,因此不允许随意转移控制。坚持使用盒图作为详细设计的工具,可以使程序员逐步养成用结构化的方式思考问题和解决问题的习惯。(a)顺序(b)IF-THEN-ELSE型分支(c)CASE型多分支;(d)循环(e)调用子程序A 3PAD图(a)顺序(先执行P1后执行P2);(b)选择(IF C THEN P1 ELSE P2);(c)CASE型多分支;(d)WHILE型循环(WHILE C DO P);(e)UN

48、TIL型循环(REPEAT P UNTIL C);(f)语句标号;(g)定义PAD是问题分析图(Problem Analysis Diagram)的英文缩写,自1973年由日本日立公司发明以后,已得到一定程度的推广。它用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易。(a)初始的PAD图;(b)使用def符号细化处理框P24.判定表当算法中包含多重嵌套的条件选择时,用程序流程图、盒图、PAD图或后面即将介绍的过程设计语言(PDL)都不易清楚地描述。然而判定表却能够清晰地表示复杂的条件组合与应做的动作之间的对应关系。一张判定表由四部分组成,左上部列出所有条件,左下部是所有可能

49、做的动作,右上部是表示各种条件组合的一个矩阵,右下部是和每种条件组合相对应的动作。判定表右半部的每一列实质上是一条规则,规定了与特定的条件组合相对应的动作。5.判定树判定表虽然能清晰地表示复杂的条件组合与应做的动作之间的对应关系,但其含义却不是一眼就能看出来的,初次接触这种工具的人要理解它需要有一个简短的学习过程。此外,当数据元素的值多于两个时判定表的简洁程度也将下降。判定树是判定表的变种,也能清晰地表示复杂的条件组合与应做的动作之间的对应关系。12345678 9国内乘客 T T T T FFF F头等舱 T FT FT FT F残疾乘客 FFT T FFT T行李重量30 FFFFFFF

50、F免费 (W-30)2 (W-30)3 (W-30)4 (W-30)6 (W-30)8 (W-30)12 6过程设计语言过程设计语言也叫结构化英语或伪码,简记为PDL,它是所有正文形式的过程设计工具的统称。PDL通常允许自然语言(例如英语)的词汇与某种结构化程序设计语言的语法结构混合在一起,现今大多数PDL都以某种流行的高级程序设计语言作为基础,一般来讲,PDL描述不能够直接编译。结构化英语应具有下述特性:1)关键字采用固定语法并支持并支持结构化构件、数据说明机制和模块化。2)加工部分采用自然语言描述。3)允许说明数据结构。4)子程序的定义与调度规则不受具体接口方式的影响。例 商店业务处理系统

51、中的“检查发货单”IF the invoice exceeds$500 THEN(发货单金额超过500元)IF the account has any invoice more than 60 days overdueTHEN(欠款超过60天)The confirmation pending resolution of the debt(在偿还欠款前不予批准)ELSE(account is in good standing)(欠款没有超期)Issue confirmation and invoice(发行批准书和发货单)ENDIFELSE(invoice$500 or less)(发货单金额没

52、有超过500元)IF the account has any invoice and more than 60 days overdue THEN(欠款超过60天)Issue confirrmation,invoice and write messagy on credit action report(发 行批准书、发货单和赊欠报告)ELSE(account is in good standing)(欠款没有超期)Issue confirmation and invoice(发行批准书和发货单)ENDIFENDIF详细设计规格说明与复审详细设计说明书规范详细设计说明书是详细设计阶段的文档,它是

53、程序运行过程的详细描述。2复审复审是指对设计文档的复审。1)复审原则 复审的目的是为了及早程序中的错误,一般不请用户和其他领域的代表参加。复审中提出的问题应做详细记录,但不谋求当场解决。复审结束前,应做出本次复审能否通过的结论。2)复审的主要内容 审查模块的设计是否满足功能和性能要求,选择的算法和数据结构是否合理、是否符合编码语言特性,设计描述是否简单清晰等。3)复审的方式 复审分正式和非正式两种方式,非正式复审的特点是参加人员少,均为同行,方便灵活。“走查”就是一种非正式复审,复审时有一名设计人员逐行宣读设计资料,由到会同行跟随他指出的次序一行行的往下审查,发现问题就做好记录,然后根据多数参

54、加者的意见,决定是否通过该设计资料。正式复审除软件开发人员外,还邀请用户代表和领域专家参加,通常采用答辩方式,回答与会者的问题并记录各种重要的评审意见。第六节第六节 面向数据结构的设计方法面向数据结构的设计方法 在诸多应用领域中,信息都有清楚的层次结构、输入数据、存储的信息(数据库或文件)以及输出数据都可能有独特的结构。数据结构既影响程序的结构又影响程序的处理过程,重复出现的数据通常由具有循环控制结构的程序来处理,选择数据(即,可能出现也可能不出现的信息)要用带有分支控制结构的程序来处理。层次的数据组织通常和使用这些数据的程序的层次结构十分相似。面向数据结构的设计方法就是根据数据结构的表示获取

55、软件的表示,它的最终目标是得出对程序处理过程的描述。这种设计方法并不明显地使用软件结构的概念,模块是设计过程的副产品,对于模块独立原理也没有给予应有的强调。因此,这种方法最适合于在详细设计阶段使用,也就是说,在完成了软件结构设计之后,可以使用面向数据结构的方法来设计每个模块的处理过程。使用面向数据结构的设计方法,首先必须分析和确定数据结构。本节先介绍描绘数据结构的工具Jackson图,然后介绍Jackson程序设计的基本过程。一、Jackson图虽然程序中实际使用的数据结构种类繁多,但是它们的数据元素彼此间的逻辑关系却只有顺序、选择和重复三类,因此,逻辑数据结构也只有这三类。1.顺序结构顺序结

56、构的数据由一个或多个数据元素组成,每个元素按确定次序出现一次。图是表示顺序结构的Jackson图的一个例子。A由B、C、D三个元素顺序组成(每个元素只出现一次,出现的次序依次是B、C和D)2.选择结构选择结构的数据包含两个或多个数据元素,每次使用这个数据时按一定条件从这些数据元素中选择一个。ABCD根据条件A是B或C或D中的某一个(注意:在B、C和D的右上角有小圆圈做标记)3.重复结构重复结构的数据,根据使用时的条件由一个数据元素出现零次或多次构成。AB*A由B出现N次(N0)组成(注意:在B的右上角有星号标记)二、二、Jackson方法Jackson结构程序设计方法基本上由下述五个步骤组成。

57、(1)分析并确定输入数据和输出数据的逻辑结构,并用Jackson图描绘这些数据结构。(2)找出输入数据结构和输出数据结构中有对应关系的数据单元。所谓有对应关系是指有直接的因果关系,在程序中可以同时处理的数据单元(对于重复出现的数据单元必须重复的次序和次数都相同才可能有对应关系)。(3)用下述三条规则从描绘数据结构的Jackson图导出描绘程序结构的Jackson 图。第一,为每对有对应关系的数据单元,按照它们在数据结构图中的层次在程序结构图的相应层次画一个处理框(注意,如果这对数据单元在输入数据结构和输出数据结构中所处的层次不同,则和它们对应的处理框在程序结构图中所处的层次与它们之中在数据结构

58、图中层次低的那个对应)。第二,根据输入数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框。第三,根据输出数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框。总之,描绘程序结构的Jackson图应该综合输入数据结构和输出数据结构的层次关系而导出来。在导出程序结构图的过程中,由于改进的Jackson图规定在构成顺序结构的元素中不能有重复出现或选择出现的元素,因此可能需要增加中间层次的处理框。(4)列出所有操作和条件(包括分支条件和循环结束条件),并且把它们分配到程序结构图的适当位置。(5)开发软件过程性描述。例 一个正文文

59、件由若干个记录组成,每个记录是一个字符串。要求统计每个记录中空格字符的个数,以及文件中空格字符的总个数。要求的输出数据格式是,每复制一行输入字符串之后,另起一行印出这个字符串中的空格数,最后印出文件中空格的总个数。用Jackson图描绘的输入/输出数据结构的,并用一对虚线箭头把有对应关系的数据单元连接起来,以突出这种对应关系。接下来根据相应规则,从数据结构图导出程序结构图,(a)输入数据结构;(b)输出数据结构 列出所有操作和条件,统计空格个数需要的操作和和条件如下:(1)停止(2)打开文件(3)关闭文件(4)印出字符数(5)印出空格数(6)印出空格总数(7)sum:=sum+1(8)tota

60、ls:=totals+sum(9)读入字符数(10)sum:=0(11)totals:=0(12)pointer:=0(13)pointer:=pointer+1 I(1)文件结束I(2)字符串结束S(3)字符是空子符Sum:保存空格个数变量;Totals:保存空格总数变量;pointer:指示当前分析的字符在字符串中的位置变量。把这些操作和条件分配到程序结构图的适当位置后 描绘统计空格程序结构的Jackson图 统计空格数seq打开文件读入字符串totals:=0程序体iter until文件结束 处理字符串seq 印字符串seq 印出字符串 印字符串end sum:=0 pointer:=1 分析字符串iter until字符串结束 分析字符串select字符是空格 处理空格seq sum:=sum+1 pointer:=pointer+1 处理空格end 分析字符or字符不是空格 处理非空格seq pointer:=pointer+1 处理非空格end 分析字符end 分析字符串end 印空格数seq 印出空格数 印空格数end totals:=totals+sum 读入字符串 处理字符串end 程序体end 印总数seq 印出空格总数 印总数end 关闭文件 停止统计空格数end写出“图书管理系统”的软件设计书

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!