存档

‘Agile’ 分类的存档

Scrum敏捷项目管理——阅读笔记

2010年5月28日 admin 5 条评论

书籍介绍

Scrum被认为是目前全球最流行与最有效的敏捷项目管理理念与方法之一,在软件业发达地区被众多知名企业广泛采纳。本书是Scrum理论与实践的重要奠基之作,作者是Scrum的缔造者,深受软件行业人员尊重的敏捷大师。本书详细描述如何在复杂技术项目中使用 Scrum,并结合真实的Scrum案例及专家洞识,在简明及高度概括的理论之上更侧重于实践,并不断强调Scrum原则的坚持及实践的灵活性。

此书探索Scrum的每一方面,包括科学原理、伞新的项目角色及责任、ScrumMaster、产品负责人、如何有效管理未知因素和不断变化的产品需求、如何结束混乱、如何计划和报告、及如何扩展项目团队规模等,并着重于如何驱动项目以实现最高的投资回报。

 

笔记

Scrum的核心价值观是:承诺、专注、公开、敬重和勇气。它提倡自我管理、涌现机制、可视性和评估/适应循环的根本原则。

在黄昏里希冀皓月与繁星
在深夜希冀着黎明
在炎夏希冀凉秋
在严冬又希冀新春
这不断的希冀啊,
使我感触到世界的存在,
带给我多量的生命的力。
这样,
我才能跨过——
这黎明黄昏,黄昏黎明,春夏秋冬,秋冬春夏的茫茫的时间的大海啊。

项目复杂程度越高,便越需要将决策权委派至工作前线的独立个体。

Scrum能有效运作的另一个原因在于,它可以就一个问题集思广益。

Scum将小型团队转化为自身命运的管理者。

Scrum团队接受挑战,找寻应对挑战的方法,发挥创意,避开工作障碍,而这一切都无法由中央控制及调度系统预先安排。

如果团队规模合适,能激发各成员的参与积极性,同时团队成员能意识到他们对自身命运的掌控,那么各成员的经验,意见和想法便可以充分利用,而非遭到压制。

产品负责人应引导团队工作以实现企业最大价值。这类工作不仅包括将最高优先等级的产品Backlog转化为功能,还应坚持工程惯例和标准。

未能促使改进的评审会议是成果贫乏且令人沮丧的。

ScrumMaster负责扫除开发团队、产品负责人和客户之间的障碍,确保客户能直接推动开发工作。ScrumMaster的另一个职责是告诉产品负责人,如何利用Scrum使项目投资回报最大化,达成项目目标。

Scrum基于协作需要理解,也即顺畅的交流。若产品负责人只谈商业,团队只谈技术,双方无法交流,也就没有协作。

Scrum的生产力源于:首先选择正确事项,然后高效完成选定事项。

团队从被管理到自我管理的转变过程十分困难,但在生成力和工作愉悦度方面的回报显著。

ScrumMaster的职责不是管理团队,他们应学会自管理,不断调整方法,提高成功机会。

瀑布式开发过程使人际互动和面对面交流最小化,产生隔离。该过程强调人际书面交流,但团队需要广泛的交流,以减少误解和后继错误。成员不仅被办公场所隔离,其工作与互动也因开发过程而隔绝。

分类: Agile, 阅读 标签: ,

Scrum名词解释

2010年5月17日 admin 1 条评论

Product Backlog: 可以预知的所有任务, 包括功能性的和非功能性的所有任务。已划分有限等级的项目需求清单,标有将其转化为完整产品功能的预估时间。以天为单位,条目在产品Backlog中优先等级越高,预估值越精确。清单随业务和技术条件的变化而改变。

Product BlackLog Item:包括功能和非功能性需求及其他议题。按业务和依赖性的重要程度划分优先级,并做出预估。预估值的精确度取决于BlackLog Item条目的优先等级和细致程度,入选下个Sprint的最高优先等级条目的预估会非常精确。

Sprint:一次跌代开发的时间周期,一般最多以30天为一个周期.在这段时间内,开发团队需要完成一个制定的backlog,并且最终成果是一个增量的,可以交付的产品。

