1软件工程教程课后参考答案第1章一、选择题(1)D(2)B(3)C(4)D(5)D(6)A(7)D二、简答题(1)什么是软件危机?软件危机表现在哪些方面?答:具体来说,软件危机出现的原因可以概括如下。①忽视软件开发前期的需求分析。②开发过程缺乏统一的、规范化的方法论指导。③文档资料不齐全或不准确。④忽视与用户之间、开发组成员之间的交流。⑤忽视测试的重要性。⑥不重视维护或由于上述原因造成维护工作的困难。⑦从事软件开发的专业人员对这个产业的认识不充分,缺乏经验。⑧没有完善的质量保证体系。具体地说,软件危机的表现形式可以概括如下。①软件开发费用和进度失控。②软件系统实现的功能与实际需求不符。③软件的可靠性差。④软件难以维护。⑤软件通常没有适当的文档资料。⑥软件成本在计算机系统总成本中所占的比例居高不下,且逐年上升。⑦软件生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。(2)简述软件和软件工程的定义以及软件工程的形成过程。答:软件是计算机系统中与硬件相对应的另一部分,是一系列程序、数据及其相关的文档集合。在这里,程序是按照特定顺序组织的计算机数据和指令的集合;数据是使程序能正常执行的数据结构;文档是是开发、使用和维护程序所需要的图文资料。2软件工程是应用计算机科学理论和技术以及工程管理原则和方法,按预算和进度,实现满足用户要求的软件产品的定义、开发、发布和维护的工程或进行研究的学科。软件工程的发展经历了以下四个阶段。①20世纪70年代。为了解决软件项目失败率高、错误率高以及软件维护任务重等问题,人们提出了软件生产工程化的思想,希望使软件生产走上正规化的道路,并努力克服软件危机。人们发现将传统工程学的原理、技术和方法应用于软件开发,可以起到使软件生产规范化的作用。②20世纪80年代。面向对象的方法与技术受到了广泛的重视,maltalk-80的出现标志着面向对象的程序设计进入了实用和成熟阶段。20世纪80年代末,逐步发展起来的面向对象的分析与设计方法,已经形成了完整的面向对象技术体系,使系统的生存周期更长,适应更大规模、更广泛的应用。③20世纪90年代末。出现了许多的敏捷方法,如自适应软件开发、水晶项目开发、动态系统开发、极限编程、特征驱动开发和Scrum等。这些主要的敏捷方法的创始人在2001年聚集一堂,并发表了敏捷开发宣言。④21世纪。对快速应用开发(RapidApplicationDevelopment,RAD)追求的趋势仍在继续,在信息技术、组织、竞争对策及环境等方面的变革步伐也正在加快。云计算、大数据、物联网、人工智能和机器学习、移动互联网、三维打印、可穿戴式技术、虚拟现实、增强现实、社交媒体、无人驾驶汽车和飞机等技术不断涌现。“大规模计算”、“自治和生化计算机”、“模型驱动体系结构”和“构件化软件开发”等新领域都可能成为接下来软件工程发展的主要方向。(3)软件工程的目标是什么?如何解决多目标之间的矛盾?答:软件工程要达到的基本目标包括以下六方面。①达到要求的软件功能。②取得较好的软件性能。③开发出高质量的软件。④付出较低的开发成本。⑤需要较低的维护费用。⑥能按时完成开发工作,及时交付使用。3软件工程的首要问题是软件质量。软件工程的目的就是在以上目标的冲突之间取得一定程度的平衡。因此,在涉及平衡软件工程目标这个问题的时候,软件的质量应该摆在最重要的位置加以考虑。软件质量可用功能性、可靠性、可用性、效率、可维护性和可移植性等六个特性来评价。(4)什么是软件生存周期?它分为几个时期?几个阶段?答:软件生存周期是指从设计该产品的构想开始,到软件需求的确定、软件设计、软件实现、产品测试与验收、投入使用,以及产品版本的不断更新,到该产品最终被市场淘汰的全过程。软件生存周期由软件定义、软件开发和运行维护三个时期组成,划分为问题定义、可行性研究、需求分析、概要设计、详细设计、软件实现和单元测试、综合测试和运行维护八个阶段。(5)什么是软件生存周期模型?有哪些主要软件过程模型?答:软件生存期模型也称为软件过程模型,是从软件项目需求定义直至软件运行维护为止,跨越整个生命周期的系统开发、运行和维护所实施的全部过程、活动和任务的结构框架。典型的包括瀑布模型、快速原型模型、增量模型、螺旋模型、统一过程、敏捷过程等。(6)在软件工程知识体系中,将软件工程划分为哪些知识域?答:SWEBOK将软件工程知识体系划分为10个知识域,包含在两类过程中。一类过程是开发与维护过程,包括软件需求、软件设计、软件构造、软件测试和软件维护;另一类过程是支持过程,包括软件配置管理、软件工程管理,软件工程过程、软件工程工具写方法、软件质量。每个知识域还可进一步分解为若干个论题,在论题描述中引用有关知识的参考文献,形成一个多级层次结构,以此确定软件工程知识体系的内容和边界。4第2章一、填空题(1)用最小的代价在尽可能短的时间内确定问题是否能够解决(2)投资效益分析(3)值得去开发(4)需求分析,设计(5)开发成本、比较和权衡(6)经济角度(7)编写可行性分析报告(8)技术可行性、经济可行性、社会可行因素方面的可行性、操作可行性(9)直接成本、间接成本、有形收益、无形收益(10)因使用新系统而增加的收入、使用新系统可以节省的运行费用(11)货币的时间价值、投资回收期、纯收入(12)经济效益、投资(13)最初投资(14)软件的工作范围、估算开发所需要资源、估算软件成本费用和进度安排(15)软件系统的功能、软件系统的性能、接口、可靠性(16)泡泡图(17)同时出现,只取其一(18)输入,输出(19)加工,名字(20)数据存储二、选择题(1)A(2)C(3)C(4)B(5)D(6)C(7)B(8)A(9)D(10)D(11)B(12)B(13)D(14)D(15)A三、简答题(1)可行性研究主要研究哪些问题?试说明之。解:可行性研究的任务是决定软件项目做还是不做。对技术可行性、经济可行性、社会可行性、开发方案的可行性及运行可行性等方面进行分析。5(2)设计一个软件的开发成本为5万元,寿命为3年。未来3年的每年收益预计为:2200元,24000元,26620元。银行年利率为10%。试对此项目进行成本-效益分析,以决定其经济可行性。解:进行投入产出分析时,未来的收益和现在消耗的成本不能直接进行比较,必须在考虑货币的时间价值后,才能进行准确的投入、产出分析。22000/(1+10%)+24000/(1.1×1.1)+26620/(1.1×1.1×1.1)-50000=20000+19834.71+20000-50000=9834.71经济可行性分析投资收益为:9834.71元。(3)某软件公司统计发现该公司研发部门每一万行C语言源代码形成的源文件(.c和.h文件)约为250K。某项目的源文件大小为3.75M。①问该项目的规模是多少KLOC(源代码行数)?该公司研发部门的生产率是0.625KLOC/人月,人工价是10000元/人月。②问工作量和总成本是多少?③每行代码的价值是多少?解:①3.75M/250K=15万行=150KLOC②工作量=规模/生产率=150KLOC/0.625KLOC=240人月成本=工作量×人工价=240人月*10000元/人月=240万元③240万元/15万行=16元/行(4)某计算机系统投入使用后,每年可节约人民币20000元,假设软件生存期为4年,系统投资额为50000元,若年利率为5%,试计算效益。解:表面上看,4年共节约20000*4=80000元,扣除投资55000元可产生纯收入25000元。其实不然,因为投资在前,效益产生有一个时间过程,所以需要把4年内每年预计节约的钱折合成当前价值才能比较。若按年利率5%计算,折合到当前值的数目如表1所示:表1每年效益折算的当前值年效益(元)利率(1+0.05)n当前值(元)预计当前值(元)1200001.0519047190472200001.102518140371873200001.157617277544644200001.215516454709186根据表1可计算出以下经济指标:纯收入=4年累计的当前值-系统投资=70918-55000=15918(元)投资回收期≈3+(55000-54464)/16454-3.033年(5)某旅馆的电话号码服务如下:可以拨分机号和外线号码。分机号是从7201~7299。外线号码先拨9,然后是市话号码或长话号码。长话号码是以区号和市话号码组成。区号是从100~300中任意的数字串。市话号码是以局号和分句号组成。局号可以是455、466、888、552中任意一个号码。分局号是是任意长度为4的数字串。要求:写出在数据字典中,电话号码的数据条目的定义(即组成)解:电话号码=分机号|外线号码分机号=7201…7299外线号码=9+[市话号码|长话号码]长话号码=区号+市话号码区号=100…300市话号码=局号+分局号局号=[455|466|888|552]分局号=4{数字}4(6)某工厂的采购部每天需要一张订货报表,报表按零件编号排序,表中列出所有需要再次订货的零件。对于每个需要再次订货的零件,应该列出下述数据:零件编号,零件名称,订货数量,目前价格,主要供应者,次要供应者。零件入库或出库称为事务,通过存放在库房的CRT终端把事务报告给定货系统。当零件库存量少于库存量临界值,决定再次订货,画出订货系统的数据流图。解:问题分析:源点/终点,处理,数据存储,数据流1)源点/终点:系统之外的实体(人,物,系统)源点:仓库管理员终点:采购员2)处理:需要报表-产生报表处理日常事务-事务处理3)数据存储:7订货信息库存清单4)数据流:订货报表:零件编号、名称、数量……事务:零件编号、事务类型、数量……Step1:顶层数据流图——系统级表1订货系统顶层DFD图构成:基本系统模型+源点+终点一般采用自顶向下逐步细化的分层绘制方法Step2:进一步分解——功能级表2订货系统0层DFD图Step3:进一步分解——功能级表3订货系统1层DFD图(7)开发某工程中使用的CAD系统需要投资20万元,经估算在工程中用该CAD系统后将取代大部分人工设计工作,每年可节省9.6万元。若该软件的生存期为5年,年利率按5%计算,试求该项目的净收入。解:若按年利率5%计算,货币时间价值折合到当前值的数目如表2所示:8表2货币时间价值(万元)年份将来值(1+i)n现在值(万元)累计现在值(万元)19.61.059.14299.142929.61.10258.707517.851339.61.15768.292826.143249.61.21557.897934.041159.61.27637.521941.5630纯收入=5年累计的当前值-系统投资=41.5630-20=21.5630(万元)9第3章一、选择题(1)B(2)D(3)B(4)B(5)B二、简答题(1)答:需求分析需要4个步骤,分别获取、建模、描述和验证。获取需求实质上是一个需求收集的过程,要做充分的调查研究。通常是从分析当前系统包含的数据开始,分析当前系统在处理信息时的不足,用户希望改进的主要问题及迫切性等。收集需求的常用方法有问卷调查、访谈、实地操作、建立原型等,收集的需求主要包括功能需求、性能需求、可靠性需求、可用性、人机界面需求、约束、出错处理等内容。需求分析的核心任务是建立分析模型,即把来自用户的需求信息通过分析、提取、归纳、抽象建立起描述目标系统的模型。传统的面向过程的软件工程方法学,主要采用数据流图建立目标系统的逻辑模型。需求描述是指编制需求分析阶段各类文档。一般情况下,对于大型、复杂软件系统在需求分析阶段会产生3个文档:系统定义文档(用于描述用户需求的报告)、系统需求规格说明书、软件需求规格说明书,分别从不同的角度和层次描述项目开发的需求。对于简单的小规模软件系统,只需编制SRS即可。因为需求分析的成果是后续开发的重要依据和基础,为了提高软件产品的最终质量,降低开发成本,必须对需求分析结果从完整性、一致性、有效性和