随着数字经济的快速增长,应用数量激增,软件已无处不在。凡是软件都可能存在缺陷(Bug),缺陷遗留到现网就可能产生问题,软件问题轻则影响工作生活体验,重则产生巨额经济损失,甚至危及生命安全。例如,1996年阿丽亚娜 5 号火箭在首次发射后的37秒即激活了自毁装置。事后查明,事故原因就在于一个小小的代码整型溢出缺陷。
因此,如何守护好软件质量,并持续守护存量代码质量、开发高质量的代码是企业面临的巨大挑战。在这个过程中,代码检查工具是众多企业降低损失的有效手段。在上面的例子中,如果在开发阶段及早引入代码检查工具,事前发现问题并及时修复,或许可避免近数十亿美元的损失。
代码检查工具是低成本守护代码质量的最优选择
软件专家卡珀斯·琼斯在其著作《Applied Software Measurement》中明确指出:“85%的软件缺陷发生在编码阶段,后端测试修复缺陷的成本是开发阶段40倍”。业界实践经验也表明,在软件生命周期中缺陷发现越早、修复越早,缺陷的影响和修复代价就越小。
代码检查工具能够自动化地拦截代码质量和安全问题,确保编程规范落地,有效守护软件产品质量安全,因此在业界已得到广泛实践。中国企业对代码质量的重视也在持续提升,云计算开源产业联盟《中国 DevOps现状调查报告2022》指出,应用自动化代码扫描的企业占比已超七成。
值得关注的是,在这一市场趋势下,国产软件工具仍需快速自主创新。Gartner 2021年AST魔力象限报告指出,目前占市场主导地位的代码检查工具多数来自国外企业,虽然近几年国产代码检查工具发展迅猛,但与行业领导者仍然存在差距,亟需加快研发完全自主的代码检查工具,以应对国内软件企业蓬勃发展所需。
高质量代码的华为实践
华为早在1998年就开始引入商用代码检查工具,由开发团队按需进行代码质量检查。从按需使用、有序规范、到代码安全可信,华为持续投入数千万美元,攻克了静态分析技术检查准确性、效率等难题。基于30多年的研发经验与全球市场验证,华为在产品开发质量和可信方面沉淀了系列化的开发工具与能力,并随着软件全面云化、智能化等新趋势不断演进。在这个过程中,华为总结出高效开展代码检查活动的五大理念:
第一、构建文化
在研发过程中,华为基于对好代码的解读和追求,结合业界先进实践、专家学术研究和ISO标准,提出了华为的CleanCode主张,旨在满足功能正确的前提下,打造具有可读、可维护、安全、可靠、可测试、高效、可移植七大特征的高质量代码,建立人人编写CleanCode代码的软件文化。
第二、规范先行
代码检查需要“有章可循”。“章”即统一完备的编程规范,不仅界定了编码风格,更明确定义了哪些代码的写法会造成质量和安全风险。好的规范是检查引擎的能力标尺,为助力开发人员打造“好代码”,华为针对每类编程语言,参考业界规范并基于自身实践总结,输出了覆盖代码风格、质量、安全等各方面要求的统一编程规范。
第三、统一引擎
为了兼顾代码检查的质量和效率,华为积极投入关键技术攻关,构建了自主创新的检查引擎,帮助用户在一次扫描中即可针对代码的七大质量特征进行全面分析。同时该引擎具备良好的扩展性,支持将多种检查引擎汇聚在一个服务,用户一次扫描、读取一份报告,即可完成代码检查工作。
第四、三级检查
代码检查需要从全流程对代码入库进行守护,快速反馈给开发人员。为此,在编码、入库、版本发布三个阶段需要配置不同的检查规则,兼顾检查时间与检查能力,将缺陷拦截在前端:
1.IDE级检查,部署在开发IDE桌面,针对本地待提交代码;
2.MR门禁级检查,部署在MR阶段,针对待合入分支的变更文件做分析;
3.版本级检查,部署在发布阶段,针对待发布的主干或分支全量代码。
第五、三层运营
不同产品对于代码检查规则的选择存在差异,需要遵从公司要求,同时根据产品进行定制增强。通过建立公司、产品线、产品三层的运营体系,可实现代码检查在不同产品的有效落地和分层管控,牵引全公司参与能力建设。
基于以上五大核心理念,经过多年的沉淀和实践,华为自主研发了代码检查工具,已服务华为超过15万开发人员,日均扫描500亿行代码,支撑华为产品和解决方案在170多个国家和地区持续安全稳定运行,赢得全球企业客户信任。
华为云CodeArts Check服务,全面守护软件质量和安全
1月12日,华为云正式对外发布CodeArts Check代码检查服务,支持海量源代码的风格、质量和安全检查,可实现百亿行大规模并行扫描,并提供完善的修改指导和趋势分析,帮助企业有效管控代码质量。
特性一、自研代码检查引擎,全面评估代码质量七特征
代码检查服务的核心是代码检查引擎。高效精准的代码检查引擎可帮助用户在开发早期快速、准确地发现代码问题,兼顾开发效率与产品质量。华为云CodeArts Check代码检查引擎目前已覆盖业界主流开发语言,可针对代码的可读、可维护、安全、可靠、可测试、高效、可移植七大方面进行全面分析,并融合华为对代码质量及可信度能力的实践与思考,不断演进和丰富检查规则。
特性二、支持五大业界主流标准和华为编程规范,提升产品代码规范度
软件产品的质量问题往往会导致产品产生难以预测的运营风险或成本风险,建立源代码级别的质量检测措施标准就尤为重要。华为云CodeArts Check可以对企业研发代码进行全面质量检查,支持快速筛选已识别的编程规范问题;支持ISO 5055、CERT、CWE、OWASP TOP 10、CWE/SANS TOP 25等业界主流编程标准和优秀实践,并内置华为终端、网络、云计算、芯片等产品多年研发经验总结的编程规范,可帮助用户快速复制业界优秀实践,确保产品代码符合业界标准和规范,支撑合规准入。
特性三、支持主流开发语言,内置7000+检查规则,便于用户开箱即用
华为云CodeArts Check支持C/C++、Java、Python、GO、JavaScript、CSS、HTML、PHP、C#、Android等市场主流开发语言,满足嵌入式、云服务、WEB应用、移动应用等开发场景所需。同时,华为云CodeArts Check已内置多款开源工具与自研引擎,可提供超过7000条丰富的检查规则;并梳理各类场景需要,内置全面检查规则集、关键检查规则集、移动领域规则集、华为编程规范规则集等10余个规则集,便于用户开箱即用;企业用户也可基于规则库,定制满足业务场景个性需求的检查规则集。
特性四、日均百亿级扫描能力,支持大型企业超大规模代码检查
华为云CodeArts Check具备强大的高并发处理能力,支持华为内部日均30万次高频代码检查,扫描规模达到500亿行。针对基础设施导致的服务中断风险,华为云CodeArts Check可通过AZ容灾、跨region级容灾多活,支持过载保护、服务依赖和隔离等一系列高可用技术,实现服务故障自探测、自隔离、自恢复,为大型应用研发团队提供可靠支持。针对代码检查业务量波峰波谷落差明显的特征,华为云CodeArts Check通过强大的弹性调度能力,能够快速高效地调配资源,满足业务所需,确保业务高峰零等待。
特性五、一站式问题闭环修复,问题修复效率倍增
开发使用代码检查工具时,往往容易遇到问题分析和修复成本高等挑战,例如工具问题不易理解、问题分到具体开发人员费时费力、多版本情况下重复处理同一告警令开发人员厌倦等,影响开发团队对检查工具的使用积极性。华为云CodeArts Check内置编程规范说明、正确示例、错误示例和修复建议,能够让问题精准定位到行并提供修复指导,以提高问题分析效率;可自动根据代码提交信息匹配问题责任人,通过IDE插件提供自动修复能力,提升问题修复效率;支持自动同步已处理的忽略问题、对于经过审视判定为不需要处理的问题,同一代码仓库只需处理一次。得益于修复指导、自动修复、结果自动继承这三大能力,华为云CodeArts Check能够让检查问题处理和修复的效率提升100%。
特性六、“代码编写-代码合并-版本发布”三层缺陷防护,兼顾效率与质量
优秀的代码开发实践,往往要求代码检查与开发作业流的融合统一,在用户代码编写、代码提交时,同步自动化审计检查,并对团队每日产出的代码进行持续的编程规范和质量检查。这一技术要求,也已成为安全开发过程SDL、DevSecOps等众多优秀开发模式推荐进行的实践要求。
华为云CodeArts Check提供了丰富的API接口,提供IDE代码检查插件,与代码仓协同支持代码提交时自动检查,与流水线协同支持软件全量代码检查,三层防范代码缺陷引入。“快车道”精准、快速检查前移,频繁检查,对开发人员干扰最小;“慢车道”全面、深度检查夜间进行,防止代码检查遗漏。
在服务好华为内部软件代码质量保障的同时,华为云CodeArts Check已经服务能源、物流等企业及新闻媒体,帮助其管控代码质量。例如,中国经济信息社面临多个软件ISV厂商研发标准不统一、质量很难统一保障等困难。通过华为云CodeArts Check,中经社应用3000+编程规范规则,统一研发标准,提升研发效率,将质量活动从后端测试延伸到开发阶段,进行代码规范和安全检查,实现代码缺陷检查前移,研发交付质量提升50%。
为解决开发团队首次使用代码检查,存量代码检查问题多、修复成本高的困难,华为云CodeArts Check研发团队着力研究代码检查问题的自动修复,并在华为内部催熟使用。面向未来,华为云将持续通过CodeArts Check服务,把华为优秀的代码质量管理经验与工具能力,如代码安全检查能力、自动修复能力、平台灵活集成与扩展等,以云服务的方式共享开放给广大企业与开发者。同时,华为云将继续携手国内客户、伙伴与开发者,共建代码编程标准,共同建设开放的技术生态,助力业界软件代码质量不断提升,打造新一代开放、可信、高质量的现代软件生态。