软件工程第一二三章习题参考 答案

软件工程第一二三章习题参考 答案
软件工程第一二三章习题参考 答案

第一章软件工程概述

软件是计算机程序及其有关的数据和文档的结合。

软件危机是指在计算机软件开发和维护时所遇到的一系列问题。

软件危机主要包含两方面的问题:一是如何开发软件以满足对软件日益增长的需求;二是如何维护数量不断增长的已有软件。

软件工程是软件开发、运行、维护和引退的系统方法。

软件工程是指导计算机软件开发和维护的工程学科。软件工程采用工程的概念、原理、技术和方法来开发与维护软件。软件工程的目标是实现软件的优质高产。

软件工程学的主要内容是软件开发技术和软件工程管理。

软件开发方法学是编制软件的系统方法,它确定软件开发的各个阶段,规定每一阶段的活动、产品、验收的步骤和完成准则。常用的软件开发方法有结构化方法、面向数据结构方法和面向对象方法等。

习题参考答案:

1.什么是软件危机?为什么会出现软件危机?

答:软件危机是指在计算机的开发和维护过程中所遇到的一系列严重问题。这些问题决不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。

出现软件危机的原因:一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。软件不同于硬件,它是计算机系统中逻辑件而不是物理部件。管理和控制软件开发过程相当困难。软件是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。目前相当多的软件专业人员对软件开发和维护还有不少糊涂观念,在实践过程中或多或少地采用了错误的方法和技术,这是使软件问题发展成软件危机的主要原因。总结如下:

1)取得正确的用户需求和正确地描述需求很困难

2)开发人员对需求的正确理解也有困难

3)常常在没有正确理解之前就仓促开始编程

4)软件项目缺乏有效的组织、管理和内部交流

5)缺乏软件开发方法、模型和工具的支持

6)软件维护的困难性

2.假设你是一家软件公司的总工程师,当你把图1.1给手下的软件工程师们观看,告诉他们及早发现并改正错误的重要性时,有人不同意你的观点,认为要求在错误进入软件之前就清除它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?”你怎么反驳他?

答:在软件开发的不同阶段进行修改付出的代价是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;在开发的中期,软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都做相应的修改,不仅工作量大,而且逻辑上也更复杂,因此付出的代价剧增;在软件已经完成时再引入变动,当然付出的代价更高。一个故障是代码错误造成的,有时这种错误是不可避免的,但要修改的成本是很小的,因为这不是整体构架的错误。

3.什么是软件工程?它有哪些本质特性?怎样用软件工程消除(至少是缓解)软件危机?

答:软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。

软件工程本质特性:1)软件工程关注于大型程序的构造;2)软件工程的中心课题是控制复杂性;3)软件经常变化;4)开发软件的效率非常重要;5)和谐地合作是开发软件的关键;6)软件必须有效地支持它的用户;7)在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品。

消除软件危机的途径:为了消除软件危机,首先应该对计算机软件有一个正确的认识。必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法。应该开发和使用更好的软件工具。为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。

6.美国某科幻电影中有一个描写计算机软件错误的故事,很富于戏剧性。故事情节如下:由计算机HAL控制的宇宙飞船在飞往木星的旅途中,飞机指挥员鲍曼和HAL之间有一段对话。鲍曼命令道:“HAL,请对备用舱进行故障预报测试。”10秒钟后HAL报告:“一切正常。”

但是,地面上的飞行指挥中心在重复做了故障预测报告后,却得出了相反的结论:“鲍曼,我是飞行指挥中心,你的计算机在预报故障时可能犯了错误,我们的两台HAL计算机都得出了和你的计算机相反的结论。”

鲍曼用手指敲着控制台说:“HAL,是不是有什么东西干扰了你,以致出了这个差错?”

“听着,鲍曼,我知道你很想帮助我,但是我的信息处理是正常的。不信就查看我的记录吧,你会看到它是完全正确的。”

“我看过你的服务记录,但是……谁都可能犯错误啊。”

