【系统分析师之路】第五章 复盘软件工程(敏捷开发)
复盘软件工程—敏捷开发
【系统分析师之路】第五章 复盘软件工程(敏捷开发)前言部分 历年真题考点分析1)考点分析2)重要知识点第一部分 综合知识历年真题下综合知识历年真题(1分)上综合知识历年真题(1分)上综合知识历年真题(1分)上综合知识历年真题(1分)上综合知识历年真题(1分)上综合知识历年真题(1分)上综合知识历年真题(1分)第二部分 案例分析历年真题上案例分析历年真题(25分)第三部分 论文写作历年真题下论文写作历年真题(75分)上论文写作历年真题(75分)前言部分 历年真题考点分析
1)考点分析
敏捷开发在上午综合,下午的案例分析和论文写作当中都出现了,看起来像一个比较重要的知识点;但是敏捷似乎真题都出现在早些年代久远的时候,最近五年不怎么出现了。尤其是在案例和论文当中已经消失殆尽了。难道在系统分析师里面已经不重要了?至少在PMP考试中,敏捷的占分比一直在上升,不过咱们系统分析师考试不侧重这个,顶多敏捷知识开发方法开发模型当中的一个比较常见的内容罢了。不过偶尔论文中冒出一个敏捷的论文也不足为奇,所以还是应该认真准备这块知识。
2)重要知识点
01)敏捷宣言的概念
02)极限编程的概念和基本常识
03)敏捷开发的详细分类:包括水晶方法,Scrum,特征驱动开发等
04)敏捷开发的基本原则和关注点
05)敏捷开发难以实施的情况
06)结对编程的概念和优点
第一部分 综合知识历年真题
下综合知识历年真题(1分)
【下系分真题第17题:绿色】
17.敏捷软件过程强调:让客户满意和软件尽早增量发布;小而高度自主的项目团队;非正式的方法;最小化软件工程工作产品以及整体精简开发。(24)不是采用这种软件开发过程的原因。
(24)
A.难以提前预测哪些需求是稳定的和哪些需求会变化
B.对于软件项目开发来说,设计和实现可以做到基本分离
C.从制定计划的角度来看,分析、设计、实现和测试并不容易预测
D.可执行原型和部分实现的可运行系统是了解用户需求和反馈的有效媒介
解答:答案选择B。送分题。
敏捷软件过程强调让客户满意和软件尽早增量发布小而高度自主的项目团队;非正式的方法;最小化软件工程工作产品以及整体精简开发。产生这种情况的原因是:在绝大多数软件开发过程中,提前预测哪些需求是稳定的和哪些需求会变化非常困难;对于软件项目构建来说,设计和构建是交错的;从指定计划的角度来看,分析、设计、构建和测试并不容易预测;可执行原型和部分实现的可运行系统是了解用户需求和反馈的有效媒介
上综合知识历年真题(1分)
【系分真题第21题:绿色】
21.极限编程是一种重要的敏捷开发方法,包含策划、设计、编码和测试四个框架活动的规则和实践。下面关于极限编程的叙述,错误的是(26)。
(26)
A.极限编程中使用的重要技术是重构,既包括设计技术的重构,也包括构建技术的重构
B.极限编程提倡在基本设计完成后,立即进行编码实现,并进行测试
C.极限编程活动中的关键概念之一是“结对编程”,推荐两个人面对同一台计算机共同开发代码
D.极限编程过程中建立的单元测试应当使用一个可以自动实施的框架,支持代码修改后即时的回归测试策略
解答:答案选择B
极限编程是一种重要的敏捷开发方法,包含策划、设计、编码和测试4个框架活动的规则和实践。极限编程中使用的重要技术是重构,既包括设计技术的重构,也包括构建技术的重构。极限编程提倡在基本设计完成后,团队不应该直接开始编码,而是开发—系列用于检测本次发布的包括所有故事(story)的单元测试;极限编程活动中的关键概念之一是“结对编程”,推荐两个人面对同一台计算机共同开发代码。极限编程过程中建立的单元测试应当使用一个可以自动实施的框架,支持代码修改后即时的回归测试策略。
上综合知识历年真题(1分)
【系分真题第18题:绿色】
18.某小型软件公司欲开发一个基于Web的考勤管理系统,客户对系统的基本功能,表现形式等要求并不明确,在这种情况下,采用(23)开发方法比较合适。
(23)
A.瀑布式
B.形式化
C.结构化
D.极限编程
解答:答案选择D。送分题。
中小型软件开发公司在面对客户需求模糊或者多变的情况下,采用极限编程的方法能够在更短的周期内,更早地提供具体、持续的反信息,实现轻量、高效、低风险的软件开发
上综合知识历年真题(1分)
【系分真题第19题:黄色】
19.以下敏捷软件开发方法中,(23)方法强调以业务为核心,快速而有效地进行系统开发。
(23)
A.极限编程
B.自适应软件开发
C.特性驱动开发
D.动态系统开发
解答:答案选择D。二周目红色变黄色。
动态系统开发方法是众多敏捷开发方法中的一种,它倡导以业务为核心,快速而有效地进行系统开发。实践证明DSDM是成功的敏捷开发方法之一。在英国,由于其在各种规模的软件组织中的成功,它已成为应用最为广泛的快速应用开发方法。DSDM不但遵循了敏捷方法的原禅,且也适合那些成熟的传统开发方法有坚实基础的软件组织。FDD (特性驱动开发)由 PeterCoad、Jeffde Luca 和 Eric Lefebvre 共同开发,是一套针对中小型软件开发项目的开发模式。FDD是一个模型驱动的快速迭代开发过程,它强调的是简化、实用、易于被开发团队接受,适用于需求经常变动的项目。ASD (自适应软件开发)由Jim Highsmith在1999年正式提出。ASD强调开发方法的适应性,这一思想来源于复杂系统的混纯理论。ASD不像其他方法那样有很多具体的实践做法,它更侧重为ASD的重要性提供最根本的基础,并从更高的组织和管理层次来阐述开发方法为什么要具备适应性。
上综合知识历年真题(1分)
【系分真题第29题:绿色】
29.下列关于敏捷方法的叙述,(38)是错误的。
(38)
A.敏捷方法强调可工作的软件胜过大量的文档
B.敏捷方法强调软件过程与工具胜过个体和交互
C.敏捷方法强调尽早提交有价值的软件
D.敏捷方法强调小版本发布
解答:答案选择B。送分题。
上综合知识历年真题(1分)
【系分真题第17题:绿色】
17.某软件公司欲开发一个基于Web的考勤管理系统。在项目初期,客户对系统的基本功能、表现形式等要求并不明确,在这种情况下,采用(21)开发方法比较合适。
(21)
A.瀑布式
B.形式化
C.结构化
D.极限编程
解答:答案选择D。本题考查软件开发方法的基础知识与应用。
根据题干描述,待开发的Web考勤管理系统在项目初期的需求并不明确,需要不断同用户进行交流与沟通,逐步获得系统的功能要求。2. 在这种情况下,采用敏捷开发方法最为适合,因此应该选择极限编程这种开发方法
上综合知识历年真题(1分)
【系分真题第24题:绿色】
24、下列开发方法中,( )不属于敏捷开发方法。
A、极限编程
B、螺旋模型
C、自适应软件开发
D、水晶方法
解答:答案选择B。考察开发方法开发模型。送分题。
第二部分 案例分析历年真题
上案例分析历年真题(25分)
试题二
阅读以下关于软件开发方面的叙述,在答题纸上回答问题 1至问题4。
当前企业中的业务都是在全球化、快速变化的环境中运营的,传统的软件开发过程无法适应由此产生的快速软件开发需求。20 世纪 90 年代后期,一些软件开发人员在“Agile Allicance 2001”中系统地阐述了敏捷开发的原则,试图强调灵活性在快速且有效地生产软件中所发挥的作用。目前,众多的软件生产企业已经在实际的软件开发过程中接纳并实践了敏捷开发方法中的基本原则。
【问题1】(8分)
敏捷开发有许多典型方法,包括极限编程(eXtreme Programming)、Scrum、Crystal、DSDM等。请问这些方法共同的基本原则是什么?
【问题2】(8分)
敏捷开发的支持者往往夸大该方法的优点,但是在实践中,敏捷方法的基本原则有时确实很难实施。请用200字以内的文字说明敏捷方法中哪些原则在实践中难以实施。
【问题3】(2分)
敏捷开发方法中最有名的是极限编程。请说明极限编程中的结对编程(Pair Programming)的概念。
【问题4】(7分)
敏捷开发方法在具体实践过程中,往往需要开发环境或工具的支持,一般称为快速应用开发技术和可视化开发技术。请用150字以内的文字说明快速应用开发技术所包含的工具有哪些,并简要说明可视化开发技术的基本概念和技术原理
【问题1标准答案】
1)客户参与
2)增量式提交
3)开发团队的技术应该得到承认和发扬,团队成员应该保持它们自己的工作风格,不落俗套。
4)接受变更
5)保持简单性
【问题2标准答案】
1)客户参与往往依赖于客户自身的意愿和客户自身的代表性
2)有些成员的性格可能不适合激烈的投入,可能无法做到和其他成员之间的良好的沟通
3)对系统中的变更做出优先级排序可能是极其困难的
4)维护系统的简洁性往往需要额外的工作,但迫于移交时间表的压力,可能没有时间执行系统简化过程。
【问题3标准答案】
开发人员成对工作,检查彼此的工作并提供支持,圆满完成任务。
【问题4标准答案】
快速应用开发中所包括的工具有数据库编程语言,界面生成器,与办公应用的连接,报告生成器。
可视化开发是一种通过集成细粒度可复用软件组件来构造软件的快速应用方法,其主要思想是用图形工具和可重用部件来交互地编制程序。可视化开发一般是基于事件驱动的原理。
第三部分 论文写作历年真题
下论文写作历年真题(75分)
试题二 论敏捷开发方法的应用
敏捷软件开发简称敏捷开发,是从 90 年代开始逐渐引起广泛关注的一些新型软件开发方法,以应对快速变化的需求。它们的具体名称、理念、过程、术语都不尽相同,相对于“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面沟通、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重人的作用。
敏捷开发的发展过程中,出现了多个不同的流派,例如极限编程、自适应软件开发、水晶方法、特性驱动开发等。但其中的基本原则是一致的。从开发者的角度,主要的关注点有短平快会议(Stand Up)、小版本发布(Frequent Release)、较少的文档(Minimal Documentation)、 合作为重 (Collaborative Focus)、 客户直接参与 (Customer Engagement)、自动化测试 (Automated Testing)、 适应性计划调整 (Adaptive Planning)和结对编程 (Pair Programming) ;从管理者的角度,主要的关注点有测试驱动开发(Test-Driven Development)、持续集成(Continuous Integration)和重构(Refactoring)。
请围绕 “敏捷开发方法的应用”论题,依次从以下三个方面进行论述。
1.概要叙述你参与管理和开发的软件项目以及你在其中担任的主要工作,包括角色、工作内容等。
2.对开发者关注点中至少三项内容进行解释;结合自己所参与项目,对使用情况予以评价。
3.联系你所参与项目的实际情况,分析并讨论测试驱动开发的使用效果,并评价其优缺点
对于敏捷开发,从开发者的角度,主要关注的内容有:
短平快的会议 项目组每天召开的简短会议,每个人回答如下的问题:你昨天做了什么,你今天做什么,你遇到了什么困难,站立式会议促进了团队交流,彼此相互熟悉工作内容。 小版本发布 尽量多的产品发布,一般以周,月为单位,这样客户每隔一段时间就会拿到发布的产品进行试用,而项目组可以从客户 较少的文档 与传统开发方法相比,它不要求撰写大量文档,而是强调测试文档的重要性。敏捷开发中存在大量的测试文档,敏捷开发认为,测试文档最大程度上保持了与代码的一致性。 合作为重 表现为代码的共享,在敏捷开发中,代码是归团队所有,而不是属于某些人。每个人都有权利获得系统任何一部分的代码然后修改他,这样每个人都能熟悉系统的代码,即使团队人员的变动,也没有风险。 客户直接参与 敏捷开发中,客户是与开发团队一起工作的,团队到客户现场进行开发或者邀请客户到团队公司来开发。 自动化测试 为了减少人力或者重复劳动,所有的测试包括单元测试集成测试都是自动化的,这就对QA人员提出了更高的要求。 适应性的计划调整敏捷开发中的计划是可以调整的,可以多次迭代,小版本发布,根据客户反馈随时响应的调整与变化。结对编程 在程序实现和编写测试代码时,采取两个人共同使用一台计算机的方式进行,两个人频繁讨论并相互监督。 测试驱动开发 是敏捷开发中的一项重要的内容,要求需求分析之后,首先编写测试代码。而功能开发的依据只能是测试代码,目的是在测试代码真实反映用户需求的前提下,功能开发完全满足测试要求即可。测试驱动开发在软件业内争论激烈,反对者提出测试驱动开发过于片面,很容易忽略需求中潜在的内容。
上论文写作历年真题(75分)
试题二 论敏捷开发在企业软件开发中的应用
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。尽管目前敏捷开发的具体名称、理念、过程、术语尚不尽相同,但业界普遍认为:相对于“非敏捷”,敏捷开发更强调程序员团队与业务专家之间的紧密协作、面对面的沟通、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发中人的作用。
请围绕“敏捷开发在企业软件开发中的应用”论题,依次从以下三个方面进行论述。
1.概要叙述你参与实施的应用敏捷开发的软件项目以及你所担任的主要工作。
2.叙述你在软件项目实践过程中采用了怎样的敏捷开发基本原则并说明理由。
3.具体阐述该项目采用的敏捷开发方法,以及实施过程中存在问题和解决方法。
2001年2月的《敏捷宣言》(Agile Manifesto)是由多位当时称之为“轻量级方法学家”所编写签署的,他们的价值观是:个人与交互重于开发过程与工具;可用的软件重于复杂的文档;寻求客户的合作重于对合同的谈判;对变化的响应重于始终优于遵循固定的计划。
个人与交互重于开发过程与工具
一个由优秀的人员组成但使用普通的工具,要比使用优秀的工具但由普通人组成、紊乱的小组做得更好。
多年来人们花了很多时间试图建立一种过程,以便把人当作机器上的一个可以替代的齿轮,但结果却并不成功。
敏捷过程是承认每个人都有特定的能力(以及缺点)对之加以利用,而不是把所有的人当成一样来看待。更重要的是,在这样的理念下,几个项目做下来,每个人的能力都从中得以提高。这种人的能力的提高,对公司是无价之宝。而不至于把人当成齿轮,随着时间的推移,人的能力慢慢被消耗掉,最后变成留之无用、弃之可惜的尴尬人物。可用的软件重于复杂的文档
可用的软件可以帮助开发人员在每次迭代结束的时候,获得一个稳定的、逐渐增强的版本。从而允许项目尽早开始,并且更为频繁地收集对产品和开发过程的反馈。随着每次迭代完成软件的增长,以保证开发小组始终是处理最有价值的功能,而且这些功能可以满足用户的期待。寻求客户的合作重于对合同的谈判
敏捷开发小组希望与项目有关的所有团体都在朝共同方向努力,合同谈判有时会在一开始就使小组和客户处于争执中。敏捷开发追求的是要么大家一起赢,要么大家一起输。换句话说,就是希望开发小组和客户在面对项目的时候,以一种合作的态度共同向目标前进。当然,合同是必需的,但是如何起草条款,往往影响到不同的团体是进行合作式的还是对抗式的努力。对变化的响应重于始终遵循固定的计划
敏捷开发认为对变化进行响应的价值重于始终遵循固定的计划。他们最终的焦点是向用户交付尽可能多的价值。除了最简单的项目以外,用户不可能知道他们所需要的所有功能的每个细节。不可避免地在过程中会产生新的想法,也许今天看起来是必需的功能,明天就会觉得不那么重要了。随着小组获得更多的知识和经验,他们的进展速度会比开始的时候期望值慢或者快。对敏捷开发来说,一个计划是从某个角度对未来的看法,而具有多个不同的角度看问题是有可能的。
常见的敏捷开发方法有极限编程,Scrum,水晶方法等。
极限编程
主要目标在于降低因需求变更而带来的成本,极限编程透过引入基本价值、原则、方法等概念来达到降低变更成本的目的。
Scrum
是一种迭代式增量软件开发过程,通常用于敏捷软件开发。包括了一系列实践和预定义角色的过程骨架。Scrum中的主要角色包括Scrum主管,产品负责人和开发团队。它使用迭代的方法,把每个30天一次的迭代称为一个“冲刺”(Sprint),按照需求优先级别来实现产品。多个自组织和自治小组并行递增地实现产品。通过简短的日常情况会议(称为“Scrum”)进行。
水晶敏捷方法
发展和提倡了一种机动性的软件开发方法,定义了一系列方法,包含核心元素,角色、过程模式、工作产品和实践。水晶敏捷方法实际是一组经过证明对不同类型项目都非常有效的敏捷过程,其目的是使得敏捷团队可以根据其项目和环境选择最合适的水晶系列成员。