1、 持续代码扫描的演进之路熊志男 京东时间线2015/02搭建代码扫描平台小团队成功案例2015/05大团队成功初见成效2015/072015/10大团队遇到瓶颈2016代码扫描持续演进开始之前:公司统一代码质量平台l 统一部署和统一入口;l 基于SonarQube和Jenkins 实现;l 多Master,执行速度快;l 集成其他插件(Findbugs、PMD、Checkstyle等)l 固定周期代码扫描;l 上线前代码质量分析;l 全量规则代码扫描;l 基于SonarQube的Total Quality 质量体系(多维度)l 代码质量周报l 代码质量靠部分成员自觉;l 团队代码质量数据在研发
2、体团队代码质量数据在研发体系垫底系垫底技术&实现流程&标准团队&文化敏捷先锋团队:首先尝试持续代码扫描大团队敏捷转型敏捷转型先锋团队Scrum实践持续集成持续代码扫描敏捷先锋团队:首先尝试持续代码扫描大团队敏捷转型敏捷转型先锋团队Scrum实践持续集成持续代码扫描持续集成之:持续代码扫描l 原生的开源框架:SonarQube和Jenkins;l 单Master,单执行机,满足小团队需求;l 及时反馈机制:Jenkins的Monitor viewl 集成其他插件(Findbugs)l 以手工配置为主l 团队单分支开发模式;l 提交触发代码扫描;l 基于基于80/20原则的原则的TOP20代码规则
3、集代码规则集;l 关注单个质量维度:代码违规l 设置代码违规数量阈值l 研发Leader重视代码质量;l 团队成员积极性高l 敏捷文化形成技术&实现流程&标准团队&文化初露锋芒:小团队影响力提升优秀实践:部门 公司 业界横向推广:大团队全面铺开l 整合开源框架:POPCI系统;l 单Master,多执行机,执行机与应用绑定;l 两种反馈机制:实时反馈和周报数据反馈;l 集成其他插件(Findbugs,CPD);l 通过脚本实现配置和批量导出数据;l 各团队开发模式不统一;l 主干提交触发代码扫描;l 基于基于80/20原则的原则的TOP9代代码规则集码规则集;l 基于SonarQube的质量体
4、系:SQALE(多维度)l 设置代码违规数量基线阈值(不新增)l 各研发Leader积极推动减少代码违规数据;l 各团队成员配合要求修改违规l 各团队文化各不相同技术&实现流程&标准团队&文化傲视群雄:大团队优秀实践阶段成果:代码质量数据研发体系排名第一;研发人员逐步建立代码质量红线意识;瓶颈期:无法深入落地问题来了:缺乏持续的目标;基础框架不完善,维护任务量井喷;流程标准不灵活,各团队无法定制;易用性较差,团队成员学习成本高;蛰伏期:持续改进从研发痛点入手与架构师沟通了解团队痛点个人违规数据汇总优化基础框架执行机资源池并行多流水线流程/标准定制化Merge Request流程代码规则集裁剪简
5、化运维工作自动化运维脚本引入开源类库持续演进目标的转变追求绝对数字消灭TOP9违规易用性差向上负责提升排名服务研发提升相对质量过滤低级错误提高易用性体现研发个人代码质量向下负责持续改进流程演进流程/标准演进:由统一规则集 转变为 统一规则集和定制规则集相结合;由分散复杂的质量维度 转变为 简明集中的质量维度;由单个串行流水线 转变为 多个并行流水线;由单一的代码扫描机制 转变为 全流程的代码扫描机制;质量维度聚合可发布性:可靠性:安全性:可维护性:全流程代码扫描l 编辑器插件代码扫描;(团队规则集)l GIT Pre-commit 代码扫描 (零容忍规则集)l 分支变更代码扫描;(团队规则集)
6、l GIT Merge request代码扫描:(团队规则集)l 主干变更代码扫描;(POP基础规则集)本地代码扫描分支代码扫描主干代码扫描流程改进框架改进单服务器&单执行机小团队时期大团队推行多服务器(主/备)执行机资源池(独占资源池、共享资源池)外部系统对接(获取批量系统数据)扫描提速(Maven任务多线程执行)拆分系统(独立编译中心)流程改进简化运维手动配置代码扫描任务手动导出代码质量数据手动配置脚本化&系统化自动配置代码扫描任务(Python Jenkins Client)自动导出代码质量数据(SonarQube api)对接gitlab系统(Python gitlab Client)
7、提供一键接入功能及接口实现落地风口来了更加关注内在质量:由面向用户的前端系统 转变为 主要提供服务的后台中心系统由要求不新增违规 转变为 清理遗留代码违规由TOP9规则集为主 转变为 POP基础规则集(50)为主由以代码质量为主 转变为 代码质量、安全质量、可维护性多维度由测试推动为主 转变为 研发主动要求接入代码扫描效果用户数据&开放合作用户增加:用户量200+,超过部门内部总研发人数;由部门内部用户扩展至部门外部用户(服饰家居、零售、运营研发);开放合作:与外部门合作进行SonarQube插件开发;制定执行机资源共享计划,为外部门提供代码扫描支持;效果研发团队内建质量提升过滤低级违规清理遗留违规清理冗余代码交付效率提升减少返工早发现、早修改代码质量意识提高主动扫描代码不断提出改进需求影响力提升优秀团队展示平台对外输出实践效果测试团队尽早介入项目尽早发现风险利用工具协助提升判别代码质量能力高研发测试比过滤低级错误抽出时间开发测试效率工具全年无线上事故通过关注代码提升测试覆盖率更加关注业务逻辑问题影响力提升完整解决方案输出单个工具输出