“我并不固执己见,但是,我是不可能犯错误的……。”

“喂,我是飞行指挥中心,我们已经彻底分析了你所遇到的麻烦,我们的两台计算机得出了完全一致的结论。问题出在故障预报系统中,我们确信是程序设计有错误。你必须断开你的计算机并改为地面控制模式,我们才能改正这个错误。”

当鲍曼断开计算机时,HAL立即又把自己接了上去。最后,鲍曼只好拆下计算机的存储器,才得以控制他的宇宙飞船。

请问:

(1)为什么鲍曼拆下存储器就能摆脱计算机的干扰而独自控制宇宙飞船?我们现在遇到的软件问题有这么严重吗?

(2)如果不依靠飞行指挥中心,鲍曼怎样才知道HAL的故障预报有问题?

(3)应该怎样设计计算机系统,才能避免出现故事中描述的这类问题?

答:(1)计算机通过运行程序来控制宇宙飞船,而程序指令存放在存储器中。拆下存储器之后,计算机因取不来指令而无法运行程序,因此也就无法控制宇宙飞船了。

我们现在遇到的软件问题没有这么严重,还没有出现计算机不服从人的命令的情况。

(2)除非鲍曼能亲自分析有故障的部件,或者在计算机上还安装有另外一套故障检测系统,否则不依靠飞行指挥中心他很难知道HAL的故障预报有问题。

(3)应该把HAL设计成具有若干个储存的问题,供周期性测试之用。通过把应有的测试结果和HAL实际测试结果加以比较的方法,有可能发现HAL的故障预报问题。

此外,不论怎样具体设计HAL系统,都应该设置一种人工操作模式,并把人工操作模式设置为最高等级的控制模式,在任何情况下计算机控制都不能取消人工操作命令。

第二章软件过程

软件过程定义了运用方法的顺序、应该交付的文档、开发软件的管理措施、各阶段任务完成的标志。

软件过程必须科学、合理,才能获得高质量的软件产品。

软件产品从问题定义开始,经过开发、使用和维护,直到最后被淘汰的整个过程称为软件生命周期。

根据软件生产工程化的需要,生存周期的划分有所不同,从而形成了不同的软件生命周期模型(SW life cycle model),或称软件开发模型。

软件开发模型有以下几种。

?瀑布模型:规范的、文档驱动的方法。开发阶段按顺序进行,适用于需求分析较明确、开发技术较成熟的情况。

?快速原型模型:构建原型系统让用户试用并收集用户意见,获取用户真实需求。

?增量模型:优点是能在早期向用户提交部分产品和易于维护,缺点是软件的体系结构必须是开放的。

?喷泉模型:适用于面向对象方法。

?螺旋模型:适用于大规模内部开发项目,有利于分析风险和排除风险。

?统一过程:适用于面向对象方法,使用统一建模语言UML,采取用例驱动和架构优先的策略,采用迭代增量的建造方法。

进行软件开发时可把各种模型的特点结合起来,充分利用优点,减少缺点。

习题参考答案:

1.什么是软件过程?它与软件工程方法学有何关系?

软件过程是为了开发出高质量的软件产品所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

软件过程定义了运用技术方法的顺序、应该交付的文档资料、为保证软件质量和协调软件变化必须采取的管理措施,以及标志完成了相应开发活动的里程碑。

软件过程是软件工程方法学的3个重要组成部分之一。

2.假设要求你开发一个软件,该软件的功能是把读入的浮点数开平方,所得到的结果应该精确到小数点后4位。一旦实现并测试完之后,该产品将被抛弃。你打算选用哪些软件生命周期模型?请说明你作出选择的理由。

答:对这个软件的需求很明确,实现开平方功能的算法也很成熟,因此,既无须通过原型来分析需求也无须用原型来验证设计方案。此外,一旦实现并测试完之后,该产品将被抛弃,因此也无须使用有助于提高软件可维护性的增量模型或螺旋模型来开发该软件。所以,为了开发这个简单的软件,使用大多数人所熟悉的瀑布模型就可以了。

