善用自动软件除错工具 挥别虫虫危机所带来的损害 智能应用 影音
EVmember
Event

善用自动软件除错工具 挥别虫虫危机所带来的损害

  • DIGITIMES企划

Coverity亚太营运副总Rich Cerruto。
Coverity亚太营运副总Rich Cerruto。

全球知名开发测试解决方案供应商Coverity亚太营运副总Rich Cerruto表示,由软件瑕疵所引发的事件,其后果可能十分严重,正如近几年来各家媒体所报导的:某家公司因其造成的注入帮浦错误操作导致500人死亡;庞巴迪公司因软件问题延后产品上市时程,使得其股价一泄千里;Skype因软件异状而中断服务,导致5亿6,000万用户的不满;而J. P. Morgan也因为同样的状况,造成超过1亿美元的损失...。

另外根据Forrester在2011年5月所做的调查结果显示,有49%的受访者认为:软件瑕疵是造成产品出货延误及回收问题的主因;46%认为软件瑕疵会降低客户满意度;38%说这会引发网安漏洞;36%则强调商誉会因此而受损。「由于现在软件系统已经是公司竞争力的来源,与企业营运作业息息相关,因此只要有软件瑕疵出现,经常就会立即导致企业危机产生。」由此可见侦测、修补软件瑕疵的重要性。

软件架构及组成复杂,除错实有相当难度

不过现在软件应用系统组成架构及程序来源十分复杂,单以智能手机来说,就可能包含消费应用平台(Google/App Store/Open Source/Java)、装置制造商(Ericsson/RIM/HP/Motorola/Samsung)、操作系统业者(Android/Symbian/Linux/Windows/Chrome OS)、装置驱动程序业者(Nvidia/AMD)、芯片与微处理器软件商(Intel/Texas Instruments/Qualcomm/Iinfineon/Marvell)…等来自众多家企业的应用程序。

「复杂的软件产业供应链体系,只会使软件瑕疵产生的机率大增。」正因其权责不明,一旦有问题发生时,造成原因很难被追究及举证,导致大家容易彼此推卸修复软件的责任。Cerruto说,常听到的回应是:「如果是因为我的程序码瑕疵所造成,我很乐意负责修正。」而OEM业者对于其上游供应商缺乏一致的管制标准,难以维持相同的软件品质程度,更使得此一问题雪上加霜。

Cerruto认为,会造成软件品质不佳与后续容易造成网安问题的基本原因,可归纳成几点:一般企业组织长期以来,即缺乏制定与执行程序码品质与安全管理政策的能力;程序开发团队没有采取适当措施检视其程序码散布到软件供应链之后,所可能触发品质与安全危机为何;OEM业者无法从软件供应链整体角度,透视其中各别组成单位的网安?品质危机所在;而软件安全稽核又独立于标准的开发作业流程之外,与开发人员本身的工作脱勾。

「常见的状况是:若是依循传统软件开发模式,测试工作往往得到非常后期的阶段才会进行,因此一但在该阶段才发现有瑕疵或安全问题时,不仅得花上大量时间重新调整?修改,而且还会增加相当多的成本。」Cerruto说,由于此时开发人员在心态上会急着将软件版本释出,以求开发工作顺利结案,根本就不会投入太多时间与精力检测其软件潜存的瑕疵,因此导致后续问题陆续产生。

采用静态测试(Static Testing)搭配Coverity自动软件除错工具是最佳方式

解决之道是即早、实时在软件开发的各项阶段进行程序码测试与修补的动作。根据NIST于2002年所做的一项调查显示,如果等整合及系统测试阶段才进行测试,其所需耗用的时间与成本会是在需求与设计阶段的10倍。不过Cerruto也补充,即便业者要进行测试,也绝非以盲目方式处理。

「最好是采用静态测试搭配Coverity公司所提供的自动软件除错工具来进行。」他强调,由于一般通用测试方式无法处理全路径覆盖(Path Coverage),难免会有许多瑕疵在测试过程中被疏漏;而静态测试无需实际执行程序码就能检验所有的路径,这意味着开发人员可以更全面性、系统性地找出瑕疪所在,即便是处于难得发生、执行机率很少的路径中的程序码也可以获得检验。

「这不仅能减少修补成本,降低因意外瑕疵而造成的开发时程不确定性,对产品的网安而言,由于少了可供黑客利用做为侵入与窃取数据的潜在管道,自然也就更加安全。」

Cerruto说,采用Coverity公司所提供的自动软件除错工具执行静态测试,可分为3个阶段:第一阶段为建立步骤,开发工具会先蒐集与程序码如何编辑的相关信息,并建立虚拟环境,以了解公司的程序建立标准程序,并将其运用编译器资源的状况予以透明化,「由此我们可掌握住所有的原始档案及其如何进行编辑的相关参数,包括巨集定义与命令列选项意义,以高度忠实地呈现该企业程序码记录及组译方式。」

而在此基础上,开发人员就可透过一项可称之为「Checkers」的模块,针对每一条穿越程序码的路径进行测试及分析。「Checkers会设法发掘出程序码中每一项实际的瑕疵,如执行后所引发的各种当机、存储器崩溃、存储器遗漏、控制代码遗漏与其他会产生严重错误的问题,而非只是单纯检视程序码格式是否正确而已。」

可找出真正的程序码瑕疵,系统误判状况机率极低

最终是将测试的结果,包括瑕疵所在位置与产生原因进行清楚呈现与解释,并将其储存在数据库中,以便供企业的开发人员进行后续管理与问题处理分配,以及跨部门提供修补方式建议及相关经验的分享。「这可让企业在修补程序的过程中更具有效率。」

举例来说,有些公司固定每一周期会有所谓的「Coverity修补日」,那天所有开发人员会放下手边的开发工作,将心力放在分析、讨论与移除瑕疵上。「其他还有像是优先修补新产生的瑕疵,至于长久以来所留下的历史瑕疵问题则放入工作清单内,待来日再安排时间修补。」

目前透过Coverity公司自动软件除错工具的协助,无论是在C/C++或Java/C#程序码方面,都能够快速找出潜藏在其中各类型瑕疵,如Resource Leaks、Null pointer dereferences、Concurrency Issues、Integer handling issues、Improper Use of APIs、Control flow issues、Memory-corruptions、Memory-illegal access、Security best practices violations…等。

由于自动软件除错工具在检测程序码瑕疵时,若经常发生误判状况,轻则浪费开发者时间、阻碍人们学习工具的兴趣,重则会降低企业对工具分析结果的信任度,使得该工具无法发挥应有的成效。

「Coverity一直致力于消除误判的状况。」Cerruto表示,与其他同业所提供工具相比,Coverity工具分析结果精确且快速,误判率通常远低于10~15%,而且所找出的多是真正会严重造成程序码问题的瑕疵,而非仅是格式冲突…等之类的表面问题,因此不仅能够激发开发人员更快上手使用的兴趣,也能真正节省其时间,不会浪费太多精力在处理无谓的工作。

「即便在分析大型程序码时,Coverity自动软件除错工具亦可在其广度、深度及延展性上取得最佳平衡。」也因此诸如LG、Synopsys、RSA、SIEMES、L3 communications、Honeywell、NEC、Medtronic、Juniper、BMC Software、Samsung、SEGA、Sony…等全球超过1,100家世界级领导品牌业者,都已成为Coverity的合作夥伴及产品爱用者。

(本文提供英译版本,请按此连结阅读英译版本内容)