[转载]Visual Studio 2010敏捷利剑:详解Scrum

Visual Studio 2010敏捷利剑:详解Scrum

【IT168 专稿】随着微软Visual Studio 2010 Ultimate Beta2版本的发布,除了它提供协同一致的ALM(应用程序生命周期)管理工具外,MSF for Agile Software Development过程框架从4.2升级到5.0,并且是以Scrum模型为基础导向扩展,并且结合了VSTS2010工具的众多特性,从而成为微软.NET相关技术人员手中不可多得的利器。

  在本文中,笔者将介绍Visual Studio 2010 Ultimate Beta2版本中的MSF for Agile Software Development V5.0的Scrum思想以及实施方法,通过对这些内容的阐述,让读者了解VSTS2010的敏捷之道,以便于.NET管理和开发人员能随心所欲的应用在自己的项目中,从而构建出高效的软件开发团队。

  1.引言

  道是天地万物演变的本体或本原,是存在之根本。一个行业或者一个事物既然现实地存在着,那么它的发展必然遵循着本身的自然规律。

  谈起敏捷之道,令笔者不禁想起在《笑傲江湖》中描写令狐冲独孤九剑的精髓‘行云流水,任意所至。’这就是活学活用,实战中随手配合招式的变招。风清扬教令狐冲‘将这华山派的三四十招融会贯通,设想如何一气呵成,然后全部将它忘了,忘得干干净净,一招也不可留在心中。’其实是将华山剑法一招一式固有的套路动作拆开使它不存任何招数,再自由组合套路形成浑然一体的招式使出来。这都是活学活用,而这只是第一步。做到出手无招,才是真正踏入了高手的境界。真正的无招是没有主观的招式,根本并无招式,敌人如何来破你的招式?

  软件开发的敏捷之道也是如此,当开发团队为了求得高质量、高效的完成软件产品的交互过程,无论项目管理者还是团队成员都需要全方面地学习,包括工具的熟练使用、学习UML、OOAD等技术和收集前人开发过程中的经验等等,从而使个人以及团队综合素质的大大增强,这就是为学的过程,最后把这些零碎无序的知识系统化后再全部统统‘忘掉’,达到出手无招、随心所欲,全是下意识自然而然的行动,无变之变,这就是敏捷之道,这可能就是做项目管理及开发的最高境界吧!

  敏捷的含义就是速度的最大化。当你咖啡杯从你的手中悄然滑落的时候,你却下意识地接到了它,这种直线运动是最快的,其实里面蕴藏着一种意境和思想。这种下意识就是一种境界思维,它没有经过大脑,条件反射的方式以最短最快的速度取得了结果。

  这种现象又让笔者又联想起了李小龙的“截拳道”,它的一个特点就是充分运用‘节约的经济线’(两点间的直线)的技击原理,所以它打击对方的机会和实用性最佳,而且最快,这种“下意识”的境界就是一种太极哲理,搏击之最高境界。万物皆有道,这都是从道的本体中演化出来的!

  2.敏捷之简易

  简单通常是一个好的设计具备特征,这些设计是经典的并且很难再改进的。 例如,Lego积木(参考图1所示),经过许多年还保留着原来的样子,因为没有人能想出更简单的设计让人们将木块组合再拆开。人们无法再改进这些设计,因为它们不能够再简化,而将它们设计得更复杂也无法让它们更好用。


