写点什么

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:003816
用户头像

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

关注

评论

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

业务流程巡检拨测常用的开源工具

阿泽🧸

10月月更 业务流程

AI大模型的白垩纪

脑极体

IDEA的Docker插件实战(Dockerfile篇)

程序员欣宸

Docker IDEA 10月月更

Python应用之基础结构:链表- 删除排序链表中的重复元素

芯动大师

10月月更 链表结构 基本元素

【算法作业】实验三:划分集合-贪心 & 可能的IP地址-回溯

清风莫追

数据结构 算法 10月月更

LinkedList源码分析(二)

知识浅谈

linkedlist 10月月更

Spring Boot「01」构建 REST API

Samson

Java Spring Boot Web 学习笔记 10月月更

【C语言内功修炼】动态内存管理的奥秘

Albert Edison

C语言 malloc 动态内存 10月月更 free

分布式定时任务设计及其框架

穿过生命散发芬芳

10月月更 分布式定时任务

Python进阶(五)浅谈python匿名函数及编写无参数decorator

No Silver Bullet

Python 10月月更 匿名函数 无参数decorator

MFC|CCombobox控件修改编辑框光标显示位置

中国好公民st

c c++ 10月月更

跟着卷卷龙一起学Camera--ISO

卷卷龙

ISP camera 10月月更

【算法作业】实验二:给立方体排序的小明&&同时整除的数

清风莫追

数据结构 算法 10月月更

hashmap常见面试题

普罗米修斯

10月月更

10项任务助你落地架构课程!

华仔

架构实战营

数据结构线性表链表

IC00

c 链表 数据结构算法 10月月更 链表结构

【Java深入学习】可见性

Geek_65222d

10月月更

Photoshop软件应用项目(二)

张立梵

设计师 ps 10月月更

C++ | 关于extern关键字的使用

YOLO.

qt 10月月更 C++

2022-10-08:以下go语言代码输出什么?A、0 0;B、0 4;C:4 0;D:4 4。 package main const s = “Go101.org“ // len(s) == 9

福大大架构师每日一题

golang 福大大 选择题

2022 年适用于 Linux 和 Windows 的五款最佳 Python 代码编辑器

wljslmz

Python ide 编辑器 10月月更

Qt | 实现自定义手机号输入框控件

YOLO.

qt 10月月更 C++

Python应用之基础结构-链表-合并两个有序链表

芯动大师

链表 10月月更 合并有序

Vue常用修饰符大全

CoderBin

面试 Vue 前端 10月月更

【Java深入学习】join再理解

Geek_65222d

10月月更

Python应用之基础结构:二叉树 前序遍历

芯动大师

二叉树 遍历 10月月更

斐波那契数

掘金安东尼

算法 10月月更

40道Promise输出题,你都会了吗?🔥

CoderBin

面试 前端 JavaScrip 10月月更

【算法作业】实验四:逆波兰表达式求值 & Fibonacci数列的尾递归与非递归程序

清风莫追

数据结构 算法 10月月更

大数据ELK(十八):Beats 简单介绍和FileBeat工作原理

Lansonli

10月月更 大数据ELK

Python进阶(七)浅谈python3和Python2的区别

No Silver Bullet

Python3 区别 10月月更 Python2

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