购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2论文试题

从2004年到2013年的系统分析师考试中,共有5道论文试题和软件开发方法有关。要解答好这类试题,需要考生具有较丰富的实践经验,熟练掌握各种开发方法的优点、缺点和适合场合,以及主流方法的开发过程。

1.2.1论迭代式软件开发过程与方法

这是2007年下半年的考试试题,主要考查统一软件开发过程和敏捷方法的实施过程,以及各自的适用场合。

一、试题描述

软件项目的成功实施,离不开有效的软件开发过程与开发方法。相对于传统的瀑布型软件开发过程,迭代式软件开发过程可以在需求被完整确定之前启动,并在一次迭代中完成系统的一部分功能或业务逻辑的开发,再通过客户的反馈来细化需求,并开始新一轮的迭代。这种方法可以控制项目的风险,提高软件开发的成功率和生产率。目前,主要的迭代式开发过程和方法包括统一开发过程(RUP)和敏捷开发方法。

请围绕“迭代式软件开发过程与方法”论题,依次从以下三个方面进行论述:

1.概要叙述你参与管理和开发的软件项目以及你在其中所担任的主要工作。

2.论述迭代式过程模型相对于瀑布式过程模型的优点,详细论述RUP的生命周期模型和迭代策略;或者论述敏捷开发方法的特点和适用的情况,并列出目前主要的敏捷开发技术中的四种。

3.具体阐述你参与管理和开发的项目中选择使用迭代式软件开发方法的情况,以及具体实施的过程与实际开发效果。

二、写作要点

本题涉及迭代式过程模型相对于瀑布式过程模型的优点、RUP生命周期模型和迭代策略、敏捷开发方法的特点和适用的情况,以及目前主要的敏捷开发技术。

1.迭代式过程模型与瀑布模型的比较

软件开发模型大体上可分为三种类型。第一种是以软件需求完全确定为前提的瀑布模型;第二种是在软件开发初始阶段只能提供基本需求时采用的迭代式或渐进式开发模型,例如,喷泉模型、螺旋模型、统一开发过程和敏捷方法等;第三种是以形式化开发方法为基础的变换模型。

瀑布模型也称为软件开发生命周期(Software Development Life Cycle,SDLC)模型。在最早的时候,软件的开发过程处于无序和混乱的情况,人们为了能够控制软件的开发过程,就将软件开发严格区分为多个不同的阶段,并在阶段之间加上严格的审查,这就是瀑布模型产生的起因。

瀑布模型是一种严格定义方法,它将软件开发的过程分为软件计划、需求分析、软件设计、程序编码、软件测试和运行维护6个阶段,形如瀑布流水,最终得到软件产品,如图1-3所示。

图1-3瀑布模型

瀑布模型是一个线性顺序模型,支持直线开发。它假设当线性序列完成之后就能交付一个完善的系统,并没有考虑软件的演化特征。其优点是强调开发的阶段性、早期计划及需求调查和产品测试,以这样严格的方式构造软件,开发人员很清楚每一步应该做什么,有利于项目管理。

根据以上分析可以知道,瀑布模型存在以下主要缺点。

(1)依赖于早期进行的需求调查,不能适应需求的变化。

(2)由于是单一流程,开发中的经验教训不能反馈应用于本产品的过程。

(3)风险往往迟至后期的开发阶段才显露出来,从而失去了及早纠正的机会。

(4)需求或设计中的错误往往只有到了项目后期才能够被发现。

(5)对于项目风险的控制能力较弱。

(6)软件项目常常延期完成或开发费用超出预算。

(7)项目管理人员专注于文档的完成和审核来估计项目的进展情况。

与瀑布模型相比,迭代式过程模型具有允许变更需求、逐步集成元素、尽早降低风险、有助于提高团队的士气、生成更高质量的产品、保证项目开发进度等优点。

2.RUP生命周期模型和迭代策略

RUP(Rational Unified Process)是 Rational 公司开发和维护的过程产品,是由Objectory过程演化而来。RUP将项目管理、业务建模、分析与设计等统一起来,贯穿整个开发过程。RUP采用Internet技术,可以增强团队的开发效率,并为所有成员提供最佳的软件实现方案,它使团队中每个开发人员的见解和思想得到统一,使开发小组成员的沟通更为容易,而这正是任何项目要取得成功的关键因素。RUP可以增强开发人员对软件的预见性,最终的好处就是提高了软件质量,并有效缩短了软件从开发到投放市场的时间。RUP过程为软件开发提供了规范性的指南、模板和范例,可用来开发所有类型的应用。