图1 Lego 积木

  敏捷团队注重简易,这样做可以消除那些没必要的复杂。只需专注于开发当前所需要的功能和最简单的设计。如果能使用简单来帮助一个敏捷团队开发出马上就需要的软件,而不浪费人力和资源,这就是他们给那些投资的用户以最好和最直接利益的方法。

 

  我们再从《易经》中的‘简易、变易、不易’的角度思考,可以把它看做是对易理的高度抽象→易理对宇宙的高度抽象→‘简易’指变与不变都是‘道’的体现,自然而然而非刻意求变,万事万物都只是按其本性生生不息而已。所以,简易之理是对大自然万事万物高度的抽象;‘变易’是指‘变化’,任何‘生生不息’都是处在不断的变化之中,没有停止过,宇宙中的万物没有一样东西是不变的;‘不易’是指万事万物的变化都有其不变的本性,同时又有当变则变、不当变则不变的含义。宇宙中万事万物虽然不断变化着,但是却有一项永远不变的‘东西’存在,就是能变出万事万物的那个‘东西’,是永恒存在的,中国传统哲学里称之为‘道’。”

  2001年2月由17位世界轻量级方法学家提出了一份敏捷联盟宣言,这个宣言只是简单的四句话,但却是敏捷方法的精髓,也是对敏捷的高度抽象,这便是敏捷之道的最高境界:

  个体与交互 胜过 过程与工具

  可以工作的软件 胜过 面面俱到的文档

  客户协作 胜过 合同谈判

  响应变化 胜过 遵循计划

  3.Scrum敏捷过程模型

  在Visual Studio 2010中,项目过程模板变化很大,微软把Scrum作为基本Agile开发模型(Scrum模型为基础参考导向),如图2所示。TFS2010中集成了MSF for Agile Software Development v5.0,可操作性上又融合了敏捷等软件开发流程思想模型。

  Scrum最初的含义是英式橄榄球争球队,是敏捷软件开发模型中的一种。Scrum 将软件开发团队比拟成橄榄球队,有明确的最高目标,熟悉开发流程中所需具备的最佳技术,具有高度自主权,紧密地沟通合作,以高度弹性解决各种挑战,确保每天、每个阶段都明确的朝向目标推进。Scrum令人痛苦之处就在于你不得不根据自己的具体情况来对它进行调整,如果能够“随心所欲”应变,那么你就会体会到它的强大。


图2 Scrum for Agile

  敏捷Scrum开发过程框架中,产品backlog是Scrum的核心,也是一切的起源。从根本上说,它就是一个需求、或故事、或特性等组成的列表,按照重要性的级别进行了排序。它里面包含的是客户想要的东西,并用客户的术语加以描述,通常叫它故事(story),有时候也叫做backlog条目。

  例如,我们建立一个产品 BACKLOG(示例),如表1所示。


表1 产品 BACKLOG(示例)

  我们的故事包括这样一些字段:

  ID:统一标识符,就是个自增长的数字而已,以防重命名故事以后找不到它们。

  名称(Name):简短的、描述性的故事名。它必须要含义明确,这样可以跟其他故事区分开。

 

  重要性:(Importance):产品负责人评出一个数值,指示这个故事有多重要。例如:

  20或100。分数越高越重要。避免“优先级”这个说法,因为一般说来优先级1都表示“最高”优先级,如果后来有其他更重要的东西就麻烦了。它的优先级评级应该是什么呢?优先级0?优先级-1?

  初始估算(Initial estimate):团队的初步估算,表示与其他故事相比,

  完成该故事所需的工作量。最小的单位是故事点(story point),一般大致相当于一个“理想的人天(man-day)”。

  如何做演示(How to demo):它大略描述了这个故事应该如何在sprint 演示上进行规范,本质就是一个简单的测试规范。

  笔者借鉴过很多敏捷书籍和在实战的应用中尝试过很多字段,但最后发现,只有上面提到的六个字段我们会一直使用下去,这也就是一种最简化。

  我们可以把backlog存放在TFS2010服务器上,或者共享在TFS2010的Excel或者Project(参考图3所示)文档里面,这是为了多个用户可以同时编辑它。


图3 在TFS2010中的Project Product Backlog模板

  虽然正规意义上这个文档应该归产品负责人所有,但是我们并不想把其他用户排斥在外,开发人员常常要打开这个文档,弄清一些事情,或者修改估算值。

  VSTS2010已经支持Scrum的Product Backlog的模板,并且可以进行Backlog的迭代,如下图4所示。


图4 Product Backlog模板

  打开Product Backlog,建立User Story,如图5所示。


图5 建立User Story

 

  编写相关Story条目内容,如图6所示。


图6 编辑Story条目

  当编写完Story条目内容后,我们可以在Web端的Project Portal查看user story的内容与条目,如图7和图8所示。


图7 打开Web端的Project Portal
 

 


图8 Project Portal显示条目

 

  在share point的Project Portal中,我们可以对该story进行编辑等操作。如图9所示。


图9 share point站点中编辑条目

  我们可以对表1进行扩展,如表2所示。


