软件工程复习提纲答案.docx

上传人:b****7 文档编号:10596710 上传时间:2023-02-21 格式:DOCX 页数:21 大小:58.63KB
下载 相关 举报
软件工程复习提纲答案.docx_第1页
第1页 / 共21页
软件工程复习提纲答案.docx_第2页
第2页 / 共21页
软件工程复习提纲答案.docx_第3页
第3页 / 共21页
软件工程复习提纲答案.docx_第4页
第4页 / 共21页
软件工程复习提纲答案.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

软件工程复习提纲答案.docx

《软件工程复习提纲答案.docx》由会员分享,可在线阅读,更多相关《软件工程复习提纲答案.docx(21页珍藏版)》请在冰豆网上搜索。

软件工程复习提纲答案.docx

软件工程复习提纲答案

复习提纲

第一章软件工程概述

1、分析60年代末出现的软件危机的原因。

如何理解“越早潜伏的错误越晚发现,越晚发现的错误,修正的费用越高”。

答:

软件危机是指在软件开发过程中遇到的一系列严重问题,如:

开发周期延长,成本增加,可靠性降低等。

开发大型软件与编制小程序主要有以下区别:

⑴人员:

小程序从确定要求、设计、编制、使用,直到维护通常由一个人完成;大型软件则由用户、项目负责人、分析员、程序员、资料员、操作员等组成一支开发队伍来协同完成。

⑵文档:

小程序很少有书面文档;大型软件则是集体劳动的“产物”,必须有规范化的文档,便于开发和维护。

⑶产品。

小程序工作量小,如果需作大的修改,可舍弃旧程序而重新编写;但大型软件的开发耗费了大量的人力与物力,一般不会轻易抛弃,而总是在旧软件的基础上一再改动,以延长它的使用期,因此“版本”在不断升级。

大型软件的开发提出了许多新的问题,而开发方法却还停留在编制小程序的方法上,经验和技巧已不能满足开发大型软件的需要,导致软件开发过程混乱;使用的开发方法和技术不当,没有适当的文档,不易交流,维护困难,开发成本高,软件质量低等,这些问题是造成软件危机的主要原因。

2、软件复用的概念及两类软件复用技术:

合成技术和生成技术。

答:

软件复用是指在构造新的软件系统过程中,对已存在的软件产品(设计结构、源

代码、文档等)重复使用的技术。

(1)合成技术

利用部件(component,组件,构件)合成软件系统的技术。

部件是可复用的一小段软件(可为二进制形式),可以是对某一函数、过程、子程序、数据类型、算法等可复用软件成分的抽象,封装了功能细节和数据结构,有详细的接口。

(2)生成技术

利用可复用的模式,通过生成程序产生一个新的程序或程序段,产生的程序可以看成是模式的实例。

可复用的模式有两种:

代码模式和规则模式。

①代码模式

可复用的代码模式存在于应用生成器中,通过特定的参数替换,生成抽象软件模块的具体实体。

各种程序生成器。

②规则模式

利用程序变换系统,把用超高级规格说明语言编写的程序转化成某种可执行语言的程序。

IDL——CORBA的接口定义语言。

第二章需求分析工程

3、简述需求分析工程的重要性。

答:

(1)在软件生命周期中,一个错误发现越晚,修复错误的费用越高。

(2)许多错误是潜伏的,且在错误产生后很长一段时间才被检测出。

(3)需求分析中会产生大量错误。

(4)需求分析中的错误多为疏忽、不一致和二义性。

(5)需求错误是可以被检测出来的。

4、掌握和分析Petri网的有关问题;会用可达树分析死锁问题。

分析饿死现象并改进。

答:

Petri网的局限性

1、令牌缺乏表示信息内容的能力

令牌只是表示动作控制的流向,无法表达信息的内容。

2、缺乏描述选择“使能”变迁的策略

3、Petri网不能描述有定时要求的计算问题,而很多系统的定时问题则很重要。

用可达树分析死锁问题:

若出现叶结点,则系统中有死锁。

分析饿死现象并改进:

P2

P1

