【学习】软件工程作业1+参考答案

2021.02 福师网院

软件工程作业(一)

一、选择题(32分)

  1. (5分)对象是面向对象范型的( A① )。每个对象可用它自己的一组( B⑤ )和它可以执行的一组( C③ )来表征。应用执行对象的( C③ )可以改变该对象的( B⑤ )。它的应用必须通过( D② )的传递。可以认为,这种( D② )的传递大致等价于过程性范型中的函数调用。某些语言提供了特殊功能,允许对象引用自己。若一个对象没有显式地被引用,则可让该对象( E③ )。

  供选择的答案.

A: ①基本单位 ②最小单位 ③最大单位 ④语法单位   B~C: ①行为 ②功能 ③操作 ④数据 ⑤属性

D: ①接口 ②消息 ③信息 ④操作 ⑤过程

E: ①撤消 ②歇着 ③缺省 ④隐式引用 ⑤引用自己

 

  1. (5分)类常常被看做是一个抽象数据类型的实现,更合适的是把类看做是某种( A② )的一个模型。事实上,类是单个的( B③ )语义单元。类的用户能够操纵的操作叫做类的( C① )。类定义的其余部分给出数据定义和辅助功能定义,包括类的实现。

类的实现常常包括了其它类的实例,这些实例( D④ )被其它对象存取,包括同一个类的其它实例。类的实现可能还包括某些私有方法,实现它们的类可以使用,而其它任何对象都不能使用。

类,就它是一个数据值的聚合的意义上来看,与Pascal中的记录或C中的结构类似,但又有差别。类扩展了通常的记录语义,可提供各种级别的( E③ )。类不同于记录,因为它们包括了操作的定义,这些操作与类中声明的数据值有相同的地位。

  供选择的答案.

A:①功能 ②概念 ③结构 ④数据

B:①语法 ②词法 ③语义 ④上下文环境

C:①界面 ②操作 ③行为 ④活动

D:①可自由地 ②可有控制地 ③可通过继承 ④应受保护不

E:①可移植性 ②可重复性 ③可访问性 ④继承性

 

  1. (5分)由RumBaugh等人提出的一种面向对象方法叫做对象模型化技术(OMT),即三视点技术,它要求把分析时收集的信息建立在三个模型中。第一个模型是( A⑦ ),它的作用是描述系统的静态结构,包括构成系统的对象和类,它们的属性和操作,以及它们之间的联系。第二个模型是( B⑥ ),它描述系统的控制逻辑,主要涉及系统中各个对象和类的时序及变化状况。( B⑥ )包括两种图, 即( C③ )和( D⑥ )。( C③ )描述每一类对象的行为,( D⑥ )描述发生于系统执行过程中的某一特定场景。第三个模型是( E② ),它着重于描述系统内部数据的传送与处理,它由多个数据流图组成。

  供选择的答案.

A,B,E: ① 数据模型  ② 功能模型   ③ 行为模型

④ 信息模型  ⑤ 原型     ⑥ 动态模型

⑦ 对象模型  ⑧ 逻辑模型   ⑨ 控制模型

⑩ 仿真模型<br>

C,D:    ① 对象图   ② 概念模型图 ③ 状态迁移图

   ④ 数据流程图 ⑤ 时序图 ⑥ 事件追踪图

   ⑦ 控制流程图 ⑧ 逻辑模拟图 ⑨ 仿真图

   ⑩ 行为图

 

  1. (5分)在面向对象软件设计过程中,应按如下要求进行类的设计.只有类的共有界面的成员才能成为使用类的操作,这就是软件设计的( A③ )原则。当且仅当一个操作对类的实例的用户有用时,它才是类公共界面的一个成员,这是软件设计的( B② )原则。由同属一个类的操作负担存取或加工类的数据,这是软件设计的( C③ )原则。两个类之间的交互应当仅涉及参数表,这是软件设计的( D① )原则。每个派生类应该当做基类的特殊化来开发,而基类所具有的公共界面成为派生类的共有界面的一个子集,这是软件设计的( E⑤ )原则。

  供选择的答案.

A:①过程抽象 ②功能抽象 ③信息隐蔽 ④共享性 ⑤连通性