RUP中的软件过程在时间上被分解为四个顺序的阶段,分别是初始阶段、细化阶段、构建阶段和移交阶段。每个阶段结束时都要安排一次技术评审,以确定这个阶段的目标是否已经满足。如果评审结果令人满意,就可以允许项目进入下一个阶段。基于RUP的软件过程模型如图1-4所示。

图1-4基于RUP的软件过程

从图1-4中可以看出,基于RUP的软件过程是一个迭代过程。通过初始、细化、构建和移交四个阶段就是一个开发周期,每次经过这四个阶段就会产生一代软件。除非产品退役,否则通过重复同样的四个阶段,产品将演化为下一代产品,但每一次的侧重点都将放在不同的阶段上。

用户需求的变化、运行环境的变更、基础技术方面的变更等都会引发演化过程。通常情况下,演化过程的初始阶段和细化阶段都比较简单,因为基本产品定义和架构在前面的开发过程中就已经决定。但也有例外情况,例如,对软件架构进行重新定义的演化过程。

(1)初始阶段

初始阶段的任务是为系统建立业务模型并确定项目的边界。在初始阶段,必须识别所有与系统交互的外部实体,定义系统与外部实体交互的特性。在这个阶段中,所关注的是整个项目的业务和需求方面的主要风险。对于建立在原有系统基础上的开发项目来说,初始阶段可能很短。初始阶段的实现过程如下。

·明确项目规模。建立项目的软件规模和边界条件,包括验收标准;了解环境及重要的需求和约束,识别系统的关键用例。

·评估项目风险。软件过程主要关心的是软件开发的已知方面,只能准确描述、计划、分配和评审那些已经知道将要完成的事情。风险管理则主要关心未知方面。在基于RUP的迭代式软件过程中,很多决策要受风险决定。要达到这个目的,开发人员需要详细了解项目所面临的风险,并对如何降低或处理风险有明确的策略。

·制订项目计划。估计整个项目的总体成本、进度和人员配备。综合考虑备选架构,评估设计和自制/外购/复用方面的方案,从而估算出成本、进度和资源。在这个过程中,要通过对一些概念的证实来证明可行性,可以采用可模拟需求的模型形式或用于探索高风险区的初始原型。初始阶段的原型设计工作应该限制在确信解决方案可行就可以了,具体实现留到细化阶段和构建阶段。

·阶段技术评审。初始阶段结束时要进行一次技术评审,检查初始阶段的目标是否完成,并决定继续进行项目还是取消项目。在评审过程中,需要考虑项目的规模定义、成本和进度估算是否适中、估算根据是否可靠、需求是否正确、开发方和用户方对软件需求的理解是否达成一致、是否已经确定所有风险且有针对每个风险的规避策略等问题。

(2)细化阶段

细化阶段的任务是分析问题领域,建立完善的架构,淘汰项目中最高风险的元素。在细化阶段,必须在理解整个系统的基础上,对架构做出决策,包括其范围、主要功能和诸如性能等非功能需求,同时为项目建立支持环境。细化阶段的实现过程如下。

·确定架构。确保架构、需求和计划足够稳定,充分减少风险,从而能够有预见性地确定开发所需的成本和开发进度。通过处理架构方面重要的场景,建立一个已确定基线的架构,并验证其将在适当时间、以合理的成本支持系统需求。

·制订构建阶段计划。为构建阶段制订详细的过程计划并为其建立基线。

·建立支持环境。包括开发环境、开发流程、支持构建团队所需的工具和自动化/半自动化支持。

·选择构件。评估现有的构件库和潜在构件,充分了解自制/外购/复用决策,以便有把握地确定构建阶段的成本和进度。集成所选构件,并按主要场景进行评估。

·阶段技术评审。评审时,需要检验详细的系统目标和范围、架构的选择,以及主要风险的解决方案。

在细化阶段,可执行的原型依赖于项目的范围、规模、风险和先进程度。必须至少处理初始阶段中识别的关键用例,因为关键用例通常揭示了项目的主要技术风险。

(3)构建阶段

