软件过程模型(软件开发模型)-程序员宅基地

技术标签: 软件设计师  软件过程模型  软考  软件开发模型  

 


 
 

  软件过程模型习惯上也称为软件开发模型,它是软件开发全部过程、活动和任务的结构框架。典型的软件过程有瀑布模型、增量模型、演化模型(原型模式、螺旋模式)、喷泉模型、基于构件的开发模型和形式化方法模型等。

 
 

模型 要点
瀑布模型 适用于需求明确的项目,一般表述为需求明确、或二次开发,或者对于数据处理类型的项目。
V模型 强调测试贯穿项目始终,而不是集中在测试阶段。是一种测试的开发模型。
原型模型 典型的原型开发方法模型。适用于需求不明确的场景,构造简易系统,可以帮助用户明确需求。
增量模型 融合了瀑布模型的基本成分和原型实现的迭代特征,可以有多个可用版本的发布,核心功能往往最先完成,在此基础上,每轮迭代会有新的增量发布,核心功能可以得到充分测试。强调每一个增量均发布一个可操作的产品。
螺旋模型 典型特点是引入了风险分析。结合了瀑布模型和演化模型的优点,最主要的特点在于加入了风险分析。它是由制定计划、风险分析、实施工程、客户评估这一循环组成的,它最初从概念项目开始第一个螺旋。属于面向对象开发模型,强调风险引入。
喷泉模型 典型的面向对象的模型。特点是迭代、无间隙。会将软件开发划分为多个阶段,但各个阶段无明显界限,并且可以迭代交义。
统一过程模型 典型特点是用例驱动、以架构为中心、迭代和增量。统一过程把一个项目分为四个不同的阶段:
构思阶段:包括用户沟通和计划活动两个方面,强调定义和细化用例,并将其作为主要模型。
细化阶段:包括用户沟通和建模活动,重点是创建分析和设计模型,强调类的定义和体系结构的表示。
构建阶段:将设计转化为实现,并进行集成和测试。
移交阶段:将产品发布给用户进行测试评价,并收集用户的意见,之后再次进行迭代修改产品使之完善
敏捷开发 敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,适用于小团队和小项目,具有小步快跑的思想。常见的敏捷开发方法有极限编程法、水晶法、并列争球法和自适应软件开发方法。
(1)极限编程是一种轻量级的开发方法,它提出了四大价值观:沟通、简单、反馈、勇气。五大原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作。十二个最佳实践:计划游戏、隐喻、小型发布、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户和编码标准。
(2)水晶法强调经常交付,认为每一种不同的项目都需要一套不同的策略、约定和方法论。
(3)并列争球法的核心是迭代、增量交付,按照30天进行迭代开发交付可实际运行的软件。
(4)自适应软件开发的核心是三个非线性的,重叠的开发阶段:猜测、合作、学习。
基于构件的开发模型 构件的复用

 
 

瀑布模型(Waterfall Model)

  适用于需求明确的项目,一般表述为需求明确、或二次开发,或者对于数据处理类型的项目。
  瀑布模型是将软件生存周期中的各个活动规定为依线性顺序连接的若干阶段的模型,包括需求分析、设计、编码、测试、运行与维护。它规定了由前至后、相互衔接的固定次序,如同瀑布流水逐级下落,如下图所示。
瀑布模型
  瀑布模型为软件的开发和维护提供了一种有效的管理模式,根据这一模式制定开发计划,进行成本预算,组织开发力量,以项目的阶段评审和文档控制为手段有效地对整个开发过程进行指导,所以它是以文档作为驱动、适合于软件需求很明确的软件项目的模型。
  瀑布模型假设,一个待开发的系统需求是完整的、简明的、一致的,而且可以先于设计和实现完成之前产生。
  瀑布模型的一个变体是V模型,如下图所示。

V模型

  强调测试贯穿项目始终,而不是集中在测试阶段。是一种测试的开发模型。
V模型
  V模型描述了质量保证活动和沟通、建模相关活动以及早期构建相关的活动之间的关系。随着软件团队工作沿着V模型左侧步骤向下推进,基本问题需求逐步细化,形成问题及解决方案的技术描述。一旦编码结束,团队沿着V模型右侧的步骤向上推进工作,其实际上是执行了一系列测试(质量保证活动),这些测试验证了团队沿着√模型左侧步骤向下推进过程中所生成的每个模型。V模型提供了一种将验证确认活动应用于早期软件工程工作中的方法。
  瀑布模型的优点是,容易理解,管理成本低;强调开发的阶段性早期计划及需求调查和产品测试。不足之处是,客户必须能够完整、正确和清晰地表达他们的需要;在开始的两个或3个阶段中,很难评估真正的进度状态;当接近项目结束时,出现了大量的集成和测试工作;直到项目结束之前,都不能演示系统的能力。在瀑布模型中,需求或设计中的错误往往只有到了项目后期才能够被发现,对于项目风险的控制能力较弱,从而导致项目常常延期完成,开发费用超出预算。

迭代

 
 

 
 

 
 

增量模型(Incremental Model)

  融合了瀑布模型的基本成分和原型实现的迭代特征,可以有多个可用版本的发布,核心功能往往最先完成,在此基础上,每轮迭代会有新的增量发布,核心功能可以得到充分测试。强调每一个增量均发布一个可操作的产品。
  增量模型融合了瀑布模型的基本成分和原型实现的迭代特征,它假设可以将需求分段为一系列增量产品,每一增量可以分别开发。该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”,如下图所示。当使用增量模型时,第1个增量往往是核心的产品。客户对每个增量的使用和评估都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生了最终的完善产品。增量模型强调每一个增量均发布一个可操作的产品。
