微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

第二眼看Scrum

/一觉亮天2010-10-24

这篇文章之所以叫第二眼看Scrum,是因为我曾写过一篇文章名为First Sight At Scrum。写第一篇文章时我刚用Scrum不久,对Scrum的理解还不深。

大约一个多月前,公司出钱,我参加了一次Scrum Master认证培训。据说培训费是500美金,培训过后还发了一个ScrumAlliance的证书,PDF格式的。

从初识Scrum到如今用Scrum大约十个月,再加上参加完这个培训,感觉还是有些心得和体会,就以Recipe的形式记录下来。

Scrum是什么?

Scrum是敏捷开发的一种管理流程。Scrum包括三种角色,Product OwnerScrum MasterTeam,而且只有这三种角色。维护两份BacklogProduct BacklogSprint Backlog。一张图,Burning Down Chart (燃尽图)。

项目经理哪去了?

传统软件开发中项目经理的角色,一部分任务划归了Product Owner,一部分任务划给了Scrum Master

Scrum拥抱变化

和传统软件开发相比,Scrum更适合于变化比较多比较快的软件的开发。Scrum的每个Sprint的长度一般2-4周。在Scrum的每个Sprint,都会产出潜在的可交付的软件。那可交付的软件所具有的特征,它都应该有,比如用户手册文档,比如软件是测试过的可运行的,等。这也对设计提出了更高的要求,软件设计更多地要按Feature设计,最重要的Feature在早期Sprint完成。如果Sprint失败,损失就是一个Sprint的投入,不会像传统瀑布模型软件开发到最后交付一刻才知道成功失败。Scrum流程不怕失败,如果注定失败,期待失败早点来临早点发现。

Scrum不适合所有项目

如果软件的需求变化不多,或难度不大,不一定要采用Scrum的方式。Scrum更适合于难的,变的。对于维护类型的项目,没有办法预料有哪些问题会来临的,类似于救火的这种项目,Scrum可能也不适合。

PO的职责

Product BacklogProduct Owner维护,其中的Product Backlog Item(PBI)一定按优先级排序的,也一定有初始Effort的估计。PO关注投入产出比(Return of Investiment,ROI),也就是Effort/Priority。只有PO有权增减PBIEffort的估计需要Team完成,因为是Team做事。

PBI一个最初都是详细设计过的吗?

不是。优先级排在前面的PBI,设计得比较详细,优先级排在后面的PBI,开始可能没有设计,但随着项目的推进,随着Product Backlog中优先级高的PBI的完成,随着低优先级PBI优先级的提升,设计逐步细化。也许低优先级的PBI最终不做了,如果前期就详细的设计,最终不做了就会浪费时间。

Scrum挽救我们的行业

通常,在销售那里什么承诺都是可以做的,保证如期保质保量地完成需求。但是现实中,软件开发项目鲜有不超期,也有很多最终是失败的。我们要让客户知道风险,Team只承诺每个Sprint能够交付的目标。

Scrum Master做什么?

Scrum Master不是管理者(Manager),也不是决策者(Decision Maker)Scrum Master的任务是确保Scrum按流程进行,排除障碍( Remove Impediment)Scrum强调时间限制(Time Box)。Sprint Planing花费时间是有规定的,Daily Scrum Meeting的时间也是有规定的(15minutes),Scrum Master要确保行为在时间限制内完成。PO随意变动Sprint BacklogScrum Master要制止。Sprint Backlog一旦确定下来,就不要随便变动,因为这是TeamPO的承诺,如果Sprint Backlog不稳定,如何能保证承诺的实现呢?

Scrum Master可以是Team Member不?

最好Scrum Master由非Team成员担任。Scrum Master也是Team一员,有好处也有坏处。好处是,Scrum Master更了解Team,更了解Sprint的进展。坏处是,大家会分不清角色。

Sprint planning 做什么?

Sprint planing Part 1,选择。选择PBI,一定是按照优先级选。

Sprint planing Part 2, 承诺。把PBI转化为Sprint Backlog Item (SBI)。定义DeFinition of Done包括设计。如果PBI过大,需要Break Down

