软件工程课本习题答案

更新时间:2024-06-03 05:57:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第1章 作业参考答案

1软件与软件工程概念

1.1 举出你所知道的应用软件的例子。

办公软件、游戏软件、财务软件、银行软件、人事管理软件、工资管理软件、学籍管理软件等。 1.2 认为“软件就是程序,软件开发就是编程序。”这种观点是否正确?为什么? 认为“软件就是程序,软件开发就是编程序。”这种观点是错误的。

首先,软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合,程序只是软件的组成部分之一;其次,在软件开发中,编程只是软件开发过程的一个阶段。

1.3 如果将软件开发比作高楼大厦的建造,可以将软件的设计比作什么? 可以将软件的设计比作建筑设计,软件设计的成果相当于建筑设计的设计图纸。 1.4 什么是软件危机?它有哪些典型表现?为什么会出现软件危机?

软件危机:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 典型表现: (1) (2) (3) (4) (5) (6) (7)

对软件开发成本和进度的估计常常很不准确。

用户对“已完成的”软件系统不满意的现象经常发生。 软件产品的质量往往靠不住。 软件常常是不可维护的。 软件通常没有适当的文档资料。

软件成本在计算机系统总成本中所占的比例逐年上升。

软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用迅速

普及深入的趋势。

产生软件危机的原因: 除了软件本身的特点,其原因主要有以下几个方面: (1) 缺乏软件开发的经验和有关软件开发数据的积累,使得开发工作计划很难制定。 (2) 软件人员与用户的交流存在障碍,使得获取的需求不充分或存在错误。 (3) 软件开发过程不规范。如,没有真正了解用户的需求就开始编程序。

(4) 随着软件规模的增大,其复杂性往往会呈指数级升高。需要很多人分工协作,不仅涉及技术问题,更重要的是必须有科学严格的管理。

(5) 缺少有效的软件评测手段,提交给用户的软件的质量不能完全保证。 1.5 什么是软件工程?

1

第1章 作业参考答案

软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。 1.6 简述软件生存期由哪些主要的阶段组成,每一阶段的主要任务是什么?

(1) 问题定义与可行性研究:问题定义必须回答的关键问题是:“要解决的问题是什么”。可

行性研究要回答的关键问题是:“在成本和时间的限制条件下能否解决问题?是否值得做?”。

(2) 需求分析:这个阶段的任务仍然不是具体地解决客户的问题,而是准确地回答“目标系统

必须做什么”这个问题。

(3) 软件设计:本阶段要回答的关键问题是“目标系统如何做?”为此,必须在设计阶段中制

定设计方案,把已确定的各项需求转换成相应的软件体系结构。结构中的每一组成部分都是意义明确的构件,此即所谓概要设计。进而具体描述每个构件所要完成的工作,为源程序编写打下基础,此即所谓详细设计。

(4) 程序编码和单元测试:本阶段要解决的问题是“正确地实现已做的设计”,为此,需要选

择合适的编程语言,把软件设计转换成计算机可以接受的程序代码,并对程序结构中的各个模块进行单元测试,然后运用调试的手段排除测试中发现的错误。要求编写出的程序应当是结构良好、清晰易读的,且与设计相一致的。

(5) 集成测试和系统测试:集成测试的任务是将已测试过的模块按设计规定的顺序组装起来,

在组装的过程中检查程序连接的问题。系统测试的任务是根据需求规格说明的要求,对必须实现的各项需求,逐项进行确认,判定已开发的软件是否符合用户需求,能否交付用户使用。为了更有效地发现系统中的问题,通常这个阶段的工作由开发人员、用户之外的第三者承担。

(6) 运行维护:已交付的软件投入正式使用,便进入运行维护阶段。这一阶段可能持续若干年。

软件在运行中可能由于多方面的原因,需要对它进行维护。通常有四种类型的维护:改正性维护、适应性维护、完善性维护和预防性维护。

1.7 常见的软件生存期模型主要有哪些?每种模型的优缺点是什么?

常见的软件生存期模型主要有瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型和统一过程。 (1) 瀑布模型

2

第1章 作业参考答案

优点:可强迫开发人员采用规范化的方法;严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。

缺点:由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要;用户往往需要等待很长时间才能看到可以运行的程序;适应需求变更的能力比较差。

适用范围:瀑布模型只适用于项目开始时需求已确定的情况。 (2) 快速原型模型

优点:有助于满足用户的真实需求;原型系统已经通过与用户的交互而得到验证,据此产生的规格说明文档能够正确地描述用户需求。 缺点:要求开发人员快速建立原型。 适用范围:适用于需求不明确的软件项目。 (3) 增量模型 优点: ?

