软件工程第二次作业 作业范围: 第四章至第六章

第一题: 画出下列伪码程序的流图,计算它的环形复杂度。你觉得这个程序的逻辑有什么问题吗?

C   EXAMPLE
LOOP:DO WHILE  X>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
            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

答:流程图:
在这里插入图片描述
环形复杂度:
V(G)=结点E-弧数n+1=17-11+1=7=判断结点 +1=6 +1=7=封闭的区域数
逻辑有问题,当Z>0时,容易形成死循环;条件Y<5包含条件Y=2。

第二题:1. 假设只有SEQUENCE和DO_WHILE两种控制结构,怎么利用它们完成 IF_THEN_ELSE操作?
2. 假设只有SEQUENCE和IF_THEN_ELSE两种控制结构,怎么利用它们完成DO_WHILE操作?

解:1.转化如下:
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

2.转化如下:
label:	IF (条件) THEN
		             程序块
		      GOTO label
	          ELSE
		             程序块
	          END IF

第三题: 1.为每种类型的模块内聚举一个例子。

答:1、内聚标志着一个模块内各个元素之间彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。
低内聚:
①偶然内聚:如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的。这就叫做偶然内聚。
偶然内聚的例子:在模块T 中有A,B,C三条语句,至少从表面上看来这三条语句没什么联系,只是因为D,E,F,G中都有这三条语句,为了节省空间才把这三条语句作为一个模板放在一起。
②逻辑内聚:如果一个模块完成的任务在逻辑上属于相同或相似的一类(例如一个模块产生各种类型的全部输出),称为逻辑内聚。
逻辑内聚的例子:某一个模块将打印,年,月,日,具体打印什么,将由传入的控制标志所决定。
③时间内聚:一个模块包含的任务必须在同一段时间内执行(例如,模块完成各种初始化工作),称为时间内聚
时间内聚的例子:将多个变量的初始化放在同一个模块中实现。
中内聚:
①过程内聚:如果一个模块内的处理元素是相关的,而且必须以特定次序执行,称为过程内聚
过程内聚的例子:一个子程序,将开始读取学生的学号,然后是姓名,最后将读取分数,是由于特定的顺序而将这些操作组合在一起的。
②通讯内聚:如果模块中所有的元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通讯内聚。
通讯内聚的例子:有一个子程序,它将打印实验报告,并且在完成后重新初始化传进来的实验数据。这个程序具有通讯内聚性。因为这两个操作由于使用同一个数据源联系在了一起。
高内聚:
①顺序内聚:如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据),则称为顺序内聚。
顺序内聚的例子:有一个子程序,通过给出的生日,先计算出年龄。再根据年龄算出退休的时间,则这个程序具有顺序内聚性。
②功能内聚:如果模块内所有的元素属于一个整体完成一个单一的功能,则成为功能内聚。
功能内聚的例子:一个程序中所有的操作都是为了算出一个人的年龄。


2.为每种类型的模块耦合举一个具体的例子。

答: 1)非直接耦合:两个模块没有直接的关系(模块1和模块2),独立性最强。
2)数据耦合:即一个模块访问另一个模块的时候,彼此之间是通过数据参数来交换输入、输出信息的,这种耦合为数据耦合。这种耦合较为松散,模块间独立性较强。
3)特征耦合:即一组模块通过参数传递记录信息,用户情况是个数据结构,图中模块都与此有关,“计算水费”和“计算电费”本没有关系,由于引用了此数据结构产生了依赖关系。
4)控制耦合:即如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。
5)外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
6)公共耦合: 若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。
7)内容耦合:如果出现以下情况之一,两个模块就发生了内容耦合。

