- 本文说明
本文是由于第一篇文章《敏捷开发相关说明》,虽然提了很多理论和方法,但没有提供太多的落地措施;故本文提供较多的落地措施。
本文认为,要想实施敏捷开发方案,必须首先建立一个高效的工作团队,并依据流程沟通需求,进行程序研发和产品构建,并不断测试,最终实现项目。
本文在本方案中,会按照创建高效工作团队,敏捷匹配需求,敏捷研发与构建和测试驱动开发展开。
- 创建高效工作团队
- 团队应该对事不对人
好的团队,首先应该是对事不对人的。因为团队是执行公司战略目标的,而执行过程中,首要任务是把事情做好,然后才是其他。
团队对事不对人的规则一般如下:
- 目标导向,结果第一;
- 团队钝感,不在意评价,而在意结果;
- 信任并适度容忍团队成员;
- 使他人更好得工作;
- 帮助他人。
- 培养团队的学习氛围
研发团队和其他团队不太一样的地方在于,研发首先是一个智力活动,需要不断学习新事物。因此,对于研发团队来说,首先是培养团队的学习气氛和学习习惯。
团队的学习气氛的培养的一些方法:
- 技术会议;
- 倡导大家在工作之余学习技术和业界热点;
- 业界专家技术讲座;
- 专业知识专项学习。
- 培养团队的积极工作态度
积极工作,是团队成功的关键。积极,不仅体现为努力,更在于积极处理事情,而不是互相推诿责任。
积极的工作态度,可以通过如下方法创建完成:
- 积极树立工作目标;
- 正视冲突和问题,并积极寻找解决方案;
- 信任并协助队友;
- 完成工作目标,不过分计较个人得失。
- 敏捷匹配需求
- 让用户参与需求
理论上说,研发应该开始于需求,并结束于需求满足。但现实却表明,需求通常是变化的,而且,即使是用户本身,也通常搞不清自己的需求。因此,首先做的事情是,让用户参与需求。
需求通常是不断变化,用户、产品负责人、项目经理和各模块负责人通常应该和用户保持持续的互动,保证需求可以持续满足。
同时,敏捷的思路是:构建不同时期的产品,满足用户不同时期的需求。同时,也应该确定,在新的产品研发出来之后,让用户针对新的需求付出新的费用。
在用户参与需求阶段,产品负责人应该保证需求得到合理规划,即在不同阶段针对产品提供不同的功能,从而保证产品成功。
- 对需求进行控制
对需求进行控制,是保证研发成功的关键。需求太多,变化太频繁,通常会导致研发失败。
需求是不断变化和发展的,但部分阶段的需求,是可以进行控制的。保持需求稳定,并让需求阶段性的升级,从而保证研发成功和产品迭代。
在需求阶段,需要不断提供《需求确定表》,从而控制并不断升级需求。
- 设计参与
设计,通常是架构师的责任。好的设计,通常和好的需求想匹配,并能够适应未来时期的需求。架构师设计架构,应该考虑程序本身的效率,也应该考虑研发的难度和维护的成本。同时,也要注意,设计也是在研发阶段是可以不断调整的。
在设计阶段,会输出《设计说明书》,但最重要的是让研发团队理解。
- 不断更新需求
正如在上面说的,需求是不断变化的,要不断更新需求。
更新需求的方式是迭代,而不是一下子变化;在更新需求阶段,需要让客户参与,并考虑架构设计、项目管理和版本特性。
对于需求的变更,一方面,可以让自己的产品在市场上盈利;另一方面,如果是项目制的,可以让用户根据自身需求支付更多报酬。
同时,当用户需求过多且复杂时,可以针对用户提出的需求,做出部分重要但是并不复杂的功能,从而获取用户部分报酬。
- 敏捷研发与构建
- 各种工具的应用
敏捷开发,可以利用多种工具。主要工具类型如下:
- 版本控制工具:SVN,Clear Case,Git等版本控制工具;
- 进度控制工具:燃尽图等工具;
- 测试驱动工具:注重测定的驱动开发;
- 代码互检工具:对代码进行互检,如gerrit等工具;
- 质量控制工具:主要是代码规范检查工具,如python的flake8等;
- 产品生成工具:主要是自动构建工具,如Jennkins等。
不同工具的组合运用,是高效开发的重要支撑和保障。
- 持续构建
敏捷开发需要持续构建。持续构建的好处是:及时发现问题,并及时改正。
持续构建产品,一般可以通过自动编译工具或自动生成工具来实现;通过该工具,及时发现程序存在的问题,并及时改正,将会维护程序的正确性,并保证代码的可维护性。
- 注意流程改进
对于软件开发来说,现代软件的复杂性,已经让软件开发不仅仅是个人的单打独斗,而成为一项系统工程。在软件开发中,如果出了问题,首先要思考是哪个流程出了问题;同时,应该在研发中,看是否可以进行流程改进,从而不断改进研发的绩效。这个工作是需要全员参与的,也是不断优化的。
- 源代码就是最好的文档
与传统的瀑布式开发不同的是,敏捷开发不认同繁重的文档工作,而是认为文档应该简明扼要;同时,敏捷开发认为,源代码就是最好的文档。
这就要求:
- 源代码编写尽量符合规范;
- 源代码编写具有自明性;
- 开发人员具有维护意思和重构意识。
- 测试驱动开发
- 提供好的产品是研发最终的目的
敏捷开发的一个重要思想是:测试就是研发的一部分。
这个思想的基础是:研发最终提供的产品,是要保证可用的,这就要求在研发过程中,始终保持产品的可用性。因此,在研发过程中,测试必不可少,要把测试贯穿于研发流程中。
- 在不断测试中开发
测试,包括黑盒测试和白盒测试。研发本身需要保证自身产品的正确性;同时也要满足使用者的要求。
- 代码互检
代码互检可以让软件工程师互相学习编程技能,并在互相检查中互相提高,是一项非常值得倡导的方法。
- 附注
敏捷开发有很多要点,但组建团队并不断实施流程,是一个非常可取的方法。