增量模型
  增量模型作为瀑布模型的一个变体,具有瀑布模型的所有优点。此外,它还有以下优点:第一个可交付版本所需要的成本和时间很少;开发由增量表示的小系统所承担的风险不大;由于很快发布了第一个版本,因此可以减少用户需求的变更;运行增量投资,即在项目开始时,可以仅对一个或两个增量投资。
  增量模型有以下不足之处:如果没有对用户的变更要求进行规划,那么产生的初始增量可能会造成后来增量的不稳定;如果需求不像早期思考的那样稳定和完整,那么一些增量就可能需要重新开发,重新发布;管理发生的成本、进度和配置的复杂性可能会超出组织的能力。

 
 

 
 

 
 

演化模型(Evolutionary Model)

  软件类似于其他复杂的系统,会随着时间的推移而演化。在开发过程中,常常会面临以下情形:商业和产品需求经常发生变化,直接导致最终产品难以实现;严格的交付时间使得开发团队不可能圆满地完成软件产品,但是必须交付功能有限的版本以应对竞争或商业压力;很好地理解了核心产品和系统需求,但是产品或系统扩展的细节问题却没有定义。在上述情况和类似情况下,软件开发人员需要一种专门应对不断演变的软件产品的过程模型。
  演化模型是迭代的过程模型,使得软件开发人员能够逐步开发出更完整的软件版本。演化模型特别适用于对软件需求缺乏准确认识的情况。典型的演化模型有原型模型和螺旋模型等。

 
 

 
 

原型模型(Prototype Model)

  典型的原型开发方法模型。适用于需求不明确的场景,构造简易系统,可以帮助用户明确需求。
  并非所有的需求都能够预先定义,大量的实践表明,在开发初期很难得到一个完整的、准确的需求规格说明。这主要是由于客户往往不能准确地表达对未来系统的全面要求,开发者对要解决的应用问题模糊不清,以至于形成的需求规格说明常常是不完整的、不准确的,有时甚至是有歧义的。此外,在整个开发过程中,用户可能会产生新的要求,导致需求的变更。而瀑布模型难以适应这种需求的不确定性和变化,于是出现了快速原型(Rapid Prototype)这种新的开发方法。原型方法比较适合于用户需求不清、需求经常变化的情况。当系统规模不是很大也不太复杂时,采用该方法比较好。
  原型是预期系统的一个可执行版本,反映了系统性质的一个选定的子集。一个原型不必满足目标软件的所有约束,其目的是能快速、低成本地构建原型。当然,能够采用原型方法是因为开发工具的快速发展,使得能够迅速地开发出一个让用户看得见、摸得着的系统框架。这样,对于计算机不是很熟悉的用户就可以根据这个框架提出自己的需求。开发原型系统首先确定用户需求,开发初始原型,然后征求用户对初始原型的改进意见,并根据意见修改原型。原型模型如下图所示。
原型模型
  原型模型开始于沟通,其目的是定义软件的总体目标,标识需求,然后快速制订原型开发的计划,确定原型的目标和范围,采用快速射击的方式对其进行建模,并构建原型。被开发的原型应交付给客户使用,并收集客户的反馈意见,这些反馈意见可在下一轮中对原型进行改进。在前一个原型需要改进,或者需要扩展其范围的时候,进入下一轮原型的迭代开发。
  根据使用原型的目的不同,原型可以分为探索型原型、实验型原型和演化型原型3种。探索型原型的目的是要弄清目标的要求,确定所希望的特性,并探讨多种方案的可行性。实验型原型的目的是验证方案或算法的合理性,是在大规模开发和实现前,用于考查方案是否合适、规格说明是否可靠等。演化型原型的目的是将原型作为目标系统的一部分,通过对原型的多次改进,逐步将原型演化成最终的目标系统。

 
 

 
 

螺旋模型(Spiral Model)

  典型特点是引入了风险分析。结合了瀑布模型和演化模型的优点,最主要的特点在于加入了风险分析。它是由制定计划、风险分析、实施工程、客户评估这一循环组成的,它最初从概念项目开始第一个螺旋。属于面向对象开发模型,强调风险引入。
  对于复杂的大型软件,开发一个原型往往达不到要求。螺旋模型将瀑布模型和演化模型结合起来,加入了两种模型均忽略的风险分析,弥补了这两种模型的不足。
  螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期大致和瀑布模型相符合,如下图所示。每个螺旋周期分为如下4个工作步骤。
  (1)制订计划。确定软件的目标,选定实施方案,明确项目开发的限制条件。
  (2)风险分析。分析所选的方案,识别风险,消除风险。
  (3)实施工程。实施软件开发,验证阶段性产品。
  (4)用户评估。评价开发工作,提出修正建议,建立下一个周期的开发计划。
螺旋模型
  螺旋模型强调风险分析,使得开发人员和用户对每个演化层出现的风险有所了解,从而做出应有的反应。因此,该模型特别适用于庞大、复杂并且具有高风险的系统。
  与瀑布模型相比,螺旋模型支持用户需求的动态变化,为用户参与软件开发的所有关键决策提供了方便,有助于提高软件的适应能力,并且为项目管理人员及时调整管理决策提供了便利,从而降低了软件开发的风险。在使用螺旋模型进行软件开发时,需要开发人员具有相当丰富的风险评估经验和专门知识。另外,过多的迭代次数会增加开发成本,延迟提交时间

 
 

 
 