表2 产品 BACKLOG扩展

  Backlog组件 ID Important Estimate How To Demo Notes

  组件用处 事件的编号 事件的重要性,用一个分数来表示。分数越高越重要(但重要的事件,内容不一定多) 初始的估算,也就是完成某个事件所需要的工作量。 事件的简单测试 用简洁的语句进行注解、说明等。

  Backlog组件 Track Components Requestor BugTrack

  组件用处 对产品的分类 产品由哪些部份组成 记录最先提出的需求,并在后续的开发过程中进行反馈。 Bug跟踪

  注:有颜色的组件可以说是必需的!

  在TFS2010中支持Reports的生成Excel报表,内容包括backlog、工作项等,如图10、11、12所示。


图10 创建报表Excel
 

 


图11 选择创建报表Excel生产类型

  生成报表,如图11所示。


图12 生成Excel报表

  在Scrum敏捷框架中,最强的就是快速应对客户需求的灵活变化。Scrum中有四个很标致性也很核心的词:backlog , sprint、迭代、反馈。结合VSTS2010的工具,可以快速进行story的变化,并且快速完成。例如,在产品 BACKLOG(参考表1),在每个Spint中,实现特性How To Demo,通过VSTS2010的Architecture绘制SSO统一登录的UML顺序(如图13所示),完成Spint Demo(可以是Spint中一部分)。


图13 绘制SSO统一登录的UML顺序

  敏捷软件开发的核心是:使用项目行为的“轻量但足够”的规则以及使用以人为本的规则及面向沟通的规则。Scrum的Sprint计划会议非常关键,应该算是Scrum中最重要的活动(这当然是我的主观意见)。要是它执行的不好,整个sprint甚至都会被毁掉。


图14 TFS2010集成平台的开发项目的合作

 

  举办Sprint计划会议,是为了让团队获得足够的信息,能够在几个星期内不受干扰地工作,也是为了让产品负责人能对此有充分的信心。Sprint计划会议会产生一些实实在在的成果:

  ·sprint目标。

  ·团队成员名单(以及他们的投入程度,如果不是100%的话)。

  ·sprint backlog(即sprint中包括的故事列表)。

  ·确定好sprint演示日期。

  ·确定好时间地点,供举行每日scrum会议。


图15 Scrom敏捷过程管理

  Scrom敏捷过程管理实施流程,如图15所示。将整个产品的backlog分解成Sprint Backlog,这个Sprint Backlog是按照目前的人力物力条件可以完成的。召开sprint planning meeting,划分,确定这个Sprint内需要完成的任务,标注任务的优先级并分配给每个成员。注意这里的任务是以小时计算的,并不是按人天计算。进入sprint开发周期,在这个周期内,每天需要召开Daily Scrum meeting。整个sprint周期结束,召开Sprint review meeting,将成果演示给Product Owner.团队成员最后召开Sprint retrospective meeting,总结问题和经验。这样周而复始,按照同样的步骤进行下一次Sprint.

  最终结果是,每个Sprint都产生出一个可见的、可用的交付产品,并向用户进行展示。一个增量可能是中期的,也可能是可交付的,但是它应该是独立的。 Sprint的目标是完成尽可能多的优质软件来确实质性进展,而不是用纸上里程碑(paper milestones)作为依据。

  4.Scrum索引卡(白板文化)

  在大多数sprint 计划会议上,大家都会讨论产品 backlog中的故事细节。对故事进行估算、重定优先级、进一步确认细节、拆分,等等都会在会议上完成。敏捷开发中提倡建立物理索引卡。要想收到好的效果,不妨创建一些索引卡,把它们放到墙上(或一张大桌子上)。

  笔者在这里也有个扩展方法,可以制作电子版的索引卡,如图16所示。可以清晰、直观的显示燃尽图和索引卡等信息。

 

  ScrumDashboard是微软站点中的一个开源项目,最新版本ScrumDashboard2.4.0.8,大家可以到http://scrumdashboard.codeplex.com/ 下载数据脚本以及源码。


图15 ScrumDashboard界面

  5.总结

  VSTS2010的增强的功能特点结合MSF for Agile Software Development V5.0中的Scrum敏捷过程框架,使从事在微软.NET技术相关工作方向的人们拥有了一把利剑。

  写到此笔者不禁又想起了在《神雕侠侣》中杨过得到的独孤求败的三柄剑:

  利剑、重剑、木剑;

  如果我们把微软VSTS2010工具,看成是敏捷开发团队中,在不同阶段中所使用的‘剑’,随着你的功夫和意境提高,你手中的利器就显着不重要了,无剑的境界便是最高的追求。敏捷有时也为灵感所致,如果敏捷团队的人们能锻炼出这种境界,便是软件开发之最高境界,那就是敏捷之道了。所以,敏捷的开发团队也是讲究天人合一(团队敏捷意识合而为一),敏捷也是哲学的。

  除了工具和Scrum外,令人忽视的就是团队成员的素质能力和意识。我在《我也能做CTO程序员职业规划》书中也讲过,如果公司团队人员始终保持不被开除的水平,他就不能自动自发。天底下水是最自动自发地朝下流,但是你要让你的团队成员整体地自动往上走。例如,有目的、有计划,有要求的业绩,有期限,有质量的标准。做到这些才仅仅是外因。


