当前位置: 首页 > news >正文

敏捷开发的6个实战经验

摘要:Ulf Eriksson根据自己多年的敏捷开发经历,总结了6个实施敏捷开发的技巧:快速迭代、让测试人员和开发者参与需求讨论、编写可测试的需求文档、多沟通&尽量减少文档、做好产品原型、及早考虑测试等。

在大型企业中经常是各种软件开发模式混用,一些采用敏捷开发,一些则是采用传统的瀑布式或RUP(统一软件开发过程)。敏捷开发,相对传统软件开发模式,它主要是针对快速变化的需求,不断优化管理流程,最终推出优质软件。  

原文作者Ulf Eriksson,是一家在线问题跟踪软件公司的创始人之一,他是敏捷开发的忠实粉丝,已经进行了多年敏捷开发的实践。下面内容主要是作者根据自己多年经历进行的经验总结。  

 

1. 快速迭代 

相对那种半年一次的大版本发布来说,小版本的需求、开发和测试更加简单快速。一些公司,一年仅发布仅2~3个版本,发布流程缓慢,它们仍采用瀑布开发模式,更严重的是对敏捷开发模式存在误解。  

由一年发布2个版本转到一个月发布2个版本,这也不太可能。但是现在来看,快速迭代已经成为事实标准,关键是要比目前的版本发布速度更快一些。  

快速迭代,可以逼迫团队不断优化流程、提升工作效率,不要在无足轻重的事情上浪费时间。如果离deadline还有6个月,那么整个工作节奏必然悠哉。如果每月发布一个版本,那么较以前效率必然会更高。如果发布周期过长,导致无法尽快发现用户需求,进而无法及时改进产品。  

2. 让测试人员和开发者参与需求讨论 

需求讨论以研讨组的形式展开最有效率。研讨组,需要包括测试人员和开发者,这样可以更加轻松定义可测试的需求,将需求分组并确定优先级。  

同时,该种方式也可以充分利用团队成员间的互补特性。如此确定的需求往往比开需求讨论大会的形式效率更高,大家更活跃,参与感更强。  

确定需求时,不要过度盯在细节上。需求报告过于详细,就是一种不敏捷的习惯,还浪费大家的时间。当然,不能错过好点子,但就是不要太细,因为项目真正实施起来时需求将会产生很大的变动。 

3. 编写可测试的需求文档 

开始就要用“用户故事”(User Story)的方法来编写需求文档。这种方法,可以让我们将注意力放在需求上,而不是解决方法和实施技术上。过早的提及技术实施方案,会降低对需求的注意力。  

规划业务需求,可以采用“3W模板”,也就是: 

 

  • 谁(Who)
  • 是什么(What)
  • 为什么(Why)
上面的3W实际上就是描述了相关利益者是谁,他们想要什么,他们为什么有这种需求。下面举一例子进行说明:  

谁(Who)是什么(What)为什么(Why)
用户 希望借助一个应用程序在不同服务器间传输文件 为了存储项目数据

 

为了更加接近“用户故事”,我们可以改写为: 

 

谁(Who)是什么(What)为什么(Why)
消费者/用户想将归档过程数字化为了增强沟通,提高分享效率

 

敏捷项目中编写用户故事有一个常用模板:作为一名[用户类型],我想要[需求],以便于[原因]。应用到这个例子,就是:作为一名用户,我想要将归档程序数字化,以便于增强沟通、提高分享效率。  

多数情况下,需求内容需要更加充实和详细,这一步要放到后面做,开始不要这样。用户故事的方法有时会因过于简短、不断重复而受到批评。这里我们必须明白:需求文档不是散文或诗歌,应该清晰、简明地描述用户需求;需求文档的重点也在于此,不要管形式多变或内容是否重复这样的问题。 

4. 多沟通,尽量减少文档 

任何项目中,沟通都是一个常见的问题。好的沟通,是敏捷开发的先决条件。在圈子里面混得越久,越会强调良好高效的沟通的重要性。  

团队要确保日常的交流,面对面沟通比邮件强得多。  

