在CMM(CapabilityMaturityModel的首字母缩写,一种专注于软件开发过程的管理和工程能力的改进和评估的开发模型)的神话破灭之后,敏捷开发已经逐渐引起人们的关注,被寄予厚望。下面说说敏捷开发相关的一些知识。敏捷开发的起源我们大多数人都学习过瀑布式开发模型,它是文档驱动的。因为在瀑布的整个开发过程中,开发人员都是根据需求文档进行开发的,一切都是以文档为基础的。敏捷开发(AgileDevelopment)是一种以人为中心的、迭代的、循序渐进的开发方法。这是一个软件开发过程。指导我们使用规定的环节,一步步完成项目开发;而这种开发方式的主要驱动力是人,它侧重于人与人之间面对面的交流;只写必要的文件,或尽量少写文件;它使用迭代开发。敏捷开发提倡将一个完整的软件版本划分为多个迭代,每个迭代实现不同的特性。重要的和高优先级的功能首先实现,高风险的功能首先实现。在项目的早期开发出软件的原型,并以此原型为基础,在后续的迭代中不断完善。迭代开发的好处是:尽早编码,尽早暴露项目的技术风险。让客户第一时间看到正在运行的软件,并提出优化建议。可用版本可以分阶段提早交付给不同的客户。在每次迭代中,架构师负责将所有功能分解为故事卡。每个Story都可以看作是一个独立的特征。每个Story应该能够在最多1周内完成开发并交付进行预测试(Pre-Test)。当一个迭代中的所有故事都开发完成后,测试团队进行一次完整的测试。在整个测试过程中(预测、测试),基于Dailybuild,测试组每天总是从配置库中取出最新的编译版本进行测试,开发人员也随时修改测试人员提交的问题单时间,并合并到配置库中。敏捷开发的特点之一是开放办公和充分沟通,包括测试人员和开发人员一起工作。基于StoryCard的开发方式,团队会在开放的办公区放置一块白板,上面贴上所有的StoryCards,并根据当前开发状态??分别粘贴在4个区域,即:未开发、开发中、并在预测试、测试中。StoryCard开发人员和测试人员根据开发进度在StoryWall上移动StoryCards,并更新StoryCards的状态。这样可以非常直观的了解项目的开发进度。敏捷开发宣言个人和交互高于流程和工具软件高于综合文档客户协作高于合同谈判响应变化高于遵循计划虽然正确的项目也有价值,但我们相信左侧的项目具有更大的价值。敏捷开发方法敏捷开发作为一种指导思想或开发方法,Scrum和XP(ExtremeProgramming:极限编程)都是敏捷开发的具体方法。Scrum和XP的区别在于,Scrum侧重于过程,而XP侧重于实践,但在实践中,两者是一起应用的。Scrum方法英文Scrum是橄榄球专业术语,意思是“抢球”的动作;如果一个开发过程被命名为Scrum,那么每个人都像打橄榄球一样快速而充满战斗激情。使用此过程,您将可以看到您的团队高效地工作。Scrum的整个开发过程由几个短的迭代周期组成。一个短的迭代周期称为Sprint。每个Sprint的推荐时长为2到4周(互联网产品开发可以使用1周的Sprint)。在Scrum中,使用ProductBacklog来管理产品需求。产品待办列表是按业务价值排序的需求列表。Scrum团队总是首先开发对客户具有更高价值的需求。在Sprint中,Scrum团队从ProductBacklog中挑选优先级最高的需求进行开发。选定的需求在Sprint计划会议上进行讨论、分析和估算,得到相应的任务清单,我们称之为Sprintbacklog。在每次迭代结束时,Scrum团队将交付一个潜在的可交付产品增量。Scrum使用迭代的增量方法来优化可预测性和控制风险。Scrum开发过程中的三个角色产品负责人(ProductOwner)主要负责确定产品的功能和满足要求的标准,规定软件的发布日期和交付内容,并有接受或拒绝的权力开发团队的工作。流程经理(ScrumMaster)主要负责项目中整个Scrum流程的顺利实施和推进,以及扫清客户与开发工作之间的沟通障碍,让客户直接驱动开发。开发团队(ScrumTeam)主要负责在Scrum规定的流程下开发软件产品。人数控制在5到10人左右,每个成员可能负责不同的技术方面,但每个成员必须有很强的自我管理能力,同时要有一定的表达能力;成员可以使用任何工作方法,只要能达到Sprint目标即可。Scrum开发的流程1.我们首先需要确定一个ProductBacklog(按照优先级排列的产品需求列表),这是ProductOwner的职责;2.ScrumTeam根据ProductBacklog列表进行工作量估算和预估。安排;3、有了ProductBacklog列表,我们需要通过SprintPlanningMeeting(冲刺计划会议)来选择一个Story作为本次迭代的目标。这个目标的时间周期是1到4周,然后把这个TheStory提炼成一个SprintBacklog;4、SprintBacklog由ScrumTeam完成,每个成员根据SprintBacklog进一步细化成更小的任务(每个任务的工作量可在2天内完成);5.在完成ScrumTeam计划会议选定的SprintBacklog的过程中,需要召开DailyScrumMeeting(每日站立会议),每次会议时间控制在15分钟左右。每个人都要发言,向全体会员汇报,当面汇报昨天的成绩,向全体会员承诺今天要完成的工作。同时,您也可以提出无法解决的问题。大家答完之后,必须去黑板上更新自己的Sprint燃尽图(Sprintburndown)6.实现日常集成,即每天要有一个能够成功编译和演示的版本;很多人可能没有用过自动化的日常集成,其实TFS就有这个功能,它可以支持会员每次进行签到操作,自动获取服务器上的最新版本,然后在服务器上进行编译。如果通过,单元测试代码将立即执行。如果全部通过,该版本将被发布。这时一个正式的check-in操作就保存到TFS中了。中途如有失败,将邮件通知项目管理人员;7.当一个Story完成,即SprintBacklog完成,也就意味着一个Sprint完成了。这时候,我们要进行一个SrpintReviewMeeting(demomeeting),也叫reviewmeeting,productowner和customer双方(最好公司的老大也参加),ScrumTeam的每个成员都要演示他们完成的软件产品给他们(这次会议很重要,一定不能取消);8、最后是SprintRetrospectiveMeeting(回顾会议),又称总结会,轮流发言要进行下去,大家要发言、总结、讨论改进,放到下一轮Sprint的产品需求中;XP方法极限编程是一种轻量级、智能化的软件开发方法;同时它也是一种非常严谨和深思熟虑的方法,其基础和价值观是沟通、简单、反馈和勇气;也就是说,任何一个软件项目都可以从四个方面进行改进:加强沟通;从简单开始;寻求反馈;实事求是。XP是一种近螺旋式的开发方式,将复杂的开发过程分解成相对简单的小循环;通过主动沟通、反馈等一系列方式,开发者和客户可以非常清楚的了解开发进度、变化、需要解决的问题和潜在困难等,并根据实际情况及时调整开发流程情况。XP的十三个核心实践:整个团队,计划游戏;结对编程、测试驱动开发、重构、简单设计、集体代码所有权(CollectiveCodeOwnership)持续集成(ContinuousIntegration)客户测试(CustomerTests)小型发布(40小时工作周)(40-hourWeek)编码标准(CodeStandards)系统隐喻(SystemMetaphor)关于规划策略:规划是连续的,按部就班的。每隔2周,开发人员会估算未来2周候选功能的成本,客户根据成本和业务价值选择实施哪些功能。关于测试驱动开发:编写单元测试是一种验证行为,更像是一种设计行为。同样,它更像是一种编写文档的行为。编写单元测试避免了大量的反馈循环,尤其是在功能验证方面。程序员在非常短的循环中工作,他们添加一个失败的测试,然后让它通过。关于隐喻:隐喻是建筑的代名词。隐喻用于描述项目的全貌,故事用于描述个体的具体特征。隐喻是将整个系统联系在一起的大图景;它是系统的未来形象,它使所有单独模块的位置和外观变得明显和直观。如果模块的外观与整个隐喻不符,那么您就知道模块是错误的。XP的成功因素之一是重视客户的反馈——开发的目的就是满足客户的需求。XP方法使开发人员始终能够自信地面对客户需求的变化。XP强调团队合作,经理、客户、开发人员都是开发团队的成员。团队通过充分的沟通与合作,力求开发出高质量的软件,使用XP,一种简单而有效的方式。XP被设计为简单高效;程序员通过测试获得客户的反馈,并根据变化修改代码和设计,始终力争尽早将软件交付给客户。XP程序员可以勇敢地面对需求和技术的变化。什么是优秀的团队?某公司的一个团队对一个项目采用了“敏捷开发方式”,而公司当时的理念正是:开放、协作、扁平化团队、以用户为中心;与团队所采用的敏捷开发方法理念如出一辙,结果是他们毫无悬念地获得了优秀团队奖。即使开发出来的项目不是很成功,公司也需要一个团队来起到表率作用,激励其他团队,就有这样的团队。如果你不能成为一个优秀的团队,那就做一个典型的团队。公司需要这样的题目进行论证。一个好的团队不局限于某种开发方式,而是最适合某种方式。希望你也在一个好的团队中。
