最近参加了关于研发效能的培训,结合自己的工作经验,将相关的心得总结出来,希望对大家和自己都有一些帮助。
研发效能
软件研发可以看作是一条流水线:
这条流水线具有很高的灵活性:
- 灵活的最终产品——实现哪些用户需要的功能;
- 灵活的节点间关系——不同节点是可以融合的,例如测试可以放到本地开发中;
- 灵活的节点——节点有多种实现方式,例如测试可以用TDD、BDD;
- 灵活的开发者——对于相同的问题采取不同的方法解决;
研发效能即通过流水线持续地为用户产生有效价值的效率,包括3个方面:
- 快速——很快地生产发布产品;
- 准确——产品对客户、对公司提供价值;
- 持续——能够持续地高效生产;
效能度量
管理学大师彼得德鲁克曾经说过“你如果无法度量它,就无法管理它”(“It you can't measure it, you can't manage it”)。
为了提高研发效能,首先就必须能够度量整个流程,找出流程中关键的点,哪个点效能有问题。
效能度量需要一定的技巧,如果和绩效直接挂钩,往往不能达到效果,甚至会像下面的漫画描述的那样造成不良后果(检查bug修复数就去先产生bug)。
下面列出了可用于有效度量的部分具体指标:
如何建立高效研发流程
成本可以分为生产成本和交易成本。交易成本是指完成工作需要额外处理的内容,例如软件研发中的发布就可以看作一种交易成本。
自动化和持续流程是降低交易成本的有效手段,下面介绍在研发流程的不同阶段建立高效研发流程的常用手段:
代码入库前
- 规范优化流程——获取开发环境、本地开发流程、入库前系统检查;
- 快速反馈——自动化测试、联调环境、并行化提高效率;
- 优化代码入库前流程和代码检查系统——UT、IT、自动化代码检查;
- Trunk-based——代码尽早进入共享分支集成;
代码入库后
- 持续交付——高效发现、定位问题,自动化保证检查效率;
- 持续部署——提高资源使用效率;
代码上线后
- 数据收集和问题定位——打点、Dashboard监控、Logview;
- 功能开关——实现功能的快速“回滚”;
除此之外,针对流水线的优化可以基于以下几个原则进行处理:
-
5个持续;
-
提高测试完整性保证产品质量——建设框架、工具支撑测试用例编写、运行;
-
提高流水线运行速度避免阻塞——包括构建速度、测试速度、反馈速度;
-
提高环境一致性提前暴露线上问题——包括机器、数据、软件、网络;
-
提高灵活性增强有效性——集成内外部工具,流水线可以自助化、自定制使用;
欢迎关注我的个人公众号”My IO“,转载请注明出处。