Increment(增量): 团队在每个Sprint中开发出的产品功能。

Iteration(迭代):项目中的一个周期。Scrum中,该周期为30个连续日历日,或者一个Sprint.

Done(完成):“完成”状态需要项目各方认同,且符合组织的标准、惯例、和指导方针。每日Scrum简会或Sprint评审会议上汇报为“完成”的产品,必须符合该协商通过的定义。

Sprint Backlog:一个sprint周期内所需要完成的任务,定义团队在Sprint中的任务清单,在Sprint过程中形成,每项任务信息包括负责人及其在Sprint中任一天时的剩余工作量。

Sprint Backlog任务:团队或其成员为把产品Blacklog条目转化为系统功能所需完成的任务。

ScrumMaster: 负责监督整个Scrum进程,修订计划的一个团队成员。

Time-box: 一个用于开会时间段。比如每个daily scrum meeting的time-box为15分钟。

Sprint planning meeting: 在启动每个sprint前召开。一般为一天时间(8小时)。该会议需要制定的任务是:产品Owner和团队成员将backlog分解成小的功能模块,  决定在即将进行的sprint里需要完成多少小功能模块,确定好这个Product Backlog的任务优先级。另外,该会议还需详细地讨论如何能够按照需求完成这些小功能模块。制定的这些模块的工作量以小时计算。

Daily Scrum meeting:开发团队成员召开,一般为15分钟。每个开发成员需要向ScrumMaster汇报三个项目:今天完成了什么? 是否遇到了障碍? 即将要做什么?通过该会议,团队成员可以相互了解项目进度。

Sprint review meeting:在每个Sprint结束后,这个Team将这个Sprint的工作成果演示给Product Owner和其他相关的人员。一般该会议为4小时。

Sprint retrospective meeting:对刚结束的Sprint进行总结。会议的参与人员为团队开发的内部人员。一般该会议为3小时

分类: Agile 标签: ,

Mingle安装说明

2010年5月15日 admin 1 条评论

Mingle介绍

Mingle——ThoughtWorks的敏捷项目管理产品。"Mingle”的中文意思是“使混合,使相混 vi.混合起来;相交往”,Mingle这个名字恰如这个软件提供的功能,是混合了需求、开发、测试、项目管理的混合型工具。

另外可以参考我转载的另一篇文章转载:使用Mingle的十大理由

Mingle安装的条件

目前Mingle的版本是3.1.Mingle可以在Windows,Mac OSX,Linux。在数据库上Mingle要求PostgreSQL 8.2, 8.3 and 8.4或Oracle 10g,所以在安装Mingle前你应该安装好Mingle所需的数据库。

另外,由于Mingle的安装需要有License才能激活基本的功能,所以在安装前最好先申请好License。在下载Mingle的时候,网站会要求你提供邮箱地址,在填写完资料以后,网站就会把1年5个用户的Free License发到你的邮箱。

Mingle的安装

安装PostgreSQL

http://www.postgresql.org/ 上选择8.4.x的PostgreSQL进行安装,我是安装在Windows上的,PostgreSQL提示安装失败,提示信息是“Installation fails with complaint about accessing data\postgresql.conf ” 。Google的解决方案以后终于在PostgreSQL 8.4 在中文 windows 下安装错误的文章中找到了原因和方案

这个错误是在安装新版的PostgreSQL 8.4时遇到的,安装程序在 windows xp sp3下启动(简体中文),一路Next, 没注意“locale”选项,当时选择了default,next, 导致无法安装完成,提示:Installation fails with complaint about accessing data\postgresql.conf

搞半天,最后发现了问题,是PSQL的全文搜索中没有简体中文支持。其实,安装的时候选择"C"就可以了。

其他的步骤就很简单了,在Windows上只要按步骤一步一步往下进行就可以了。

PostgreSQL安装以后,需要为Mingle的应用创建相应的数据库实例以及用户。

安装Mingle

接下来就是安装Mingle了,选择合适的版本,下载以后,启动安装程序,安装成功以后访问Mingle的应用。Mingle首先会要求对Mingle进行配置。

1.数据库配置

按提示配置在PostgreSQL中设定的数据库实例名称,连接用户名和密码。

