写在前面:不同版本的教材目录结构发生了很大的调整,我这一版可能根你拿到的课本的目录不同(授课老师对于课本内容进行了裁剪),但是知识点基本都是相似的,仅供参考。
不过不仅哪一版第一章都是很枯燥、又特别长的概念,很容易被劝退,但是度过这一阶段后面可能就会好很多,所以只能咬牙挺下去。我这边把这一章常见考点进行了梳理(适用于题库考+国考复习)分成了8个知识点,结尾附脑图。顺祝商祺!
1、什么是软件危机?软件危机表现在哪些方面?
什么是软件危机?它有哪些典型表现?为什么会出现软件危机?
试述软件危机产生的原因。
答:(1)软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件危机包含两方而的问题:①如何开发软件,以满足对软件日益增长的需求;②如何维护数量不断膨胀的已有软件。
(2)软件危机的典型表现:
①对软件开发成本和进度的估计不准确;
②用户对“已完成的”软件系统不满意的现象经常发生:
③软件产品的质量往往靠不住:
④软件常常是不可维护的;
⑤软件通常没有适当的文档资料;
⑥软件成本在计算机系统总成本中所占的比例逐年上升;
⑦软件开发跟不上计算机应用迅速普及深入的趋势。
(3)软件危机出现的原因:
①软件是计算机系统中的逻辑部件而不是物理部件;
②软件显著特点是规模庞大;
③对软件开发和维护还有不少糊涂观念,采用了错误的方法和技术:
④存在与软件开发和维护有关的许多错误认识和做法;
⑤对用户要求没有完整准确的认识就匆忙着手编写程序:
⑥—个软件从定义、开发、使用和维护,直到最终被废弃,要经历一个漫长的时期:
⑦一个软件产品必须由一个完整的配置组成,要包括程序、文档和数据等成分;
⑧在软件开发的不同阶段进行修改需要付出的代价是很不相同的;
⑨轻视维护。
解析:软件工程的出现就是为了解决软件危机的问题,以上3种问法答案一致,注意题目的问法以及题型进行适当裁剪。这一题主要WHAT+WHY,下一题解答的是HOW~
(1)软件危机定义:开发(如何开发?)+维护(如何维护?)遇到的问题。
(2)表现:不能开发+维护成本、及时完成+按时交付、质量+文档、不满意+跟不上。
(3)原因:软件是逻辑不是物理部件,不可见性;规模大;开发+维护观念,错的方法和技术;开发+维护错的做法和认识等。
2、什么是软件工程?它有哪些本质特性?怎样用软件工程消除软件危机?
简要叙述软件工程目标和内容。
软件工程是如何克服软件危机的?
答:(1)软件工程是指从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
(2)软件工程本质特征:
①软件工程关注于大型程序的构造;
②软件工程的中心课题是控制复杂性;
③软件经常变化;
④开发软件的效率非常重要;
⑤和谐地合作是开发软件的关键;
⑥软件必须有效地支持它的用户;
⑦由具有一种文化背景的人替具有另一种文化背景的人创造产品。
(3)消除软件危机的方法:
①应该对计算机软件有一个正确的认识;
②应该充分认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目;
③应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法;
④应该开发和使用更好的软件工具。
解析:(1)软件工程定义:管理+技术,开发+维护,一门学科。工程概念/原理/方法/技术进行开发+维护,经过时间考验正确管理+技术,开发出经济/高质量/有效/大型软件。
(2)本质特征(2种答案):a.大型、控制复杂性、经常变化、效率、和谐合作、支持用户、一种为另一种;b.开发+维护成本、 及时完成+按时交付、功能+性能、可靠性+可移植性。
(3)如何消除:正确认识、合作、开发+维护工具|技术|方法、明确用户需求(完整|一致|准确|正确)、重视文档、缺陷引入初期修正代价小等方面。
3、论述过程、方法和工具在软件工程实践中的关系。
答:方法、工具和过程是软件工程三要素(三个重要组成):
①方法:为软件开发提供“如何做”的技术。
②工具(和环境):为软件工程方法提供自动或半点自动的软件支撑环境。
③过程:将软件工程的方法和工具综合起来以达到合理,及时地进行计算机软件开发的目的。
4、软件的缺陷为什么在软件开发和维护过程中会扩大?

答:软件虽然不会被引起硬件磨损的环境问题所影响,但是软件未知的缺陷将在程序生命周期的前期造成高失效率,然而随着错误的被纠正,软件不断变更,每次变更都有可能引入新的错误,使得失效率陡然上升(如实际的“软件失效曲线图”),在曲线回到最初的稳定失效状态前,新的变更会引起曲线又一次上升,就这样,最小的失效率点沿类似于斜线的形状逐渐上升,可以说,软件不断的变更是软件退化的根本原因,软件的缺陷也会在软件开发和维护过程中持续扩大。
4.2、假设自己是一家软件公司的总工程师,当把下图给手下的软件工程师们观看,告诉他们及早发现并改正错误的重要性时,有人不同意这个观点,认为要求在错误进入软件之前就清除它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?”应该怎么反驳他?