1)需求明确;2)功能单一,规模小;3)潜在功能变化少。

3.假设你要为一家生产和销售长筒靴的公司开发一个软件,使用此软件来监控该公司的存货,并跟踪从购买橡胶开始,到生产长筒靴、发货给各个连锁店,直至卖给顾客的全部过程。以保证生产、销售过程的各个环节供需平衡,既不会有停工待料现象,也不会有供不应求现象。你在为这个项目选择生命周期模型时使用什么准则?

答:快速原型模型。

1)软件系统的使用人员繁杂,需求确定困难。

2)软件应用环节多,功能变化多,初期需求变化多,在修改原型的过程中明确功能。

4.列出在开发上述软件产品过程中可能遇到的风险。你打算怎样排除这些风险?

答:1)需求不明确,在明确需求的过程中延误交工期限。

排除:利用快速原型法,选好快速开发工具,对用户的需求变更做出快速反应,及早确定最后需求。

2)需求越提越多,无法按照计划及时定下需求。

排除:帮助用户对需求进行分析,确定下来近期完成的主要功能。其它附加功能和次要功能可在升级版本中体现。确保项目的顺利开展。

3)开发人员不熟悉业务。

排除:在和用户确定需求的过程中,及时向用户请教业务相关的知识,同时也可以请用户针对与业务流程或专业术语进行专门的培训。

5.你为靴类连锁店开发的存货监控软件很受用户欢迎,现在软件开发公司决定把它重新写成一个通用软件包,以卖给各种生产并通过自己的连锁店销售产品的公司。因此,这个新的软件产品必须是可移植的,并且应该能够很容易地适应新的运行环境(硬件或操作系统),以满足不同用户的需求。你在为本题中的软件选择生命周期模型时,使用的准则与在第3题中使用的准则有哪些不同? 答:螺旋模型。什么准则?

构件模型。

1)通用模型,并满足不同用户的需求。利用增量模型,确定出通用的部分,同时针对于不同用户开发不同的构件,最后进行组合。

2)可移植。适应新的运行环境。利用增量模型的开放式体系结构,合理组合配置软件系统构件。

补.假设你被任命为一家软件公司的项目负责人,你的工作是管理该公司已被广泛应用的字处理软件的新版本开发。由于市场竞争激烈,公司规定了严格的完成期限并且已对外公布。你打算采用哪种软件生命周期模型?为什么?

答:对这个项目的一个重要要求是,严格按照已对外公布了的日期完成产品开发工作,因此,选择生命周期模型时应该着重考虑哪些模型有助于加快产品开发的进度。使用增量模型开发软件时可以并行完成开发工作,因此能够加快开发进度。

这个项目是开发该公司已被广泛应用的字处理软件的新版本,从上述事实至少可以得出3点结论:第一,旧版本相当于一个原型,通过收集用户对旧版本的反映,较容易确定对新版本的需求,没必要再专门建立一个原型系统来分析用户的需求;第二,该公司的软件工程师对字处理软件很熟悉,有开发字处理软件的丰富经验,具有采用增量模型开发新版字处理软件所需要的技术水平;第三,该软件受到广大用户的喜爱,今后很可能还要开发更新的版本,因此,应该把该软件的体系结构设计成开放式的,以利于今后的改进和扩充。

综上所述,采用增量模型来完成这个项目比较恰当。

第三章 结构化分析

习题参考答案:

1.银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并印出存款存单给储户;,如果是取款而且取款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户。

请用数据流图描述本系统的功能,并用实体-联系图描述系统中的数据对象。

答:顶级数据流图:

第一级数据流图:

第二级数据流图:

本问题中共有两类实体,分别是“储户”和“储蓄所”,在它们之间存在“存取款”关系。因为一位储户可以在多家储蓄所存取款,一家储蓄所拥有多位储户,所以“存取款”是多对多

利息清单

取款单 储户

储户 1 存款

处理 2 取款

处理 存款单