B:①标准调用 ②最小界面 ③高耦合 ④高效率 ⑤可读性

C:①数据抽象 ②低内聚 ③高内聚 ④低复杂度 ⑤低强度

D:①显式信息传递 ②高内聚 ③低内聚 ④相互操作性 ⑤连接性

E:①动态联编 ②异质表 ③信息隐蔽 ④多态性 ⑤继承性

 

  1. (1分)从下列有关系统结构图的叙述中选出正确的叙述。

(1)系统结构图中反映的是程序中数据流的情况。

(2)系统结构图是精确表达程序结构的图形表示法。因此,有时也可将系统结构当作程序流程图使用。

(3)一个模块的多个下属模块在系统结构图中所处的左右位置是无关紧要的。

(4)在系统结构图中,上级模块与其下属模块之间的调用关系用有向线段表示。这时,使用斜的线段和水平、垂直的线段具有相同的含义。

解:(4)

  1. (5分)软件的开发工作经过需求分析阶段,进入( A② )以后,就开始着手解决“怎么做”的问题。常用的软件设计方法有( B⑤ )、( C① )、( D① )和( E③ )等方法。

  供选择的答案:

A~B: ①程序设计 ②设计阶段 ③总体设计  

④定义阶段 ⑤SD方法 ⑥SP方法

C: ① Jackson方法   ②瀑布法  ③快速原型法   ④回溯法

D~E: ①LCP(Wanier)方法 ②递归法 ③Parnas方法

④自下而上修正 ⑤逐步求精法 ⑥检测校正法

 

  1. (3分)请将下述有关模块独立性的各种模块之间的耦合,按其耦合度从低到高排列起来。

① 内容耦合 ② 控制耦合 ③ 非直接耦合 ④ 标记耦合

⑤ 数据耦合 ⑥ 外部耦合 ⑦ 公共耦合

解:

  (3分)请将下述有关模块独立性的各种模块内聚,按其内聚度(强度)从高到低排列起来。

① 巧合内聚 ② 时间内聚 ③ 功能内聚 ④ 通信内聚

⑤ 逻辑内聚 ⑥ 信息内聚 ⑦ 过程内聚

解:

 

二、解答题(68分)

  1. (10分)建立分析和设计模型的一种重要方法是UML。

试问UML是一种什么样的建模方法?它如何表示一个系统? 

在类的设计中需要遵循的方针是什么?

三个主要的设计准则:抽象、信息隐蔽和模块化如何才能做到?

解: UML 是一种可视化的、用于绘制软件蓝图的标准建模语言。可以用 UML 对软件系统的 各种制品(包括程序、文档等)进行描述。 

UML 虽然不是一种具体的编程语言,但是用 UML 描述的各种模型可以与各种编程语言 直接相连。

 

在设计类时需要遵循的方针是: 

l 信息隐蔽:通过信息隐蔽可保护类的存储表示不被其它类的实例直接存取。 l 消息限制:该类实例的用户应当只能使用界面提供的操作。 l 狭窄界面:只有对其它类的实例是必要的操作才放到界面上。 

l 强内聚:模块内部各个部分之间应有较强的关系,它们不能分别标识。 l 弱耦合:一个单独模块应尽量不依赖于其它模块。 

l 显式信息传递:两个类之间的交互应当仅涉及显式信息传递。 

l 派生类当做派生类型:每个派生类应该当做基类的特殊化来开发,而基类所具有的公共界面成为派生类的共有界面的一个子集。 

l 抽象类:某些语言提供了一个类,用它做为继承结构的开始点,所有用户定义的类都直接或间接以这个类为基类。 

为了在类的设计中做到抽象、信息隐蔽和模块化: l 以类作为系统的基本模块单元,通过一般化―特殊化关系和整体―部分关系,搭建整个系统的类层次结构,实现数据抽象和过程抽象; 

l 将数据和相关的操作封装在类内部,建立共有、私有和子类型等存取级别,将数据表示定义成为类的私有成员,实现信息隐蔽。 

l 通过建立类属性(类模板),将某些有可复用要求的类设计成在数据类型上通用的可复用的软件构件,这样有助于实现模块化。

 

