第一题:
画出下列伪码程序的流图,计算它的环形复杂度。你觉得这个程序的逻辑有什么问题吗/strong>
C EXAMPLE
LOOP:DO WHILE X>0
A=B+1
IF A>10
THEN X=A
ELSE Y=Z
END IF
IF Y
THEN PRINT X,Y
ELSE IF Y=2
THEN GOTO LOOP
ELSE C=3
END IF
END IF
G=H+R
END DO
IF F>0
THEN PRINT G
ELSE PRINT K
END IF
STOP
解: (1)程序流程图和数据流图,如下: (2)环形复杂度的计算 环形复杂度 V(G)=流图中的区域数 = 流图中判定结点数目+1 = 6 + 1 = 7.
(3)程序所存在的逻辑问题: 控制最外层循环的变量X不仅没有经过初始化,且该循环内部没有任何有可能改变X的语句。这样的话,WHILE循环部分的代码要么不会执行,要么可能会出现死循环。 |
第二题:
(1).假设只有SEQUENCE和DO_WHILE两种控制结构,怎么利用它们完成 IF_THEN_ELSE操作/strong>
(2). 假设只有SEQUENCE和IF_THEN_ELSE两种控制结构,怎么利用它们完成DO_WHILE操作/strong>
解: 当只有SEQUENCE和DO_WHILE两种控制结构,利用它们可以完成如下IF_THEN_ELSE操作: K = 1 DO WHILE (条件 .AND. K.EQ.1) 程序块1 K=K+1 END DO DO WHILE ( (.NOT. 条件) .AND. K.EQ.1) 程序块2 K=K+1 END DO 当只有SEQUENCE和IF_THEN_ELSE两种控制结构,利用它们完成DO_WHILE操作,转化如下: label: IF (条件) THEN 程序块 GOTO label ELSE 程序块 END IF |
第三题:
(1).为每种类型的模块内聚举一个例子。
(2).为每种类型的模块耦合举一个具体的例子。
解: (1)内聚[1],每种类型的模块内聚举例说明如下: 1、偶然内聚:如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的。这就叫做偶然内聚 偶然内聚的例子:在模块T 中有A,B,C三条语句,至少从表面上看来这三条语句没什么联系,只是因为D,E,F,G中都有这三条语句,为了节省空间才把这三条语句作为一个模板放在一起。
2、逻辑内聚:如果一个模块完成的任务在逻辑上属于相同或相似的一类(例如一个模块产生各种类型的全部输出),称为逻辑内聚 逻辑内聚的例子:某一个模块将打印年、月、日,具体打印什么,将由传入的控制标志所决定。
3、时间内聚:一个模块包含的任务必须在同一段时间内执行(例如,模块完成各种初始化工作),称为时间内聚 时间内聚的例子:将多个变量的初始化放在同一个模块中实现。
4、过程内聚:如果一个模块内的处理元素是相关的。而且必须以特定次序执行。称为过程内聚。 过程内聚的例子:一个子程序,将开始读取学生的学 ,然后是姓名,最后将读取分数,是由于特定的顺序而将这些操作组合在一起的
5、通讯内聚:如果模块中所有的元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通讯内聚。 通讯内聚的例子:有一个子程序,它将打印实验 告,并且在完成后重新初始化传进来的实验数据。这个程序具有通讯内聚性。因为这两个操作由于使用同一个数据源联系在了一起。
6、顺序内聚:如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据),则称为顺序内聚。 顺序内聚的例子:有一个子程序,通过给出的生日,先计算出年龄。再根据年龄算出退休的时间,则这个程序具有顺序内聚性。
7、功能内聚:如果模块内所有的元素属于一个整体完成一个单一的功能,则成为功能内聚。 功能内聚的例子:一个程序中所有的操作都是为了算出一个人的年龄
(2)耦合[2],每种类型的模块耦合举例说明如下: 一般模块之间的可能的连接方式有七种,构成耦合的七种类型,它们的关系如下图:
下面举例说明以上几种耦合: 非直接耦合:两模块之间没直接关系(模块1和模块2),独立性最强
数据耦合:即一个模块访问另一个模块的时候,彼此之间是通过数据参数来交换输入、输出信息的,这种耦合为数据耦合。这种耦合较为松散,模块间独立性较强。
特征耦合:即一组模块通过参数传递记录信息,用户情况是个数据结构,图中模块都与此有关,“计算水费”和“计算电费”本没有关系,由于引用了此数据结构产生了依赖关系 控制耦合:即如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合
外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
公共耦合: 若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。
内容耦合:如果出现以下情况之一,两个模块就发生了内容耦合:
|
第四题、 考虑下述的自动化图书馆流通系统:
(1).试用有穷状态机说明上述的图书流通系统。
(2).试用Petri 说明第四题所述图书馆中一本书的循环过程,在规格说明中应该包括操作H、C及R。
解: 图书馆流通系统的有穷状态机描述如下: (一)图1、图书状态的有穷状态机描述 状态机J:{书在图书馆S1,书被借出S2,书被预约S3} 输入集K:{书上条形码,借阅卡条形码,终端输入各种命令} 转换函数T:如图1所示 初始态S:{书在图书馆S1,书被借出S2} 终态集F:{书被借出S2,书被预约S3}
(二) 图书2、图书馆终端管理员模式的有穷状态机描述 状态机J:{管理员设置状态,书入库,书出库(删除),预约} 输入集K:{终端输入管理员命令,书的各种状态(S1,S2,S3} 转换函数T:如下图所示 初始态S:{管理员设置状态} 终态集F:{书入库,书出库(删除),预约,}
3、图书馆终端用户模式的有穷状态机描述 状态机J:{读者查询状态,查询结果} 输入集K:{终端输入用户查询命令,书的各种状态(S1,S2,S3)} 转换函数T:如图3所示 初始态S:{读者查询状态} 终态集F:{查询结果}
4、Petri 说明图书馆中一本书的循环过程,在规格说明中应该包括操作H、C及R。 答:如下图,其中P1表示书在图书馆P2表示书在读者手上,P3书被预约。C:借书操作, R:还书操作, H:预约操作 |
第五题: 画出下列伪代码程序的流程图和盒图:
START
IF p THEN
WHILE q DO
f
END DO
ELSE
BLOCK
g
n
END BLOCK
END IF
STOP
解: 程序流程图:
盒图:
|
第六题:
(1).举例说明形式化说明技术和非形式化方法的优缺点。
(2).在什么情况下应该使用形式化说明技术用形式化说明技术应遵守哪些规则/strong>
解:(1)形式化说明技术和非形式化方法的优缺点如下:
以一个简单的打飞机游戏系统规格说明为例,用自然语言描述如下: 游戏的每个状态对应一个游戏界面,开始状态下,变量cd_start=1是进入正常游戏的状态,cd_start=2时,进入读取游戏状态,cd_start=3是进入得分榜界面查看。在得分榜界面按任意键返回开始界面,在读取游戏界面,当游戏数据读取完成后进入正常游戏状态,正常游戏状态下,同时按下左键和右键进入储存游戏界面,数据储存结束后返回正常游戏状态,在正常游戏状态下,如果变量game_res=0,则游戏结束,进入游戏结束画面。 可见,用自然语言书写的系统规格说明书,啰嗦繁杂,并且可能存在矛盾,二义性,含糊性,不完整性及抽象层次混乱等问题。
(2)应用形式化方法的应该遵循的准则如下: 1,应该选用适当的表示方法; 2,应该形式化,但不要过分形式化; 3, 应该估算成本; 4, 应该有形式化的方法顾问随时提供咨询; 5, 不应该放弃传统的开发方式; 6,应该建立详尽的文档; 7,不应该放弃质量标准; 8,不应该盲目依赖形式化方法; 9,应该测试,测试再测试; 10,应该重用。 |
[1] 内聚, 标志着一个模块内各个元素之间彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。
[2] 耦合:对一个软件结构内不同模块之间互联程度的度量。耦合强弱取决于接口的复杂度,进入或访问某一模块的点,以及通过接口的数据。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!