敏捷开发鼓励日常的协调会议和碰头会,5~7人参与的会议尽量控制在10分钟内。碰头时,要过一遍昨天完成了什么,今天要做什么,哪些问题仍待讨论。可以用Burndown Chart(燃尽图)来形象展示工作进度。每次迭代的时候也都要开一个计划会议和评审会议,一般需要的时间可能会长些,比如半天。这些会议的目的就是对工作查缺补漏。  

评审会议很重要,传统开发模式往往略过该环节,导致一些错误做法不断重复,好的做法无法推广。 

开会时,可以将原先的分组打散,让整个团队都参与到项目的需求讨论和测试中来,这样可以突出成员个人,让大家更乐意参与。  

5. 做好产品原型 

建议使用草图和模型来阐明用户界面。并不是所有人都可以理解一份复杂的文档,但人人都会看图。 

一个常见的问题是软件新的功能与用户想要的不一致。为了避免这一问题,可以模拟真实操作,改进模拟操作过程中难以理解和不清楚的操作行为。  

6. 及早考虑测试 

及早地考虑测试在敏捷开发中很重要。传统的软件开发,测试用例很晚才开始写,这导致过晚发现需求中存在的问题,使得改进成本过高。较早地开始编写测试用例,当需求完成时,可以接受的测试用例也基本一块完成了。  

敏捷开发中一个常见问题就是开发者没有对已有的代码库进行充分的回归测试。迭代周期很短,从开始到交付就是4周的时间,这样可以对迭代的设计、实现和底层测试一块进行回归测试。  

一系列迭代之后,可以只针对测试活动再补充一个迭代。这个迭代可以将重点放在系统测试、与其他系统的集成度、性能等方面。敏捷开发过程中,可能会导致过少的测试文档。如果迭代周期为1个月左右,可以不必对测试文档过于要求,但要制定好测试策略。  

最后 

可能大多数公司或团队还没有开始尝试敏捷开发,不过可以开始从点滴做起,比如开碰头会、为项目管理采用一个更加高效的管理工具等等。最后,希望上面的建议能够为大家的软件开发管理带来帮助。(编译/王殿进) 

转载于:https://www.cnblogs.com/code-style/p/3465777.html

相关文章:

  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • MySQL通过命令导出导入数据和表
  • python列表中的深浅copy
  • mysql高可用方案之主从架构(master-slave)
  • 中国HBase技术社区第二届MeetUp ——HBase技术解析及应用实践
  • Centos 7.4 安装 Redis 全过程
  • cocos2d-x引擎库binary版本制作(Windows环境)
  • 解决jsfl 弹出警告
  • 基于HTML5技术的电力3D监控应用(一)
  • zabbix安装源
  • 教你在 OSX 下最简单搭建 Clojure 开发环境的步骤
  • Java命令学习系列(七)——javap
  • 点滴积累【C#】---将Excel数据导入到数据库
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • JS操作DOM的几个属性与方法
  • JavaScript 如何正确处理 Unicode 编码问题!
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • CentOS 7 防火墙操作
  • centos安装java运行环境jdk+tomcat
  • Docker: 容器互访的三种方式
  • ES学习笔记(12)--Symbol
  • fetch 从初识到应用
  • jquery ajax学习笔记
  • js正则,这点儿就够用了
  • MobX
  • React as a UI Runtime(五、列表)
  • React-redux的原理以及使用
  • Spring声明式事务管理之一:五大属性分析
  • Theano - 导数
  • vue数据传递--我有特殊的实现技巧
  • 阿里研究院入选中国企业智库系统影响力榜
  • 闭包,sync使用细节
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ​人工智能书单(数学基础篇)
  • #define用法
  • #Linux(帮助手册)
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • $$$$GB2312-80区位编码表$$$$
  • (WSI分类)WSI分类文献小综述 2024
  • (第一天)包装对象、作用域、创建对象
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (原創) 未来三学期想要修的课 (日記)
  • (转)为C# Windows服务添加安装程序
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • ../depcomp: line 571: exec: g++: not found
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET MVC第三章、三种传值方式
  • .NET/C# 使用 SpanT 为字符串处理提升性能