能在较短时间内向用户提交可完成一些基本功能的产品,即从第一个构件交付之日起,用户就能做一些有用的工作。 ?

逐步增加产品的功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给用户组织带来的冲击。 ?

项目失败的风险较低,虽然在某些增量构件中可能遇到一些问题,但其他增量构件将能够成功地交付给客户。 ?

优先级最高的服务首先交付,然后再将其他增量构件逐次集成进来。因此,最重要的系统服务将接受最多的测试。 缺点: ?

在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。

? 软件体系结构必须是开放的,即向现有产品中加入新构件的过程必须简单、方便。 适用范围:适用于工期紧张、功能可以划分、比较复杂的软件项目。软件工程师必须有较高的技术水平,能够设计出开放的软件体系结构。 (4) 螺旋模型 优点: ?

对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;

3

第1章 作业参考答案

? ?

减少了过多测试或测试不足所带来的风险;

在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。

缺点:螺旋模型是风险驱动的,因此要求软件开发人员必须具有丰富的风险评估经验和这方面的专门知识,否则将出现真正的风险:当项目实际上正在走向灾难时,开发人员可能还以为一切正常。

适用范围:适用于内部开发的大型软件(开发周期长、比较容易受到社会因素影响的软件项目),软件开发人员具有丰富的风险评估知识和经验。 (5) 喷泉模型

优点:在开发过程中使用统一的概念和方法,各阶段之间没有明显的界限,容易实现各个开发过程的多次反复迭代,达到了认识的逐步深化,降低了出错的可能性。 缺点:由于各个阶段之间的界线不明确,容易造成软件开发过程的无序。 适用范围:适用于面向对象的软件开发。 (6) 统一过程

优点:提高了团队生产力,在迭代的开发过程、需求管理、基于组件的体系结构、可视化软件建模、验证软件质量及控制软件变更等方面,针对所有关键的开发活动为每个开发成员提供了必要的准则、模板和工具指导,并确保全体成员共享相同的知识基础。它建立了简洁和清晰的过程结构,为开发过程提供了较大的通用性。

缺点:RUP只是一个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容;此外,它没有支持多项目的开发结构,这在一定程度上降低了在开发组织内大范围实现重用的可能性。

适用范围:适用于基于构件的软件开发。

2 软件工程方法与工具

2.1 软件工程的三种基本要素是什么,各自的作用是什么?

软件工程的三种基本要素是方法、工具和过程。

(1) 软件工程方法(method)为建造软件提供技术上的解决方法(“如何做”)。目前使用得最广泛的方法是传统方法(结构化方法)和面向对象方法。

(2) 工具为方法的运用提供自动的或半自动的软件支撑环境。

4

第1章 作业参考答案

(3) 过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

2.2 简述传统方法和面向对象方法的特点。

(1) 传统方法的特点

传统方法也称为生命周期方法或结构化范型。它采用结构化技术来完成软件开发的各项任务。这种方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地逐步完成每个阶段的任务。每一个阶段的开始和结束都有严格的标准,对于任何两个相邻的阶段而言,前一个阶段的结束标准就是后一阶段的开始标准。

传统方法的主要缺点是在适应需求变化方面不够灵活,另外,结构化方法要么面向行为,要么面向数据,缺乏使两者有机结合的机制。

(2)面向对象方法的特点

面向对象方法把数据和行为看成同等重要,是将数据和对数据的操作紧密地结合起来的方法,这也是面向对象方法与传统方法的重要区别。

面向对象方法的出发点和基本原则,是尽量模拟人类习惯的思维方式,使开发软件的方法和过程尽可能接近人类认识问题和解决问题的方法与过程,从而使描述问题的问题空间与其解空间在结构上尽可能一致。对于大型、复杂及交互性比较强的系统,使用面向对象方法更有优势。

2.3 形式化方法的特点是什么?

形式化方法的主要特点是:

(1) 软件需求规格说明被细化为用数学记号表达的详细的形式化规格说明;

(2) 设计、实现和单元测试等开发过程由一个变换开发过程代替。通过一系列变换将形式的规格说明细化成为程序。

2.5 安装Rational Rose2000/2002/2003,并练习基本操作。 略。

3 软件需求获取与结构化分析方法

3.1 为什么结构化分析要叫“结构化”?有其他可替代的术语吗?

5

第1章 作业参考答案

将上面的三部分合在一起,得到初始的软件结构,如下图所示。 输入数据 输入事务 调度 输出数据 存款业务 输入密码 处理存款 处理开户 打印存款单 打印开户单 记录存款信息 记录开户信息 记录密码 初始软件结构图

(4) 对软件结构进行精化。