答:可以从以下两方面来反驳他:
(1)在软件开发的不同阶段进行修改需要付出的代价是很不相同的,
在早期引入变动,涉及的面较少,因而代价也比较低;而在开发的中期,软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都做相应的修改,不仅工作量大,而且逻辑上也更复杂,因此付出的代价剧增。
(2)在软件“已经完成”时再引入变动,当然需要付出更高的代价。在后期引入一个变动比在早期引入相同变动所需付出的代价高2~3个数量级。
4.3、假设自己被指派作为一个大型软件产品公司的项目负责人,工作是管理该公司已被广泛应用的字处理软件的新版本开发。由于市场竞争激烈,公司规定了严格的完成期限并且对外公布了。应选择哪种项目组结构?为什么?打算采用哪种(些)软件过程模型?为什么?
答:(1)应该选择现代程序员组,因为小组成员都能对发现程序错误持积极、主动的态度。能更好的适应竞争。(2)大型软件应采用演化模型中的螺旋模型。
4.4、假设自己被指派为一个软件公司的项目负责人,任务是开发一个技术上具有创新性的产品,该产品把虚拟现实硬件和最先进的软件结合在一起。由于家庭娱乐市场的竞争非常激烈,这项工作的压力很大。应选择哪种项目组结构?为什么?打算采用哪种(写)软件过程模型?为什么?
答:(1)由于是技术上具有创新性的产品,所以需要采用民主制程序员组,大家司以集思广益,共同攻关技术难题。(2)要求把虚拟现实硬件和最先进的软件结合在一起,所以需要采用一种完整而且完美的模型进行开发,所以统一软件过程RUP(Rational Unified Process)最为合适。
4.5、假设自己被指定为项目负责人,任务是开发一个应用系统,该系统类似于自己的小组以前做过的那些系统,但是规模更大且更复杂一些。客户已经写出了完整的需求文档。应选用哪种项目组结构?为什么?打算采用哪种(些)软件过程模型?为什么?
答:(1)由于待开发的应用系统类似于以前做过的系统,开发人员已经积累了较丰富的经验,没有多少技术难题需要攻克。为了减少通信开销,充分发挥技术骨干的作用,统一意志统一行动,提高生产率,加快开发进度,项目组的组织结构以基于主程序员组的形式为宜。
(2)针对待开发的系统,客户已经写出了完整的需求文档,项目组又有开发类似系统的经验,因此,可以采用广大软件工程师熟悉的瀑布模型来开发本系统。
5、简述模型在软件开发中的作用。
答:在软件生存期中,软件开发模型是软件开发全部过程、活动和任务的结构框架。软件开发模型能清晰,直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为软件项目开发的基础。
解析:任务(task)是活动(activity)的组成,框架是过程(动作)、活动、任务的集合。
6、软件生存期与软件项目的生命期有什么区别?
答:(1)软件生存期:是指从概念的形成、项目定义与决策、系统分析与设计、开发成功、投入使用,并在使用中不断修改、完善,直至被新的软件所替代,而停止该软件使用的全过程。
(2)软件项目的生命周期:是指从项目批准到交付使用的过程。而立项前的调研、系统维护、升级等可以不是项目生命周期的阶段,但是可以作为软件的生存期的一部分。
所以说,两者之间是有很大区别的。
7、什么是软件生存周期模型?有哪些主要模型?
什么是软件生命周期模型?试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明每种模型的适用范围。
分析比较各种软件开发模型的特征和优、缺点?
瀑布模型有哪些局限性?
增量模型的基本思想是什么?
为什么说喷泉模型较好地体现了面向对象软件开发过程无缝和迭代的特性?
答:(1)软件生存周期模型是描述软件开发过程中各种活动如何执行的模型。软件生存周期模型确立了软件开发和演绎中各阶段的次序限制以及各阶段活动的准则,确立开发过程所遵守的规定和限制,便于各种活动的协调,便于各种人员的有效通信,有利于活动重用,有利于活动管理。
(2)主要的软件生存周期模型有瀑布模型、增量模型、快速原型模型(原型)、螺旋模型、喷泉模型(变换模型和基于知识的模型)。
瀑布模型:最经典的软件工程模型,适用于需求明确的项目。
优点(2种答案):(1)为项目提供了按阶段划分的检查点。(2)当前一阶段完成后,只需要去关注后续阶段。(3)它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。
a.可强迫开发人员采用规范的方法;b.严格地规定了每个阶段必须提交的文档;c.要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证;d.对文档的约束,使软件维护变得容易一些,且能降低软件预算。
缺点/局限:(1)各阶段之间存在着严格的顺序性,特别强调预先定义需求的重要性,在着手进行具体的开发工作之前,必须通过需求分析预先定义并“冻结”软件需求,然后再一步一步地实现这些需求。但是实际项目很少是遵循着这种线性顺序进行的。
(2)虽然瀑布模型也允许迭代,但这种改变往往给项日开发带来混乱。在系统建立之前很难只依靠分析就确定出一套完整、准确、一致、有效的用户需求,这种预先定义需求的方法更不能适应用户需求不断变化的情况。
(3)传统的瀑布模型很难适应需求可变、模糊不定的软件系统的开发(客户往往也很难清楚地给出所有的需求),而且在开发过程中,用户很难参与进去,只有到开发结束才能看到整个软件系统。这种思想的、线性的开发过程,缺乏灵活性,不适应实际的开发过程。
适用范围:a.用户的需求非常清楚全面,且在开发过程中没有或很少变化;b.开发人员对软件的应用领域很熟悉;c.用户的使用环境非常稳定;d.开发工作对用户参与的要求很低。
增量模型:允许先行开发,是将整个需求分成小段进行开发,每一段都是一个小的瀑布模型,在现代企业中大量使用,如微软的WINDOWS系统。适用于需求明确的项目。
基本思想:(1)为了克服瀑布模型的局限性,使开发过程具有一定的灵活性和可修改性,于是产生了增量模型。它是在瀑布模型的基础上加以修改而形成的。
(2)增量模型和瀑布模型之间的本质区别是:瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,必须完成前一阶段的所有细节。而增量模型属于非整体开发模型,它推迟某些阶段中的节点,从而较早地产生工作软件。
(3)增量模型是在项目的开发过程中以一系列的增量方式开发系统。增量方式包括增量开发和增量提交。增量开发是指在项目开发周期内,在一定的时间间隔内以增量方式向用户提交工作软件。
优点:(1)克服瀑布模型局限,灵活+修改。(2)瀑布整体|下阶段前|必须完成所有;增量非整体|推迟实现某|较早产生软件。(3)增量开发+增量提交,交付用户。
缺点:(1)由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。(2)在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。
适用范围:a.进行已有产品升级或新版本开发;b.对完成期限严格要求的产品;c.对所开发的领域比较熟悉而且已有原型系统。
原型模型:也叫演化模型,适用于不能完整定义需求的项目。
优点:(1)需求表示清楚,用户满意度较高;(2)降低开始风险和开发成本
缺点:(1)原型法不适用于开发大型的信息系统 (2)系统难于维护(3)如果用户合作不好,盲目纠错,会拖延开发进程 (4)不利于开发人员的创新
适用范围(2种答案):(1)用户需求不清,管理及业务不稳定,需求经常变化(2)规模小,不太复杂(3)开发信息系统的最终用户界面
a.对所开发的领域比较熟悉而且有快速的原型开发工具;b.项目招投标时,可以以原型模型作为软件的开发模型;c.进行产品移植或升级时,或对已有产品原型进行客户化工作时。
螺旋模型:在瀑布模型的每一个开发阶段前引入一个非常严格的风险识别、分析和控制。适用于新近开发内部开发的大规模软件项目,需求不明确的情况下,便于风险控制和需求变更。
优点(2种答案):(1)设计上的灵活性,可以在项目的各个阶段进行变更。(2)以小的分段来构建大型系统,使成本计算变得简单容易。(3)客户始终参与每个阶段的开发保证了项目不偏离正确方向以及项目的可控性。(4)随着项目推进,客户始终掌握项目的最新信息,从而他或她能够和管理层有效地交互。(5)客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品。
a.对可选方案和约束条件的强调有利于已有软件的重用;b.减少了过多测试或测试不足所带来的风险;c.在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。
缺点:(1)采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失。(2)过多的迭代次数会增加开发成本,延迟提交时间。
喷泉模型:自下而上具有相互迭代和无间隙性,适用于面向对象的项目。
基本思想:喷泉模型是典型的面向对象的软件过程模型之一。“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。代表不同阶段的圆圈相互重叠,表示两个活动之间存在交迭;而面向对象方法在概念和表示方法上的一致性,保证了在各项开发活动之间的无缝过渡。在一个阶段内的向下箭头代表该阶段内的迭代(或求精)。