图中存在激发序列无限循环,而被“饿死”,原因是Petri网不能描述选择策略。

修改Petri网,强制它使用一种选择策略,避免了t3在t4激发之前激发两次。

如下图:

 

5、分析、理解电梯运动的Petri网。

PPT第二章49

 

 

第三章软件开发的结构化方法

6、传统的瀑布模型将软件开发分为几个步骤,每一步得到什么结果。

问题定义的结果:

《问题目标和规模报告书》

可行性研究的结果:

《可行性研究报告》。

需求分析的结果:

《需求规格说明书》

7、简述结构化方法需求分析的综合要求。

答:

需求分析阶段的任务主要是确定目标系统必须具备哪些功能。

结构化需求分析的综合要求:

⑴功能要求:

指系统必须完成的所有功能。

⑵性能要求:

如联机系统的响应时间,系统的存储容量、健壮性和安全性等方面的要求。

⑶运行要求:

指系统运行所需要的软硬件环境。

⑷未来要求:

指系统将来可能的扩充要求。

⑸数据要求:

指系统所要处理的数据以及它们之间的联系。

需求分析的结果:

《需求规格说明书》

8、能绘制DFD,并能将DFD映射为软件结构图。

PPT第三章18

例子:

某工厂采购部门每天要开出定货清单,清单中包括订购部件的部件号、部件名、规格、说明、订购量、当前价格、主要供应商和辅助供应商。

部件入库或出库称为业务,通过仓库中的终端把业务报告给定货系统,处理库存业务。

当某种部件的库存量少于标准线以下时,仓库管理员就应该及时通知定货系统开出定货清单,交由采购员采购。

根据画数据流图的步骤画出定货系统的数据流图。

(不需要答)

(1)从系统的简述中提取数据流图的四个成分;

1)源点和汇点。

仓库管理员视为源点,采购员视为汇点

2)处理。

处理通常是系统简述中的动词短语,如产生定货清单,处理库存业务等。

3)数据流。

从系统的源点流出和流入汇点的数据流即是系统的输入数据流和输出数据流。

4)数据存储。

确定哪些数据应保存在数据存储中。

库存业务一旦产生就立即被处理,所以不必保存。

定货清单一天只产生一次,故需要保存产生定货清单的数据。

有关库存零部件的信息包括定货标准线也应作为数据存储,统称为库存数据。

(2)定货系统数据流图的基本成分

源点/汇点处理数据流数据存储

管理员产生定货清单定货清单定货数据

采购员处理库存业务库存业务库存数据

(3)画出系统的高层数据流图;

图在PPT第三章28、29

将DFD映射为软件结构图

图在PPT第三章90

9、简述软件测试的三个步骤、黑盒和白盒测试方法。

内聚、耦合类型分析。

(1)单元测试:

又称模块测试

测试对象是软件设计中最小的单元——模块,其目的是发现模块内部存在的错误。

单元测试发现编码阶段的错误。

测试内容:

(a)模块间的接口;

(b)模块内的局部数据结构

(c)模块内的重要通路尤其是错误处理的通路和影响上述各方面的边界条件。

(2)集成测试:

又称组装测试或联合测试

集成测试发现软件设计阶段的错误。

在单元测试的基础上,需要将所有模块按设计要求组装成系统。

在经过单元测试未发现错误的模块,组装之后仍可能出现各种问题。

集成测试的基本方法:

边组装边测试。

有自顶向下或自底向上两种方法。

(a)自顶向下测试

从主控模块开始,沿着模块层次,边组装边测试已组装部分的功能,直到全部组装完毕,系统达到设计的功能和性能要求为止。

为保证测试的进行,必须提供保证测试条件的桩模块。

桩模块:

用来模拟被测模块的下层模块的模块。

再用实际的下层模块代替桩模块,并进行回归测试。

回归测试是相对于原始测试而言的,它部分或全部地重复前面进行过的测试工作。

(b)自底向上测试

与自顶向下测试相反,它先组装最低层模块,向上逐步组装。

每组装一个模块,便测试由此模块及其下层模块组成的子功能。

直到全部装配完毕,达到系统设计的功能和性能要求为止。

