“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

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

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

关注

评论

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

ButterKnife被弃用,ViewBinding才是findView的未来?,秀出天际

android 程序员 移动开发

深入剖析Redis客户端Jedis的特性和原理

vivo互联网技术

数据库 redis Jedis 集群

Android:让你明明白白的使用RecyclerView—,retrofit优点

android 程序员 移动开发

一个递归调用引发的 “血案”

神策技术社区

这个深秋,StarRocks喊你一起来撸码 | StarRocks Hacker Meetup 报名开启

StarRocks

数据库 Meetup StarRocks

关于数据导入,教你几招

Simon

MySQL

BAT常见Android面试20题详解,985研究生入职电网6个月

android 程序员 移动开发

BroadcastReceiver源码分析,一线互联网大厂中高级Android面试真题收录

android 程序员 移动开发

APP瘦身大法--AndResGuard的使用,android地图开发框架

android 程序员 移动开发

Android:三四十岁的大龄程序员如何对后辈评价“太水技术低

android 程序员 移动开发

App 竟然是这样跑起来的 —— Android App_Activity 启动流程分析

android 程序员 移动开发

基线模型开源分享及深度讲解 | 2021 MAXP 直播第二讲:基于DGL的图机器学习任务

亚马逊云科技 (Amazon Web Services)

人工智能 图神经网络 创新大赛

App怎么做才能永不崩溃,一文详解

android 程序员 移动开发

App黑白化实现扩展,一键护眼模式,给App,安卓事件分发机制面试

android 程序员 移动开发

Android高阶:了解这些知识点,学习Binder就不成问题,androidapp开发教程推荐

android 程序员 移动开发

Android:怎么看待大厂面试门槛越来越高,,让你明明白白的使用RecyclerView

android 程序员 移动开发

APP瘦身大法--AndResGuard的使用(1),为什么阿里的程序员成长如此之快

android 程序员 移动开发

AsyncTask相关知识,安卓工程师面试题及答案

android 程序员 移动开发

BAT同系列公司面试总结,哪些你所不知道的,学习android的好书

android 程序员 移动开发

Base64 的原理、实现及应用,面试字节跳动Android工程师该怎么准备

android 程序员 移动开发

BroadcastReceiver官方概览,【面试总结

android 程序员 移动开发

Butterknife源码分析,android开发环境搭建实验报告

android 程序员 移动开发

(完整版)直播回顾:2021 MAXP 无服务器赛题讲解

亚马逊云科技 (Amazon Web Services)

人工智能 云计算 创新大赛

BAT资深面试官-带你破解Android高级面试,渣本逆袭大厂面经分享

android 程序员 移动开发

Android高阶:了解这些知识点,学习Binder就不成问题(1)

android 程序员 移动开发

Android:手把手教你实现在XML中配置网易云歌手详情滑动效果

android 程序员 移动开发

Android:金九银十怎么从中小企业挤进一线大厂?大厂面试题问的深度

android 程序员 移动开发

App基于手机壳颜色换肤?先尝试一下用 KMeans 来提取图像中的主色

android 程序员 移动开发

ByteDance张一鸣:抖音很多年轻人,出色的都有这些闪光点

android 程序员 移动开发

Android:年过35岁的程序员还有出路吗?面试了一个-46-岁程序员后

android 程序员 移动开发

BAT面试有关散列(哈希)表的面试题详解,flutter图片压缩上传

android 程序员 移动开发

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