后面SMTP设置,帐号配置步骤就比较简单了,就不在这里说明了。

 

2.License配置

安装Mingle的最后步骤就是将你收到的License复制到Mingle的注册页面,并完成配置。你就可以开始你的Mingle学习活动了!

分类: Agile 标签:

转载:使用Mingle的十大理由

2010年5月15日 admin 2 条评论

原文地址:http://www.javaeye.com/topic/97542

一、 Mingle是敏捷团队真正想使用的项目管理工具。
使用Mingle,没有重复的数据录入和多余的操作。因为团队真正使用它,这样Mingle就在真实的时间里记录了项目的真正状态。
二、 它能实现你想要的工作方式。
Mingle简单易用,快速,简洁,灵活。尤其是它能毫不费力的将程序代码和需求连接起来。
三、 Mingle可以提高团队生产率,降低项目交付风险。
所有团队成员可以随时随地了解项目的进展情况。它可以展示激烈的软件开发“现场”,这样你可以对开发中出现的各种问题作出快速响应。
四、 它可以帮助团队提高学习速度,探索出适合自己的最佳开发模式。
Mingle自动收集Story(用户案例)、Bug和其它的项目产物,并动态的将它们组织到一起。通过这些数据你甚至会发现一些意想不到的项目趋势状况。
五、 它简单并且强大。
Mingle使用简单。我们只专注真正有价值的数据,并将它们在第一时间呈现出来。因此,Mingle为项目管理提供了强大智能支持,实现了简单和强大的完美结合。
六、 它是一个团队的知识共享平台。
在整个开发团队中,从项目经理、开发人员、业务分析师到测试人员都能从Mingle里面得到他们需要的信息,而不是各自各地的去电子表格和文档中查找。
七、 Mingle会智能的完成你想要的工作。
在你提交自己的程序代码的时候,输入这样的注释消息“修复Bug #541”。Mingle就会将提交的代码和这个Bug关联起来,并自动更新Bug的数据。在浏览这个Bug的时候,可以直接查看到修复这个Bug所改动的所有代码。在此过程中你不需要登陆到Mingle,也不需要做任何额外的工作。
八、 它是由ThoughtWorks制造。
ThoughtWorks在14年以来,一直为用户提供创新的软件解决方案。我们专注于IT方案的技术和交付过程的咨询工作,被行业称为技术潮流的领先者。我们带来了敏捷开发方法,同时Mingle将会支持和推动这一切工作。
九、 Mingle使用你自己的开发过程。
你可以在Mingle中使用自己已经习惯的术语,定制适合自己的各种开发流程。
十、 Mingle入门简单。
Mingle安装简单,并提供一步步的配置向导。安装成功之后,默认附有ThoughtWorks提供的项目模版。可以快速启动一个新的项目。你也可以轻松的将当前项目的数据从Excel导入到Mingle。
    您可以在这里下载观看Mingle的视频演示:http://studios.thoughtworks.com/mingle-project-intelligence/videos。 可以通过下面的链接在线注册申请下载Mingle:http://studios.thoughtworks.com/mingle-project-intelligence/register-your-interest-in-mingle。更多详情请访问Mingle的官方网站:http://studios.thoughtworks.com/mingle-project-intelligence

分类: Agile 标签:

软件开发沉思录阅读笔记二

2010年2月18日 admin 1 条评论

这是《软件开发沉思录》这本书阅读笔记的第二篇,第一篇是软件开发沉思录阅读笔记一是对第六章——对象健身操的阅读笔迹。

第七章——迭代经理是什么角色

什么是迭代经理?

ThoughtWorks的高级架构师Fred George把迭代经理描述成“面向内部的管理角色。迭代经理负责保证故事在团队中流动的顺畅,这牵涉到合理分配任务、在技能需要改变的时候建议更换团队成员。”

怎样成为好的迭代经理?

每天,迭代经理都必须倾听团队的需要并且作出回应。其主要职责就是培养一台润滑良好的“机器”,并依据要求的质量在项目范微内交付功能。