为保证测试的进行,必须提供保证测试条件的“驱动程序”。

用实际的上层模块代替该驱动程序。

(3)确认测试:

又称有效性测试或验收测试

确认测试检查系统的功能和性能是否达到系统分析说明书提出的设计指标,即是否满足用户要求,检查文档是否齐全等。

确认测试发现软件分析阶段的错误。

黑盒测试法是根据程序的功能和性能进行测试的方法。

它把被测程序看成一个黑盒子,完全不考虑程序内部的数据结构和逻辑通路。

也就是说,黑盒测试是在程序接口进行的测试,它只检查程序功能和性能是否满足预期需要,程序是否能适当地接收输入数据产生正确的输出数据,并保持外部信息的完整性。

产生黑盒测试的测试用例的方法有如下几种:

等价类划分法、边界值分析法、因果图法、错误推测法。

白盒测试法是根据程序的逻辑结构进行测试的方法。

它把程序看成是装在一个透明的白盒中,也就是完全了解程序内部的结构和处理过程。

这种方法按程序内部的逻辑来测试程序,检验程序的每条通路是否都能按规定要求正确工作。

产生白盒测试用例的方法有如下几种:

语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、

条件组合覆盖。

一般而言,测试时以黑盒测试法为主,白盒测试法为辅。

模块间的耦合程度按从低到高分类如下:

⑴无耦合。

如果两模块之间没有任何联系,每一个都能独立地工作而不需要另一模块的存在,是彼此完全独立的,则这两个模块间属于无耦合的情况。

⑵数据耦合。

如果两个模块是通过参数表仅传递数据型信息,则这种耦合称为数据耦合。

数据耦合是松散的耦合,模块间的独立性较强。

软件结构中至少有这种耦合。

⑶特征耦合。

若两个模块通过参数表传递的是某一数据结构的子结构,而不是简单变量,这就是特征耦合。

是数据耦合的一种变种。

增加出错的机会,不易改动(数据结构变化时)。

将该数据结构上的操作全部集中在一个模块中,就可消除这种耦合。

⑷控制耦合。

如果传递控制型信息,这就是控制耦合。

对被控制的模块做任何修改,都会影响到控制模块,降低模块的独立性。

⑸公共耦合。

若一组模块使用了公共数据,则它们之间的耦合称为公共耦合。

公共数据包括全程变量、共享的通信区、内存的公共覆盖区等。

公共数据的使用,必然降低软件的可读性、可修改性和可靠性。

⑹内容耦合。

如果发生下列情况之一,两个模块间就是内容耦合:

•一个模块直接访问另一个模块的内部数据;

•一个模块通过不正常入口直接转入另一模块内部;

•一个模块有多个入口;

•两模块有一部分代码重叠(只在汇编语言中出现);

内容耦合是耦合性最高的耦合,即是模块间最坏的联系方式,现在大多数高级程序设计语言中已经不会出现这种耦合。

在进行设计时应该采取以下原则:

以数据耦合为主,特征耦合为辅,少用控制耦合,限制公共耦合,杜绝内容耦合。

模块的内聚性按从低到高分类如下:

⑴偶然内聚。

如果模块中各组成成分间彼此没有实质联系,即使有联系也是很松散的,模块功能模糊,则称为偶然内聚。

例如有时写完一段程序后,发现一组语句在程序中多处出现,便将其组织在一个模块内以节省内存,就出现了偶然内聚的模块。

在模块设计时,如果发觉一个模块难以命名,就应考虑是否出现偶然内聚。

⑵逻辑内聚。

如果一个模块完成的是逻辑上相同或相似的一组功能,则称为逻辑内聚。

例如,设计一个模块打印各种报表,如固定资产报表、产品成本报表、利润报表等,打印何种报表靠传递控制参数调用。

由于不同功能在一个模块中,通常在设计模块时会出现几种功能共用部分代码,从而使得修改、添加或去掉功能都很困难。

⑶时间内聚。

若一个模块中包含的任务必须在同一时间内执行,而这些任务的次序无关紧要,则叫时间内聚。

