软件工程导论(第六版)课后习题答案 下载本文

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

答:图书馆流通系统的有穷状态机描述如下:

(一)图书状态的有穷状态机描述

状态机J:{书在图书馆S1,书被借出S2,书被预约S3}

输入集K:{书上条形码,借阅卡条形码,终端输入各种命令}

转换函数T:如图4.4.1所示

初始态S:{书在图书馆S1,书被借出S2}

终态集F:{书被借出S2,书被预约S3}

扫描两个条形码,在终端输入C 书在图书馆S1 扫描两个条形码,在终端输入R 图4.1.1 书被借出S2 在终端输入“H=”加书号 书归还,扫描两个条形码,在终端输入R 书被预约S3 二)图书馆终端管理员模式的有穷状态机描述

状态机J:{管理员设置状态,书入库,书出库(删除),预约}

输入集K:{终端输入管理员命令,书的各种状态(S1,S2,S3}

转换函数T:如图4.4.2所示

初始态S:{管理员设置状态}

终态集F:{书入库,书出库(删除),预约,} 预约 书状态为S2&终端输入“H=”加书名 管理员设置状态 管理员删除 管理员添加 书出库(删除) 书入库 图4.4.2 二)图书馆终端用户模式的有穷状态机描述

状态机J:{读者查询状态,查询结果}

输入集K:{终端输入用户查询命令,书的各种状态(S1,S2,S3)}

转换函数T:如图4.4.3所示

初始态S:{读者查询状态} 终态集F:{查询结果} 终端输入各种查询命令 查询结果 读者查询状态

5,试用Petri网说明第四题所述图书馆中一本书的循环过程,在规格说明中应该包括操作H、C及R。

答:其中P1表示书在图书馆P2表示书在读者手上,P3书被预约

P1 P2 . . P3

6,试用Z语言对第四题所描述图书馆图书流通系统做一个完整的规格说明。 答:(这题真的不会!) BOOK_STATE

Book_in,Book_out,Book_reserve Book_in∩Book_out∩Book_reserve=Φ Book_in∪Book_out∪Book_reserve=BOOK_STATE

第五章

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

答:耦合式对一个软件结构内不同模块之间互联程度的度量。耦合强弱取决于接口的复杂度,进入或访问某一模块的点,以及通过接口的数据。一般模块之间的可能的连接方式有七种,构成耦合的七种类型,它们的关系为:

低 耦合性 高 非直接耦合

强 独立性 弱 下面举例说明以上耦合:

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

G.内容耦合:如果出现以下情况之一,两个模块就发生了内容耦合 ① 一个模块访问另一个模块的内部数据。

② 一个模块不通过正常入口儿转到另一个模块的内部

③ 两个模块有一部分程序代码重叠(只可能发生在汇编程序中) ④ 一个模块有多个入口(这意味着一个模块有几种功能)

A模块Flag B F1 F2 … Fn A模块 B模块 使用 打印机 使用 A模块 B模块 C模块 全局数组 Sub AA(….) … … Goto L … End sub Sub BB(..) … … L: … … End sub

5.2为每种类型的模块内聚举一个例子

答:内聚标志着一个模块内各个元素之间彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。 低内聚:

A. 偶然内聚:如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的。这就叫做

偶然内聚

偶然内聚的例子:在模块T 中有A,B,C三条语句,至少从表面上看来这三条语句没什么联系,只是因为D,E,F,G中都有这三条语句,为了节省空间才把这三条语句作为一个模板放在一起。

B. 逻辑内聚:如果一个模块完成的任务在逻辑上属于相同或相似的一类(例如一个模块产生各种类型的全

部输出),称为逻辑内聚

逻辑内聚的例子:某一个模块将打印,年,月,日,具体打印什么,将由传入的控制标志所决定。 C. 时间内聚:一个模块包含的任务必须在同一段时间内执行(例如,模块完成各种初始化工作),称为时

间内聚

时间内聚的例子:将多个变量的初始化放在同一个模块中实现。 中内聚:

A. 过程内聚:如果一个模块内的处理元素是相关的,而且必须以特定次序执行,称为过程内聚 过程内聚的例子:一个子程序,将开始读取学生的学号,然后是姓名,最后将读取分数,是由于特定的顺序而将这些操作组合在一起的

B. 通讯内聚:如果模块中所有的元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通讯

内聚

通讯内聚的例子:有一个子程序,它将打印实验报告,并且在完成后重新初始化传进来的实验数据。这个程序具有通讯内聚性。因为这两个操作由于使用同一个数据源联系在了一起。 高内聚:

A. 顺序内聚:如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一

个处理元素的输出数据作为下一个处理元素的输入数据),则称为顺序内聚。

顺序内聚的例子:有一个子程序,通过给出的生日,先计算出年龄。再根据年龄算出退休的时间,则这个程序具有顺序内聚性。

B. 功能内聚:如果模块内所有的元素属于一个整体完成一个单一的功能,则成为功能内聚。 功能内聚的例子:一个程序中所有的操作都是为了算出一个人的年龄

5.3用面向数据流的方法设计下列系统的软件结构 ①储蓄系统