写点什么

线程安全并发静态分析工具发布首个公开 beta 版本

  • 2013-10-08
  • 本文字数:1658 字

    阅读完需:约 5 分钟

英国的 Contemplate 公司最近宣布,他们已经发布了主打产品 ThreadSafe 的首个公众测试版本,该产品是一种用于检测 Java 代码中并发缺陷和低效问题的静态分析工具。

在这个版本之前的 1.2 版中,ThreadSafe 还只是给部分用户群体使用。本次发布的版本除了向公众开放外,还增加了大量新特性。

ThreadSafe 支持 Windows、Linux 和 OS X,并能以 Eclipse 插件方式执行,或者与 SonarQube 代码质量平台整合。它很快就能够以 CodeSonar 公司受欢迎的静态分析工具 Grammatech 的插件形式发布。

InfoQ 安装了 ThreadSafe,并使用它对中型规模的多线程应用进行了测试。将其安装到 Eclipse 中很容易,但需要重新启动 Eclipse。

为了进行对比,我们同样运行该应用,而使用的是 FindBugs ,它是用于从各方面定位 Java 代码中的缺陷的流行的静态分析工具,其中还包括对“多线程正确性”的检测。

两款工具中都号称有自己的利器。其中 FindBug 能定位并发错误,如“在所有的异常路径中,方法未释放锁”(见下图 1),ThreadSafe 似乎能更好地定位 Java 内存模型的错误应用和其他并发滥用的违规行为。

图 1 FindBugs 中找到的多线程正确性的缺陷

图 2 ThreadSafe 分析同样的应用

双击 ThreadSafe 中显示的缺陷则会在 Eclipse 中打开代码。

点击任何一个缺陷,则会高亮显示这个缺陷,并提供细节面板来显示更多关于该缺陷的信息。在图 3 中,我们选择了“Filed ‘complete’ may be synchronized inconsistently ”。你可以看到,它不仅显示其中哪些是不正确的访问,也显示哪些是正确的访问,从而真正有助于理解代码中哪些不一致。用户可以在详细信息面板中导航到该行的源代码中。用户也可以点击“(more)”链接,以在浏览器中查看更多关于该缺陷的详细信息。