例如各种初始化工作由初始化模块完成,而各种结束工作被组合到结束模块中,这样它的执行将涉及到其它许多模块。

⑷过程内聚。

如果一个模块内的处理成分间是相关的,而且必须以特定顺序执行,则称为过程内聚。

例如把程序流程图中的循环、判断和计算分成三个模块,则这三个模块就是过程内聚的模块。

⑸通信内聚。

模块内的所有成分都通过公共数据而发生关系的内聚就是通讯内聚。

例如对同一文件进行输入、修改、输出操作。

模块中各成分经模块的局部的公共数据进行通信。

⑹顺序内聚。

若模块中每个处理成分对应一个功能,且这些处理必须按顺序执行,则称为顺序内聚。

例如一个处理成分的输出是下一个处理成分的输入的模块就是顺序内聚。

⑺功能内聚。

模块中各处理成分属于一个整体,都为了完成同一功能,很难分割,这就是功能内聚。

这种模块通常有明确表达模块功能的名称。

第四章软件开发的面向对象方法

10、与OO方法相比,传统方法存在哪些问题。

OO方法有哪些优点。

答:

传统方法存在下列问题:

(1)对现实世界的认识与编程之间存在理解上的鸿沟;

功能与数据相分离造成。

(2)修改困难;

系统是围绕如何实现一定的行为进行,当需求变化时,数据常常发生变化,最终导致数据的结构变化,难于修改。

(3)维护困难;

为了得到“好的软件结构”,使作用域在控制域之中,导致系统总体结构混乱,难于维护。

(4)自顶向下功能分解的分析方法限制了软件的可复用性。

面向对象方法的优点

(1)与人类习惯的思维方法一致

核心是对象,它是现实世界实体的正确抽象。

而传统方法忽略了数据和操作之间的联系。

(2)稳定性好

它基于构造问题领域的对象模型,以对象为中心构造软件系统,当功能发生需求变化时,不会引起软件结构的整体变化。

而传统方法基于功能分析和分解,以算法为核心,功能变化通常会引起软件结构的整体变化。

(3)可重用性好

对象类固有的封装性和信息隐蔽以及很好的继承机制,使得面向对象方法具有很好的可复用性。

传统方法只是库一级的复用。

(4)可维护性好

OO方法的模块机制、继承机制、多态性机制,使得设计的软件易于理解、修改、测试,更易于维护。

而传统方法及其面向过程开发的软件是难以维护的。

11、找出问题域有关对象的两种方法:

LIA和3VM.

简述LIA和3VM及其作用,并比较之。

答:

(1)基于语言的信息分析方法(LIA)

主要思想:

先对要建立的系统及其需求用自然语言描述,然后对这些描述进行语法分析。

名词对象,形容词属性,动词服务

填进一张OOA/OOD工作表格。

最后对表中的项进行分析,从中确定问题域中的对象。

(2)三视图模型法(3VM)

观察一个事物的角度不同,将得到不同的视图。

从多个角度观察得到的同一个事物的多个视图更能完整地、全面地反映该事物。

LIA方法要求分析员从众多的侯选对象中识别出目标系统的对象,这依赖于分析员的抽象和分析能力,随意性大,可操作性不强。

LIA方法提供了一个发现对象的出发点,一般将该方法用于对象模型建立的初始阶段。

3VM法也依赖于分析人员的抽象和分析能力,但运用建立3VM的方法,确实提供了分析对象的入口点和细化的方法,具有相对较好的操作性。

该方法一般用于对象模型的细化。

12、分析电梯到达调度楼层的事件-响应对象交互图、实例连接图。

电梯到达调度楼层的事件-响应对象交互图PPT第四章93

1.当电梯到达某一楼层时,就会产生一个电梯到达事件ArrivalEvent。

其属性有:

该到达事件的唯一标识:

arrival_id

生成到达事件的电梯:

elevator_id

生成该到达事件的楼层:

arrival_floor

 

2.电梯到达事件生成后,将会向与elevator_id相关联的到达面板发送一个单向的消息,该消息是:

(arrival_floor)

(电梯elevator_id所到达的楼层)