喷泉模型(Water Fountain Model)

  典型的面向对象的模型。特点是迭代、无间隙。会将软件开发划分为多个阶段,但各个阶段无明显界限,并且可以迭代交义。
  喷泉模型是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。喷泉模型使开发过程具有迭代性和无间隙性,如下图所示。迭代意味着模型中的开发活动常常需要重复多次,在迭代过程中不断地完善软件系统。无间隙是指在开发活动(如分析、设计、编码)之间不存在明显的边界,也就是说,它不像瀑布模型那样,在需求分析活动结束后才开始设计活动,在设计活动结束后才开始编码活动,而是允许各开发活动交叉、迭代地进行。
喷泉模型
  喷泉模型的各个阶段没有明显的界线,开发人员可以同步进行。其优点是可以提高软件项目的开发效率,节省开发时间。由于喷泉模型在各个开发阶段是重叠的,在开发过程中需要大量的开发人员,不利于项目的管理。此外,这种模型要求严格管理文档,使得审核的难度加大。

 
 

 
 

基于构件的开发模型(Component-based Development Model)

步骤
  基于构件的开发是指利用预先包装的构件来构造应用系统。构件可以是组织内部开发的构件,也可以是商品化成品(Commercial Off-The-Shelf,COTS)软件构件。基于构件的开发模型具有许多螺旋模型的特点,它本质上是演化模型,需要以迭代方式构建软件。其不同之处在于,基于构件的开发模型采用预先打包的软件构件开发应用系统。
  一种基于构建的开发模型如图5-8所示,包括领域工程和应用系统工程两部分。
  领域工程的目的是构建领域模型、领域基准体系结构和可复用构件库。为达到此目的,首先要进行领域分析,分析该领域中各种应用系统的公共部分或相似部分,构建领域模型和领域基准体系结构,表示领域的候选构件,对候选构件进行可变性分析,以适应多个应用系统的需要,最后构建可复用构件,经严格测试和包装后存入可复用构件库。
  应用系统工程的目的是使用可复用构件组装应用系统。首先进行应用系统分析,设计应用系统的体系结构,标识应用系统所需的构件,然后在可复用构件库中查找合适的构件.(也可以购买第三方构件),这些选取的构件需进行特化,必要时做适当的修改,以适应该应用系统的需要。对于那些未找到合适构件的应用部分,仍需单独开发,并将其与特化修改后的构件组装成应用系统。在此过程中,还需要对可复用构件的复用情况进行评价,以改进可复用构件,同时对新开发的部分进行评价,并向领域工程推荐候选构件。
基于构件的开发模型

 
 

 
 

形式化方法模型(Formal Methods Model)

  形式化方法是建立在严格数学基础上的一种软件开发方法,其主要活动是生成计算机软件形式化的数学规格说明。
  形式化方法用严格的数学语言和语义描述功能规约和设计规约,通过数学的分析和推导,易于发现需求的歧义性、不完整性和不一致性,易于对分析模型、设计模型和程序进行验证。通过数学的演算,使得从形式化功能规约到形式化设计规约,以及从形式化设计规约到程序代码的转换成为可能。这种方法的一个变形是净室软件工程。

 
 

 
 

统一过程(UP)模型

步骤

  统一过程模型是一种“用例和风险驱动,以架构为中心,迭代并且增量”的开发过程,由UML方法和工具支持。迭代的意思是将整个软件开发项目划分为许多个小的“袖珍项目”,每个“袖珍项目”都包含正常软件项目的所有元素:计划、分析和设计、构造、集成和测试,以及内部和外部发布。
统一过程定义了4个技术阶段及其制品。
  1)起始阶段(Inception Phase)
  起始阶段专注于项目的初创活动,产生的主要工作产品有构想文档(Vision Document)、初始用例模型、初始项目术语表、初始业务用例、初始风险评估、项目计划(阶段及迭代)、业务模型以及一个或多个原型(需要时)。
  2)精化阶段(Elaboration Phase)
  精华阶段在理解了最初的领域范围之后进行需求分析和架构演进,产生的主要工作产品有用例模型、补充需求(包括非功能需求)、分析模型、软件体系结构描述、可执行的软件体系结构原型、初步的设计模型、修订的风险列表、项目计划(包括迭代计划、调整的工作流、里程碑和技术工作产品)以及初始用户手册。
  3)构建阶段(Construction Phase)
  构建阶段关注系统的构建,产生实现模型,产生的主要工作产品有设计模型、软件构件、集成的软件增量、测试计划及步骤、测试用例以及支持文档(用户手册、安装手册和对于并发增量的描述)。
  4)移交阶段(Transition Phase)
  移交阶段关注于软件提交方面的工作,产生软件增量,产生的主要工作产品有提交的软件增量、β 测试报告和综合用户反馈。
  每次迭代产生包括最终系统的部分完成的版本和任何相关的项目文档的基线,通过逐步迭代基线之间相互构建,直到完成最终系统。在每个迭代中有5个核心工作流:捕获系统应该做什么的需求工作流,精化和结构化需求的分析工作流,在系统构架内实现需求的设计工作流,构造软件的实现工作流,验证实现是否如期望那样工作的测试工作流。随着UP的阶段进展,每个核心工作流的工作量发生了变化。4个技术阶段由主要里程碑所终止。

  • 初始阶段:生命周期目标。
  • 精化阶段:生命周期架构。
  • 构建阶段:初始运作功能。
  • 移交阶段:产品发布。

  统一过程的典型代表是 RUP(Rational Unified Process)。RUP 是 UP 的商业扩展,完全兼容 UP,但比 UP 更完整、更详细。

 
 

 
 

敏捷方法(Agile Development)

  敏捷开发的总体目标是通过“尽可能早地、持续地对有价值的软件的交付”使客户满意。通过在软件开发过程中加入灵活性,敏捷方法使用户能够在开发周期的后期增加或改变需求。
  敏捷过程的典型方法有很多,每一种方法基于一套原则,这些原则实现了敏捷方法所宣称的理念(敏捷宣言)。