ThreadSafe 能清楚了解 Java 内存模型。在我们的项目中通过它定位的大部分代码,都是和同步不一致相关的,这除了引起多线程中的竞态条件(race condition 外,可能导致“无中生有”的错误(注:即当一个线程在没有同步的情况下读取变量,它可能会得到一个过期值,但是至少它可以看到那个线程在当时设定的一个真实数值。而不是凭空而来的值。这种安全保证,称之为最低限的安全性)

InfoQ 故意引入一个潜在的“致命拥抱”死锁(注:一个线程在等待一个资源释放的时候,存在死锁)到代码库,ThreadSafe 并没有找到它。我们向 Contemplate CSO David Aspinall 询问了这个问题,他承认道:

我们在 ThreadSafe 中有一些线程死锁分析的功能,但其功能有限。在 Contemplate 中,我们有更复杂的死锁分析功能,这些是我们在咨询项目中使用的工具。当我们能确保使用 ThreadSafe 错误率足够低时,就会在未来计划将这些特性加入到产品中。

InfoQq 也询问了 Aspinall 是否了解 Brian Goetz 的 concurrency annotations 项目。他回答道:

事实上,我们已经在分析引擎中支持这些特性,但目前还没向用户发布。这将在我们下一个更新版本中发布。

我们询问了 Contemplate CEO Derick James 关于价格方面的问题:

我们的价格体系是按项目 license 收费。我们有一个基于代码行产品线规模的 license 收费模式,该做法和我们看到许多的商业代码质量产品的收费模式是一样的。

关于该公司背景和产品的信息:Contemplate 公司是一家成立于 2009 年,从英国爱丁堡大学信息学院分拆出来的公司。ThreadSafe 是其第一款产品,它基于 5 年的学术和工业研究方案,在研究新一代先进的技术方案分析的基础上设计而成。

在公开发布 ThreadSafe 前,Contemplate 宣称他们和多家国际投资银行紧密合作以证明他们的产品能用于分析复杂的商业多线程代码。

用户可以通过发送电子邮件到 contact@contemplateltd.com 申请 ThreadSafe 的试用版本。在东亚区可以从 Architect Group 获得 ThreadSafe。

查看英文原文: ThreadSafe Concurrency Static Analysis Tool Announces First Public Release


感谢侯伯薇对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2013-10-08 05:124371
用户头像

发布了 81 篇内容, 共 26.8 次阅读, 收获喜欢 5 次。

关注

评论

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

中高级前端开发需要掌握的vue知识点

bb_xiaxia1998

Vue

深入react源码看setState究竟做了什么?

flyzz177

React

FusionInsight MRS Flink DataStream API读写Hudi实践

华为云开发者联盟

大数据 华为云 数据读写 企业号十月 PK 榜

90 条简单实用的 Python 编程技巧,建议收藏

千锋IT教育

Git学习笔记

lxmoe

git 学习笔记 常用命令 11月月更

【C语言】float 关键字

謓泽

11月月更

【设计模式】原型模式:猴头,我叫你一声你敢答应吗?

游坦之

11月月更

APP“小动作”不断?HarmonyOS 3隐私中心可视化面板让它无处藏身

极客天地

GaiaX开源解读 | 跨端动态化模板引擎详解,看完你也能写一个

阿里巴巴文娱技术

开源 移动开发 移动端开发

手写现代前端框架diff算法-前端面试进阶

helloworld1024fd

JavaScript

学习MySQL必须掌握的13个关键字,你get了吗?

小小怪下士

Java MySQL 程序员

Spring 5(四)JdbcTemplate

浅辄

Java Spring5 11月月更

一份vue面试考点清单

bb_xiaxia1998

Vue

从源码角度看React-Hydrate原理

flyzz177

React

从recat源码角度看setState流程

flyzz177

React

源码学习之Spring容器创建原理

京东科技开发者

xml spring 源码 容器 测试

Spring 5(三)AOP

浅辄

Java Spring5 11月月更

优化开发人员对 K8s 安全的影响

HummerCloud

Kubernetes DevSecOps 11月月更

什么是Maven

莪是男神

Java maven 11月月更

Flask框架:如何运用Ajax轮询动态绘图

华为云开发者联盟

JavaScript 前端 华为云 企业号十月 PK 榜

河南数字经济产业创新研究院加入星策社区,携手推进企业智能化转型发展

星策开源社区

人工智能 开源 AI 企业转型 智能化

图学习初探Paddle Graph Learning 构建属于自己的图【系列三】

汀丶人工智能

图神经网络 11月月更 随机游走算法 异质图

ShardingSphere + OpenSergo,共同提升微服务体系下数据库的性能与稳定

SphereEx

数据库 微服务 Apache ShardingSphere

说说Vue响应式系统中的Watcher和Dep的关系-面试进阶

bb_xiaxia1998

Vue

说说你对Vue的keep-alive的理解

bb_xiaxia1998

Vue

首个中文Stable Diffusion模型开源;TPU演进十年;18个PyTorch性能优化技巧 | AI系统前沿动态

OneFlow

人工智能 开源 深度学历 TPU

python的成员方法的简单介绍

乔乔

11月月更

看透react源码之感受react的进化

goClient1992

React

clickhouse在风控-风险洞察领域的探索与实践

京东科技开发者

flink 数据 Clickhouse 风控 风险控制

一个 SaaS 软件同本地部署 On-Premises 系统集成的实际项目案例分享

汪子熙

微服务 SaaS 系统集成 On-Premises 11月月更

为提高 SDLC 安全,GitHub 发布新功能|GitHub Universe 2022

SEAL安全

GitHub 安全

线程安全并发静态分析工具发布首个公开beta版本_Java_Vikram Gupta_InfoQ精选文章