图16 内部驱动力雷达图

  内因就是驱动员工愿意干事情,要有内在驱动力。每个人敏感程度不同,给每个类型程序员的驱动力也不同。所有的员工自动自发的工作都是有内因的,(参见图16所示),扫描你的团队成员属于哪种类型。例如,他是家庭感情型,你就可以在某个节日或者事件里到他家做客,体现领导对他的重视和认可。让家人觉得领导得好,家庭的力量对他施加自动自发的内因驱动力。如果程序员是‘危机风险型’,你就提供他创新的机会和平台,发挥他的最大内因驱动力等。当然,这都必须结合外因才会可度量、可操作、可监控和有目标方向。

看了高阳这文章后,其中颜色加蓝部分,是我个人比较认同的,也是比较欣赏的部分,加红的是经典中的经典!

cnblogs 作者链接:http://www.cnblogs.com/xiaoyin_net/archive/2009/12/08/1619213.html

IT168   专题链接:http://tech.it168.com/a2009/1125/814/000000814906_all.shtml

转载于:https://www.cnblogs.com/VAllen/articles/Scrum.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站收录工具(php导航自动收录源码)_10步把企业网站优化做到极致,SEO优化的核心知识...

对于企业网站优化,重要的就3点,内容原创、外链建设、内部优化,其它网站优化也会涉及到这些,但是企业站就变的简单的多了,下面10步让你把企业网站优化做到极致。第一步:首先域就是让搜索引擎选择我们网站的主…

mysql not is null_转!!mysql 字段 is not null 和 字段 !=null

今天在查询数据时,查到包含一条某个时间startTime(该字段默认为null ) 为null的记录,想把它过滤,加了 startTime! null 的条件,结果记录都没了,应该用条件 is not null。转自:https://segmentfault.com/a/1…

myeclipse mysql连接_MyEclipse连接Mysql数据库的方法(一)

准备工作:MyEclipse使用的是2013版,mysql Ver 14.14 Distrib 5.6.281.jar包的下载(jdbc驱动)我下载的是:mysql-connector-java-5.1.7-bin.jar2.打开MyEclipse---->选择window---->选择open perspecctive---->myeclipse Database Exp…

c malloc 头文件_C/C++笔试题:主要考察C/C++语言基础概念算法及编程,附参考答案...