2.(7分)使用面向对象设计方法 进行高层设计 ,以建立系统的体系结构。这样的结构有哪几种主要的组成部分?每一部分所承担的职责是什么? 

解:这个模型有5层结构,又被划分成了4个组成部分:问题论域、用户界面、任务管理和数据管理。

问题论域部分的职责是:组合所有的论域中定义的类,为应用设计适当的类层次,为适应语言要求简化继承层次,细化设计以改善性能,开发与数据管理部分的接口,做细化时加入低层对象,评审设计并审查对分析模型所做的增补。 

人机交互部分的职责是:定义用户类型,开发任务场景,设计用户命令层次,建立原型以细化与用户交互,设计相关的类和类层次,适当时集成GUI类。 

任务管理部分的职责是:标识任务的类型(如事件驱动,时钟驱动),建立优先级,标识协调者,为每个任务设计适当的类。 

数据管理部分的职责是:设计数据结构和布局,设计管理数据结构所需的服务,标识可以协助实现数据管理的工具,设计适当的类和类层次。

 

3.(4分)写出“家庭保安系统”中“门窗监测”的场景

解:参与执行者实例:警报器,警报电话,显示器,门窗监视器

前置条件:系统已开机

事件流:

a.门窗监视器发现门或窗户发生异动,向软件系统报告异常事件;

b.软件系统启动警报器并拨报警电话号码;

c.报警电话接通后,软件系统播出语音,报告异常事件发生的时间、地点和事件的性质(门窗异动);

d.系统在控制面版的显示器上显示报警时间及当前状态(如报警:门窗异动)

后置条件:系统处于“报警”状态

 

4.(3分)画出“传感器监测”的用例的活动图。

解:

 

 

5.(4分)逐步求精、分层过程与抽象等概念之间的相互关系如何?

解: 总的指导原则是自顶向下、逐步求精。它的基本原则是功能的分解与抽象。逐步求精,也称为自顶向下是指:不要求一步就编制成可执行的程序,而是分若干步进行。第一步编出的程序抽象程度最高,第二步编出的程序抽象程度有所降低,最后一步编出的程序即为可执行的程序。用这种方法编程,可使程序易读、易写、易调试、易维护,也易于保证程序的正确性及验证其正确性。随着软件设计的逐步展开,程序结构中每一层模块就体现了过程抽象某一层次上的一次细化。  

“自顶向下,逐步求精”是Niklaus Wirth提出的设计策略:即将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。 

这样的结构实际就是一个模块的分层结构,即分层的过程。在实施时,采用抽象化的方法,自顶向下,给出不同的抽象层次。在最高的抽象层次上,可以使用问题所处环境的语言概括地描述问题的解法。而在较低的抽象层次上,则采用过程化的方法。在描述问题的解法时,我们可以配合使用面向问题的术语和面向现实的术语。但最后在最低的抽象层次上,我们应使用能够直接实现的方式来描述这个解法

 

6.(15分)完成良好的软件设计应遵循哪些原则? 

解:高内聚、低耦合面向抽象编程多用组合少用继承“开-闭”原则;里氏代换原则;依赖倒置原则;接口隔离原则;合成/聚合复用原则;迪米特法则;单一职责原则。

 

7.(10分)如何理解模块独立性?用什么指标来衡量模块独立性?

解: 所谓“模块独立性”是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其它的模块的接口是简单的。所谓的“信息隐蔽”是指每个模块的实现细节对于其它模块来说是隐蔽的。也就是说,模块中所包含的信息(包括数据和过程)不允许其它不需要这些信息的模块使用。 

如果软件系统做到了信息隐蔽,即定义和实施了对模块的过程细节和局部数据结构的存取限制,那么这些模块相互间的接口就是简单的。这组模块的独立性就比较强。事实上,衡量模块独立性的一个准则就是模块内聚,达到信息隐蔽的模块是信息内聚模块,它是高内聚情形,模块独立性当然很强了。 

