写点什么

InfoQ 专访:Coverity 谈“开发中测试”与程序员最常犯的编码错误

  • 2011-11-21
  • 本文字数:2412 字

    阅读完需:约 8 分钟

Coverity 公司位于美国加州旧金山,他们的产品包括 Coverity Integrity Control、Coverity Static Analysis 等一系列代码分析工具与解决方案。日前,Coverity 公司产品副总 Ezi Boteach 先生就“开发中测试”、代码复查和开发人员最常犯的编码错误接受了 InfoQ 中文站的采访。

InfoQ:能否介绍下 Coverity 的“开发中测试”理念和你们的 Development Testing Platform?

Ezi:“开发中测试”是新出现的一种技术,包括一系列流程和软件,例如静态分析。开发中测试的目的是要帮助开发人员、管理层和业务人员能在开发周期的早期,找到并修复质量和安全方面的问题,这些代码还在开发之中,不会影响上市时间、成本或客户满意度。

“开发中测试”扩大了传统测试范围,可以包括功能测试、性能测试和安全审核,为开发团队提供更快、更便捷的方式来测试代码中的缺陷,而且是以非侵入的方式。这种方式下,开发人员能够把注意力集中在创新上,管理层能够在开发周期早期尽早了解问题以作出决策,业务人员能持续向市场交付高质量的产品,获得竞争优势。

InfoQ:代码复查是人们高度推荐的编程实践。如果使用你们的产品,对于代码复查,您有什么建议?

Ezi:代码复查是软件“开发中测试”很重要的部分,而且其成本很高,因为需要另一个开发人员来复审代码,很多时候这个开发人员还必须是资深人员。在代码复查之前先做静态分析,这能让代码复审过程更快,而且成本更低。使用自动化分析来检查变更以及于系统其他部分的集成点,以此来识别和消灭代码错误,代码复审就可以更集中于逻辑和功能错误,而不是代码的缺陷,这样做更划算,能够自动化,而且易于重复。

我们推荐测试驱动开发所有的工具和实践,包括代码复审、单元测试和代码覆盖率。当然,要是能和 Coverity 的自动化代码测试工具一起使用就更好了。

InfoQ:你们的产品如何与像 xUnit 这样的工具一起配合使用?

Ezi:单元测试是“开发中测试”的重要组成,需要支持测试驱动开发。使用 Coverity 5.5,我们引入了“开发中测试”的平台,能够让多种不同工具与测试工作流集成。目前我们还不能专门与 xUnit 集成在一起,但是我们的客户现在能够很方便地把他们使用的测试工具与 Coverity Development Testing 平台集成。举个例子:Coverity 5.5.1 版本包括与常用 Java 静态分析工具 FindBugs 的集成。这样的集成让管理人员能够降低维护多个测试工具的成本,并通过统一的工具来推行策略。开发人员也有统一的界面来查看缺陷,并排定解决的优先级。

InfoQ:你们的产品是否能与持续交付流程集成?

Ezi:Coverity Static Analysis 可以与多个构建系统集成,包括 Jenkins 这个常用的持续集成系统。一般来说,与 Jenkins 和持续集成系统的集成是为了确保所有的持续构建都能运行自动化代码测试工具。如果分析中发现了新的缺陷,一个构建版本就是失败的。这确保新的缺陷不会引入到交付的软件的主干代码中,而交付过程是持续交付流程的一部分。这也能保证失败的构建版本不会进入流程的下一个阶段,一般来说是 QA 阶段。Coverity 就像是交付过程中的一道闸门。

InfoQ:除了使用你们的产品,您是否还能为开发人员和架构师提供一些其他的原则与实践?

Ezi:确保软件的质量,防止安全漏洞,这需要良好协作、工具和开发流程管理这几方面的结合。从清晰的需求文档开始,这是开发任何新功能的基础。需求文档之后,就是功能和系统架构师完成的功能和需求设计。代码开发完成后,“开发中测试”应该是这个流程的有机部分。不仅仅是一个产品,而应该是流程和技术的组合,帮助开发组织在开发周期早期、撰写代码的时候,就能修复软件的问题,确保代价高昂的缺陷不会进入后续阶段和生产环境。

架构师要确保软件的架构良好。这需要人工复审和架构分析,此外还要有经过考验的软件开发方法论。与之类似,开发人员也要保证,除了使用静态和动态分析的自动化测试之外,也要使用代码复审和单元测试。质量保证(QA)是任何软件开发过程中都很重要的阶段,以确保功能测试和性能测试顺利通过。最后,安全审核也很重要,保证在识别、修复、移除代码缺陷时不会带入新的安全漏洞。

InfoQ:根据 Coverity 收集的数据,您能否列举一些开发人员最常犯的错误?

Ezi:开源项目 SCAN(scan.coverity.com)能够很好地发现开发人员常犯的错误。从 2006 年开始,Coverity 与美国国土安全部一起,研发了 Coverity SCAN 项目,来保证开源软件的安全性和完整性。Coverity SCAN 分析了超过 290 个开源项目,包括 Linux、Apache、PHP 和 Android,识别出 49,654 个缺陷,开源软件开发人员已经修复了超过 15,000 个缺陷。下面的表格就展示出了开源软件中最常出现的缺陷,商业软件也与之类似。