1) 由于调度模块下只有两种事务,因此,可以将调度模块合并到上级模块中,如图所示。 输入事务 输入数据 处理存款 处理开户 输出数据 存款业务 输入密码 记录存款信息 记录开户信息 记录密码 打印存款单 打印开户单 将调度模块合并到上级模块后的软件结构

2) “记录密码”模块的作用范围不在其控制范围之内(即“输入密码”模块不在“记录密码”模块的控制范围之内),需对其进行调整,如图所示。 输入事务 处理存款 处理开户 输出数据 存款业务 记录存款信息 记录开户信息 记录密码 打印存款单 打印开户单 11 输入密码 第1章 作业参考答案

3) 提高模块独立性,对模块结构进行调整,如下图所示。 输入事务 调整后的模块结构图

4.9 将大的软件划分成模块有什么好处?是不是模块划分得越小越好?划分模块的依据是什么?

将大的软件划分成独立命名且可独立访问的模块,不同的模块通常具有不同的功能或职责。这种方法有利于将复杂的问题简单化,是分而治之策略的具体表现。

尽管模块分解可以简化要解决的问题,但模块分解并不是越小越好。当模块数目增加时,每个模块的规模将减小,开发单个模块的成本确实减少了;但是,随着模块数目增加,模块之间关系的复杂程度也会增加,设计模块间接口所需要的工作量也将增加。

划分模块的依据是,模块只具有单一的功能且与其他模块没有太多的联系。

4.11 结构化程序设计禁止使用goto语句吗?如果程序中使用了goto语句,是否就可以断定它是非结构化的?

结构化程序设计并不禁止使用goto语句。如果程序中使用了goto语句,并不能断定它是非结构化的。

4.12 对于给定的算法,如何判断它是否是结构化的?

对于给定的算法,如果符合以下三条原则,就可以判断它是结构化的。

(1) 使用语言中的顺序、选择、重复等有限的基本控制结构表示程序逻辑。 (2) 选用的控制结构只准许有一个入口和一个出口。

(3) 程序语句组成容易识别的块(Block),每块只有一个入口和一个出口。 4.13 对于图4-49所示的流程图,试分别用N-S图和PAD表示之。

输入密码 记录存款信息 打印存款单 记录开户信息 记录密码 打印开户单 处理存款 处理开户 存款业务 12

第1章 作业参考答案

START

P A T F END

B

T Q F

图4-49 流程图

对应的N-S图如下: 对应的PAD如下:

while P A B until !Q while P A until !Q B 4.14 图4-50所示的流程图完成的功能是使用二分查找方法在table数组中找出值为item的数是否存在。

(1) 判断此算法是否是结构化的,说明理由。

(2) 若算法是非结构化的,设计一个等价的结构化算法,并用N-S图表示。

13

第1章 作业参考答案

开始 i=(start+finish)/2 table(i)=item

T F T table(I)

table(i)>item T

finish=i-1

图4-50 二分查找算法的流程图

14

T (finish-start)>1 F table(start)=item F T F table(finish)=item T flag=0 flag=1 结束 第1章 作业参考答案

(1) 不是结构化的,最上面的循环有两个出口,最下面的分支有三个入口。 (2) 等价的结构化算法如下: I=(START+FINISH)/2 (FINISH-START)>1 && TABLE(I)!=ITEM I=(START+FINISH)/2 T START=I+1 T TABLE(I)

FLAG=0 (FINISH-START)>1 && FLAG==0 I=(START+FINISH)/2 T TABLE(I)==ITEM F FLAG=1 TABLE(I)

第1章 作业参考答案

8.9 考虑一个计算机超市,出售硬件、外设和软件。分析谁是这个系统的参与者?这个系统有哪些主要用例?画出用例图。

系统的参与者:系统管理员(administrator),售货员(salesperson),客户(customer)。

主要用例

编号 参与者 用例 Maintain product 1 information(维护商品信息) administrator Maintain membership 2 information(维护会员信息) 编号、姓名、身份证号、办卡日期) Scan membership card(扫描3 会员卡) 在商品出售之前,系统通过扫描仪刷卡(会员卡)来确认顾客的会员身份 salesperson 4 品的条形码) Input amount of product(输5 入商品数量) salesperson,customer 6 Charge payment to card(使用银行卡付款) 7

用例图如下:

