1996年,欧洲最新的无人卫星发射火箭阿丽亚娜5号在首次发射后仅仅36秒,工程师就不得不按下了自毁按钮。
事后经分析查明,由于它重用了其前身阿丽亚娜4号的系统软件,发动机遭遇了之前没有被发现的漏洞,系统软件试图将一个64位的数字塞入16位的空间,由此产生的整形溢出问题导致了主计算机和备份计算机的崩溃。
一个小小的软件缺陷,让研发成本近80亿美元,并携带着造价5亿美元卫星的阿丽亚娜5号瞬间灰飞烟灭。
遗憾的是,这并不是个例。纵观历史,由于软件质量问题导致的“黑天鹅事件”不胜枚举,云服务宕机、金融交易失败、数据泄露等,给社会和用户造成了无法挽回的损失。事实上,软件存在的质量缺陷无法100%避免。因此,只有通过更加全面、严格、高效、安全的代码检查服务,才能最大程度地降低风险,使得软件开发过程在成本、进度和质量上得到充分保障。
国外先进的代码检查软件和服务虽多,但因种种原因不能在中国全面落地,或在某些方面存在局限性,并不能完全满足中国客户的实际需求。另外,在Gartner应用安全测试魔力象限中,至今尚无中国企业能够跻身领导者象限。那么,谁能打破行业坚冰,谁能更好地在软件开发阶段就将质量与安全隐患消灭于无形?
华为云CodeArts Check代码检查服务挺身而出,为用户提供包括代码风格、通用质量与代码安全风险等在内的检查能力,同时提供问题闭环处理、检查报告等功能,从而一站式完成代码检查作业,将代码质量保证活动从原始的人工检视中解脱出,确保代码的高质量并助力客户的商业成功。
“质量+安全”左移
著名软件工程专家和软件经济数据与度量专家卡珀斯·琼斯在其著作《Applied Software Measurement》中指出,80%的软件缺陷发生在编码阶段,而在后端测试修复缺陷的成本是开发阶段的40倍。
广泛的工业界实践也表明,在整个软件生命周期中,缺陷发现得越早、修复得越早,影响越小,付出的代价也越小。因此,“质量+安全”左移、DevSecOps等新理念不断涌现。华为非常赞同并在软件开发实践中积极落地和执行这些理念。
华为很早就开始关注软件质量的改进,并且持续吸收业界的优秀经验。“在我还是华为新员工的时候,就曾学习过半年的质量大事。”据一位华为云PaaS产品专家回忆,“1979年出版的《质量免费》中提到把事情做对的理念,与今天‘质量+安全’左移的概念不谋而合。最新推出的华为云CodeArts Check正是为了更好地在软件开发的前端弥补软件质量缺陷,同时还在代码检查上更进一步,加入了运营等新内容,让开发者受益匪浅。”
第三方市场研究报告显示,在中国,超过七成的软件厂商在使用DevSecOps的同时,也采用了代码自动检查工具。以华为为例,在其销售覆盖的全球100多个国家中,尤其是欧洲、中东地区的很多国家对于质量与安全问题高度敏感。
为此,华为内部很早就引入了相关工具,独立执行软件扫描,从技术、业务规范乃至公司文化等不同层面,确保自动化代码检查的有效落地,以保证华为所有产品的成功上线。
在软件质量与安全领域,技术相对比较成熟,早在上个世纪70年代左右就已经有了第一款商业化的代码检查软件。但是因为软件编码本身就是一件非常困难的事,而且开发人员的技能、知识储备参差不齐,再加上软件语言本身的特点也会天然造成缺陷,所以在开发阶段成功拦截所有代码质量问题始终是一个难点。
从瀑布式开发到今天流行的敏捷开发、云开发,开发模式的改变对于软件质量和安全的影响也是比较大的。假如软件扫描或分析的时间过长,则很难满足快速发布、快速迭代的要求。软件质量与开发效率之间似乎是鱼与熊掌难以兼得。再者,相对动态分析技术,静态分析技术本身存在一些局限,比如每一行代码在执行的过程中,每一次调用都会逐层逐路地进行分析,这对算力来说也是巨大的挑战,同样会影响开发效率。
保证软件质量与安全,挑战不言而喻,而且不仅仅体现在技术层面。在应用安全测试领域,标准是国外的,领导厂商是国外的,国内无论是从技术还是产品化、商业化程度来看,都相对较薄弱。华为云CodeArts Check的目标是和国内众多厂商一起,共建检查标准和生态,为中国软件行业的发展贡献更多技术与经验,进一步帮助广大中国软件企业提升产品质量。
华为云CodeArts Check的前世今生
从1998年到2007年,在华为内部,开发语言以C/C++为主,各业务团队按需引入Pclint等第三方工具开展代码质量检查。2007年至2012年期间,华为还发布了《华为通用编程规范》,规范以人工检视为主。
“从我们对源代码的质量有要求开始,就将当时业界顶尖的代码检查工具用了个遍。但在保证软件质量与安全方面,我们确实面临相当大的挑战。”华为云PaaS产品经理概括说,“首先,作为全球化的公司,我们的产品必须满足全球不同客户市场差异化且极其严格的要求;其次,在代码检查方面,我们不仅要实现对编码风格、简单质量问题等的检查,还希望通过检查发现更多潜在的质量问题,甚至是影响到网络安全的软件质量问题;最后,代码检查工具必须满足华为大体量的研发需求,具备卓越的工程化能力,包括高吞吐量、稳定和易用。”
并非原生商用的代码检查工具不够优秀,而是这些工具确实不能覆盖华为所有的应用场景。所以,华为走上了自研代码检查工具之路。在这里可以讲一个小插曲。
某次,华为的一个客户提出,要快速确认产品代码中是否使用了不安全的内存操作函数。华为最初采用商用工具进行了常规排查,但在排查之后发现,仍有遗漏的场景。同时客户又提出,除了要排查出是否使用了不安全的函数,还要确认使用了不安全函数的安全版本是否使用正确。
这一要求已经超出了当时商用工具的能力范围。华为积极投资快速响应客户的个性化要求,在极短的时间内通过自研弥补代码检查工具能力的不足。
■ 2007年,结合ISO 9126系统/产品质量模型,华为发布了《软件代码质量要求及样例》,明确了代码质量必须达到的6项要求——简洁、可靠、可维、可测、高效、可移植,并在此基础上打造出Program SMaRT1.0模型。
■ 2012年,华为对Program SMaRT模型进行了完善,着重扩展了安全性。
■ 2018年,华为基于对好代码的解读和追求,结合业界先进实践、专家学术研究和ISO标准,提出了华为的CleanCode主张,旨在满足功能正确的前提下,打造具有“可读、可维护、安全、可靠、可测试、高效、可移植”七大特征的高质量代码,建立人人编写CleanCode代码的软件文化。同时华为开始自研与各主流编程规范对应的自动化代码检查能力,相对应的编程规范检查工具CodeCheck也开始面向全公司开发人员进行推广普及。
此外,华为内部多种多样的应用场景,让开发团队能够不断补强、夯实代码检查的基本技术与能力,而不仅限于简单的词法、语法分析这样的检查。如今,自研工具已经成了华为代码检查的核心力量。
历史上,华为的各个业务部门,比如终端、ICT、运营商等,都会遵循公司对软件质量的统一要求,同时结合自身的业务特点,选择开源的或商用的自动化工具进行代码检查。随着业界对网络安全的关注,运营商对通信设备商的软件代码安全性提出了极高要求,并提出了内部规范是否统一落地的疑问:“我们用了华为那么多产品,华为如何保证每个产品线产品都能达到同等的质量要求与标准?华为内部是否有统一的质量保障规范?每个开发人员是否切实执行了相关的标准和规范?”
当时华为的状况是,虽然每一个产品都有针对性的检查规范,也配备了相应的检查工具,完全能够确保产品本身的质量与安全。于是,华为从公司规范入手,对照业界标准,重新梳理、刷新所有相关的安全规范、编程规范。
在此基础之上,每条产品线基于自身的业务特点,以及对安全性的细致要求,制定更加具体的要求和规则。这样一来,华为从整个公司层面,就能通过一个统一的平台,要求各产品线使用统一的必选规则集去执行软件扫描;而这个统一的平台还能有效汇聚、处理各业务线的数据,并将相关数据提供给外部客户,以满足第三方检查、认证等方面的需要。经此改变,华为的整体产品质量又跃上了一个新台阶。
■ 2018年,随着整个软件工具链的逐步完善,华为开始将用于内部的代码检查工具“外溢”,向外以服务的模式进行输出。
■ 2020年4月,CodeCheck2.0正式发布,多款代码检查工具(ReviewBot、SecBrella、CodeCheck等)归一至新版的代码检查服务CodeCheck,并构建起“IDE-代码仓门禁-版本发布”三级检查体系。
■ 2021年,CodeCheck经历多次技术攻关,实现了代码检查引擎对国外工具的核心安全及质量检测能力进行替换,不仅有效支撑了华为研发业务的连续,而且为深度安全及代码质量检查能力的商用交付夯实了基础。
■ 2022年4月,CodeCheck HCS版本交付,这也是CodeCheck首个正式对外商用的版本。经过近半年的精心准备,CodeCheck于2022年8月23日通过了业界标准CWE认证,具备了国际认可的专业资质;同年9月,CodeCheck完成了在墨西哥、巴西、新加坡等多个海外局点的开局,迈出全球化部署的关键一步。
经过持续的演进、完善,CodeCheck成了今天广大开发者在华为云上可以信手拈来的CodeArts Check服务,它既是华为多年来软件开发的成功实践、工程方法、管理要求以及优秀企业文化的结晶,同时又将经实践验证的好用的通用能力与功能,与广大客户和合作伙伴进行分享,进一步提升软件的质量。
华为云CodeArts Check服务能够在开发阶段全面深挖代码的安全问题,并从“可读性、可维护性、安全性、可靠性、可测试性、高效性、可移植性”这七个纬度全面评估安全代码的质量,为开发者提供大规模、高可用,且易用、便捷的云服务,从而更好地守护企业软件的质量与安全,助力企业商业成功。
“六大利器”助力企业商业成功
你是不是好奇,华为云CodeArts Check到底有哪些过人之处?归纳来说,华为云CodeArts Check锻造出“六大利器”。
利器一:自研代码检查引擎,代码质量评估无死角。
华为云CodeArts Check采用的自研引擎融合了华为30多年对代码质量及可信度提升方面的持续思考与探索实践,能够帮助用户在一次扫描中针对代码的”可读性、可维护性、安全性、可靠性、可测试性、高效性、可移植性”七大质量特征进行全面分析。
利器二:五大业界主流标准、华为编程规范,一个也不能少。
华为云CodeArts Check不仅支持ISO 5055、CERT、CWE、OWASP TOP10、SANS TOP 25五大业界主流编程标准,而且内置了华为终端、网络、云计算、芯片等产品多年研发经验总结的编程规范,提升了产品代码规范度。
利器三:开发语言、检查规则一应俱全,用户开箱即用。
华为云CodeArts Check不仅支持C、C++、Java、Python、GO等十余种常见开发语言,而且提供了超过7000条检查规则,能够满足各类检查场景需求,开箱即用。
利器四:日均百亿级扫描能力,超大规模代码检查易如反掌。
华为云CodeArts Check具备强大的高并发处理能力,还可通过AZ容灾、跨Region级容灾多活,支持过载保护、服务依赖和隔离等一系列高可用技术,实现服务故障自探测、自隔离、自恢复。
利器五:一站式问题闭环修复。
由于内置了编程规范说明、正确示例、错误示例和修复建议,华为云CodeArts Check能够让问题精准定位到行并提供修复指导。得益于修复指导、自动修复、结果自动继承这三大能力,华为云CodeArts Check能够将检查问题处理和修复的效率提升100%。
利器六:三层缺陷防护,效率与质量兼得。
华为云CodeArts Check提供了丰富的API接口以及IDE代码检查插件,并与代码仓协同支持代码提交时自动检查,与流水线协同支持软件全量代码检查,三层防范代码缺陷引入。
“对于代码检查工具来讲,我们最关注的一是效率,二是误报和漏报问题。”华为云PaaS产品经理介绍说,“我们凭借在云化方面的积累和能力,实现了大规模分布式处理能力和效率的提升。针对漏报,在大量借鉴商业化工具和开源工具,以及自研工具的成功经验的基础上,我们不断开拓创新,有效提升检查能力;对于误报问题,结合华为技术专家、高校的科研成果,利用精准的智能分析,提升分析引擎的精准率。举例来说,华为内部每天扫描500亿-1000亿行代码,沉淀为一个庞大的历史信息数据库,结合AI技术,能够大幅提了自研引擎的准确度。上述这些都是华为云CodeArts Check差异化能力的具体体现。”
华为业务线众多,具有海量的代码检查需求,并且对产品质量始终保持着极高的敏感度和重视程度。从这个角度说,华为本身就是催熟代码检查工具的一个宝库。例如,华为云CodeArts Check中采用的核心自研引擎,就是华为在吃自己的“狗粮”。这种“狗粮”吃得越多,CodeArts Check自身的能力和水平就越高。
另外,工程化能力也是华为云CodeArts Check的核心属性之一,融合了华为30积累的产品开发经验、产品开发过程、质量保证过程,能够更好地帮助客户在全工具链上复用华为的开发经验,事半功倍。
相比市场上现有的其他代码检查工具,华为云CodeArts Check除了在技术和功能上有自己独特的创新之外,在企业文化、规范、流程等方面同样底蕴深厚,并且独具匠心。
在业界中,CleanCode是一个成熟的概念,本质是追求代码的简洁化。基于对软件质量的严苛要求,同时参考业界的相关标准和大量成功实践,华为对CleanCode做出了进一步解读和扩展,即“可读性、可维护性、安全性、可靠性、可测试性、高效性、可移植性”七大质量特征。
据介绍,华为公司自上而下,从多个维度对七大质量特征进行解读和剖析,通过对应的代码案例和用例实现落地,并且提供自动度量的方法和工具,确保每条产品线都有对应的组织依此对各个层级进行赋能。每条产品线还会结合自身的实际需求,制定具体的计划,保证CleanCode切实有效地落地。
特别值得一提的是,除了不断增强代码检查工具本身的能力以外,华为云CodeArts Check还形成了独有的3级检查体系和3层运营体系。3+3的运营可以立体化、最大限度地保证检查工具应用到位。三层运营意味着不仅要把工具做到好用,还要让用户将工具用好。
因此,从公司层到各个产品线,再到具体的产品版本层面,华为都提供了分层的工具能力。掌握不同能力模型的专家通过分工合作,在各个层面制定出匹配不同产品形态的工具应用策略,做到人尽其才,物尽其用,最终目的还是服务好开发人员。
“内外”兼备 质量与效率兼得
华为云CodeArts Check服务已于2023年1月12日正式上线。据了解,华为云CodeArts Check目前不仅支撑着华为15万研发人员、日均扫描逾500亿行的代码检查工作,而且也广泛应用于能源、物流等企业,服务新闻媒体及广大开发者,为企业生产高质量且安全的软件保驾护航。
已经在华为应用并得到成功验证的CodeArts Check不仅适用于大型企业的超大规模开发环境,而且由于其具有分层的能力和易用性,能够很好地适配不同开发环境,即使是普通开发者也能一键式开箱即用。凭借卓越的工程化能力,CodeArts Check既可以无缝连接华为自研的工具,还能灵活地与业界通用的工具无缝集成,每天执行几百亿行代码检查轻而易举。
“自己做的降落伞自己先跳”,这是华为一惯的作风和传统,在代码检查方面当然也不例外。举例来说,华为参考业界实践、ISO标准制定了华为各类开发语言的编程规范,明确开发阶段落地遵从编程规范的活动要求,以CodeArts Check服务华为的开发人员,支持30+语言,覆盖各类规范40+;并且通过“3+3”运营,让产品在保障遵从编程规范的同时选取最适合自己的检查规则进行扫描,并通过数据驱动运营,帮助公司、产品线、产品分层运营,使得代码检查活动落地可视、可管理。
今天,高质量的产品已成为客户愿买、敢买和政府接受、信任华为的基本条件。华为的产品和解决方案已在全球170多个国家安全稳定运行,积累和赢得了全球数万客户的信任。2019年3月,华为欧洲安全透明中心在比利时成立,其自研安全检查引擎与业界优秀工具一起,支撑了三家欧美独立评估机构对华为产品代码的安全评估,效果非常好。编写好代码能有效减少漏洞,降低系统脆弱性,是达成高质量产品的核心环节,也是华为始终坚守的信念。
华为云CodeArts Check服务商业用户的一个典型案例就是中国经济信息社(以下简称“中经社”)。
中经社是新华社旗下专业承担经济信息服务业务的直属机构,其综合信息服务体系遍布全国,并覆盖全球180个国家和地区。中经社与许多不同的软件开发商合作,由于研发标准不统一,软件开发商独立研发,使得各开发商的研发质量很难统一保障,协同效率低下。
中经社依托华为云CodeArts Check,通过研发运维一体化,规范研发过程,提升研发效率,实现质量活动从部署测试延伸到代码规范、安全检查。其中,代码检查自动触发,实现了代码问题解决前移,研发交付质量提升50%。
另外,华为云CodeArts Check还支撑许多大型开源社区开展代码检查工作,包括鸿蒙社区、码云等。以鸿蒙社区为例,每周支撑运行近2万个任务检查,代码扫描量超过300亿行。
平台+生态,更好地服务广大开发者,这是华为云CodeArts Check的初衷。华为云希望借助CodeArts Check平台,提供开放、集成的能力,与生态伙伴合作协同,为企业和开发者提供组合的优质服务。华为云CodeArts Check还推出了免费套餐,五人以下的团队可以免费使用。另外,华为云还将陆续推出丰富的训练课程,对开发者进行赋能,并在各技术社区中加强CodeArts Check的推广,共建代码检查的良好生态。
未来,华为云CodeArts Check将持续增强自动修复和代码深度安全检查能力,并进一步提升平台和引擎的开放性和扩展性,让开发者能够更加聚焦软件功能的开发,真正做到兼顾质量和效率,更好地助力企业商业成功。