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产品经理概括说,“首先,作为全球化的公司 , 我们的产品必须满足全球不同客户市场差异化且极其严格的要求;其次 , 在代码检查方面,我们不仅要实现对编码风格、简单质量问题等的检查 , 还希望通过检查发现更多潜在的质量问题,甚至是影响到网络安全的软件质量问题;最后,代码检查工具必须满足华为大体量的研发需求,具备卓越的工程化能力,包括高吞吐量、稳定和易用 。”
并非原生商用的代码检查工具不够优秀,而是这些工具确实不能覆盖华为所有的应用场景 。所以 , 华为走上了自研代码检查工具之路 。在这里可以讲一个小插曲 。
某次 , 华为的一个客户提出,要快速确认产品代码中是否使用了不安全的内存操作函数 。华为最初采用商用工具进行了常规排查,但在排查之后发现,仍有遗漏的场景 。同时客户又提出,除了要排查出是否使用了不安全的函数 , 还要确认使用了不安全函数的安全版本是否使用正确 。
这一要求已经超出了当时商用工具的能力范围 。华为积极投资快速响应客户的个性化要求 , 在极短的时间内通过自研弥补代码检查工具能力的不足 。