在构建阶段,要开发所有剩余的构件和应用程序功能,把这些构件集成为产品,并进行详细测试。从某种意义上说,构建阶段是一个制造过程,其重点放在管理资源及控制操作,以优化成本、进度和质量。构建阶段的主要任务是通过优化资源和避免不必要的报废和返工,使开发成本降到最低;完成所有所需功能的分析、开发和测试,快速完成可用的版本;确定软件、场地和用户是否已经为部署软件做好准备。

在构建阶段,开发团队的工作可以实现某种程度的并行。一些项目的规模大得足够产生许多并行的增量构建过程,即使是较小的项目,也通常包括可以相互独立开发的构件,从而使各团队之间实现并行开发。这些并行活动在加速版本发布的有效性的同时,也增加了资源管理和工作流同步的复杂性。

构建阶段结束时也要进行技术评审,评审产品是否可以在β测试环境中进行安装和运行。

(4)移交阶段

当基线已经足够完善,可以安装到最终用户实际环境中时,则进入交付阶段。交付阶段的重点是确保软件对最终用户是可用的。交付阶段的主要任务是进行β测试,制作产品发布版本;对最终用户支持文档定稿;按用户的需求确认新系统;培训用户和维护人员;获得用户对当前版本的反馈,基于反馈调整产品,例如,进行调试、性能或可用性的增强等。

交付阶段结束时也要进行技术评审,评审目标是否实现,是否应该开始演化过程,用户对交付的产品是否满意等。

关于迭代计划的安排,通常有以下四种典型的策略模式。

(1)增量式(incremental)。这种模式的特点是项目架构的风险较小(往往是开发一些重复性的项目),所以精化阶段只需要一个迭代。但项目的开发工作量较大,构建阶段需要由多次迭代来实现,每次迭代都在上一次迭代的基础上增加实现一部分的系统功能。

(2)演进式(evolutionary)。当项目架构的风险较大时(从未开发过类似项目),需要在精化阶段通过多次迭代来建立系统的体系结构,体系结构是通过多次迭代的探索,逐步演化而来的。当体系结构建立时,往往系统的功能也已经基本实现,所以构建阶段只需要一次迭代。

(3)增量提交(incremental delivery)。这种模式的特点是产品化阶段的迭代较多,比较常见的例子是项目的难度并不大,但业务需求在不断地发生变化,所以需要通过迭代来不断地部署完成的系统;但同时又要不断地收集用户的反馈来完善系统需求,并通过后续的迭代来补充实现这些需求。

(4)单次迭代(grand design)。传统的瀑布模型可以看做是迭代化开发的一个特例,整个开发流程只有一次迭代。但这种模式有一个固有的弱点,由于它对风险的控制能力较差,往往会在产品化阶段产生一些额外的迭代,造成项目的延误。

RUP由于太过于庞大和复杂,相对于轻量级的敏捷方法来说,显得死板和难以实施。RUP不但不能快速适应需求的变化,而且变更一个需求要经历复杂的过程和很多额外的工作。对于较小的组织和项目来说,使用敏捷方法可能比较合适,而使用RUP似乎有些费力不讨好。

3.敏捷开发方法的特点和适用的情况

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目成果都经过测试,具备集成和可运行的特征。敏捷开发技术具有以下特点。

(1)个体和交互胜过过程和工具。

(2)可以工作的软件胜过面面俱到的文档。

(3)客户合作胜过合同谈判。

(4)响应变化胜过遵循计划。

与RUP方法相比,敏捷方法的周期可能更短,敏捷方法则在几周或者几个月的时间内完成相对较小的功能,强调的是能将尽早将尽量小的可用的功能交付使用,并在整个项目周期中持续改善和增强。并且更加强调队伍中的高度协作。敏捷开发技术的适用情况如下。

(1)项目团队的人数不能太多。适合于规模较小的项目。

(2)项目经常发生变更。敏捷方法适用于需求萌动并且快速改变的情况,如果系统有比较高的关键性、可靠性、安全性方面的要求,则可能不完全适合。

(3)高风险的项目实施。

(4)从组织结构的角度看,组织结构的文化、人员、沟通性决定了敏捷方法是否适用。跟这些相关联的关键成功因素有:组织文化必须支持谈判、人员彼此信任、人少但是精干、开发人员所作决定得到认可、环境设施满足成员间快速沟通之需要。

4.主要的敏捷开发技术

目前,主要的敏捷开发技术有以下几个。

(1)极限编程(eXtreme Programming,XP)。

(2)自适应软件开发(Adaptive Software Development,ASD)。