优点:各个阶段没有明显的界限,开发人员可以同步进行开发,可以提高软件项目开发效率,节省开发时间。
缺点:(1)在各个开发阶段是重叠的,在开发过程中需要大量的开发人员,不利于项目的管理。(2)要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。
解析:软件定义到废弃不用、跨越软件开发运行和维护的全周期。完成一系列任务的框架和步骤|活动|动作的集合,任务(task)组成了活动(activity)。
描述...各活动执行;确立...各阶段次序;便于各活动... 便于各人员...;有利于...有利于...重用和管理。
8、在哪些情况下适宜使用原型?哪些情况下不宜使用原型?
答:(1)适宜使用原型的情况
①开发周期很长的项目,通过原型开发来缩短开发周期。
②系统的使用可能变化较大,不能相对稳定,而原型模型具有适应变化的机制。
③用户对系统的需求较为模糊,对某种要求缺乏信心。
④开发者对系统的某种设计方案的实现无信心或无十分的把握。
(2)不宜使用原型的情况
①缺乏开发工具,或对原型的可用工具不了解的时候。
②用户不愿意参与开发。
③用户的数据资源没有很好地组织和管理的时候,因为快速原型需要快速寻找和存取数据。
④用户的软件资源没有被组织和管理起来的时候,因为MIS中的模型、模块、使用设施和程序的难易程度对原型使用很关键。
解析:适宜:周期长-->缩短;变化大-->适应性;需求模糊-->缺乏信心(用户侧);方案实现-->缺乏信心(开发者侧)
不适宜:缺乏工具;用户不配合;数据资源组织-->快速寻找存取;软件资源组织-->开发的难易程度。
8.2、使用快速原型方法构造原型时,对原型有什么样的要求?
答:(1)原型不同于最终系统,两者在功能上的区别是最终系统要实现软件需求的全部功能,而原型只实现所选择的部分功能,最终系统对每个软件需求都是要求详细实现,而原型仅仅是为了试验和演示的,部分功能需求可以忽略或者模拟实现。
(2)在构造原型时,必须注意功能性能的取舍,忽略一切暂时不关心的部分以加速原型的实现,同时又要充分体现原型的作用,满足评价原型的要求。
(3)在构造原型之前,必须明确运用原型的目的,从而解决分析与构造内容的取舍,还要根据构造原型的目的确定考核、评价原型的内容。
解析:a.原型:全部、详细实现;最终系统:部分、试验/演示、忽略/模拟
b.构造时:取舍功能|性能,体现作用,满足评价
c.构造前:取舍解决分析|构造内容,明确目标确定考核、评价内容。
8.3、快速原型模型有哪几种?各有何特点?
答:(1)快速原型模型是增量模型的另一种形式。它是在开发真实系统之前,构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作。根据原型的不同作用,可以分为探索型模型、实验型模型和演化型模型三类。
(2)三种快速原型模型的特点
①探索型模型主要用于需求分析阶段,目的是要弄清用户的需求,确定所期望的特性,并探索各种方案的可行性。它主要针对开发目标模糊,用户与开发者对项目都缺乏经验的情况,通过对原型的开发来说明用户的需求。
②实验型模型主要用于开发设计阶段,考核实现方案是否合适,能否实现。对于一个大型系统,若对设计方案心中没有把握时,可通过这种原型来证实设计方案的正确性。
③演化型模型主要用于尽早向用户提交一个原型系统,该原型系统或者包括系统的框架,或者包含系统的主要功能,在得到用户的认可后,将原型系统不断扩充演变为最终的软件系统。它将原型的思想扩展到软件开发的全过程。
解析: 探索:需求分析,需求模糊,探索方案可行性,用户和开发者都缺乏信心。
实验:开发设计,设计方案是否合适,证实方案正确性。
演化:尽早提交,包含主要功能,得到认可,扩充最终系统。
8.4、原型开发的目的、特点和包括那几类?
答:原型开发是针对不能完全定义需求的项目进行的一种开发模式。为了探索可行性和弄清需求,作第一次试验开发,以取得有效的反馈信息,来支持软件的最终设计和实现。
它的特点是快速开发,采用迭代技术,在原型系统不断调整以满足各种利益相关者的需求,同时使开发者逐步清楚用户的需求。原型开发可以分为探索型、实验型和演化型。
基本思想:开发人员对用户提出的问题进行总结,就系统的主要需求取得一致意见后,开发一个原型(原型是由开发人员与用户合作,共同确定系统的基本要求和主要功能,并在较短时间内开发的一个实验性的、简单易用的小型系统。原型应该是可以运行的,可以修改的。)并运行之,然后反复对原型进行修改,使之逐步完善,直到用户对系统完全满意为止。
优点:(1)需求表示清楚,用户满意度较高;(2)降低开始风险和开发成本
缺点:(1)原型法不适用于开发大型的信息系统;(2)系统难于维护;(3)如果用户合作不好,盲目纠错,会拖延开发进程
适用范围:(1)用户需求不清,管理及业务不稳定,需求经常变化;(2)规模小,不太复杂;(3)开发信息系统的最终用户界面
