敏捷开发的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个月左右,可以不必对测试文档过于要求,但要制定好测试策略。 

最后

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


http://www.csdn.net/article/2013-12-09/2817746-6-practical-agile-techniques

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

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

相关文章

java 正则匹配括号是否成对_十分钟学会正则表达式

正则表达式用处挺广的,主要用于处理字符串。正则引擎想要在计算机语言中使用正则表达式,那么这门计算机语言必须要利用正则引擎去实现相应的正则库。主要的正则引擎分为以下两类:DFA 确定性的状态机。不使用”回溯”,效率高&#…

android token机制_你真的了解16.6ms刷新机制吗?

阅读本文前,请您先点击上面的蓝色字体“Android扫地僧”,“关注”后再点击置顶公众号,优质干货,重磅资源第一时间送达。散人丶https://juejin.im/post/5ce686a46fb9a07ec754f470前言之前在整理知识的时候,看到android屏…

dfa2.java 原理_DFA编程练习2

题目: 请设计DFA, 使其接受全部含有奇数个1的串, 假定 ∑ {0, 1}.解:DFA可能出现两个个状态:qeven: 读入了偶数个1的串.qodd: 读入了奇数个1的串, 该状态也是终结状态(accept state).它们的状态转移图如下:编写程序, 运行效果如下:测试用例说明:0000不被上图的DFA接受1111不被…

fread读取整个文件_qt如何实现大文件的加载和显示

最近研究了下如何用qt的原生控件来加载和显示大文件(>1G),分享下一些摸索经验。下文源码:compilelife/loginsight​github.com文件的内存映射在开始qt部分之前,我们先了解一个概念——文件的内存映射。我们知道一般…

linux内核编译及添加系统调用(hdu)_浅谈关于Linux内核write系统调用操作的原子性

Linux系统的write调用到底是不是原子的。网上能搜出一大堆文章,基本上要么是翻译一些文献,要么就是胡扯,本文中我来结合实例来试着做一个稍微好一点的回答。先摆出结论吧。结论包含两点,即write调用不能保证什么以及write调用能保…

java 判断对象为控制_Java流程控制

Java流程控制1、Scanner对象①java.util.Scanner是Java5的新特性,可以通过Scanner类来获取用户的输入。②基本语法:1 Scanner snew Scanner(System.in);③通过next()和nextLine()方法接受用户输入,通过hasNext()和hasNextLine()方法来判断用户…

directx最终用户运行时_运维定位服务故障时,前5分钟都在忙啥?

遇到服务器故障,问题出现的原因很少可以一下就想到。我们基本上都会从以下步骤入手,这些也是绝大多数运维工程师在定位故障时前几分钟的主要排查点:一、尽可能搞清楚问题的前因后果不要一下子就扎到服务器前面,你需要先搞明白对这…

IDE--ubuntu下安装 Source insight

2013-06-03 09:05 74人阅读 评论(0) 收藏 举报 习惯了在source insight下编辑阅读源码,在linux下用vi总是用不好 ,还是在ubuntu上用回熟悉的source insight。 在ubuntu中,安装windows程序用wine,然后用wine安装windows软件即可。…

python中什么是数据驱动_利用Python如何实现数据驱动的接口自动化测试

前言 大家在接口测试的过程中,很多时候会用到对CSV的读取操作,本文主要说明Python3对CSV的写入和读取。下面话不多说了,来一起看看详细的介绍吧。 1、需求 某API,GET方法,token,mobile,email三个参数 token为必填项 mo…

密码锁 java接口_从synchronized和lock区别入手聊聊java锁机制

写这篇文章之前,我去百度了一下啥叫锁,百度百科上写道:置于可启闭的器物上,以钥匙或暗码开启。确实我们一般理解的锁就是门锁,密码锁,但是在计算机科学中,锁又是啥,说实话&#xff0…

lua 给userdata设置元表_lua学习之复习汇总篇

第六日笔记1. 基础概念程序块定义在 lua 中任何一个源代码文件或在交互模式中输入的一行代码程序块可以是任意大小的程序块可以是一连串语句或一条命令也可由函数定义构成,一般将函数定义写在文件中,然后用解释器执行这个文件换行在代码中不起任何作用&a…

集群服务负载均衡------LVS

个人的理解,以一种通俗易懂的方式讲述出来,如果有哪些地方说的不正确的话,希望大家留言指出来。笔者会非是常的感谢! Cluster服务器集群,直接理解为一些单一的服务器的集合通过某种方式组合起来,为客户端提…

tomcat jsp导入java_[导入]Tomcat JSP Web 开发中的乱码问题小姐

1. 静态页面的乱码问题文件的编码和浏览器要显示的编码不一致。1) 检查文件原始的编码, 可以用记事本打开, 然后选择另存为来看;2) 给当前页面加入一个指令来建议浏览器用指定的编码来显示文件字符内容.3) 如果系统是英文XP,没装东亚字符集支持, 也会显示乱码.2. JSP 页面的乱码…

四大开源分布式存储_ipfs分布式存储行业面临着四大主要风险,你知道是哪些吗?...

为了响应国家号召、推动分布式存储技术落地、防御行业风险,中国分布式存储产业联盟启动,全国从事IPFS以及分布式存储从业者对行业风险及联盟成立的必要性达成了高度共识,目前有36家以上的IPFS分布式存储行业企业填写了联盟申请表。几位国内知…

pjsua帮助手册(中文)

原文地址 : http://www.pjsip.org/pjsua.htm 介绍 PJSUA是一个开源的命令行SIP用户代理(软电话),用PJSIP协议,PJNATH,和PJMEDIA实现。 它虽然只有很简单的命令行界面,但是功能齐全。 SIP功能: 多…

js date转成 时间字符串_秋招快要开始了,前端笔试中的坑位-JS隐式转换问题

我们在写笔试题的时候,经常碰到涉及隐式转换的题目,例如"1" 2 obj 1 [] ![] [null] false 和 叫做严格运算符,对象类型指向地址相同或原始类型( 数值、字符串、布尔值)值相同;叫做相等运算…

Java中快速处理集合_简洁又快速地处理集合——Java8 Stream(上)

作者:Howie_Y,系原创投稿主页:www.jianshu.com/u/79638e5f0743Java 8 发布至今也已经好几年过去,如今 Java 也已经向 11 迈去,但是 Java 8 作出的改变可以说是革命性的,影响足够深远,学习 Java …

eclipse编译java项目class文件_动态编译 Java 代码以及生成 Jar 文件

导读: 最近在看 Flink 源码的时候发现到一段实用的代码,该代码实现了 java 动态编译以及生成 jar 文件。将其进行改进后可以应用到我们的平台上,实现在平台页面上编写 java 代码语句,提交后由后台进行编译和打成 Jar 包再上传到指…

Dx11DemoBase 基类(三) 实例应用 【已实现】【附带源码】

现在我已经到哪了? 读书时,尤其是技术知识书籍, 我一般会担忧自己是否陷得太深, 细节关注得太多, 而忘了整体的过程; 一直以来对Direct3D 很畏惧, 因为太多函数和细节;现在我必须暂缓下&#x…

修改 decimal 默认值为0.00 sql_被经理邀请去“爬山”,只是因为我写错了一条SQL语句?...

作者:isysc1链接:https://juejin.im/post/5f06a2156fb9a07e5f5180df来源:掘金前戏SQL 写的妙,涨薪呱呱叫!新来的实习生小杨写了一条 SQL 语句SELECT wx_id from user WHERE wx_id 2当小杨迫不及待准备下班回家的时候&…