第四题: 考虑下述的自动化图书馆流通系统:每本书都有一个条形码,每个人都有一个带条形码的卡片。但一个借阅人想借一本书时,图书管理员扫描书上的条形码和借阅人卡片的条形码,然后在计算机终端上输入C;当归还一本书时,图书管理员将再次扫描,并输入R。图书管理员可以把一些书加到(+)图书集合中,也可以删除(—)它们。借阅人可以再终端上查找到某个作者所有的书(输入“A=”和作者名字),或具有指定标题的所有书籍(输入“T=”和标题),或属于特定主题范围内的所有图书(输入“S=”加主题范围)。最后,如果借阅人想借的书已被别人借走,图书管理员将给这本书设置一个预约,以便书归还时把书留给预约的借阅人(输入“H=”加书号)。 (1).试用有穷状态机说明上述的图书流通系统。
(2).试用Petri网说明第四题所述图书馆中一本书的循环过程,在规格说明中应该包括操作H、C及R。

答:(1)图书馆流通系统的有穷状态机描述如下:
(一)图书状态的有穷状态机描述
状态机J:{书在图书馆S1,书被借出S2,书被预约S3}
输入集K:{书上条形码,借阅卡条形码,终端输入各种命令}
转换函数T:如图下图所示
初始态S:{书在图书馆S1,书被借出S2}
终态集F:{书被借出S2,书被预约S3}
在这里插入图片描述
(2)图书馆终端管理员模式的有穷状态机描述
状态机J:{管理员设置状态,书入库,书出库(删除),预约}
输入集K:{终端输入管理员命令,书的各种状态(S1,S2,S3}
转换函数T:如图下图所示
初始态S:{管理员设置状态}
终态集F:{书入库,书出库(删除),预约,}
在这里插入图片描述
图书馆终端用户模式的有穷状态机描述
状态机J:{读者查询状态,查询结果}
输入集K:{终端输入用户查询命令,书的各种状态(S1,S2,S3)}
转换函数T:如图下图所示
初始态S:{读者查询状态}
终态集F:{查询结果}
在这里插入图片描述
第五题: 画出下列伪代码程序的流程图和盒图:

START
IF p THEN
   WHILE q DO
        f
   END DO
ELSE
   BLOCK
       g
       n
   END BLOCK
END IF
STOP

解:流程图:
在这里插入图片描述

盒图:在这里插入图片描述
第六题: (1).举例说明形式化说明技术和欠形式化方法的优缺点。
答:
形式化说明:

  • 优点:简洁准确的描述物理现象,对象获动作的结果;可以在不同软件工程活动之间平滑的过度;它提供了高层确认的手段。
    缺点:大多形式化的规格说明主要关注系统的功能和数据,而时序的问题,控制和行为等方面的需求却更难于表示

非形式化说明:

  • 优点:难度低。 缺点:可能存在矛盾,二义性,含糊性,不完整性级抽象层次混乱等问题。

以一个简单的俄罗斯方块游戏系统规格说明为例,用自然语言描述如下:
游戏的每个状态对应一个游戏界面,开始状态下,但变量cd_start=1是进入正常游戏的状态,cd_start=2时 进入读取游戏状态,cd_start=3是进入得分榜界面查看。在得分榜界面按任意键返回开始界面,在读取游戏界面,当游戏数据读取完成后进入正常游戏状态,正常游戏状态下,同时按下左键和右键进入储存游戏界面,数据储存结束后返回正常游戏状态,在正常游戏状态下,如果变量game_res=0,则游戏结束,进入游戏结束画面。可见,用自然语言书写的系统规格说明书,罗嗦繁杂,并且可能存在矛盾,二义性,含糊性,不完整性及抽象 层次混乱等问题。
(2).在什么情况下应该使用形式化说明技术?使用形式化说明技术应遵守哪些规则?
答:在用非形式化的方式描述时,存在矛盾,二义性,含糊性,不完整性级抽象层次混乱等问题时用形式化说明技术。
应用形式化方法的准则:
1.应该选用适当的表示方法;
2.应该形式化,但不要过分形式化;
3.应该估算成本;
4.应该有形式化的方法顾问随时提供咨询;
5.不应该放弃传统的开发方式;
6.应该建立详尽的文档;
7.不应该放弃质量标准;
8.不应该盲目依赖形式化方法;
9.应该测试,测试再测试;
10.应该重用。

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tony带水!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值