1.编写my_strcpy函数,实现与库函数strcpy类似的功能,不能使用任何库函数;答:char *strcpy(char *strDest, const char *strSrc){if ( strDest NULL || strSrc NULL)return NULL ;if ( strDest strSrc)returnstrDest ;char *tem…

SQLlite数据导入到mySQL_如何批量导入数据到Sqlite数据库

做android和ios开发的一般都用Sqlite数据库,有的时候数据需要批量导入,那么如何导入呢?在这里,介绍2种方法供大家参考。一、用sqlite命令以windows系统为例,linux下命令是一样的。1.安装sqlite工具包首先要安装有sqlit…

c/c++ 运行库

11.2 C/C运行库 11.2.1 C语言运行库 任何一个C程序,它的背后都有一套庞大的代码来进行支撑,以使得该程序能够正常运行。这套代码至少包括入口函数,及其所依赖的函数所构成的函数集合。当然,它还理应包括各种标准库函数的实现。…

下面哪个字段是http请求中必须具备的_理解HTTP协议-HTTP协议详解总结

一、HTTP协议的演进HTTP(HyperText Transfer Protocol)协议是基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是用来向客户端传输HTML页面的内容。默认端口是80。1、HTTP 0.9版本 1991年这个版…

ad电阻原理图_负载电阻的原理及应用

在开始主题之前,我们需要了解的是:负载电阻是什么?将其拆分:负载和电阻;负载,顾名思义,是指连接在电路中的电源两端的电子元件。主要功能就是将电能转换成其他形式的能,以实现能量的…

python dataframe 新列_Python第二十四课:Pandas库(四)

Python第二十四课:Pandas库(四)点击上方“蓝字”,关注我们.不知不觉,我们已经跨越了千难万险,从零开始,一步步揭开了Python神秘的面纱。学到至今,回过头,才晓得自己在不知不觉已经学会了如此多的…

hashmap 遍历_别慌,送你21 个面试官必问HashMap考点

Java面试笔试面经、Java技术每天学习一点Java面试关注不迷路作者:菜鸟小于来源:https://www.cnblogs.com/Young111/p/11519952.html1:HashMap 的数据结构?A:哈希表结构(链表散列:数组链表)实现,…

22套精美的网页按钮图标设计推荐(包括PSD和AI文件)

图标是一个简单的单色符号,表示对象的基本形状。字形被广泛地使用在我们周围的公共场所,如机场和商场或购物中心。在网页设计当中,他经常会被使用,用来展示每个元素代表的意思,他简洁大方,一目了然&#xf…

轻gc和重gc分别在什么时候发生_GC发展与现状

GC发展Java不像C或C那样,需要程序员在编程的过程中,时刻注意申请内存保存对象,在对象使用完成后,要在合适的时机将对象占用的内存释放掉(析构函数);Java得意与内部的三大机制,保证了程序开发方便&#xff1…

nginx离线安装_web高可用-基于keepalived和nginx

一.体系架构在Keepalived Nginx高可用负载均衡架构中,keepalived负责实现High-availability (HA) 功能控制前端机VIP(虚拟网络地址),当有设备发生故障时,热备服务器可以瞬间将VIP自动切换过来,实际运行中体验只有2秒钟…

php mysql 实现原理_php+mysql分页原理实现

完整代码如下:!htmlhead-"-type"";GBK"styletype"text/css"body{font-size:12px;font-family:verdana;width:100%;}div.page{text-align:center;}div.content{height:300px;}div.pagea{border:#aaaadd1pxsolid;text-decoration:none;…

python任意代码都可以缩进去_我发现了个 Python 黑魔法,执行任意代码都会自动念上一段 『平安经』...

最近的"平安经"可谓是引起了不小的风波啊。作为一个正儿八经的程序员,最害怕的就是自己的代码上线出现各种各样的 BUG。为此,明哥今天分享一个 Python 的黑魔法,教你如何在你执行任意 Python 代码前,让 Python 解释器自…

域用户更改密码提示拒绝访问_AD域中的ACL攻防探索

前言关于域内ACL的攻防近两年经常被人所提起,同时也产生了很多关于域内ACL相关的工具和攻击方式,本文将会从ACL的概念谈起,然后介绍几种不同的域内攻击方式以及如何监测和防御对于ACL的攻击。ACL的概念和作用ACM:首先想要了解ACL首…

go MySQL 多语句_八、MySQL经典查询语句-Go语言中文社区

student表course表score表teacher表1、 查询Student表中的所有记录的Sname、Ssex和Class列。select Sname,Ssex,Class from Student;2、 查询教师所有的单位即不重复的Depart列。select distinct Depart from Teacher3、 查询Student表的所有记录。select * from Student4、 查…

如何干净的删除vm_如何在macOS 10.15 Catalina绕过XProtect?

在macOS 10.15 Catalina中,Apple进行了许多安全性能地改进,包括通过使所有可执行文件都受XProtect扫描来加固系统,而不管文件是否带有com.apple.quarantine位标记。对于安全研究人员而言,这意味着不再像以前的macOS一样&#xff0…

activexobject对象不能创建_Oracle数据库用户管理之系统权限和对象权限

【关键术语】Privileges 权限System privileges 系统权限Object privileges 对象权限Grant 授予Revoke 撤消2.1 Oracle 权限概述2.1.1 权限的作用权限(privilege)是指执行特定类型 SQL 命令或访问其他模式对象的权利。Oracle 使用 权限来控制用户对数据的访问以及用户所能执行的…

【啃不完的算法导论】- 动态规划 - 最长公共子序列(概念篇)

以下内容纯是为了熟悉《算法导论》中的内容,高手可略过,其中涉及的书本内容的版权归原作者、译者、出版社所有 求最长公共子序列,一个典型的 动态规划题 和 字符串处理算法,写在这里是希望自己以后能多来看看和改改,温…