软件工程实用案例教程(梁洁、金兰)参考答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题一参考答案
1. 选择题
DDBBA DBD
2. 简答题
(1) 通用软件产品开发和定制软件开发之间有什么不同?这在实际应用中对通用软件产品用户意味着什么?
答:这两类产品的一个重要区别在于:在通用软件产品中,软件描述由开发人员自己完成,而在定制软件产品中,软件描述通常是由客户给出,开发人员必须按客户要求进行开发。在实际应用中通用软件满足的是绝大部分用户的共同需求,而对于特殊的个人需求无法涉及到。
(2) 什么是软件危机?产生的原因有哪些?它和软件工程有什么关系?
答:在软件开发中经常会出现时间延迟、预算超支、质量得不到保证、移植性差等问题,甚至有的项目在耗费了大量人力、财力后,由于离目标相差甚远而宣布失败。这种现象称为“软件危机”。
产生的原因有:(1) 软件独有的特点给开发和维护带来困难。(2) 软件人员的错误认识。忽视软件需求分析的重要性,轻视文档的作用,轻视软件维护等。(3) 软件开发工具自动化程度低。此外,软件生产工程化管理程度低,致使软件项目管理混乱,难以保障软件项目成本、开发进度按计划执行。
由于软件危机的出现,人们一直在努力探索克服软件危机的途径。因此提出“软件工程”的概念,试图用工程的方法和管理手段,将软件开发纳入工程化的轨道,以便开发出成本低、功能强、可靠性高的软件产品。
(3) 简述软件工程的定义和软件工程的目标?
答:在NATO会议上,Fritz Bauer对于软件工程的定义是:“为了经济地获得可靠的、能在实际机器上高效运行的软件,而建立和使用的健全的工程原则。”
对于软件工程,美国电气与电子工程师学会(IEEE)给出了如下定义。
软件工程是:①将系统化的、规范化的、可量化的方法应用于软件的开发、运行和维护中,即将工程化方法应用于软件;②对于①中所述方法的研究。
软件工程的目标:①软件开发成本较低。②软件功能能够满足用户的需求。③软件性能较好。④软件可靠性高。⑤软件易于使用、维护和意志。⑥能够按时完成开发任务,并及时交付使用。
(4)软件工程过程活动主要有哪些?解释每个活动的必要性。
答:①沟通。在技术工作开始之前,和客户及其他利益相关者的沟通与协作是极其重要的,其目的是理解利益相关者的项目目标,并收集需求及定义软件特性和功能。
②策划。如果有地图,任何复杂的旅程都可以变得简单。软件项目好比一个复杂的旅程,策划活动就像是创建一个地图,以指导团队的项目旅程,这个地图称为软件项目计划,它定义和描述了软件工程工作,包括需要执行的技术任务、可能的风险、资源需求、工作产品和
工作进度计划。
③建模。无论你是庭院设计师、桥梁建造师、航空工程师、工匠还是建筑师,每天的工作都离不开模型。你会画一张草图来辅助理解整个项目大的构想——体系结构、不同的构件如何结合,以及其他一些特性。如果需要,可以把草图不断细化,以便更好地理解问题并找到解决方案。软件工程师也是如此,需要利用模型来更好地理解软件需求,并完成符合这些需求的软件设计。
④构建。必须要对所做的设计进行构建,包括编码(手写的或者自动生成的)和测试,后者用于发现编码中的错误。
⑤部署。软件(全部或者部分增量)交付给用户,用户对其进行评测并给出反馈意见。
⑥进化。软件随不同的客户和变化的市场需求而进行修改。
(5)解释Web的普遍使用是如何改变软件系统的?
(6) 解释为什么软件工程的基本原则适用于所有的软件系统?
(7) 对ACM/IEEE职业道德准则中的某项条款,举出一个恰当的例子加以说明。
(8) 分别列举一两个失败或成功的软件项目实例,试说明其失败或成功的原因。
习题二参考答案
1. 选择题
BCDBA BC
2. 简答题
(1) 说明为什么在需求工程过程中区分用户需求开发和系统需求开发是重要的?
答:用户需求是从客户和最终用户角度对系统需求的抽象描述,是开发者和客户之间达成统一需求的定义;系统需求是对系统要提供的功能、性能、操作、数据等多方面的详尽描述,为系统开发者提供依据。
(2) 简述软件设计过程中的主要活动及这些活动的输出,并说明这些活动的输出之间可能存在的关系?
答:软件设计过程中的主要活动有体系结构设计、接口设计、构件设计、数据库设计。体系结构设计划分了系统的总体结构,系统由那些构件组成,如何分布,哪些构件可以复用,然后设计构件间的接口,定义好接口后,详细设计构件内容部的细节,以及数据库的设计
(3) 说明原型模型的两种实现方案各有什么特点?各适用于那些情况?
答:①抛弃式原型模型:快速建立一个反映用户主要需求的原型系统,反复修改获取用户真正需求后,原型将被抛弃,后再按线性流程进行实际项目的开发。
适用于小型、简单、处理过程比较明确、没有大量运算和逻辑处理过程的系统。
②进化式原型模型:针对有待开发的软件系统,先开发一个原型系统让用户使用,然后根据用户使用情况的意见反馈,对原型系统不断修改,使它逐步接近并最终达到开发目标。
特别适合于用户急需的软件产品开发。它能够快速地向用户交付可以投入实际运行的软件成果,并能够很好地适应软件用户对需求规格的变更。
(4) 为什么说构件复用模型是一种有利于软件按工业流程生产的过程模型?
答:由于构件具有一定的通用性,因此可以在不同的软件系统中被复用,在基于构件复用的软件开发中,软件由构件装配而成,这就如同标准零件装配汽车一样。构件复用技术能带来更好的复用效果,并且具有工程特性,更能适应软件按照工业流程生产的需要。
(5) 解释为什么Boehm的螺旋模型是一个适应性模型,可以同时支持更新避免和变更容忍活动。说明为什么在实践中这个模型还没有被广泛应用?
答:但使用该模型需要丰富的风险评估经验和专门知识,对软件项目进行风险分析
也需要费用,假如项目风险分析费用过高,甚至超过了项目的开发费用,显然就不合适了。一般大型项目才有较高的风险,才有进行详细风险分析的必要。因此,这种模型比较适合大型的软件项目。
(6) Rational统一过程和螺旋模型比较,优势有哪些?
答:①RUP每次迭代包含9个核心工作流程,而螺旋模型只包含4方面的活动
②RUP对每个阶段内若干次迭代过程完成后所交付增量的具体要求,而螺旋模型没有规定。
③RUP详细描述了不同阶段不同迭代过程在经历9个核心工作流程时活动内容的重点和强度,而螺旋模型没有规定。
RUP的二维迭代生命周期结构对“迭代”开发方式的体现比螺旋模型更深刻、具体、详尽和全面,用于指导需求不明确、不稳定的项目开发,具有更强的可操作性。
(7) 敏捷方法的价值观和原则与传统方法有哪些区别与联系?说明什么情况下不建议使用敏捷方法来开发软件?
答:敏捷的价值观:个体和交互胜过过程和工具;可以工作的软件胜过面面俱到的文档;客户合作胜过合同谈判;响应变化胜过遵循计划。而传统软件工程方法更注重计划与过程管理(文档管理),但也非常重视软件质量和对需求变更的及时反应。
从产品角度看,敏捷方法适用于需求萌动并且快速改变的情况,如果系统有比较高的可靠性、安全性方面的要求,则可能不完全适合。
3. 应用题
(1) 某企业计划开发一个“综合信息管理系统”,该系统涉及销售、供应、财务、生产、人力资源等多个部门的信息管理。该企业的设想是按部门的优先级别逐个实现,边开发边应用。对此需要采用一种比较合适的软件过程模型。请对这个过程模型做出符合应用需求的选择,并说明选择理由。
答:选择RUP模型或螺旋模型。
①该系统是一个比较大型的项目,意味着风险较大。
②需求并不是固定的,因此需要迭代。
具有风险防范和迭代特征的模型只有RUP和螺旋模型,相比较而言,
RUP模型比螺旋模型更深刻、具体、详尽和全面,用于指导需求不明确、不稳定
的项目开发,具有更强的可操作性。
(2) 假设你要开发一个软件,它的功能是把73624.9385这个数开平方,所得到的结果应该精确到小数点后4位。一旦实现并测试完之后,该产品将被抛弃。你打算采用哪种软件过程模型?为什么?
答:选择瀑布模型,因为该软件需求稳定,可以经过算法分析、设计、编码、调试,然