(3)水晶方法(Crystal)。

(4)特性驱动开发(Feature Driven Development,FDD)。

(5)动态系统开发方法(Dynamic Systems Development Method,DSDM)。

(6)测试驱动开发(Test-Driven Development,TDD)。

(7)敏捷数据库技术(Agile Database Techniques,ADT)。

(8)精益软件开发(Lean Software Development,LSD)。

虽然这些过程模型在实践上有差异,但都是遵循了敏捷宣言或者是敏捷联盟所定义的基本原则。这些原则包括客户参与、增量式移交、简单性、接受变更、强调开发人员的作用和及时反馈等。

1.2.2论敏捷开发方法的应用

这是2008年下半年的考试试题,主要考查敏捷方法的主要技术,以及敏捷方法的一些基本原则。

一、试题描述

敏捷软件开发简称敏捷开发,是从20世纪90年代开始逐渐引起广泛关注的一些新型软件开发方法,以应对快速变化的需求。它们的具体名称、理念、过程、术语都不尽相同,相对于“非敏捷”,它们更强调程序员团队与业务专家之间的紧密协作、面对面沟通、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重人的作用。

敏捷开发的发展过程中,出现了多个不同的流派,例如极限编程、自适应软件开发、水晶方法、特性驱动开发等。但其中的基本原则是一致的。从开发者的角度,主要的关注点有短平快会议(stand up)、小版本发布(frequent release)、较少的文档(minimal documentation)、合作为重(collaborative focus)、客户直接参与 (customer engagement)、自动化测试 (automated testing)、 适应性计划调整 (adaptive planning)和结对编程 (pair programming);从管理者的角度,主要的关注点有测试驱动开发(test-driven development)、持续集成(continuous integration)和重构(refactori ng)。

请围绕“敏捷开发方法的应用”论题,依次从以下三个方面进行论述。

1.概要叙述你参与管理和开发的软件项目以及你在其中担任的主要工作,包括角色、工作内容等。

2.对开发者关注点中至少三项内容进行解释;结合自己所参与项目,对使用情况予以评价。

3.联系你所参与项目的实际情况,分析并讨论测试驱动开发的使用效果,并评价其优缺点。

二、写作要点

对于敏捷方法,从开发者的角度,主要的关注点有以下几个方面。

(1)短平快的会议。项目组每天召开的简短会议,每个人回答如下问题:你昨天做了什么?你今天做什么?你遇到了什么困难?短平快的会议促进团队交流,彼此相互熟悉工作内容。

(2)小版本发布。尽量多的产品发布,一般以周、月为单位。这样,客户每隔一段时间就会拿到发布的产品进行试用,而项目组可以从客户那得到更多的反馈来改进产品。正因为发布频繁,每一个版本新增的功能简单,不需要复杂的设计,这样文档和设计就在很大程度上简化了。又因为简单设计,没有复杂的体系结构,所以客户有新的需求或者需求进行变动,也能很快地适应。往往需要工具软件的支持。

(3)较少的文档。与传统开发方法相比,不要求撰写大量文档,而是强调测试文档的重要性。敏捷开发中存在大量的测试文档。敏捷开发认为,测试文档最大程度上保持了与代码的一致性。

(4)合作为重。表现为代码共享。在敏捷开发中,代码是归团队所有而不是属于某些人,每个人都有权利获得系统任何一部分的代码然后修改它。这样每个人都能熟悉系统的代码,即使团队的人员变动,也没有风险。

(5)客户直接参与。敏捷开发中,客户是与开发团队一起工作的,团队到客户现场进行开发或者邀请客户到团队公司里来开发。

(6)自动化测试。为了减少人力或者重复劳动,所有的测试包括单元测试、功能测试或集成测试等都是自动化的,这对QA人员提出了更高的要求。

(7)适应性计划调整。敏捷开发中计划是可调整的,可以多次迭代,小版本发布,根据客户反馈随时做出相应的调整和变化。

(8)结对编程。在程序实现和编写测试代码时,采取两人共用一台计算机的方式进行,两人频繁讨论并互相监督。

另外,驱动开发是敏捷开发中的一项重要内容,要求需求分析后,首先编写测试代码。而功能开发的依据只能是测试代码,目的是在测试代码真实反映用户需求的前提下,功能开发完全满足测试要求即可。测试驱动开发在软件业内争论激烈,反对者提出测试驱动开发过于片面,很容易忽略某些需求中潜在的内容,因此发展出特征驱动开发(Feature-DrivenDevelopment,FDD)和行为驱动开发(Behavior-Driven Development,BDD)等。