Team自管理自成长

Scrum强调Team的自我管理,不是Scrum Master,也不是PO来管理TeamCommitment没有完成,是整个Team的失败。Scrum Team中的每一员最好是多面手,这样才能保证按优先级来选择任务,而不是按每个人擅长的领域来选择任务。在Sprint的结束,Team会自省(Retrospective),哪些是做得好的方面,以保持,哪些是不好的方面,以改进。

最佳工程实践

Scrum强调迭代(Iterative)开发,有一些方法,比如测试驱动开发(Test Driven Development TDD)。要知道TDD是一种设计方法方面的实践,而不是一种测试。例如基于Unit Test的测试驱动开发,要实现一个功能,先写测试代码,然后写实现代码,每次都要保证编译通过,测试用例通过。测试代码功能代码一样要进行配置管理,版本控制。迭代开发与测试自动化往往也分不开。比如你新增加Feature,为了确保不影响旧有Feature,以前的测试用例需要执行一遍。但是如果执行这些测试用例用手动的方式,则是一件繁琐耗时的事情。如果有测试自动化,则事情简单许多。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图:提供一种方法顺序访问一个聚合对象中的每个元素,而又不想暴露该对象的内部表示。应用:STL标准库迭代器实现、Java集合类型迭代器等模式结构:心得:迭代器模式的目的是在不获知集合对象内部细节的同时能对集合元素进行遍历操作
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(BlockingIO):即传统的IO模型。(2)同步非阻塞IO(Non-blockingIO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的N
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定义一系列算法,把他们封装起来,并且使他们可以相互替换,使算法可以独立于使用它的客户而变化。应用:排序的比较方法、封装针对类的不同的算法、消除条件判断、寄存器分配算法等。模式结构:心得:对对象(Context)的处理操作可
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个作用于某对象结构中的各元素的操作,它使你在不改变各元素的类的前提下定义作用于这些元素的新操作。应用:作用于编译器语法树的语义分析算法。模式结构:心得:访问者模式是要解决对对象添加新的操作和功能时候,如何尽可能不修改对象的类的一种方
命令模式(Command)命令模式(Command)[Action/Transaction]意图:将一个请求封装为一个对象,从而可用不同的请求对客户参数化。对请求排队或记录请求日志,以及支持可撤消的操作。应用:用户操作日志、撤销恢复操作。模式结构:心得:命令对象的抽象接口(Command)提供的两个
生成器模式(Builder)生成器模式(Builder)意图:将一个对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。 应用:编译器词法分析器指导生成抽象语法树、构造迷宫等。模式结构:心得:和工厂模式不同的是,Builder模式需要详细的指导产品的生产。指导者(Director)使用C
设计模式学习心得《设计模式:可复用面向对象软件的基础》一书以更贴近读者思维的角度描述了GOF的23个设计模式。按照书中介绍的每个设计模式的内容,结合网上搜集的资料,我将对设计模式的学习心得总结出来。网络上关于设计模式的资料和文章汗牛充栋,有些文章对设计模式介绍生动形象。但是我相信“一千个读者,一千个
工厂方法模式(Factory Method)工厂方法模式(Factory Method)[Virtual Constructor]意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实力化延迟到子类。应用:多文档应用管理不同类型的文档。模式结构:心得:面对同一继承体系(Produc
单例模式(Singleton)单例模式(Singleton)意图:保证一个类只有一个实例,并提供一个访问它的全局访问点。应用:Session或者控件的唯一示例等。模式结构:心得:单例模式应该是设计模式中最简单的结构了,它的目的很简单,就是保证自身的实例只有一份。实现这种目的的方式有很多,在Java中
装饰者模式(Decorator)装饰者模式(Decorator)[Wrapper]意图:动态的给一个对象添加一些额外的职责,就增加功能来说,比生成子类更为灵活。应用:给GUI组件添加功能等。模式结构:心得:装饰器(Decorator)和被装饰的对象(ConcreteComponent)拥有统一的接口