分析
 
 
1.极限编程(XP)
  XP 是一种轻量级(敏捷)、高效、低风险、柔性、可预测的、科学的软件开发方式。它由价值观、原则、实践和行为 4 个部分组成,彼此相互依赖、关联,并通过行为贯穿于整个生存周期。

  • 4 大价值观:沟通、简单性、反馈和勇气。
  • 5 个原则:快速反馈、简单性假设、逐步修改、提倡更改和优质工作。
  • 12 个最佳实践:计划游戏(快速制定计划、随着细节的不断变化而完善)、小型发布(系统的设计要能够尽可能早地交付)、隐喻(找到合适的比喻传达信息)、简单设计(只处理当前的需求,使设计保持简单)、测试先行(先写测试代码,然后再编写程序)、重构(重新审视需求和设计,重新明确地描述它们以符合新的和现有的需求)、结队编程、集体代码所有制、持续集成(可以按日甚至按小时为客户提供可运行的版本)、每周工作 40 个小时、现场客户和编码标准。

2.水晶法(Crystal)
  水晶法认为每一个不同的项目都需要一套不同的策略、约定和方法论,认为人对软件质量有重要的影响,因此随着项目质量和开发人员素质的提高,项目和过程的质量也随之提高。通过更好地交流和经常性的交付,软件生产力得到提高。

3.并列争求法(Scrum)
  并列争求法使用迭代的方法,其中,把每 30 天一次的迭代称为一个“冲刺”,并按需求的优先级别来实现产品。多个自组织和自治的小组并行地递增实现产品。协调是通过简短的日常情况会议来进行,就像橄榄球中的“并列争球”。

4.自适应软件开发(ASD)
  ASD 有 6 个基本的原则:有一个使命作为指导;特征被视为客户价值的关键点;过程中的等待是很重要的,因此“重做”与“做”同样关键;变化不被视为改正,而是被视为对软件开发实际情况的调整;确定的交付时间迫使开发人员认真考虑每一个生产的版本的关键需求;风险也包含其中。

5.敏捷统一过程(AUP)
  敏捷统一过程(Agile Unified Process,AUP)采用“在大型上连续”以及在“在小型上迭代”的原理来构建软件系统。采用经典的UP阶段性活动(初始、精化、构建和转换),提供了一系列活动,能够使团队为软件项目构想出一个全面的过程流。在每个活动里,一个团队迭代使用敏捷,并将有意义的软件增量尽可能快地交付给最终用户。每个 AUP迭代执行以下活动:

  • 建模。建立对商业和问题域的模型表述,这些模型“足够好”即可,以便团队继续前进。
  • 实现。将模型翻译成源代码。
  • 测试。像XP一样,团队设计和执行一系列的测试来发现错误以保证源代码满足需求。
  • 部署。对软件增量的交付以及获取最终用户的反馈。
  • 配置及项目管理。着眼于变更管理、风险管理以及对团队的任一制品的控制。项目管理追踪和控制开发团队的工作进展并协调团队活动。
  • 环境管理。协调标准、工具以及适用于开发团队的支持技术等过程基础设施。

 
 

 
 

题目举例


以下关于敏捷统一过程(AUP)的叙述中,不正确的是()。
  • A. 在大型任务上连续
  • B. 在小型活动上迭代
  • C. 每一个不同的系统都需要一套不同的策略、约定和方法论
  • D. 采用经典的UP阶段性活动,即初始、精化、构建和转换

【试题解析】∶敏捷统一过程(AUP)采用"在大型上连续"以及在"小型上迭代的原理来构建软件系统。采用经典的UP阶段性活动(初始、精化、构建和转换),提供了一系列活动,能够使团队为软件项目构想出一个全面的过程流。在每个活动里,一个团队迭代了使用敏捷,并将有意义的软件增量尽可能快地交付给最终用户。
在每一个不同地系统都需要一套不同地策略、约定和方法论是属于敏捷方法----水晶法的描述。
注意区别这里面是考查敏捷统一过程,而非敏捷方法,两者之间有区别。


以下关于增量模型优点的叙述中,不正确的是()。
  • A. 强调开发阶段性早期计划
  • B. 第一个可交付版本所需要的时间少和成本低
  • C. 开发由增量表示的小系统所承担的风险小
  • D. 系统管理成本低、效率高、配置简单

【试题解析】∶增量模型作为瀑布模型的一个变体,具有瀑布模型的所有优点。此外,它还具有以下优点:第一个可交付版本所需要的成本和时间很少;开发由增量表示的小系统所承担的风险不大:由于很快发布了第一个版本,因此可以减少用户需求的变更:运行增量投资,即在项目开始时,可以仅对一个或两个增量进行投资。
增量模型有以下不足之处:如果没有对用户变更的要求进行规划,那么产生的初始量可能会造成后来增量的不稳定;如果需求不像早期思考的那样稳定和完整,那么一些增量就可能需要重新开发,重新发布;管理发生的成本、进度和配置的复杂性可能会超出组织的能力。


关于螺旋模型,下列陈述中不正确的是(),()。
问题一
  • A. 将风险分析加入到瀑布模型中
  • B. 将开发过程划分为几个螺旋周期,每个螺旋周期大致和瀑布模型相符
  • C. 适合于大规模、复杂且具有高风险的项目
  • D. 可以快速的提供一个初始版本让用户测试