1.2.3论快速应用开发在系统建模中的应用

这是2010年上半年的考试试题,主要考查快速应用开发阶段的划分、各阶段的主要任务,以及快速应用开发的优点与缺点。

一、试题描述

RAD是一个增量型的软件开发过程模型,强调极短的开发周期。该模型是瀑布模型的一个“高速”变种,通过大量使用可复用构件,采用基于构件的建造方法加速信息系统的开发过程。如果能够及时与用户进行交流和沟通,正确地理解需求并约束项目的范围,利用这种模型可以很快创建出功能完善的信息系统。RAD依赖于广泛的用户参与、联合应用设计会议、原型化方法、集成的CASE工具和代码生成器。

请围绕“快速应用开发在系统建模中的应用”论题,依次从以下三个方面进行论述。

1.概要叙述你参与分析和开发的信息系统项目以及你所担任的主要工作。

2.简要分析快速应用开发方法的生命周期,并给出各个阶段的主要任务。

3.分析快速应用开发方法的目标,并结合实际项目的实施结果讨论快速应用开发与传统的结构化开发方法相比有哪些优点和缺点。

二、写作要点

RAD是一个完整的方法,其生命周期包含需求、设计、构建和验收四个阶段,这四个阶段与传统的软件开发生命周期各阶段相对应。

需求阶段结合了软件开发生命周期的系统规划和系统分析阶段。用户、经理和技术人员通过讨论对业务需求、项目范围、约束条件和系统需求达成一致意见。当团队成员对关键问题达成一致意见,并获得管理部门继续进行的授权时,需求阶段结束。

在设计阶段,用户与系统分析师互相交流,并创建模型(或原型)来描述所有的系统过程、输入和输出。RAD团队(或项目组)通过结合使用联合应用开发技术和CASE工具,从而将用户需求转变成工作模型。用户设计是一个连续的、相互影响的过程,帮助用户理解、修改并最终通过满足他们需求的系统工作模型。

构建阶段强调程序和应用开发任务,类似于软件开发生命周期。所不同的是,在RAD中,用户一直参与其中,并且在实际界面或报表开发出来以后仍然可以提出修改建议。

验收阶段类似于传统的软件开发生命周期的实施阶段的最终任务,包括数据转换、测试、转变为新系统,以及用户培训。和传统的方法相比,整个过程是被压缩的。这样,新系统就更快地被创建、交付和投入使用。

有关RAD的优点和缺点,请参考1.1.4节的分析。

1.2.4论模型驱动的软件开发方法及其应用

这是2011年上半年的考试试题,主要考查模型驱动的软件开发过程与传统的软件开发过程的区别。

一、试题描述

模型驱动架构(Model Driven rchitecture,MDA)是对象管理组织(OMG)提出的一种新的软件开发方法,它强调由软件系统的建模行为驱动整个系统的开发过程,来完成系统的需求分析、架构设计、构建、测试、部署和运行维护等工作。与传统的UML 模型相比,MDA能够创建出机器可读和高度抽象的模型,这种模型通过转换(Transformation)技术可自动转换为代码、测试脚本、数据库定义以及各种平台的部署描述。通过使用MDA技术,可以有效解决传统软件开发过程中的生产效率问题、系统移植问题、互操作问题以及文档和系统后期维护问题。

请围绕“模型驱动的软件开发方法及其应用”论题,依次从以下三个方面进行论述。

1.概要叙述你参与实施的模型驱动的软件开发项目以及你所担任的主要工作。

2.阐述模型驱动的软件开发过程中的主要活动,并论述模型驱动的软件开发过程与传统的软件开发过程的区别。

3.阐述在进行模型驱动的软件开发时遇到了哪些问题,如何解决。

二、写作要点

MDA是由不同层次模型与模型之间的映射技术所构成的一个体系结构,它以UML(Unified Modeling Language,统一建模语言)模型为基础,从具体实现技术更高的抽象层次上构建系统,增强系统的灵活性和健壮性。MDA的基本思想是“一切都是模型”,主要思想是分离业务功能和实现技术与平台之间的紧耦合关系,从而将技术与平台变化对系统的影响降低到最低程度。MDA主要关注的是在抽象的不同层次上模型的定义和转换,强调整个系统开发过程由对软件系统的建模行为驱动,完成需求分析、架构设计、构建、测试、部署和运维工作。

