1、软件工程习题课,4-1 从供选择的答案中选出正确的答案填入下列叙述中的( ) 内。 模块内聚性用于衡量模块内部各成份之间彼此结合的紧密程度。 (1) 一组语句在程序中多处出现,为了节省内存空间把这些语句放在一个模块中,该模块的内聚性是( A )的。 (2) 将几个逻辑上相似的成分放在同一个模块中,通过模块入口处的一个判断决定执行哪一个功能。该模块的内聚性是( B )的。 (3) 模块中所有成分引用共同的数据,该模块的内聚性是( C )的。 (4) 模块内的某成份的输出是另一些成份的输入,该模块的内聚性是( D )的。 (5) 模块中所有成份结合起来完全一项任务,该模块的内聚性是( E )的。它
2、具有简明的外部界面,由它构成的软件易于理解、测试和维护。 供选择的答案: A E: 功能内聚 信息内聚 ?(顺序) 通信内聚 过程内聚 巧合内聚 时间内聚 逻辑内聚,A 5 B 7 C 3 D 4 ?2 E 1,4-2 从供选择的答案中选出正确的答案填入下面的( )中。 块间联系和块内联系是评价程序模块结构质量的重要标准。联系的方式、共用信息的作用、共用信息的数量和接口的( A )等因素决定了块间联系的大小。在块内联系中,( B )的块内联系最强。 SD方法的总的原则是使每个模块执行( C )功能,模块间传送( D )参数,模块通过( E )语句调用其它模块,而且模块间传送的参数应尽量( F
3、)。 此外,SD方法还提出了判定的作用范围和模块的控制范围等概念。SD方法认为,( G )应该是( H )的子集。 供选择的答案: A: 友好性 健壮性 简单性 安全性 B: 巧合内聚 功能内聚 通信内聚 信息内聚 C: 一个 多个 D: 数据型 控制型 混合型 E: 直接引用 标准调用 中断 宏调用 F: 少 多 G H: 作用范围 控制范围,A. , B. , C. , D. , E. , F. , G. , H. 模块之间的耦合(块间联系)和模块的内聚(块内联系)是评价程序模块结构质量的重要标准。联系的方式、共用信息的作用、共用信息的数量和接口的简单性等因素决定了块间联系的大小。在块内联
4、系中,以功能内聚模块的块内联系最强。 SD方法的总的原则是使每个模块只做一件事,就是说,只执行一个功能。模块之间尽可能传送简单的数据型参数。模块要通过标准调用语句调用其它模块,不要直接引用另一个模块内部的数据。同时模块之间传送的参数应尽量少。此外,SD方法还提出了判定的作用范围和模块的控制范围等概念。SD方法认为,模块的作用范围应该是其控制范围的子集。,4-3 举例说明你对概要设计与详细设计的理解。有不需要概要设计的情况吗?软件设计是一个把软件需求变换成软件表示的过程。最初这种表示只是描绘出软件的总的框架,然后进一步细化,在此框架中填入细节,把它加工成在程序细节上非常接近于源程序的软件表示。正
5、因为如此,所以从工程管理的角度来看,软件设计分两步完成。首先做概要设计,将软件需求转化为数据结构和软件的系统结构。然后是详细设计,即过程设计。通过对结构表示进行细化,得到软件的详细的数据结构和算法。由于概要设计建立起整个系统的体系结构框架,并给出了系统中的全局数据结构和数据库接口,人机接口,与其它硬、软件的接口。此外还从系统全局的角度,考虑处理方式、运行方式、容错方式、以及系统维护等方面的问题,并给出了度量和评价软件质量的方法,所以它奠定了整个系统实现的基础。没有概要设计,直接考虑程序设计,就不能从全局把握软件系统的结构和质量,实现活动处于一种无序状态,程序结构划分不合理,导致系统处于一种不稳
6、定的状态,稍一做改动就会失败。所以,不能没有概要设计。,4-4说明并比较概要设计说明书与需求分析说明书的内容。 (1)两个说明书都包括引言,内容基本相同; (2)任务概述部分概要设计说明比需求说明增加了需求概述; (3)需求说明主要通过静态、动态数据,数据库描述,数据字典和数据采集等内容进行数据描述; (4)需求说明中的主要部分是功能要求、性能要求、运行需求以及其他要求,它的目的是全面地、精确地描述了系统要“做什么”。需求说明书中还可能包括数据流图、数据字典、IPO图等描述的系统逻辑模型。 (5)概要设计说明则对系统的总体结构、各个接口、数据结构、运行、出错、安全、维护进行具体设计,它的目的是
7、描述系统“怎样做”,往往包含了各模块的处理说明和接口说明以及系统结构图。 (6)概要设计说明是建立在需求说明的基础上的。,4-5设计SC图 根据下图所示的变换型DFD图,用面向数据流的设计方法设计出SC图。,(1)第一级分解(建立初始SC框架)设计顶层和第一层模块,MC,MT,MA,ME,c,e,c,e,u,w,u,w,传送信息,第一级分解后的SC(另一种画法),MC,MA1,c,e,u,w,c,p,MA2,Q,P,R,ME1,ME2,e,p,r,r,w,u,w,变换分析设计方法步骤:,(2)第二级分解(分解SC各分支) 自顶向下分解,设计出每个 分支的中、下层模块,输入分支的分解 (1),M
8、A,C,B,A,b,a,c,E,D,d,e,c,e,输入分支的分解 (2),MA,Get C,b,a,c,Read D,d,e,c,e,B to C,b,c,d,e,a,b,Get E,Get B,D to E,A to B,Read A,输出分支的分解,ME,W,Write V,u,u,w,u,v,v,v,Put U,U to V,ME,U,Write W,w,w,u,w,u,V,(1),(2),中心加工分支的分解,MT,P,Q,R,e,c,p,r,u,w,p,r,5-1 下图是使用Basic语言编写的一个打印A,B,C三数中最小者的程序的流程图。其中出现了6个GOTO语句,一个向前,5个向
9、后,程序可读性很差。 if ( A = B and B C ) then print B else print C; 分析:理清程序流程图中每一条执行路径,适当利用复合的条件测试于判断语句,对每一个最终的打印处理,保留一个分支进入它。这样可以消除众多的GOTO语句,甚至可以消除嵌套的判断语句结构。这种程序结构清晰,可读性好。,5-2. 试说明下面的两个程序段的功能是什么?可否用另一些等效的程序段来代替它,以提高其可读性。(1) AI = AI + AT; (2) for ( i = 1; i = n; i + ) AT = AI - AT; for ( j = 1; j = n; j + )A
10、I = AI - AT; Vij = ( i / j ) * ( j / i ); (1) 的功能是对换AI 与AT 的内容。等效的程序段可以是:WORK = AT; AT = AI; AI = WORK;(2) 的功能是建立一个单位矩阵V。等效的程序段可以是:for ( i = 1; i = n; i + ) for ( j = 1; j = n; j + )if ( i = j ) Vij = 1;else Vij = 0; 分析:阅读这两段程序,读者可能不易看懂,有时还需用实际数据试验一下。对于(1),如果我们给AI 赋值3,给AT 赋值5,在运算后发现AI 中变成了5,AT 中变成了3
11、。这段程序就是交换AI 和AT 中的内容。目的是为了节省一个工作单元。如果改一下:WORK = AT; AT = AI; AI = WORK; 就能让读者一目了然。 对于(2),除法运算()在除数和被除数都是整型量时,其结果只取整数部分,而得到整型量。因此, i / j为0, 当i j时 j / i为0, 当j i时 得到的数组 Vij = ( ij ) * ( ji ) = 0,当i j时 ( ij ) * ( ji ) = 1,当i j时 这样得到的结果V是一个单位矩阵。如果直截了当地说明作者的意图:if ( i = j ) Vij = 1; else Vij = 0; 让读者可以很容易地
12、理解。所以,在程序设计时,应当首先考虑清晰性,不要玩技巧。,5-3.用Jackson图表示下图所示的二维表格:该学生名册由表头和表体两部分组成。其中表头又顺序包括表名和字段名。表体可由任意行组成,每行包括学生的姓名、性别、年龄和学号。,学生名册,5-4. 根据伪码画出NS图。 START IF A THEN X1 DO UNTIL B ELSE X2 Y END IF Z STOP,5-5. 根据伪码画出PAD图。 START SWITCH P CASE 1: A; break; CASE 2: B; break; CASE 3: C; break; Default; STOP,5-6.移动电
13、信公司为促进业务的发展发行各种优惠卡,其中包括钻石卡、金卡、银卡3种,用户可以依据其信用度享受不同额度的透支。其中钻石卡、金卡和银卡允许透支的额度分别为800元、500元和100元。发卡的规则为:从未发生过话费拖欠,且每月通话费在500元(含)以上者可获得钻石卡,每月通话费在200元(含)以上者可获得金卡,每月通话费在100元(含)以上者可获得银卡;发生过话费拖欠,能在规定的时间内缴清欠款,且每月通话费在300元(含)以上者可获得金卡,每月通话费在200元(含)以上者可获得银卡;发生过话费拖欠,并未能在规定时间内补清欠款,无论每月话费多少均不能获得优惠卡。,6-2根据下面给出的规格说明,利用等
14、价类划分的方法,给出足够的测试用例。 “一个程序读入三个整数。把此三个数值看成是一个三角形的三个边。这个程序要打印出信息,说明这个三角形是三边不等的、是等腰的、还是等边的。” 解:设三角形的三条边分别为A, B, C。如果它们能够构成三角形的三条边,必需满足:A 0,B 0,C 0,且A + B C,B + C A,A + C B。如果是等腰的,还要判断是否A = B,或B = C,或A = C。对于等边的,则需判断是否A = B,且B = C,且A = C。 列出等价类表:,6-3.某一报表处理系统,要求用户输入处理报表的日期。 假设日期限制在1990年1月至1999年12月,即系统只能对该
15、段时期内的报表进行处理。如果用户输入的日期不在此范围内,则显示输入错误信息。该系统规定日期由年、月的 6 位数字字符组成,前 4 位代表年,后两位代表月。现用等价类划分法设计测试用例,来测试程序的“日期检查功能”。 解:划分等价类并编号: 划分成 3 个有效等价类,7 个无效等价类, 如表5 - 3所示。 为合理等价类设计测试用例,对于表中编号为1, 5, 8对应的 3 个合理等价类, 用一个测试用例覆盖。 为每一个不合理等价类至少设计一个测试用例:测试数据 期望结果 覆盖范围199002 输入有效 1,5,899MAY 输入无效 219995 输入无效 31999005 输入无效 4198912 输入无效 6200001 输入无效 7199900 输入无效 9199913 输入无效 10,6-4根据给出的程序流程图,画出它的PAD图和程序图,并计算它的McCabe复杂性度量。其中:Pi代表操作语句,Ci代表条件。,PAD图,程序图,McCabe复杂性:4,6-5某城市的电话号码由三个部分组成。这三部分的名称与内容分别是: 地区码:空白或3位数字; 2、前缀:非“0”或“1”开头的3位数字; 后缀:4位数字。 用等价分类法完成如下要求: 划分出有效等价类、无效等价类; 为有效等价类设计出测试用例。 解第一步:电话号码等价类划分,