迭代经理应该在技术熟练度和业务知识之间达到一个平衡。敏捷领袖应该“同时对客户和技术都由深刻的理解,这样才能赢得开发团队的尊重。”良好的沟通技巧是必须的。迭代经理的职责之一就是维护开团队与客户,以及与管理阶层之间的关系。

同时,迭代经理必须推动、主张和保障团队成员的权利。

迭代经理不做什么?

与项目经理不同,迭代经理需要在工作第一线,与团队成员一起面对每日的工作活动。

迭代经理与项目

作为次要目标,我期望看到因为迭代经理的工作,团队成员在项目结束的时候变得更为优秀。团队内充满信任,持续提高技能——这是迭代经理的工作。

迭代经理要争取把团队拧成一根绳,让所有的成员能同舟共济。

第十章——领域标注

在过去十年里,众多软件开发者意识到:软件应用程序中最大的复杂度来自于软件要处理的实际问题领域。正因为如此,所谓“领域驱动设计”有两个前提:

  • 大部分软件项目关注的焦点是业务领域和领域逻辑;
  • 复杂的领域设计应该基于模型来进行。

换句话说,领域驱动设计将用业务领域术语表述的业务领域的面向对象模型置于软件系统的核心。数据通常保存在关系数据库里,但看待数据的主视角是领域对象,而不是数据库表和存储过程。核心业务逻辑集中保存在领域模型中,而不是散步在用户界面和应用程序的服务层里。

如果遵循领域驱动设计方法,得到的软件系统就会清晰地区分出领域模型和基础设施(及界面):前者通常较为稳定、生命周期较长;后者通常生命周期较短,并且与具体的技术(例如O/R映射或者WEB框架)相关。这里的挑战在于如何保持两者之间的分野,从而使两者能够各自保持可复用性:一方面,领域模型应该能够在不同的应用程序、不同的服务中使用,或是在技术升级以后继续使用;另一方面,基础设施应该能用于支撑各种领域模型。当然最终的目标是实现基础设施的行业标准化(无论是采用商用软件还是开源软件),从而使应用程序开发者能专注于问题领域。

分类: Agile, 软件设计, 阅读 标签: ,

敏捷思考0.1版

2010年1月31日 admin 1 条评论

最近“如何在让开发团队敏捷起来”的话题时常被公司的兄弟开发团队讨论起来,而且有些团队也开始进行实践,并获得了第一手的体验和经验。这两天也在不断思考如何让自己的开发团队如何敏捷,这篇文章就是用来记录相关的内容,不过自己在这方面额内容涉猎不多,所以把这次敏捷思考定位到0.1版。

变更的成本

软件变更的成本实际上是操纵这软件开发的多种方面。下面这张图描述的是瀑布模型中的变更成本曲线。

未命名

                                               图一

举例来说,如果是犯了需求错误,并在需求阶段发现它,弥补的成本不是很高,仅需要修改需求模型就可以;如果在设计阶段才发现需求的错误,不但需要修改需求模型,基于错误需求模型的相关设计也必须重新评估、设计;在编程和测试阶段发现需求的错误,导致的变更成本就更大了。所以在传统(瀑布或者迭代)开发模式(如下图)中,通过对软件开发过程进行细分,完善流程和规范,尽量保证前置阶段的输出是正确的(通过文档输出、设计评审等手段),目的就是把变更的成本降到最低。

image

但是,我们的现状是:

  • 项目流程过于死板,瀑布式开发
  • 问题暴露延后,测试压力很大
  • 各自开发,没有结对编程,造成能力壁垒
  • 需求变化带来的负面影响
  • 团队不统一认识造成的浪费
  • 项目评估不准,周期长
  • 等待造成的浪费
  • 没有安排优先级造成的浪费
  • …….

注以上内容来自公司其他团队的分享。

那大家不经要问这个是为什么?我自己的回答是以下几点:

首先,在传统模式下每个阶段的工作都由专门角色来负责,需求分析阶段-需求分析师;设计阶段-架构师或开发人员;开发阶段-开发工程师;测试阶段-测试工程师。在这种分工和流程设计的环境下,项目中的每中角色只能接触有限的上下文,每个阶段工作只有有限的人员参与,每个阶段工作的质量直接受限于主要负责人的经验、知识、能力等等。