一个对象的抽象数据类型,就是信息隐蔽的示例。例如,对于栈stack, 可以定义它的操作makenull(置空栈)、push(进栈)、pop(退栈)、gettop(取栈顶)和empty(判栈空)。这些操作所依赖的数据结构是什么样的? 它们是如何实现的? 都被封装在其实现模块中。软件的其它部分可以直接使用这些操作,不必关心它的实现细节。一旦实现栈stack的模块里内部过程或局部数据结构发生改变,只要它相关操作的调用形式不变, 则软件中其它所有使用这个栈stack的部分都可以不修改。 这样的模块结构具有很强的模块独立性。

 

8.(4分)什么是变换流和事务流?

解:变换型数据流可以划分为明显的三部分:逻辑输入,中心变换,逻辑输出。

信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征时,这种信息流就叫作变换流 。
事务流的特点是数据沿某个输入路径流动,该路径将外部信息转换成事务,其中发射出多条事务处理路径的中心处理被称为中心事务。

 

9.(7分)面向数据流的体系结构设计时,如何运用变换映射进行转换?

解:变换映射是体系结构设计的一种策略。运用变换映射方法建立初始的变换型系统结构图,然后对它做进一步的改进,最后得到系统的最终结构图。设计的步骤如下: 

步骤1:复审基本系统模型(0层数据流图和支持信息)。评估系统规格说明和软件需求规格说明。 

步骤2:复审和细化软件的数据流图。重画数据流图时,可以从物理输入到物理输出,或者相反。还可以从顶层加工框开始,逐层向下。 

步骤3:确定数据流图中含有变换流特征还是含有事务流特征。通常,系统的信

事务型的设计方法。 

步骤4:区分输入流、输出流和中心变换部分,即标明流的边界。不同的设计人员可能选择不同的流边界,这将导致不同的系统结构图。 步骤5:进行一级“因子化”分解,设计顶层和第一层模块。 

首先设计主模块,用程序名字为它命名,将它画在与中心变换相对应的位路上。作为系统的顶层,它调用下层模块,完成系统所要做的各项工作。系统结构第一层的设计方针:为每一个逻辑输入设计一个输入模块,它为主模块提供数据;为每一个逻辑输出设计一个输出模块,它将主模块提供的数据输出;为中心变换设计一个变换模块,它将逻辑输入转换成逻辑输出。 

步骤6:进行二级“因子化”分解,设计中、下层模块。这一步工作是自顶向下,逐层细化。为每一个输入模块、输出模块、变换模块设计他们的从属模块。 

输入模块要向调用它的上级模块提供数据,因而它必须有两个下属模块:一个是接收数据;另一个是把这些数据变换成它的上级模块所需的数据。输出模块是从调用它的上级模块接收数据,用以输出,因而也应当有两个下属模块:一个是将上级模块提供的数据变换成输出的形式;另一个是将它们输出。中心变换模块的下层模块没有通用的设计方法,一般应参照数据流图的中心变换部分和功能分解的原则来考虑如何对中心变换模块进行分解。 

步骤7:利用一些启发式原则来改进系统的初始结构图,直到得到符合要求的结构图为止。

 

10.(4分)面向数据流设计中的启发式设计策略是什么?

解:启发式策略:改造软件结构,降低耦合度,提高内聚度 

- 如果在几个模块中发现共有的子功能,一般应该将该子功能独立出来作为一个模块,以提高模块的独立性 

- 合并那些具有较多的控制信息传递的模块以降低模块之间的耦合度 减少扇出,追求高扇入一个好的软件结构通常顶层扇出较高,中间层扇出较低,底层又高扇入到公共模块中去使任一模块的作用域在其控制域内 

作用域是指受模块内部判定影响的所有模块 控制域是指其所有的下属模块 其他启发式设计策略降低模块接口复杂度和冗余度,提高协调性 

 - 模块接口应尽可能简单并与模块功能相一致,如: - Sort(Data; Number)----→Sort(Data) 模块功能可预测,避免对模块施加过多限制 - 模块的功能可预测是指输入恒定,则输出恒定 追求单入口。单出口的模块 

为满足设计和可移植性要求,把某些软件用包封装起来。

 

PS:题目+参考答案,若有错误请联系或留言提醒,一起学习和分享你我他,谢谢你!

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

callhh

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

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

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

打赏作者

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

抵扣说明:

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

余额充值