存款存单 利息清单 取款单

储户 储户 储蓄系统

存款信

息+利息

利息 更新数据 存款单

存款存单 更新 1.1 1.2

2.1 2.2 2.3

(M:N)关系。

储户的属性主要有姓名、住址、电话号码和身份证号码,储蓄所的属性主要是名称、住址和电话号码,而数额、类型、到期日期、利率和密码等则是联系类型存取款的属性。

2.为方便旅客,某航空公司拟开发一个机票预订系统。旅行社把预订机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入进该系统,系统为旅客安排航班,印出取票通知和账单,旅客在飞机起飞的前一天凭取票通知和账单交款取票,系统校对无误即印出机票给旅客。请用ER图描绘本系统中的数据对象并用数据流图描绘本系统的功能。

3.目前住院病人主要由护士护理,这样做不仅需要大量护士,而且由于不能随时观察危重病人的病情变化,还会延误抢救时机。某医院打算开发一个以计算机为中心的患者监护系统,请分层次地画出描述本系统功能的数据流图。

医院对患者监护系统的基本要求是随时接收每个病人的生理信号(脉搏、体温、血压、心电图等),定时记录病人情况以形成患者日志,当某个病人的生理信号超出医生规定的安全范围时向值班护士发出警告信号,此外,护士在需要时还可以要求系统输出某个指定病人的病情报告。

答:

从问题陈述可知,本系统数据源点是“病人”和“护士”,他们分别提供生理信号和要求病情

取款日期

存款日期

报告的信息。进一步分析问题陈述,从系统应该“定时记录病人情况以形成患者日志”这项要求可以想到,还应该有一个提供日期和时间信息的“时钟”作为数据源点。

从问题陈述容易看出,本系统的数据终点是接收警告信息和病情报告的护士。

系统对病人生理信号的处理功能主要是“接收信号”、“分析信号”和“产生警告信息”。

此外,系统还应该具有“定时取样生理信号”、“更新日志”和“产生病情报告”的功能。

为了分析病人生理信号是否超出了医生规定的安全范围,应该存储“患者安全范围”信息。此外,定时记录病人生理信号所形成的“患者日志”,显然也是一个数据存储。

顶层数据流图

细化数据流图

5.办公室复印机的工作过程大致如下:未接收到复印命令时处于闲置状态,一旦接到复印命令则进入复印状态,完成一个复印命令规定的工作后又回到闲置状态,等待下一个复印命令;如果执行复印命令时发现缺纸,则进入缺纸状态,发出警告,等待装纸,装满纸后进入闲置状态,准备接收复印命令;如果复印时发生卡纸故障,则进入卡纸状态,发出警告等待维修人员来排除故障,故障排除后回到闲置状态。

答:从问题陈述可知,复印件的状态主要有“闲置”、“复印”、“缺纸”和“卡纸”。引起状态转换的事件主要是“复印命令”、“完成复印命令”、“发现缺纸”、“装满纸”、“发生卡纸故障”和“排除了卡纸故障”。下图所示状态转换图描绘了复印机的行为。

D2生理信

6.某高校可用的电话号码有以下几类:校内电话号码由4位数字组成,第1位数字不是0;校外电话又分为本市电话和外地电话两类,拨校外电话需先拨0,如果是本地电话再接着拨8位电话号码(第1位不是0),如果是外地电话则先拨3位区码,再拨8位电话号码(第1位不是0)。

请用2.8节讲述的符号,定义上述的电话号码。

答:电话号码=[校内电话号码│校外电话号码]

校内电话号码=非零数字+3位数字

校外电话号码=[本市号码│外地号码]

本市号码=数字零+8位数字

外地号码=数字零+3位数字+8位数字

非零数字=[1│2│3│4│5│6│7│8│9]

数字零=0

3位数字=3{数字}3

8位数字=非零数字+7位数字

7位数字=7{数字}7

数字=[0│1│2│3│4│5│6│7│8│9]

相关主题
相关文档
最新文档