敏捷开发学习总结(2):敏捷和迭代开发的问与答
2016-10-01 17:16
465 查看
从传统开发模式的思维,转换到敏捷和迭代开发肯定会有很多的疑问,这些疑问通常是公司管理层对敏捷和迭代开发抱怀疑态度,或者没有信心的主要原因,因此,在本文中,我以问答的方式,试图去整理一下自已对敏捷和迭代开发的理解,有不对的地方,请大家帮忙指出啊。
问: 需求没有在项目初期全部细化好,如何保证系统的设计可以满足所有功能?
答: 实践中应用如下方法来进行系统的设计:
1)项目初期会先挑选可形成系统核心架构的需求来实现。
2)当设计不能满足功能的增加或变更时,先通过重构来改进设计,再增加或变更功能。
3)极限编程实践不推荐对未来需求进行过多的预先设计,原因是:
a)为了未来需求所进行的设计会使设计变得复杂
b)有时明天用户会调整或取消掉需求
c)有时过一段时间你掌握了更好的设计方法,b和c这两 点会使开发团队花了时间和精力但是却没有产生效益。
上面提到的第2条给人的感觉不太现实,实际上,它是用以下的方式来保证其可行性的:
a) 应用设计模式,以及面向对象的设计方法,在编码时保持简单设计和弹性设计,迎合未来的需求改变。
b) 将重构作为一项重要的活动,经常性的对你的代码进行重构以保持良好的设计和扩展性。
c) 等等
问: 没有经过整个系统的详细设计,如何保证组件之间的重用?
答:
1)架构师根据经验,和对未来需求的洞察力,在核心架构中设计出一部分可重用的组件。
2)在团队的设计讨论会议上,成员之间通过头脑风暴和讨论,会得到一些共用的组件。
3)极限编程实践中,代码集体所有权的实践方法也使得团队成员能发现系统中重复出现的代码片段,从而立即重构它们以得到可重用的组件。
4)开发过程中,通过对旧的代码进行重构,也有可能得到一些可重用的组件。
5)与软件工程师的技能和经验也有很大的关系,有经验的软件工程师在进行编码时,会分辨出有可能会被重用的部分,并将它们抽取出来封装成可被重用的类或者模块组件。
6)其它...
问: 没有产出详细的设计文档,如何指导资浅人员进行开发?
答:
1)极限编程实践中采用结对编程的方式来培训新人,但是在国内,结对编程似乎有点水土不服,原因普遍是认为结对编程增加了成本,但是不可否认,它确实是培训新人最好的方法。
2)轻量级的文档并不意味不写文档,而是只写有用的文档,通常需要编写系统架构文档或者轻量级的概要设计文档,对于更细节的设计,更多的是鼓励面对面交流的方式来进行。
3)对于上述的第2点提到的面对面交流,并不是资深人员传达设计给资浅人员,而是让资浅人员参与到设计中来,是以平等的方式与资深人员一起讨论和确定最终的设计。
问: 迭代开发的目的是持续的短期交付可运行的软件,可是如何加快开发速度呢?
答: 一些少到只有2、3人的创业团队,但却在极短的时间内开发出优秀的网站或系统,从这些案例中,业界认为可能是过程太沉重而拖慢了开发团队的速度,因此,业界尝试并提出了很多的实践方法,旨在简化开发流程,使开发团队高效而快捷,在保证质量的同时又要求能适应需求的变化,这就是“敏捷”一词的由来吧,目前较常用的一些实践方法有Scrum和极限编程(XP)等,可以参考书籍[敏捷软件开发:原则、模式与实践]和[解析极限编程-拥抱变化]。
问: 上面有提到要尽早取得用户的反馈,可是我们的产品是研发中的产品,哪来的用户来给你反馈?
答: 可以参考腾讯的做法,产品未面世之前,先在公司内部进行产品体验和试用,例如公司各个部门之间试用并收集反馈,或招慕社会上潜在的用户来进行测试,或公开发行内测和beta版等等,总之,跟踪和收集反馈很重要。
问: 研发电子产品时,软件硬件相互影响,没法在短期内得到可运行的系统。
答: 对于嵌入式开发,分离平台无关与平台相关的代码是一个重要的任务,在开发过程中,可先用开发板、PC模拟等方式进行迭代,对于与系统的接口部分,可先将这些部分封装起来,先用桩代码代替。
问: 国内有公司在使用敏捷开法方法吗?
答:初次看到关于迭代和敏捷开发的一些理论,可能会觉得过于激进、且多少带有些不切实际的浪漫色彩,那么,国内有那些公司采用了这些开发方法呢?下面是我搜索到的一些资料供参考:
1)腾讯公司创造了一套自已的开发流程TAPD(Tencent Agile Product Development),使用迭代开发,借鉴Scrum和XP(极限编程)的实践方法,详情可参考网文<<关于腾讯敏捷框架TAPD>>。
2)华为刚开始使用IPD,后来引入CMM(I) (2001年),从2006年起开始尝试使用迭代开发,借鉴Scrum和XP(极限编程)的实践方法,详情请参考网文<<华为公司实际的敏捷项目管理经验>>,信息来源:http://www.infoq.com/cn/news/2008/12/qclub-shenzhen。
3)诺基亚-西门子研发中心在2005年开始尝试Scrum敏捷开发,2007年所有的team开始使用Scrum,信息来源:http://www.infoq.com/cn/interviews/agilechina2009-lvyi#。
4)其它的公司还有上海贝尔、FreeWheel、eBay、中创软件、赛门铁克、TechExcel、轩辕互动、杭州博科软件、ALU(阿尔卡特-朗讯)等,信息来源:http://tech.it168.com/a2009/0807/620/000000620486.shtml、http: //www.agilechina.net/
实际上,敏捷开发目前在国内也是刚刚起步(从06年首届“敏捷中国”开发者大 会的召开算起,到现在才3~4个年头),只有一些大公司、或小型的创业团队、或跨国企业在应用敏捷开发模式,且使用敏捷开发的公司也都是经历从刚认知、到咨询和分析、到小范围试验、再到大范围推广这个过程,且一些公司也不是照搬敏捷开发的那一套,而是结合自已的实际情况,再采用敏捷开发里面的一些有用的实践方法,来形成自已的开发模式,例如腾讯的TAPD框架。
问: 影响敏捷开发方法实施的因素有哪些?
答:
1)敏捷开发中的大部分实践方法,都对程序员的要求较高,例如,开发人员连单元测试都不会写,你不可能期望他能做“测试驱动开发”。
2)用户如何与我们一起工作,如何将短周期的软件版本交付给用户试用以便得到反馈,是个问题。
3)经历"code and fix"造成的项目失败,所以对 “不进行详细的预先设计”等观点也较难接受。
4)鉴于国内开发人员流动频繁的事实,文档的编写已经成为解决人员流动的一种折衷的方法,因此 “轻量级文档”的方法难以实施。
5)一些实践方法,例如结对编程,对国内的公司来说水土不服,难以实施。
7) 很多项目都需要在不同地域的部门之间进行合作,因此,在这种情况下如何建立敏捷团队也是一个问题。
8) 等等
鉴于敏捷开发的实施有以上种种的影响因素,所以说,开发模式和方法不能照搬,需要结合自已公司的实际情况,检讨自已的开发方法,借鉴有用的实践方法,形成适用自已的开发模式。
原文链接:http://blog.csdn.net/kwiner/article/details/5447784
问: 需求没有在项目初期全部细化好,如何保证系统的设计可以满足所有功能?
答: 实践中应用如下方法来进行系统的设计:
1)项目初期会先挑选可形成系统核心架构的需求来实现。
2)当设计不能满足功能的增加或变更时,先通过重构来改进设计,再增加或变更功能。
3)极限编程实践不推荐对未来需求进行过多的预先设计,原因是:
a)为了未来需求所进行的设计会使设计变得复杂
b)有时明天用户会调整或取消掉需求
c)有时过一段时间你掌握了更好的设计方法,b和c这两 点会使开发团队花了时间和精力但是却没有产生效益。
上面提到的第2条给人的感觉不太现实,实际上,它是用以下的方式来保证其可行性的:
a) 应用设计模式,以及面向对象的设计方法,在编码时保持简单设计和弹性设计,迎合未来的需求改变。
b) 将重构作为一项重要的活动,经常性的对你的代码进行重构以保持良好的设计和扩展性。
c) 等等
问: 没有经过整个系统的详细设计,如何保证组件之间的重用?
答:
1)架构师根据经验,和对未来需求的洞察力,在核心架构中设计出一部分可重用的组件。
2)在团队的设计讨论会议上,成员之间通过头脑风暴和讨论,会得到一些共用的组件。
3)极限编程实践中,代码集体所有权的实践方法也使得团队成员能发现系统中重复出现的代码片段,从而立即重构它们以得到可重用的组件。
4)开发过程中,通过对旧的代码进行重构,也有可能得到一些可重用的组件。
5)与软件工程师的技能和经验也有很大的关系,有经验的软件工程师在进行编码时,会分辨出有可能会被重用的部分,并将它们抽取出来封装成可被重用的类或者模块组件。
6)其它...
问: 没有产出详细的设计文档,如何指导资浅人员进行开发?
答:
1)极限编程实践中采用结对编程的方式来培训新人,但是在国内,结对编程似乎有点水土不服,原因普遍是认为结对编程增加了成本,但是不可否认,它确实是培训新人最好的方法。
2)轻量级的文档并不意味不写文档,而是只写有用的文档,通常需要编写系统架构文档或者轻量级的概要设计文档,对于更细节的设计,更多的是鼓励面对面交流的方式来进行。
3)对于上述的第2点提到的面对面交流,并不是资深人员传达设计给资浅人员,而是让资浅人员参与到设计中来,是以平等的方式与资深人员一起讨论和确定最终的设计。
问: 迭代开发的目的是持续的短期交付可运行的软件,可是如何加快开发速度呢?
答: 一些少到只有2、3人的创业团队,但却在极短的时间内开发出优秀的网站或系统,从这些案例中,业界认为可能是过程太沉重而拖慢了开发团队的速度,因此,业界尝试并提出了很多的实践方法,旨在简化开发流程,使开发团队高效而快捷,在保证质量的同时又要求能适应需求的变化,这就是“敏捷”一词的由来吧,目前较常用的一些实践方法有Scrum和极限编程(XP)等,可以参考书籍[敏捷软件开发:原则、模式与实践]和[解析极限编程-拥抱变化]。
问: 上面有提到要尽早取得用户的反馈,可是我们的产品是研发中的产品,哪来的用户来给你反馈?
答: 可以参考腾讯的做法,产品未面世之前,先在公司内部进行产品体验和试用,例如公司各个部门之间试用并收集反馈,或招慕社会上潜在的用户来进行测试,或公开发行内测和beta版等等,总之,跟踪和收集反馈很重要。
问: 研发电子产品时,软件硬件相互影响,没法在短期内得到可运行的系统。
答: 对于嵌入式开发,分离平台无关与平台相关的代码是一个重要的任务,在开发过程中,可先用开发板、PC模拟等方式进行迭代,对于与系统的接口部分,可先将这些部分封装起来,先用桩代码代替。
问: 国内有公司在使用敏捷开法方法吗?
答:初次看到关于迭代和敏捷开发的一些理论,可能会觉得过于激进、且多少带有些不切实际的浪漫色彩,那么,国内有那些公司采用了这些开发方法呢?下面是我搜索到的一些资料供参考:
1)腾讯公司创造了一套自已的开发流程TAPD(Tencent Agile Product Development),使用迭代开发,借鉴Scrum和XP(极限编程)的实践方法,详情可参考网文<<关于腾讯敏捷框架TAPD>>。
2)华为刚开始使用IPD,后来引入CMM(I) (2001年),从2006年起开始尝试使用迭代开发,借鉴Scrum和XP(极限编程)的实践方法,详情请参考网文<<华为公司实际的敏捷项目管理经验>>,信息来源:http://www.infoq.com/cn/news/2008/12/qclub-shenzhen。
3)诺基亚-西门子研发中心在2005年开始尝试Scrum敏捷开发,2007年所有的team开始使用Scrum,信息来源:http://www.infoq.com/cn/interviews/agilechina2009-lvyi#。
4)其它的公司还有上海贝尔、FreeWheel、eBay、中创软件、赛门铁克、TechExcel、轩辕互动、杭州博科软件、ALU(阿尔卡特-朗讯)等,信息来源:http://tech.it168.com/a2009/0807/620/000000620486.shtml、http: //www.agilechina.net/
实际上,敏捷开发目前在国内也是刚刚起步(从06年首届“敏捷中国”开发者大 会的召开算起,到现在才3~4个年头),只有一些大公司、或小型的创业团队、或跨国企业在应用敏捷开发模式,且使用敏捷开发的公司也都是经历从刚认知、到咨询和分析、到小范围试验、再到大范围推广这个过程,且一些公司也不是照搬敏捷开发的那一套,而是结合自已的实际情况,再采用敏捷开发里面的一些有用的实践方法,来形成自已的开发模式,例如腾讯的TAPD框架。
问: 影响敏捷开发方法实施的因素有哪些?
答:
1)敏捷开发中的大部分实践方法,都对程序员的要求较高,例如,开发人员连单元测试都不会写,你不可能期望他能做“测试驱动开发”。
2)用户如何与我们一起工作,如何将短周期的软件版本交付给用户试用以便得到反馈,是个问题。
3)经历"code and fix"造成的项目失败,所以对 “不进行详细的预先设计”等观点也较难接受。
4)鉴于国内开发人员流动频繁的事实,文档的编写已经成为解决人员流动的一种折衷的方法,因此 “轻量级文档”的方法难以实施。
5)一些实践方法,例如结对编程,对国内的公司来说水土不服,难以实施。
7) 很多项目都需要在不同地域的部门之间进行合作,因此,在这种情况下如何建立敏捷团队也是一个问题。
8) 等等
鉴于敏捷开发的实施有以上种种的影响因素,所以说,开发模式和方法不能照搬,需要结合自已公司的实际情况,检讨自已的开发方法,借鉴有用的实践方法,形成适用自已的开发模式。
原文链接:http://blog.csdn.net/kwiner/article/details/5447784
相关文章推荐
- 敏捷开发学习总结(1):传统序列式软件开发方法的缺点,以及迭代开发方法的选择
- 敏捷开发学习总结(1):传统序列式软件开发方法的缺点,以及迭代开发方法的选择
- 敏捷开发学习总结(2):敏捷和迭代开发的问与答
- 敏捷开发学习总结(4):极限编程(XP)学习笔记
- 敏捷开发学习笔记:总结
- 敏捷开发系列学习总结(4)—Git管理工具sourcetree的安装
- 敏捷开发系列学习总结(8)——创业公司研发团队建设
- 学习敏捷开发(trello)之party_bid卡片1总结
- 敏捷开发系列学习总结(2)——Bug修改流程
- 敏捷开发系列学习总结(5)——这几招搞定团队协同Coding
- 敏捷开发系列学习总结(3)——我怎么开发软件项目
- 敏捷开发系列学习总结(8)——创业公司研发团队建设
- 学习敏捷开发(trello)之party_bid卡片2总结
- 敏捷开发系列学习总结(1)——版本管理发布流程
- 快速上线—— 开发、运维和敏捷迭代(社区活动总结)
- 敏捷开发系列学习总结(5)——这几招搞定团队协同Coding
- 学习敏捷开发(trello)之party_bid卡片3,4总结
- 敏捷开发学习总结(3): 思考开发文档的利与弊
- 敏捷开发学习总结(4):极限编程(XP)学习笔记
- 敏捷开发系列学习总结(7)——敏捷开发的10大指导原则