辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)
5 6 零件编号 零件编号 零件制造商 零件名称 答案:当模块p调用模块q时(接口1),它传递了一个参数——飞机类型。当模块q把控制返还给模块p时,它传回一个状态标志。 因此,模块p和q之间的(接口1)、模块r和t之间(接口5)及模块s和u之间(接口6)都是数据耦合,因为它们传递的都是一个简单变量。 如果两个模块中的一个模块给另一个模块传递控制元素,也就是说,如果一个模块明显地控制另一个模块的逻辑,则它们之间具有控制耦合。例如,当给具有逻辑内聚的模块传递功能代码时就传递了控制元素。另一个控制耦合的例子是把控制开关作为一个参数传递。图中模块q调用模块r时(接口3)传递一个功能代码,因此,这两个模块之间是控制耦合。 由已知条件,模块p, t, u更新同一个数据库,因此,它们之间具有公共环境耦合。 当模块p调用模块s时(接口2),如果模块s使用或更新模块p传递给它的零件清单中的所有元素,则模块p和模块s之间的耦合是数据耦合;但是,如果模块s只访问该清单中的一部分元素,则模块p和s之间的耦合是特征耦合。模块q和s之间(接口4)的耦合情况类似。由于图和表中所给出的信息不足以准确地描述各个模块的功能,所以不能确定这两对模块之间的耦合是数据耦合还是特征耦合。
2.从供选择的答案中选出在下列叙述中括弧内字母应该代表的正确内容
(1)一组语句在程序的多处出现,为了节省内存空间把这些语句放在一个模块中,该模块的内聚度是(A)的。
(2)将几个逻辑上相似的的成分放在一个模块中,该模块的内聚度是(B)的。 (3)模块中所有成分都使用共同的数据,该模块的内聚度是(C)的。
(4)模块内某些成分的输出是另一些成分的输入,该模块的内聚度是(D)的。
(5)模块中所有成分结合起来完成单独一项任务,该模块的内聚度是(E)的。它具有简明的外部界面,由它构成的软件易于理解,测试和维护。 [供选择的答案] A~E
1.功能性 2.顺序性 3.通信性 4.过程性 5.偶然性 6.时间性 7.逻辑性 [请选择]
A: 5 偶然性 B:7 逻辑性C:通信性 D:2 顺序性E:1 功能性 T3:画出下列伪码程序的程序流程图和盒图
START
IF p THEN
WHILE q DO f END DO ELSE
BLOCK g n
END BLOCK END IF STOP
答案:(1)程序流程图 (2)盒图
16
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)
开始 F T q循环 WHILE q p F p T q g f n g f n q循环 停止
T4:图6.18给出的程序流程图代表一个非结构化的程序,问: (1)为什么说它是非结构化的? (2)设计一个等价的结构化程序
(3)在(2)题的设计中使用附加的标志变量flag了吗?若没有,再设计一个使用flag的程序;若用了,再设计一个不用flag的程序。
答案:(1)通常所说的结构化程序是按照狭义的结构程序的定义衡量,符合定义规定的程序。图中所示的程序的循环控制结构有两个出口,显然不符合狭义的结构程序的定义,因此是非结构化的程序。
(2)使用附加的标志变量flag,至少有两种方法可以把该程序改造为等价的结构化程序,如下盒图所示:
flag = TRUE p AND flag g F q T flag = TRUE F q T flag=FALSE g (NOT q) OR (NOT flag) (3)不使用flag把该程序改造为等价的结构化程序的方法如图所示:
flag=FALSE 17
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)
F q T g (NOT q) OR (NOT p) T8:画出下列伪码程序的流图,计算它的环形复杂度,这个程序的逻辑有什么问题吗? C EXAMPLE LOOP: DO WHILE Z>0 A=B+1 IF A>10 THEN X=A ELSE Y=Z END IF IF Y<5 THEN PRINT X,Y ELSE IF Y=2 1 2 3 4 5 6 7 8 END IF G=H+R END DO IF F>0 THEN PRINT G ELSE PRINT K END IF STOP THEN GOTO LOOP ELSE C=3 END IF 9 10 11 12 13 14 程序流程图和流图分别如下图所示:
Z>0循环 WHILE Z>0 T A=B+1 T X=A T PRINT X, Y Y<5 F C=3 G=H+R Z>0循环 T PRINT G F>0 F PRINT K
A>10 F Y=Z F Y=2 10 T 12 14 11 13 7 9 1 2 3 4 6 8 5 (1)环形复杂度等于流图中的区域数
上图所求的流图中有六个区域,故环形复杂度等于6。
18
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)
(2)环形复杂度等于流图中边的条数减去节点数之后加2
流图中共有18条边,14个节点,故它的环形复杂充为18-14+2=6 (3)环形复杂度等于程序中的判断数加1
流图中有2条输出弧的节点(节点1,3,6,8,11)对应于程序中的1个判断,因此,流图的环形复杂度为5+1=6 存在的逻辑问题:
流图中节点6和8有矛盾,判定节点8对应的条件无法满足;
另外,Z的值没有变化,该程序将是一个无限循环或根本不执行循环。 第一题:用三种方法计算图中所示流图的环形复杂度
a b c d e f g h 答案:
(1)环形复杂度等于流图中的区域数
上图所求的流图中有五个区域,故环形复杂度等于5。 (2)环形复杂度等于流图中边的条数减去结点数之后加2 流图中共有11条边,8个结点,故它的环形复杂充为11-8+2=5 (3)环形复杂度等于程序中的判断数加1
流图中有2条输出弧的结点(结点c和f)对应于程序中的1个判断,有n(n>2)条输出弧的结点(例如结点a有3条输出弧)对应于程序中的n-1个判断。因此,流图的环形复杂度为2×1+1×(3-1)+1=5 第二题:
假设某航空公司规定,乘客可以免费托运重量不超过30kg的行李。当行李重量超过30kg时,对头等舱的国内乘客超重部分每公斤收费4元,对其他舱的国内乘客超重部分每公斤收费6元,对外国乘客超重部分每公斤收费比国内乘客多一倍,对残疾乘客超重部分每公斤收费比正常乘客少一半。请用判定树表示与上述每种条件组合相对应的计算行李费的算法。 答案:
T4:回答下列问题:
(1)什么是模块测试和集成测试?它们各自有什么特点?
(2)假设有一个由1000行FORTRAN语句构成的程序(经编译后大约有5000条机器指令),估计在对它进行测试期间将发现多少个错误?为什么? (3)设计下列伪码程序的语句覆盖和路径覆盖测试用例 START
INPUT (A, B, C) IF A>5
19
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)
THEN X=10 ELSE X=1 END IF IF B>10 THEN Y=20 ELSE Y=2 END IF IF C>15 THEN Z=30 ELSE Z=3 END IF
PRINT (X, Y, Z) STOP 答案:
(1)模块测试把每个模块作为一个单独的实体来测试,目的是发现并改正程序模块中的错误,保证每个模块作为一个单元能正确地运行,这个测试步骤中所发现的往往是编码和详细设计的错误。测试重点在于模块接口、局部数据结构、重要的执行通路、出错处理通路和边界条件。
集成测试是测试和组装软件的系统化技术,主要目标是发现与接口有关的问题。有两种集成测试策略:非渐增式测试方法和渐增式测试。
(2)经验表明, 在类似的程序中,单位长度里的错误数ET/IT近似为常数。美国的一些统计数字告诉我们,通常0.5*10-2<= ET/IT <=2*10-2
也就是说,在测试之前每1000条指令中大约有5~20个错误
假设在该程序的每1000条指令中有10个错误,则估计在对它进行测试期间将发现的错误数为:
5000×10 / 1000 = 50 (3)
? 语句覆盖的测试用例:
因为每个判定表达式为真或为假时均有赋值语句,为了使每个语句都至少执行一次,总共需要两组测试数据,以便使得每个判定表达式取值为真或为假各一次。下面是实现语句覆盖的典型测试用例:
①使3个判定表达式之值全为假 输入:A=1, B=1, C=1
预期的输出:X=1,Y=2,Z=3 ②使3个判定表达式之值全为真 输入:A=20, B=40, C=60
预期的输出:X=10,Y=20,Z=30 ? 路径覆盖的测试用例:
本程序共有8条可能的执行通路,为做到路径覆盖总共需要8组测试数据。下面是实现路径覆盖的典型测试用例:
① 3个判定表达式之值全为假 输入:A=1, B=1, C=1
预期的输出:X=1,Y=2,Z=3 ② 3个判定表达式依次为假 假 真
20