问题二
  • A. 支持用户需求的动态变化
  • B. 要求开发人员具有风险分析能力
  • C. 基于该模型进行软件开发,开发成本低
  • D. 过多的迭代次数可能会增加开发成本,进而延迟提交时间

【试题解析】∶第一空选项中,可以快速提供一个初始版本给用户的是增量模型而不是瀑布模型。D选项描述错误。其他描述都是正确的。
第二空选项中,在螺旋模型中过多的迭代次数会增加开发成本,C选项开发成本低的描述是错误的。其他描述都是正确的。


喷泉模型是一种适合于面向()开发方法的软件过程模型。该过程模型的特点不包括()。
问题一
  • A. 对象
  • B. 数据
  • C. 数据流
  • D. 事件
问题二
  • A. 以用户需求为动力
  • B. 支持软件重用
  • C. 具有迭代性
  • D. 开发活动之间存在明显的界限

【试题解析】∶本题考查软件工程开发模型的特点。
喷泉模型是面向对象的开发模型。特点是:迭代无间隙,以用户需求为动力。所以正确答案为A,D。


敏捷开发方法Scrum的步骤不包括()。
  • A. Product Backlog
  • B. Refactoring
  • C. Sprint Backlog
  • D. Sprint

【试题解析】∶A选项Product Backlog 产品待办事项清单;B选项Refactoring重构,不属于Scrum的步骤;C选项SprintBacklog,Sprint待办事项清单;D选项Sprint,冲刺迭代。


以下关于极限编程(XP)的最佳实践的叙述中,不正确的是()。
  • A. 只处理当前的需求,使设计保持简单
  • B. 编写完程序之后编写测试代码
  • C. 可以按日甚至按小时为客户提供可运行的版本
  • D. 系统最终用户代表应该全程配合XP团队

【试题解析】∶极限编程12个最佳实践:
简单设计(只处理当前的需求,使设计保持简单),A选项正确;
测试先行(先写测试代码,然后再编写程序),B选项错误;
持续集成(可以按日甚至按小时为客户提供可运行的版本),C选项正确;
现场客户(系统最终用户代表应该全程配合XP团队),D选项正确。
其他:
计划游戏(快速制定计划、随着细节的不断变化而完善);
小型发布(系统的设计要能够尽可能早地交付);
隐喻(找到合适的比喻传达信息);
重构(重新审视需求和设计,重新明确地描述它们以符合新的和现有的需求);
结对编程;
集体代码所有制;每周工作40小时;
编码标准。


以下关于系统原型的叙述中,不正确的是()。
  • A. 可以帮助导出系统需求并验证需求的有效性
  • B. 可以用来探索特殊的软件解决方案
  • C. 可以用来指导代码优化
  • D. 可以用来支持用户界面设计

【试题解析】∶1、原型方法适用于用户需求不清、需求经常变化的情况,可以帮助导出系统需求并验证需求的有效性;
2、探索型原型的目的是弄清目标的要求,确定所希望的特性,并探讨多种方案的可行性,可以用来探索特殊的软件解决方案;
3、原型法能够迅速地开发出一个让用户看得见的系统框架,可以用来支持用户界面设计。
原型法不能用来指导代码优化。


以下关于增量模型的叙述中,不正确的是()。
  • A. 容易理解,管理成本低
  • B. 核心的产品往往首先开发,因此经历最充分的“测试”
  • C. 第一个可交付版本所需要的成本低,时间少
  • D. 即使一开始用户需求不清晰,对开发进度和质量也没有影响

【试题解析】∶增量模型又称为渐增模型,也称为有计划的产品改进模型,它从一组给定的需求开始,通过构造一系列可执行中间版本来实施开发活动。第一个版本纳入一部分需求,下一个版本纳入更多的需求,依此类推,直到系统完成。每个中间版本都要执行必需的过程、活动和任务。增量模型是瀑布模型和原型进化模型的综合,它对软件过程的考虑是:在整体上按照瀑布模型的流程实施项目开发,以方便对项目的管理;但在软件的实际创建中,则将软件系统按功能分解为许多增量构件,并以构件为单位逐个地创建与交付,直到全部增量构件创建完毕,并都被集成到系统之中交付用户使用。比较瀑布模型、原型进化模型,增量模型具有非常显著的优越性。但增量模型对软件设计有更高的技术要求,特别是对软件体系结构,要求它具有很的开放性与稳定性,能够顺利地实现构件的集成。增量模型有以下不足之处:如果没有对用户的变更要求进行规划,那么产生的初始增量可能会造成后来增量的不稳定;如果需要不像早期思考的那样稳定和完整,那么一些增量就可能需要重新开发,重新发布;管理发生的成本、进度和配置的复杂性可能会超出组织的能力。一开始需求不清晰,会影响开发的进度,D选项错误。


以下关于极限编程(XP)中结对编程的叙述中,不正确的是()。
  • A. 支持共同代码拥有和共同对系统负责
  • B. 承担了非正式的代码审查过程
  • C. 代码质量更高
  • D. 编码速度更快

【试题解析】∶极限编程是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。它的基础和价值观是交流、朴素、反馈和勇气;即,任何一个软件项目都可以从四个方面入手进行改善:加强交流;从简单做起;寻求反馈;勇于实事求是。XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其他一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。XP就提倡结对编程(Pair Programming),而且代码所有权是归于整个开发队伍。其中的结对编程就是一种对代码的审查过程,XP主要解决代码质量低的问题,编码速度不能改变。


在敏捷过程的开发方法中,()使用了迭代的方法,其中,把每段时间(30天)一次的迭代称为一个冲刺”,并按需求的优先级别来实现产品,多个自组织和自治的小组并行地递增实现产品。
  • A. 极限编程XP
  • B. 水晶法
  • C. 并列争球法
  • D. 自适应软件开发