SCAN 项目中的出现频率 风险程度 NULL 指针引用 27.60% 中 资源泄露 23.19% 高 非原意图表达式 9.76% 中 读未初始化的值 8.41% 高 释放后使用 5.91% 高 缓冲区溢出 5.52% 高很重要的一点要指出:像 NULL 指针引用、内存泄露和缓冲区溢出常常会带来很严重的质量和安全风险。很多这样的缺陷,使用传统的测试方法,有时难以找到。使用 Coverity 的工具会更易于发现类似问题。

要想了解更多关于 SCAN 项目的信息,可以访问 2010 SCAN 报告,其中包括对于 Android 核心代码的分析结果。

InfoQ:对于代码分析可视化的重要性,程序员们认识得越来越明白了。您能否列出 3 个最重要的相关分析图?

Ezi:Coverity 的 Development Testing 平台能以代码可视化形式让开发人员和管理层看到代码的质量。可视化能够在几个方面起到帮助作用:它有助于标识代码的所有者和缺陷,能帮助展示出软件代码的整体可读性,以及质量和安全风险较高的代码区域,还能有助于推行代码完整性的检查策略。

只谈 3 个图很困难,但我想选的是:未解决的缺陷与已解决的缺陷的对比、每个软件组件中的缺陷个数、新的 Integrity Control 热度图。可以访问 http://www.coverity.com/products/integrity-control.html 来获得更多有关 Integrity Control 热度图的信息,其中还能看到演示。

2011-11-21 01:003604
用户头像

发布了 479 篇内容, 共 170.6 次阅读, 收获喜欢 52 次。

关注

评论

发布
暂无评论
发现更多内容

宝藏昇腾AI应用推荐!CANN带你体验黑白图像自动上色的快乐~

华为云开发者联盟

开源 黑白 图像 CANN 昇腾

洞穿性能测试痛点,PerfDog以提升应用和游戏的品质为使命

WeTest

7个非常有前景的C++专业就业方向

hanaper

AJAX获取的日期相差8小时

hasWhere

AISWare AntDB 亚信数据库在多省份计费系统应用案例

亚信AntDB数据库

案例分享 #数据库 9月日更

数字人民币最新技术成果将亮相2021年服贸会

CECBC

北鲲云超算平台如何帮助现代生物制药发展?

北鲲云

InfoQ 引航计划正式启动!全网最优质技术内容,拿来吧你!

InfoQ写作社区官方

引航计划 技术专题合集 热门活动

【虚拟机专栏】Rust智能合约的应用

趣链科技

区块链 智能合约 虚拟机

“人类先锋”点亮物联网灯塔

脑极体

OCR加持白描App,让AI成为视障者的眼睛

百度开发者中心

人工智能 最佳实践 方法论 前沿技术

数据安全法真的来了,这6个“雷区”千万别踩!

腾讯安全云鼎实验室

数据安全 数据安全法

2021年广播电视网络安全等级保护定级流程

行云管家

运维 等保测评 企业运维 广播电视

揭秘版权保护下的视频隐形水印算法(下篇)

拍乐云Pano

音视频 RTC 拍乐云 隐形水印

国产接口管理工具ApiPost中的COOKIE管理器

Proud lion

大前端 后端 Postman 开发工具 Cookie

鸿蒙轻内核的得力助手:带你掌握4种内存调试方法

华为云开发者联盟

鸿蒙

fil挖矿gas费怎么看?fil挖矿需要质押多少?

fil挖矿需要质押多少 fil挖矿gas费怎么看

直播访谈-数据产品修炼之路

第519区

数据产品经理

财经大课:如何看待规模化与差异化竞争

石云升

财经思维 9月日更

看云起云动 览开源盛世 | 亚马逊云科技中国峰会Dev Day线上来袭!

亚马逊云科技 (Amazon Web Services)

微信PaxosStore内存云揭秘:十亿Paxos/分钟的挑战

OpenIM

2021ToB投资盘点:腾讯疯狂、阿里克制、字节激进

ToB行业头条

腾讯 字节跳动 阿里

《转》什么是跨域?如何解决跨域问题?

hasWhere

Paxos理论介绍(4): 动态成员变更

OpenIM

fil挖矿机靠谱吗?fil挖矿哪家靠谱?

fil挖矿哪家靠谱 fil挖矿机靠谱吗

重磅!博睿数据通过CMMI5级评估,国内APM领域首家

博睿数据

企业有运维人员,还有必要买运维管理系统吗?

行云管家

企业运维 运维审计 运维系统

kubebuilder 构建控制器说明点

Geek_f24c45

Kubernetes kubebuilder kube-controller

数据结构和算法在流程画布中的实际应用

GrowingIO技术专栏

数据结构 G6 图可视化引擎 流程画布

NVMe over TCP高性能文件存储,焱融科技+Lightbits让未来照进现实

焱融科技

云计算 分布式 高性能 存储 nvme

以两军问题为背景来演绎BasicPaxos

OpenIM

InfoQ专访:Coverity谈“开发中测试”与程序员最常犯的编码错误_语言 & 开发_郑柯_InfoQ精选文章