与elevator_id相关联的到达面板根据收到的消息刷新到达面板的显示

 

3.电梯到达事件将会向与floor_id相关联的floor发送一个单向的消息,该消息是:

(到达事件的唯一标识,电梯唯一标识,到达的楼层号)

(arrival_id,report_elevator_id,report_arrival_floor_id)

 

4.楼层Floor收到上述消息后,由服务处理。

该服务将向电梯report_elevator_id发送一个双向的消息:

(report_status_direction?

report_current_direction?

 

电梯report_elevator_id收到该消息后,会有相应的服务和

服务向楼层Floor报告电梯当前的运行方向和状态方向。

发给与report_elevator_id所关联的电梯的目的面板一个双向消息:

(report_arrival_floor,destination_pending_above?

destination_pending_beloow?

 

目的面板收到该消息后,即可知道楼层report_arrival_floor是否是调度楼层。

发给与arrival_floor所关联的召唤面板一个双向消息:

(report_summons_pending_up?

report_summons_pending_down?

 

该楼层的召唤面板收到该消息后,相应的服务即可报告该楼层的召唤请求是上、下或是没有请求。

知道该楼层是否有召唤,以及电梯的状态方向和当前运行方向等信息,即可判定该楼层是否是调度楼层。

7.如果是调度楼层(这里假设是该楼层的召唤导致的),则

(1)Floor向与其相关联的召唤面板对象发消息,使其刷新面板;

(2)向与report_elevator_id所关联的电梯发消息。

电梯接受到消息后,更新其当前状态(current_status)、(current_direction)、(status_direction)等;

(3)电梯向与其关联的电梯电机对象发送停止消息(Stop)。

 

8.到达事件结束。

实例连接图:

实例连接分类

有3种类型的实例连接:

(1)一对一型:

一个对象只依赖于另外一个对象。

如一个飞行员驾驶一架飞机。

(2)一对多型:

一个对象同时依赖多个对象。

如一个教师指导5个学生的毕业设计。

(3)多对多型:

相互依赖的对象数在一个以上。

如全班30名学生学习6门课程。

对下图分析

 

13、在Coad和Yourdon

的OOD中,从哪四个方面对OOA进行了扩充,简述其内容。

答:

Coad和Yourdon提出从以下四个方面考虑:

(1)问题域部分(ProblemDomainComponent,PDC)

问题域部分是为了消除系统的存贮容量无限及对象间的通信速度无限快等假设的。

(2)人-机接口部分(HumanInterfaceComponent,HIC)

人-机接口部分是为了将系统和外界的通信任务由特定的对象承担,使得系统的功能和实现相分离。

这样,如果系统与外界的接口发生改变时,只需要改变这部分对象即可。

(3)任务管理部分(TaskManagementComponent,TMC)

任务管理部分是为了将系统和具体的操作系统提供的任务调用由特定的对象来承担。

如果操作系统的环境改变,只需要改变这部分对象即可。

(4)数据库管理部分(DatabaseManagementComponent,DMC)

数据库管理部分为了将系统和由特定数据库系统所管理的数据的访问有特定的对象来承担。

如果系统所应用到的一些由数据库管理的数据,而数据库的类型或结构发生改变时,只需要改变这部分对象。

14、分析电梯控制系统中召唤事件和图书管理系统中借阅事件的完整执行机制。

 

当按钮按下时,将产生一个中断,即“所发出的信号”中应包含楼层的信息或编码,这个编码应存放到该中断对应的中断寄存器中。

图书管理系统中借阅事件的完整执行机制。

借阅一本书的过程,涉及了三个实体:

“Reader”实体存储借阅者;

“Book”实体存储书;

“Reader-Book”存储某个借阅者借阅某本书的记录。

对象“Borrow”来负责处理“借阅”事件。

 

第五章统一建模语言UML与实例

15、简述UML中的状态图和活动图以及它们之间的差异。

答:

(1)状态图:

状态机对类的对象可能生命历史建模。

状态机用来描述一个特定对象的所有可能状态及其引起状态转移的事件。

状态描述了一个类对象生命期中的一个时间段,对对象生命期中的一段时间建模,该时间内对象满足一定的条件。

当事件发生时,它可能导致迁移的激发,使对象改变至新状态。

当迁移激发时,附属于迁移的移动可能被执行。

状态机显示为状态图(StateDiagram)。

状态图可用于描述用户界面、设备控制和其它交互式子系统。

状态机和OOA中的状态迁移图一致。

(2)活动图:

活动图显示动作及其结果。

活动图着重描述操作(方法)实现中所完成的工作以及用例实例或对象中的活动。

活动图是另一种描述交互的方式,描述采取何种动作,做什么(对象状态改变),何时发生(动作序列)。

差别:

活动图描述动作执行的工作和活动及对象状态改变的结果,不需指定任何事件。

当状态中的动作被执行(不象状态图需指定任何事件)时,活动图中的状态(称为动作状态)直接转移到下一个阶段。

活动图可以用作下述目的:

(1)描述操作执行过程中所完成的工作(动作);

(2)描述对象内部的工作;

(3)显示如何执行一组相关的动作,以及这些动作如何影响它们周围的对象;

(4)显示用例的实例是如何执行动作以及如何改变对象状态;

(5)说明一次商务活动中的角色、工作流组织和对象是如何工作的。

16、理解、分析和绘制UML的各种视图(戏院管理系统、汽车租赁系统、教学管理系统等)。

戏院管理系统:

PPT第五章:

用例图(23)、类图(32)、顺序图(36)协作图(39)、状态图:

(42)、活动图(46)

教学管理系统:

PPT第五章用例图(71、72)、类图(78、79)、

顺序图(86、87)、协作图(88)、状态图:

(89、90)、活动图(91)

 

第六章面向对象开发中的设计模式

17、简述设计模式的作用、设计模式的四个基本要素。

答:

作用:

有经验的软件员总是将面向对象软件设计的经验记录成“设计模式”,以便在今后的软件开发中复用以往的成功设计。

四个基本要素:

模式名称、问题、解决方案和后果

1)模式名称:

通常用来描述一个设计问题、它的解法和后果,由一到两个词描述。

模式名称可以在更高的抽象层次上进行设计并交流设计思想。

(2)问题:

描述模式使用的时间、条件、解释问题及其背最。

它可能描述诸如如何将一个算法表示成一个对象这样的特殊设计问题。

(3)解决方案:

描述设计的基本组成要素,如它们的关系、各自的任务以及相互之间的合作。

它并非针对某个特殊问题。

设计模式提供有关设计问题的一个抽象描述以及如何安排这些基本要素以解决问题。

(4)后果:

描述应用设计模式后的结果和利弊。

对于软件设计来说,通常要考虑的是空间和时间的权衡,还有语言问题和实现问题。

对于OO设计,可重用性很重要。

此外,后果还包括对系统灵活性、可扩充性及可移植性的影响。

18、理解ModelView

合约。

答:

(1)形式合约是一种描述框架设计的方法,它强调组成框架的对象间的交互关系。

(2)形式合约的特点:

①符号少且能映射到OO编程语言中的概念,如参与者映射到对象。

②考虑到了复杂行为由简单行为组成的事实,合约的修订和扩充操作使得合约灵活,易于应用。

(3)形式合约的基本元素:

参与者:

形式合约的第一个组成部分。

对每个参与者要规定它应承担的责任。

责任有:

类型责任:

与实例变量和方法有关的责任。

因果责任:

描述与类型责任相关的操作与条件

“->”:

表示方法调用。

如s->Update()表示对Subscribers中的方法Update()的调用。

“v”:

表示对实例变量v赋值。

c:

e>”:

表示用操作符o将所有满足条件c的变量v所构成的表达式e连接起来。

如<||s:

s∈Subscriber:

s->Update()>意味着s1->Update()||s2->Update()||...,即对Subscriber集合中的所有对象发送Update()消息。

“{}”:

表示参与者必须满足的条件的说明。

如AttachSubscriber(s:

Subscriber)=>{s∈Subscriber}:

表示一个条件,s是Subscriber集合的成员在以s为参数执行AttachSubscriber后必须为真。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1