【试题解析】∶并列争球法使用了迭代的方法,其中,把每段时间(30天)一次的迭代称为一个冲刺”,并按需求的优先级别来实现产品,多个自组织和自治的小组并行地递增实现产品。


以下关于增量开发模型的叙述中,不正确的是()。
  • A. 不必等到整个系统开发完成就可以使用
  • B. 可以使用较早的增量构件作为原型,从而获得稍后的增量构件需求
  • C. 优先级最高的服务先交付,这样最重要的服务接受最多的测试
  • D. 有利于进行好的模块划分

【试题解析】∶增量模型:它采用的是一种"递增式"模型,它将软件产品划分成为一系列的增量构件,分别进行设计、编码、集成和测试。
在利用增量模型进行开发时,如何进行模块的划分往往是难点所在,而不是这种模型的优点。


某开发小组欲开发一个超大规模软件:使用通信卫星,在订阅者中提供、监视和控制移动电话通信,则最不适宜采用()过程模型。
  • A. 瀑布
  • B. 原型
  • C. 螺旋
  • D. 喷泉

【试题解析】∶需要开发的是大型软件系统,大型软件系统的需求往往难以在前期确定,所以瀑布模型最不适合。


在敏捷过程的方法中()认为每一个不同的项目都需要一套不同的策略、约定和方法论。
  • A. 极限编程(XP)
  • B. 水晶法(Crystal)
  • C. 并列争球法(Scrum)
  • D. 自适应软件开发(ASD)

【试题解析】∶敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,常见的敏捷开发方法有极限编程法、水晶法、并列争球法和自适应软件开发方法。
极限编程是一种轻量级的开发方法,它提出了四大价值观:沟通、简单、反馈、勇气。五大原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作
水晶法强调经常交付,认为每一种不同的项目都需要一套不同的策略、约定和方法论。
并列争球法的核心是迭代、增量交付,按照30天进行迭代开发交付可实际运行的软件。
自适应软件开发的核心是三个非线性的,重迭的开发阶段:猜测、合作、学习。


以下关于增量模型的叙述中,正确的是()。
  • A. 需求被清晰定义
  • B. 可以快速构造核心产品
  • C. 每个增量必须要进行风险评估
  • D. 不适宜商业产品的开发

【试题解析】∶增量模型融合了瀑布模型的基本成分(重复应用)和原型实现的迭代特征,该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的"增量”。当使用增量模型时,第1个增量往往是核心的产品,即第1个增量实现了基本的需求,但很多补充的特征还没有发布。客户对每一个增量的使用和评估都作为下一个增量发布的新特征和功能,这个过程在每一个增量发布后不断重复,直到产生了最终的完善产品。由于能够在较短的时间内向用户提交一些有用的工作产品,因此能够解决用户的一些急用功能。由于每次只提交用户部分功能,用户有较充分的时间学习和适应新的产品。
对系统的可维护性是一个极大的提高,因为整个系统是由一个个构件集成在一起的,当需求变更时只变更部分部件,而不必影响整个系统。
增量模型存在以下缺陷:
1)由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。
2)在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而使软件过程的控制失去整体性。
3)如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析,这种模型将功能细化后分别开发的方法较适应于需求经常改变的软件开发过程。


某公司要开发一个软件产品,产品的某些需求是明确的,而某些需求则需要进一步细化。由于市场竞争的压力,产品需要尽快上市,则开发该软件产品最不适合采用()模型。
  • A. 瀑布
  • B. 原型
  • C. 增量
  • D. 螺旋

【试题解析】∶瀑布模型(Waterfall Model)是一个项目开发架构,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好“返回’上一个阶段并进行适当的修改,项目开发进程从一个阶段"流动"到下一个阶段,这也是瀑布模型名称的由来。包括软件工程开发、企业项目开发、产品生产以及市场销售等构造瀑布模型。


以下关于统一过程UP的叙述中,不正确的是()。
  • A. UP是以用例和风险为驱动,以架构为中心,迭代并且增量的开发过程
  • B. UP定义了四个阶段,即起始、精化、构建和确认阶段
  • C. 每次迭代都包含计划、分析、设计、构造、集成、测试以及内部和外部发布
  • D. 每个迭代有五个核心工作流

【试题解析】∶什么是 Rational统一过程( Rational Unified Process) ?
Rational Unified Process是软件工程的过程。它提供了在开发组织中分派任务和责任的纪律化方法。它的目标是在可预见的日程和预算前提下,确保满足最终用户需求的高质量产品。
统一过程模型是一种°用例驱动,以体系结构为核心,迭代及增量"的软件过程框架,由UML方法和工具支持。
RUP把一个项目分为四个不同的阶段:
构思阶段∶包括用户沟通和计划活动两个方面,强调定义和细化用例,并将其作为主要模型。
细化阶段:包括用户沟通和建模活动,重点是创建分析和设计模型,强调类的定义和体系结构的表示。构建阶段︰将设计转化为实现,并进行集成和测试。
移交阶段∶将产品发布给用户进行测试评价,并收集用户的意见,之后再次进行迭代修改产品使之完善。没有确认阶段,因此B选项错误。
每个迭代有五个核心工作流:(1)捕获系统应该做什么的需求工作流;(2)精化和结构化需求的分析工作流;(3)在系统结构内实现需求的设计工作流;(4)构造软件的实习工作流;(5)验证是否如期那样工作的测试工作流。


某开发小组欲开发一个规模较大、需求较明确的项目。开发小组对项目领域熟悉且该项目与小组开发过的某一项目相似,则适宜采用()开发过程模型。
  • A. 瀑布
  • B. 演化
  • C. 螺旋
  • D. 喷泉

