摘要:华为云CodeArts Check代码检查服务为用户提供包括代码风格、通用质量与代码安全风险等在内的检查能力,同时提供问题闭环处理、检查报告等功能,从而一站式完成代码检查作业。
本文分享自华为云社区《提升软件质量?为什么不试试华为云CodeArts Check》,作者: 华为云头条。

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将持续增强自动修复和代码深度安全检查能力,并进一步提升平台和引擎的开放性和扩展性,让开发者能够更加聚焦软件功能的开发,真正做到兼顾质量和效率,更好地助力企业商业成功。

点击关注,第一时间了解华为云新鲜技术~

提升软件质量?为什么不试试华为云CodeArts Check的更多相关文章

  1. 为测试管理正名,华为云CodeArts TestPlan的守护之道

    摘要:华为云CodeArts TestPlan既有公有云版本,也有下沉到私有云的版本. 本文分享自华为云社区<为测试管理正名,华为云CodeArts TestPlan的守护之道>,作者:云 ...

  2. 揭开华为云CodeArts TestPlan启发式测试设计神秘面纱!

    摘要:质量是产品的生死线. 本文分享自华为云社区<揭开华为云CodeArts TestPlan启发式测试设计神秘面纱!>,作者:华为云PaaS服务小智 . 2019年12月20日,是美国波 ...

  3. 华为云CodeArts Artifact,5大特性守护制品质量与安全

    摘要:2023年2月23日,华为云CodeArts Artifact制品仓库服务正式上线,目标进一步赋能企业伙伴与开发者,实现软件作业中可信制品生产与应用活动快速落地,提高软件交付效率与质量. 本文分 ...

  4. 企业应用可观测性利器!华为云CodeArts APM发布

    摘要:近日,华为云全链路应用性能管理服务CodeArts APM全新上线,提供端到端的全链路性能管理服务,涵盖前端监控.应用性能监控,全面拥抱开源生态. 本文分享自华为云社区<企业应用可观测性利 ...

  5. 纷繁复杂见真章,华为云产品需求管理利器CodeArts Req解读

    摘要:到底什么是需求?又该如何做好需求管理? 本文分享自华为云社区<纷繁复杂见真章,华为云产品需求管理利器 CodeArts Req 解读>,作者:华为云头条 . 2022 年 8 月,某 ...

  6. 华为云发布分布式编译构建系统CodeArts Build

    摘要:2月14日,华为云发布分布式编译构建系统CodeArts Build,旨在支撑企业实现高效的软件开发,缩短产品上市周期,帮助企业的软件产品快速形成关键竞争力. 本文分享自华为云社区<唯快不 ...

  7. 产品质量管理利器,华为云发布CodeArts Defect缺陷管理服务

    摘要:近日,华为云CodeArts Defect缺陷管理服务正式上线,提供结构化缺陷跟踪流程和标准化的质量度量模型. 本文分享自华为云社区<产品质量管理利器,华为云发布CodeArts Defe ...

  8. 华为云发布桌面IDE-CodeArts

    摘要:华为伙伴暨开发者大会2022,发布华为云桌面IDE-CodeArts. 本文分享自华为云社区<华为云发布桌面IDE-CodeArts,让连接更简单.编码更智能>,作者: Huawei ...

  9. 华为云发布冷启动加速解决方案:助力Serverless计算速度提升90%+

    摘要:本文介绍了华为云对冷启动优化这一业界难题的探索之路,创新提出了基于进程级快照的优化方案. 作者信息-- 子游:华为元戎高级工程师 平山:华为云中间件 Serverless 负责人 琪君:华为元戎 ...

  10. 华为云软件开发云VS开发痛点=?

    在软件开发的过程中,是不是总会遇到这些问题: 搭建一个开发环境,用了九牛二虎之力,悲催的是竟然用不了…… 团队同事突然出差,他写的代码出现问题,我却不会改…… 提升软件件质量靠代码,交叉看.找大拿,简 ...

随机推荐

  1. Opencv系列之一:简介与基本使用

    1 Opencv简介 Opencv是计算机视觉中经典的专用库,其支持多语言,跨平台,功能强大.Opencv-Python为Opencv提供了Python接口,使得使用者在Python中能够调用C/C+ ...

  2. C#计数排序算法

    前言 计数排序是一种非比较性的排序算法,适用于排序一定范围内的整数.它的基本思想是通过统计每个元素的出现次数,然后根据元素的大小依次输出排序结果. 实现原理 首先找出待排序数组中的最大值max和最小值 ...

  3. Super Apps 超级应用们背后的道家哲学

    众所周知,Elon Musk 想将 Twitter 重新设计定位成一款"超级应用 - X"的野心已经不再是秘密.伴随着应用商店中 Twitter 标志性的蓝鸟 Logo 被 X 取 ...

  4. Android dumpsys介绍

    目录 一.需求 二.环境 三.相关概念 3.1 dumpsys 3.2 Binder 3.3 管道 四.dumpsys指令的使用 4.1 dumpsys使用 4.2 dumpsys指令语法 五.详细设 ...

  5. CSP2023 模拟赛总结合集

    9.9 ZZFLS 感觉 ucup 剩下的题完全不可做了啊!先对比赛时间来写总结对队友道歉(鞠躬.jpg 开题策略很失败.开场 30min 得的分数是一整场考试的分数. 开题,发现 T1 是水题,30 ...

  6. trafilatura 网页解析原理分析

    trafilatura 介绍 Trafilatura是一个Python包和命令行工具,用于收集网络上的文本.其主要应用场景包括网络爬虫下载和网页解析等. 今天我们不讨论爬虫和抓取,主要看他的数据解析是 ...

  7. 【pwn】ciscn_2019_s_3 -- rop,gadget利用,泄露栈地址

    这道题挺好的,可以帮助我更好的理解gadget的利用以及rop技术 首先,查一下程序保护情况 拖进ida分析 这里sys_read和sys_write是系统调用函数,看汇编可以分析出来 我们首先要了解 ...

  8. 题解 CF916C

    题目大意: 要求构造一张图,并让该图满足以下条件: 有 \(n\) 个点,\(m\) 条边. 每条边的边权范围是 \([1,10^9]\). 图中从 \(1\) 到 \(n\) 的最短路径长度是个质数 ...

  9. Selenium4+python被单独定义<div>的动态输入框和二级下拉框要怎么定位?

    今天在做练习题的时候,发现几个问题捣鼓了好久,写下这篇来记录 问题一: 有层级的复选框无法定位到二级目录 对于这种拥有二级框的选项无法定位,也不是<select>属性. 我们查看下HTML ...

  10. Vue07-Axios

    Axios axios是一个网络请求相关的库. axios: ajax i/o system 使用axios编写的网络请求代码,可以运行在浏览器端,也可以在Node环境中运行. 01. 支持的请求方式 ...