“所以,我想向您介绍一下敏捷和Scrum。”
“在 21 世纪初,人们对编程的看法发生了天翻地覆的变化。”
“每个人都相信长期计划行不通,所以他们决定完全放弃它。”
“他们是怎么做到的?”
“就是这样。”
“他们发明了最灵活的项目管理方法。”
以下是敏捷开发背后的主要思想:"
- 人员和沟通比流程和工具更重要;
- 工作产品比详尽的文档更重要;
- 与客户合作比满足合同条款更重要;
- 愿意改变比坚持原计划更重要。
以下是快速开发的原则:
- 通过尽早和持续地提供有价值的软件来满足客户;
- 即使在开发结束时也欢迎需求的变化(这可以提高最终产品的竞争力);
- 经常交付工作软件(每月或每周或更频繁);
- 在整个项目期间密切客户和开发人员之间的日常沟通;
- 该项目由积极进取的个人开展,他们获得了必要的工作条件、支持和信任;
- 交流信息的首选方法是个人(面对面)交谈;
- 可工作的软件是衡量进步的最佳标准;
- 赞助商、开发人员和用户应该能够无限期地保持恒定的步伐;
- 不断专注于提高技术卓越性和用户友好的设计;
- 简单是不做多余工作的艺术;
- 最好的技术要求、设计和架构来自一个自组织的团队;
- 不断适应不断变化的环境。
“软件开发的主要问题是,在任何阶段,参与者都没有关于要做什么的完整信息。”
“客户可以告诉你他对这个项目的设想,但他会漏掉一些东西或者认为有些东西是理所当然的。”
“经理通常必须将需求从编程术语翻译成客户的语言,然后再翻译回来。”
“有太多的不确定性。”
“通常客户的要求是这样的:以某种方式做,然后给我看——如果我不喜欢,你可以重做。”
“呃……太糟糕了。”
“根据新范式,程序员不再开发产品或程序。相反,他们正在实施客户需要的功能。”
“有什么不同?”
“好吧,假设程序开发过去需要一年时间。六个月后才能看到任何东西。这就像盖一座大房子:首先,你为地基挖一个坑,然后浇筑地基,建造墙壁、屋顶、装饰等。”
“但现在程序员试图尽快发布所需的功能。这就像先盖小屋,然后是移动房屋,然后是小房子,然后才是大房子——分期付款。”
“考虑到客户可能并不完全知道他想要什么,那么这是一种非常合理的做法。”
“假设顾客想要一个大的狩猎小屋。”
“开发商为他盖了一个小房子。他在里面住了一个冬天。然后他决定不喜欢木头房子。让我们用砖头盖一个吧。”
“他在湖边住了一个夏天,但蚊子把他活活吃掉了。他听说哪里有湖很凉爽,所以他很想拥有一个。但现在他不想要一个湖。而且它会更容易建造房子是这样的:没有湖就没有洪水的威胁,你可以在地面上而不是在高跷上建造房子,这样会快 25%。”
“一个有趣的类比。客户真的经常改变他们的要求吗?”
“是的,但问题不在于客户。”
“首先,很难想象未来会怎样。管理人员、测试人员和程序员都会这样做。他们也会根据事情的发展情况改变想法。”
“其次,客户的需求不是最重要的吗? 毕竟这一切工作的重点是创造客户需要的东西,而不是他最初说要创造的东西。”
“确实,它曾经是这样工作的:业务分析师会列出所有需求。他们会将此列表包含在合同中,然后签署合同,然后仅根据列表进行工作。”
“如果清单遗漏了客户真正需要但忘记的东西,没有人会对此采取任何措施。”
“原来如此,有计划更容易,但不是所有事情都可以按计划去做!”
“确切地。”
“这就是发明敏捷开发方法的原因。”
“今天我将向您介绍Scrum——其中最流行的一种。
“Scrum 的主要特征是将项目开发划分为小迭代——通常持续 2-4 周。每次迭代称为冲刺。”
“在冲刺开始时,召开冲刺计划会议,持续3-4小时。”
“最后,有一个所有完全完成的任务的演示。”
“以下是一切通常的运作方式:”
“在第一次冲刺之前,客户(或客户代表)形成了一个需求列表,即程序应该能够完成的一组事情。这些需求通常称为用户故事,而客户通常是叫产品负责人。”
“他被称为产品负责人,因为产品是为他编写的。他,而且只有他,定义了需求列表——什么、什么时候、以什么顺序。”
“另外,产品负责人通常会分配任务优先级。优先级最高的任务将首先执行。整个需求列表也称为产品待办事项列表。”
“当冲刺开始时,每个人都聚在一起开会。scrum master通常是团队成员,通常会主持会议。会议的目标是为当前冲刺(开发迭代)选择任务(用户故事)。 “
“首先,团队为每项任务分配一个粗略的估计,以抽象人日为单位,也称为故事点。 然后,团队决定他们在冲刺期间有多少任务可以完成。”
“同样,是团队自己决定他们在冲刺期间有多少时间可以完成的任务。”
“假设产品负责人希望团队选择前 7 个任务,但只选择了 5 个,然后任务 6 和 7 被推迟到下一个 sprint。如果这不适合产品负责人,他可以提高任务的优先级6 和 7 以确保它们被选中,但其他一些任务将从冲刺中退出。”
“ scrum master还可以提议将一些任务分解成更小的任务,并为它们设置不同的优先级,尽可能让产品负责人开心。”
“这就是会议的重点:任务可以改变和拆分,优先级可以改变等等。这是一开始不可见的工作,但带来了很多价值。”
“明白了,这就像开车一样,即使你一开始以为直走就行了,但事实是,你需要不断地避开坑洼,左右转向,超越别人或让别人超越你。”
“是啊,类似的东西。”
“为 sprint 选择的任务列表称为sprint backlog。”
“程序员决定谁来做什么,然后他们才开始工作。”为了提高效率,Scrum 建议每天召开 5-15 分钟的会议,每个人都可以互相告诉对方他们昨天做了什么以及他们在做什么今天打算做。”
“团队合作。我可以尊重这一点!”
“为了使事情更容易可视化,通常建议在特殊板上显示当前的冲刺状态:”
“注意左边的三列。”
“缩写的任务名称写在便利贴上。便利贴根据其状态(计划、进行中、完成)放置在不同的列中。”
“在右侧,您可以看到一个燃尽图。对于每一天,该图表都会列出仍未完成的任务。理想情况下,未完成任务的数量在冲刺期间降至零。”
“当 sprint 结束时,scrum-master会给出一个演示来展示所有已经完全完成的事情的清单。”
“然后他召开了一个 sprint回顾会议,这也持续了几个小时。在这次会议期间,与会者通常试图弄清楚哪些事情进展顺利,哪些事情(以及如何)可以做得更好。”
“通常在 2-3 次冲刺之后,您可以识别并消除阻碍团队更高效工作的主要问题。这可以在不增加团队工作量的情况下提高生产力。这在敏捷方法论时代之前是不可能的 。 ”
“有时在冲刺期间也会召开梳理会议。其目的是计划下一个冲刺。参与者通常会在这次会议上明确任务优先级。他们还可以将一些任务拆分成多个部分和/或将新任务添加到产品待办事项列表中。 ”
“好吧,这基本上是我所有的。这只是一个概述。不可能用几句话来解释所有的事情,但你可以在这里阅读一篇关于这个主题的好文章:”
GO TO FULL VERSION