【试题解析】∶根据题目的描述,我们不难理解,对于开发小组而言,该项目是需求比较明确的一个项目,在这种情况下,最适合采用瀑布模型来开发。而演化模型适合初始时需求不明确的项目;螺旋模型特别加入了风险分析,适合风险高的大项目;而喷泉模型的特点是迭代和无间隙性,是一种面向对象开发的模型。因此本题答案选A。


假设某软件公司与客户签订合同开发一个软件系统,系统的功能有较清晰的定义,且客户对交付时间有严格要求,则该系统的开发最适宜采用()。
  • A. 瀑布模型
  • B. 原型模型
  • C. V模型
  • D. 螺旋模型

【试题解析】∶瀑布模型严格遵循软件生命周期各阶段的固定顺序:计划、分析、设计、编程、测试和维护,上一阶段完成后才能进入到下一阶段。瀑布模型的优点是:可强迫开发人员采用规范的方法;严格规定了各阶段必须提交的文档;要求每个阶段结束后,都要进行严格的评审。但瀑布模型过于理想化,而且缺乏灵活性,无法在开发过程中逐渐明确用户难以确切表达或一时难以想到的需求。该模型比较适合于需求明确,对交付时间有严格要求的开发。
原型模型基于这样一种客观事实:并非所有的需求在系统开发之前都能准确地说明和定义。因此,它不追求也不可能要求对需求的严格定义,而是采用了动态定义需求的方法。它适用于需求不明确的开发环境。
螺旋模型综合了瀑布模型和演化模型的优点,还增加了风险分析。螺旋模型包含了四个方面的活动:制订计划、风险分析、实施工程、客户评估。采用螺旋模型时,软件开发沿着螺旋线自内向外旋转,每转一圈都要对风险进行识别和分析,并采取相应的对策。螺旋模型比较适合大规模的开发,它对风险控制有很高的要求。
综上所述,要满足题目描述的要求,应该采用瀑布模型开发最适宜。


若全面采用新技术开发一个大学记账系统,以替换原有的系统,则宜选择采用()进行开发。
  • A. 瀑布模型
  • B. 演化模型
  • C. 螺旋模型
  • D. 原型模型

【试题解析】∶瀑布模型严格遵循软件生命周期各阶段的顺序进行软件开发,适用于需求非常明确的的场合,而在本题中,题目告诉我们是用新技术开发一个新系统来替代老系统,属于二次开发,需求应该非常明确,因此适合采用瀑布模型。


统一过程(UP)定义了初启阶段、精化阶段、构建阶段、移交阶段和产生阶段,每个阶段以达到某个里程碑时结束,其中()的里程碑是生命周期架构。
  • A. 初启阶段
  • B. 精化阶段
  • C. 构建阶段
  • D. 移交阶段

【试题解析】∶统一过程(UP)定义了初启阶段、精化阶段、构建阶段、移交阶段和产生阶段,每个阶段达到某个里程碑时结束。其中初启阶段的里程碑是生命周期目标,精化阶段的里程碑是生命周期架构,构建阶段的里程碑是初始运作功能,移交阶段的里程碑是产品发布。


RUP在每个阶段都有主要目标,并在结束时产生一些制品。在()结束时产生"在适当的平台上集成的软件产品”。
  • A. 初启阶段
  • B. 精化阶段
  • C. 构建阶段
  • D. 移交阶段

【试题解析】∶初启阶段结束时产生一个构想文档、一个有关用例模型的调查、一个初始的业务用例、一个早期的风险评估和一个可以显示阶段和迭代的项目计划等制品;精化阶段结束时产生一个补充需求分析、一个软件架构描述和一个可执行的架构原型等制品;构建阶段结束时的成果是一个准备交到最终用户手中的产品,包括具有最初运作能力的在适当的平台上集成的软件产品、用户手册和对当前版本的描述;移交阶段结束时产生移交给用户产品发布版本。


在采用面向对象技术构建软件系统时,很多敏捷方法都建议的一种重要的设计活动是(),它是一种重新组织的技术,可以简化构件的设计而无需改变其功能或行为。
  • A. 精化
  • B. 设计类
  • C. 重构
  • D. 抽象

【试题解析】∶本题考查采用敏捷方法进行软件开发。敏捷方法中,重构是一种重新组织技术,重新审视需求和设计,重新明确地描述它们以符合新的和现有的需求,可以简化构件的设计而无需改变其功能或行为。


极限编程(XP)由价值观、原则、实践和行为四个部分组成,其中价值观包括沟通、简单性、()。
  • A. 好的计划
  • B. 不断的发布
  • C. 反馈和勇气
  • D. 持续集成

【试题解析】∶极限编程(XP)是敏捷开发的典型方法之一,是一种轻量级(敏捷)、高效、低风险、柔性、可预测的、科学的软件开发方法,它由价值观、原则、实践和行为4个部分组成。其中4大价值观为沟通、简单性、反馈和勇气。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43448856/article/details/124759161

智能推荐

MATLAB采用双坐标轴同时绘制柱状图和折线图_柱状图和折线图的双y轴图matlab-程序员宅基地

文章浏览阅读1.4w次,点赞5次,收藏47次。利用MATLAB同时绘制柱状图和折线图,其中柱状图表示温度,折线图表示颗粒物浓度,左侧y轴表示温度(单位摄氏度),右侧y轴表示颗粒物浓度(个/每立方米)。MATLABplotyy方法/步骤第一,以某地区一周的温度和空气中颗粒物浓度为例,一周(7天)的温度分别为35,33,31,30,28,26,27摄氏度,颗粒物浓度分别为550,515,450,375,215,150,195个/立方米。下面利用M..._柱状图和折线图的双y轴图matlab