1.MDA的模型

MDA 定义了计算独立模型(Computation Independent Model,CIM)、平台独立模型(Platform Independent Model,PIM)和平台相关模型(Platform Specific Model,PSM)。

(1)CIM模型。CIM 对应业务模型和用例模型,是一个抽象层次较高、独立于任何实现技术的系统概念模型,它着眼于操作环境中的系统以及系统需求的描述,而不关心系统本身的结构和功能实现细节。

(2)PIM模型。PIM是与平台无关的分析模型,主要以静态图(类图及关联)为主。PIM模型处于中间抽象层次,关注系统的整个架构实现,但却忽略掉与平台相关的部分。PIM可以转换成多个PSM。

(3)PSM 模型。PSM 是与平台相关的设计模型,包含业务模型具体平台的特定实现技术。例如,按照功能可进一步分为关系PSM、构件PSM、界面PSM,分别由不同的平台加以实现。

2.模型驱动的软件开发过程

模型驱动的软件开发过程中的主要活动如下。

(1)需求分析人员根据领域需求得到描述软件系统外部特征的CIM。

(2)在对CIM进行分析的基础上得到PIM,并根据业务逻辑进一步细化PIM。

(3)进行PIM到PSM的模型转换。

(4)将每个PSM转换为实现特定模型(Implement Specific Model,ISM),生成应用程序代码,并进行测试。

3.与传统的软件开发过程的比较

与传统的软件开发过程相比,模型驱动的软件开发方法有5个主要区别:

(1)自动实现模型变换。在传统的开发过程中,模型到模型的变换,或模型到代码的变换都是手工完成的;而在模型驱动的开发过程中,模型变换都是由相关工具自动完成的,PIM到PSM、PSM到ISM都可以自动转换实现。

(2)模型是开发产品,也是程序生成的基础设施。在模型驱动的开发过程中,模型是软件开发生命周期中的核心产品,通过一系列转换最终可以自动生成执行代码,是产生执行代码的基础设施。而在传统的开发过程中,模型只是分析人员、设计人员进行分析与交流的文档与图标,不能生成可用的应用程序代码。

(3)模型变换过程与代码生成过程同步,可维护强。在模型驱动的开发过程中,执行代码是由模型通过转换直接生成,保证了模型与代码的同步。开发人员维护系统的重心不再是传统开发方法中的程序代码,而是与业务逻辑相关、与技术平台无关的PIM。

(4)业务逻辑模型与实现技术平台分离。需求分析阶段生成的PIM与开发技术、开发平台、实现技术无关,并且PIM可以根据不同的技术平台自动生成以模型为基础的、适用于不同技术平台的软件系统。

(5)提高了开发效率与软件质量。模型驱动开发的模型架构代表了对系统不同层次的抽象,使得开发人员更加清晰地了解系统的整个架构,而不会被具体的实现技术所困扰。开发人员专注于根据系统业务逻辑构建PIM,通过代码生成技术自动生成实现代码,减少了由于人为因素导致的系统实现错误。

4. 可能存在的问题

在进行模型驱动的软件开发时可能存在的问题如下。

(1)如何对CIM和PIM进行建模。

(2)如何进行模型之间的转换,特别是PIM到PSM的转换。

(3)如何根据需求进行实现平台选择。

(4)如何根据PSM生成ISM(代码)。

(5)如何进行系统测试。

1.2.5论敏捷开发在企业软件开发中的应用

这是2012年上半年的考试试题,主要考查敏捷开发的应用,以及应用过程中需要注意的基本原则。

一、试题描述

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。尽管目前敏捷开发的具体名称、理念、过程、术语尚不尽相同,但业界普遍认为:相对于“非敏捷”,敏捷开发更强调程序员团队与业务专家之间的紧密协作、面对面地沟通、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发中人的作用。

请围绕“敏捷开发在企业软件开发中的应用”论题,依次从以下三个方面进行论述。

1.概要叙述你参与实施的应用敏捷开发的软件项目以及你所担任的主要工作。

2.叙述你在软件项目实践过程中采用了怎样的敏捷开发基本原则并说明理由。

3.具体阐述该项目采用的敏捷开发方法,以及实施过程中存在问题和解决方法。

二、写作要点