还有,延迟的结果输出,导致最后的结果设想存在很长时间段的“幻想”期。无论是需求文档、设计文档、测试文档,只有在实际结果产出以后才能得到验证,甚至有些需求理解不符合业务方的期望的问题直到软件在进行客户体验或者上线以后才能被发现。

最后,还有就是主动或者被动地选择低效的沟通方式。人们习惯依赖最低效(至少不是最高效)和繁琐的沟通方式——文档来进行沟通。通过文档进行沟通存在很多的弊端:一、制作繁琐,不但需要文字描述,有时候还需要图文并茂;二、文档输出的质量也不够稳定,很依赖撰写者的描述能力,三、文档的理解也需要耗费时间和资源,理解过程中存在失误。

对敏捷的理解

如果敏捷是要解决传统(瀑布或者迭代)开发模式的弊端就必须解决以下问题:

一、将每个阶段的变更最小化,也就是说要使得需求分析、设计、编码和测试最大程度地正确。如何达到呢?首先,就要求每个阶段的负责人具备更高的能力,这是一个答案,但也不是一个答案,因为个人能力的提升需要一个过程。其次,就是利用“集体智慧”,无论是需求、设计、测试都要充分表达出自己的想法,例如,需求分析师要负责向开发人员和测试人员说明为什么要有这个需求;这个需求是如何实现业务方的需求的;将来业务可能的需求扩展有哪些,和现在需求的关系如何,如何应对将来的发展。开发人员和测试人员会站在各自的角度以及利用自己的专业知识给出需求设计、建模的意见和建议。一句话“三个臭皮匠顶个诸葛亮”,用“集体智慧”去解决瓶颈问题。还有,就是充分的沟通,想必大家都知道沟通的重要性这里就不在叙述了。

敏捷宣言中有若干条价值观或者原则与此相关

原则:

业务人员和开发者应该在整个项目过程中始终朝夕在一起工作。

对卓越技术与良好设计的不断追求将有助于提高敏捷性。

围绕斗志高昂的人进行软件开发,给开发者提供适宜的环境,满足他们的需要,并相信他们能够完成任务。

每隔一定时间,团队都要总结如何更有效率,然后相应地调整自己的行为。

二、减少变更的成本,也就是说当变更无法避免的时候,如何让变更成本最小化。用“运动是绝对的,静止是相对的”这句话套在这里就是“变更是绝对的,不变更是相对的”。如果图一中的变更成本曲线是指数型的话,我们就要想办法把变更成本的曲线来加以改变,下面这张图是理想的变更成本曲线图。

3

那么这种变更成本曲线如何实现呢?我们来数一数手中的武器:

需求的武器有:

  • 界面原型
  • ……,我不熟悉需求分析工作,实在想不出啥

开发的武器有:

  • 单元测试
  • 重构
  • 持续集成
  • 代码生成工具
  • ……

测试的武器有:

  • 自动化测试
  • ……,测试的工作我同样不熟悉,呵呵

但最最重要的还是那个“不是答案的答案”——即要求提高需求分析人员的概念领域建模和业务流程建模能力等等;设计师的面向对象设计能力、架构设计能力;测试人员的测试分析、设计能力:-)。我相信这些能力才是控制变更成本的最有效工具。

不断的观察我们实际的变更成本曲线,从而不断的强大我们的武器、提升我们的能力,最后目标只有一个“面对变更,我们不但无所畏惧,而且自信满满”

敏捷宣言中有若干条价值观或者原则与此相关

原则:

我们欢迎需求的变化,即使在开发后期。敏捷过程能够驾驭变化,保持客户的竞争优势。

简单——尽可能减少工作量的艺术至关重要。

最好的架构、需求和设计都源自自我组织的团队。

三、让变更提早被发现,敏捷开发中倡导的“频繁交付新的软件版本,将尽早将尽量小的可用的功能交付使用,并在整个项目周期中持续改善和增强”能在很大程度上让变更提早被发现,并将变更的成本最小化。敏捷宣言中有若干条价值观或者原则与此相关

价值观:

可以工作的软件重于求全责备的文档。

原则:

经常交付可以工作的软件,从几星期到几个月,时间尺度越短越好。

可以工作的软件是进度的主要度量标准。

对于这点想在日后的文章中再展开叙述。

四、团队间高效沟通和诚意合作。敏捷开发倡导并在某种程度上神话了某些工具,例如白板,“业务人员和开发者应该在整个项目过程中始终朝夕在一起工作”,而实际上只要我们能够了解这些工具或者环境准备都是为了减少沟通障碍、提升沟通效率和效果,就能破除对这些表面功夫的迷信。对于这点也想在日后的文章中再展开叙述。

敏捷尝试计划

主要的敏捷执行流程大致如下图所示

agile_process

下面是几个主要内容的说明:

周期0指的是进入项目流程后的一个阶段,进行的内容包括了最初的分析、建模、分析。这个阶段进行的内容涉及到高层的需求分析、需求建模、设计建模、测试分析等工作,工作内容的范围、难度存在比较大的差异,时间跨度可能有几个小时到1-2周,强烈不建议投入更多的时间,因为那样会有过度建模的危险,另外过度延长可交付软件的交付周期也会导致变更机率的加大。

周期1至n进行的是详细建模、详细设计、开发、测试等一系列工作。在一次发布的周期里,建模工作经常会是分钟级别。产品经理、需求分析师、开发、测试(我们的工作模式很难让业务方一起参与到软件开发的流程中)一起分析正在处理的需求,一起通过白板或者草稿上绘制一张草图,然后产品经理、需求分析师、开发、测试各自进行需求分析、需求建模、设计、开发、测试分析等工作。需求建模和设计建模可以采取高效的工具来进行,例如,需求分析师是可以通过Pencil之类的工具完成界面原型的设计,而开发工程师可以通过UML来描述类图和时序图,从而将主要的设计思想和内容表达出来,至于面面具到的文档可以留到后续的工作中来完善。团队在实现阶段(开发和测试)会花费大量时间。在开发中,遵循和使用TDD、重构、或者代码生成可以有效提升开发效率,而在测试阶段这样敏捷的工具和方法就为数不多了!

在周期0至周期n的过程中,将涉及的评审工作也根据迭代周期穿插进行。在完成了项目后需求、开发、测试工作人员可以根据最终的工作结果完善文档(这些文档对于我们团队在后续的开发、维护工作中还是至关重要的)。

总结

以上就是这段时间对“敏捷开发”的思考和整理,由于没有多少直接的敏捷实践经验,更多的内容要等待通过以后的实践工作来体会和总结。

参考资料

瀑布模型维基百科定义

瀑布模型是由W.W.Royce1970年最初提出的软件开发模型,在瀑布模型中,开发被认为是按照需求分析设计实现测试 (确认), 集成,和维护坚定地顺畅地进行。

在最初的文章中,Royce提倡重复地使用瀑布模型,以一种迭代的方式。但是,大多数人并不知道这一点,一些人也不相信它能够作为一种真实世界的过程使用。在实践中,过程很少能够以纯线性的方式进行。 通过回到前面的阶段或改变前一阶段的结果的迭代是非常普遍的。讽刺的是,在Royce 1970年的那篇文章中他讲述这种模型的目的是作为例子来说明这种模式是有缺陷的、不能工作的。事实上,软件开发相关文章中对这个名词的大量引用正是对这个广泛流行的软件开发做法的一种评判。

瀑布模型(Waterfall Model)最早强调系统开发应有完整之周期,且必须完整的经历周期之每一开发阶段,并系统化的考量分析与设计的技术、时间与资源之投入等,因此瀑布模型又可以称为‘系统发展生命周期’(System Development Life Cycle, SDLC)。由于该模式强调系统开发过程需有完整的规划、分析、设计、测试及文件等管理与控制,因此能有效的确保系统品质,它已经成为业界大多数软件开发的标准(Boehm, 1988)。

敏捷开发维基百科定义

敏捷软件开发又称敏捷开发,是一種從1990年代開始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力。它们的具体名称、理念、过程、术语都不尽相同,相对于「非敏捷」,更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重做为软件开发中人的作用。

分类: Agile 标签: ,