线程池技术总结-程序员宅基地

文章浏览阅读1k次,点赞22次,收藏22次。1. 线程池解决了什么问题线程池是集中管理线程的,以实现线程的重用,降低资源消耗,提高响应速度,提高线程的可管理性等。线程用于执行异步任务,单个的线程既是工作单元也是执行机制,从JDK1.5开始,为了把工作单元与执行机制分离开,Executor框架诞生了,他是一个用于统一创建与运行的接口。Executor框架实现的就是线程池的功能。使用线程池可以进行统一的分配,调优和监控。使用线程池的优势降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。

Win10应用商店、应用打不开或闪退的解决方法_$manifest = (get-appxpackage microsoft.windowsstor-程序员宅基地

文章浏览阅读2w次。  越来越多小伙伴都将系统升级成Win10正式版了,win10功能强大令不少朋友感到非常满意,但也有一些朋友升级后却遇到了一些问题,比如应用商店、应用打不开或闪退的问题,今天快启动小编就跟大家介绍Win10应用商店、应用打不开或闪退的解决方法。  1、点击任务栏的搜索(Cortana小娜)图标,输入Powershell,在搜索结果中右键单击Powershell,选择“以管理员身份运行”。    2..._$manifest = (get-appxpackage microsoft.windowsstore).installlocation + 鈥榎ap

mysql无法成功启动服务的解决办法【通俗易懂】_mysql服务无法启动-程序员宅基地

文章浏览阅读5.3w次,点赞88次,收藏451次。第一次执行的话,时间会久一些,执行结束后没有输出信息,查看bin的同级目录下会多出一个data文件夹,里面一堆文件。,本人尝试手动创建会有问题,如果自己创建了可以删除掉,再执行后面的操作。则自己手动创建一个,一定不要自己手动创建。_mysql服务无法启动

安装配置Ubuntu-22.04于WSL2的图形化界面_ubuntu22.04安装图形界面-程序员宅基地

文章浏览阅读4.3k次,点赞8次,收藏21次。记录一次安装配置Ubuntu-22.04于WSL2的图形化界面。_ubuntu22.04安装图形界面

#include<> 和 #include""的区别-程序员宅基地

文章浏览阅读6.1w次,点赞30次,收藏82次。#include< file >编译程序会先到标准函数库中找文件 #include”file” 编译程序会先从当前目录中找文件参考原文 转: 在C程序中包含文件有以下两种方法: (1)用符号“<”和“>”将要包含的文件的文件名括起来。这种方法指示预处理程序到预定义的缺省路径下寻找文件。预定义的缺省路径通常是在INCLUDE环境变量中指定的,请看下例: INCLUDE=C:\C_#include

随便推点

Python | 使用Flask搭建一个API服务器_python mvc搭建api接口项目-程序员宅基地

文章浏览阅读2.5k次,点赞5次,收藏19次。一、API列表1. 获取作品列表① 获取手工制作作品列表。请求格式:http://api.mculover666.cn:9999/twkk/list/hand_made返回结果:{ goods_num: 3, goods_item: [ { goods_id: 1, goods_name: "goods1", goods_img_url: "xxx" }, { goods_id: 2, goods_name: "goods1", goods__python mvc搭建api接口项目

对自己深度学习方向的论文有idea,可是工程实践能力跟不上,实验搞不定怎么办?...-程序员宅基地

文章浏览阅读633次。每天给你送来NLP技术干货!作者丨Giant、叶小飞来源丨知乎问答编辑丨极市平台原问题背景:本人7月份才接触现在的课题,看了将近40多篇相关英文文献了吧,有了几个idea,开组会,老板们也..._导师让投会议论文了,但是实验代码还跑不通呢怎么办

基于 Matlab 的数字水印技术_matlab 图像水印嵌入与检测-程序员宅基地

文章浏览阅读889次,点赞15次,收藏23次。对一幅未知的图片,我们要对其进行判断是否含有水印,则需要先从该图像中提取 水印,若存在水印,则提取的水印是基于混沌序列加密过的,用该提取的水印与生成的。[10]李振,基于混沌序列算法的计算机图像加密技术的研究[D],沈阳:沈阳工业大学,20。[9]文志强,李陶深,张增芳.一种新的基于混沌序列的图像加密技术.计算机工程,20。于多媒体信息的传播,另一方面是攻击者容易注意到被加密过的多媒体信息,并进一步。去破解加密过的多媒体信息。志信息,或购买者的序列号,这样有利于解决版权纠纷,保护数字产权合法拥有者的利。_matlab 图像水印嵌入与检测

C++ 虚方法_c++虚方法-程序员宅基地

文章浏览阅读1k次。学习笔记:C++ 虚方法/虚函数_c++虚方法

云计算的基础知识_云计算基础知识-程序员宅基地

文章浏览阅读1.6k次。本文主要介绍了传统架构的痛点,云计算的概念,云服务的概念,云计算的特点等。_云计算基础知识

基于cifar10数据集CNN卷积网络的实现_cifar-10 cnn-程序员宅基地

文章浏览阅读4.8k次。Cifar-10数据集是深度学习领域一个常见的数据集。Cifar-10由60000张32*32的RGB彩色图片构成,一共包含有飞机、汽车、鸟、毛、鹿、狗、青蛙、马、船、卡车这10个类别。50000张训练,10000张测试。常被用来作为分类任务来评价深度学习框架和模型的优劣。本教程采用CNN16层神经网络训练_cifar-10 cnn

推荐文章

热门文章

相关标签