salesperson Print receipt(打印收据) Accept payment(接收现金付款) 购买的此件商品的数量 商品的名称和价格 对于已经扫描的条形码,手工输入Scan product code(扫描商通过扫描商品的条形码,自动识别增加、修改、删除会员信息(会员编号、名称、型号、价格) 说明 增加、修改、删除商品信息(商品26

第1章 作业参考答案

第10章 面向对象设计

10.1 软件模块之间的依赖性可以从哪些角度和抽象层次进行分析?

在面向对象软件中,常见的软件模块有类、接口、包、构件。因此,分析软件模块之间的依赖性就可以从类、接口、包和构件的角度和层次进行分析。 10.2 消除包之间循环依赖性的方法是什么?

本质上,两个包之间的依赖性来自于两个包中类之间的依赖性。类之间的循环依赖性是个特别棘手的问题,好在大多数情况下可以通过重新设计避免循环依赖性。具体方法是增加新包。举例说明如下:

在下图中,包A依赖于包B,反过来包B又依赖包A,构成了循环依赖。具体解决办法是:将包B依赖的包A中的元素从包A中分离出来,组成包C,使得包B不再依赖包A,而是依赖包C。

10.3 请给出构件的一般性定义,然后给出传统的软件工程环境及面向对象的软件工程环境中构

27

第1章 作业参考答案

件的定义,最后选择你熟悉的编程语言说明怎样定义一个构件。

软件构件是一种组装单元,它具有规范的接口规格说明和显式的语境依赖。软件构件可以被独立部署,并由第三方任意组装。OMG UML规范中将构件定义为“系统中某一定型化的、可配置的和可替换的部件,该部件封装了实现并暴露一系列接口”。

在传统的软件工程环境中,一个构件就是程序的一个功能要素,程序由处理逻辑和实现处理逻辑所需的内部数据结构以及能够保证构件被调用和实现数据传递的接口构成。传统的构件也称为模块,是软件体系结构的一部分。

在面向对象的软件工程环境中,面向对象技术已达到了类级复用,而构件级复用则是比类级复用更高一级的复用,它是对一组类的组合进行封装(当然,在某些情况下,一个构件可能只包含一个单独的类),并代表完成一个或多个功能的特定服务,也为用户提供了多个接口。一个构件可以是一个编译的类,可以是一组编译的类,也可以是其他独立的部署单元,如一个文本文件、一个图片、一个数据文件、一个脚本等。

选择你熟悉的编程语言说明怎样定义一个构件。(略)

10.4 典型的面向对象设计模型在逻辑上由哪几部分组成?对每一部分进行设计时所包含的主要内容是什么?

典型的面向对象设计模型在逻辑上将系统划分为4个部分,分别是问题域部分、人机交互部分、任务管理部分及数据管理部分。

1) 问题域部分的设计

在面向对象设计过程中,可能要对面向对象分析所得出的问题域模型进行补充或调整。例如,调整需求、复用已有的类、把问题域类组合在一起、增添泛化类以建立类间的协议、调整继承的支持级别、改进性能等。

2) 人机交互部分的设计

人机交互界面的设计质量直接影响到用户对软件的使用。在设计阶段,必须根据需求把交互细节加入到用户界面设计中,包括人机交互所必需的实际显示和输入。

3) 任务管理部分的设计

任务管理主要包括任务的选择和调整。常见的任务有事件驱动型任务、时钟驱动型任务、优先任务、关键任务和协调任务等。

设计任务管理子系统时,需要确定各类任务,并将任务分配给适当的硬件或软件去执行。 4) 数据管理的设计

在采用面向对象方法进行软件开发时,数据的存储还是普遍使用关系数据库。在面向对象设计中,可以将UML类图看作是数据库的概念模型,一个类可以映射为一个表或多个表,此外,还要考虑类之间的关联关系、继承关系的映射。

10.5 用面向对象方法设计网上购书系统的软件结构,网上购书系统的业务如下:

某书店为方便客户通过Internet购买相关图书,开发一个“网上购书系统”,客户可以通过Web页面注册并登录“网上购书系统”,通过Web页面查看、选择图书,系统根据用户选择的图书单价、数量,系统自动生成订单,并计算总价格。

28

第1章 作业参考答案

客户在提交订单之前,必须填写关于寄送地址和发票及付款方式等细节,一旦订单被提交,系统显示确认信息,并附上订单的详细信息。客户可以在线查询订单的状态。

系统管理人员查看客户的订单,验证客户的信用和付款方式,向仓库请求所购图书,打印发票并发货。

本系统从逻辑结构上分为三层,Web页面层,业务逻辑层和数据库层。Web页面层负责接收用户的请求,业务逻辑层在获知用户请求后,执行相应的业务逻辑,向数据库层发出数据请求,获得所需要的数据后,通知Web页面层将数据呈现给用户。

从业务的角度,又可以将系统划分为订购管理、客户信息管理和系统管理三个子系统(包)。系统的软件结构如图所示。

10.6 对10.5中的网上购书系统设计其问题域的类图。

问题域类包括客户、信用信息、订单、图书、发票及发货单。类图如下所示:

29

第1章 作业参考答案

30

本文来源:https://www.bwwdw.com/article/goe6.html

Top