1.概要叙述你参与实施的应用敏捷开发的企业项目以及你所担任的主要工作。

2.叙述你在该企业项目实践过程中采用的敏捷开发基本原则并说明理由。

2001年2月的“敏捷宣言”(Agile Manifesto)是由多位当时称之为“轻量级方法学家”所编写签署的,他们的价值观是:个人与交互重于开发过程与工具;可用的软件重于复杂的文档;寻求客户的合作重于对合同的谈判;对变化的响应重于始终遵循固定的计划。

(1)个人与交互重于开发过程与工具:一个由优秀的人员组成但使用普通的工具,要比使用优秀的工具但由普通人组成、紊乱的小组做得更好。多年来人们花了很多时间试图建立一种过程,以便把人当做机器上的一个可以替代的齿轮,但结果却并不成功。敏捷过程是承认每个人都有特定的能力(以及缺点)对之加以利用,而不是把所有的人当成一样来看待。更重要的是,在这样的理念下,几个项目做下来,每个人的能力都从中得以提高。这种人的能力的提高,对公司是无价之宝;而不至于把人当成齿轮,随着时间的推移,人的能力慢慢被消耗掉,最后变成留之无用、弃之可惜的尴尬人物。

(2)可用的软件重于复杂的文档:可用的软件可以帮助开发人员在每次迭代结束的时候,获得一个稳定的、逐渐增强的版本。从而允许项目尽早开始,并且更为频繁地收集对产品和开发过程的反馈。随着每次迭代完成软件的增长,以保证开发小组始终是处理最有价值的功能,而且这些功能可以满足用户的期待。

(3)寻求客户的合作重于对合同的谈判的原因:敏捷开发小组希望与项目有关的所有团体都在朝共同方向努力,合同谈判有时会在一开始就使小组和客户处于争执中。敏捷开发追求的是要么大家一起赢,要么大家一起输。换句话说,就是希望开发小组和客户在面对项目的时候,以一种合作的态度共同向目标前进。当然,合同是必需的,但是如何起草条款,往往影响到不同的团体是进行合作式的还是对抗式的努力。

(4)对变化的响应重于始终遵循固定的计划:敏捷开发认为对变化进行响应的价值重于始终遵循固定的计划。他们最终的焦点是向用户交付尽可能多的价值。除了最简单的项目以外,用户不可能知道他们所需要的所有功能的每个细节。不可避免地在过程中会产生新的想法,也许今天看起来是必需的功能,明天就会觉得不那么重要了。随着小组获得更多的知识和经验,他们的进展速度会比开始的时候期望值慢或者快。对敏捷开发来说,一个计划是从某个角度对未来的看法,而具有多个不同的角度看问题是有可能的。

(针对所承担项目的具体问题和特点,围绕敏捷开发基本原则的1项或多项进行论述均可)

3.具体阐述该企业采用的具体敏捷开发方法,以及实施的效果。

常见的敏捷开发方法有极限编程、Scrum、水晶敏捷方法等。

极限编程是敏捷软件开发中最富有成效的几种方法学之一,是敏捷过程的一种具体形式,提供敏捷方法最一般原则的指导方针,包括5项价值标准和12个实践操作。极限编程的主要目标在于降低因需求变更而带来的成本,极限编程透过引入基本价值、原则、方法等概念来达到降低变更成本的目的。

Scrum是一种迭代式增量软件开发过程,通常用于敏捷软件开发,包括一系列实践和预定义角色的过程骨架。Scrum中的主要角色包括Scrum主管,产品负责人和开发团队。它使用迭代的方法,把每个30天一次的迭代称为一个“冲刺(sprint)”,按照需求优先级别来实现产品。多个自组织和自治小组并行递增地实现产品。通过简短的日常情况会议(称为“Scrum”)进行。

水晶敏捷方法发展和提倡了一种机动性的软件开发方法,定义了一系列方法,包含核心元素、角色、过程模式、工作产品和实践。水晶敏捷方法实际是一组经过证明对不同类型项目都非常有效的敏捷过程,其目的是使得敏捷团队可以根据其项目和环境选择最合适的水晶系列成员。

(论述只需说明一种具体的敏捷开发方法) Qw3sIHeIiRQ9PGX1+Ee9SEBKy3fp0DWRfTUPO/s8puEX9wg3PJewlneNWx1mbnwr

点击中间区域
呼出菜单
上一章
目录
下一章
×