写点什么

线程安全并发静态分析工具发布首个公开 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:124627
用户头像

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

关注

评论

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

赚钱的6个层次

品牌运营|陆晓明

创业 技术人 赚钱思维 层次 商机

关于沟通成本的一些认知

Geek_reg5m9

项目管理 软件开发

如何利用数据异构实现多级缓存或者数据迁移

松花皮蛋me

缓存 分布式 分库分表

习惯与惯性

伯薇

个人成长 习惯 习惯养成 提升能力

重新认识Go语言中的slice

麻瓜镇

Go 语言

Redis源码之常用数据结构和函数

心平气和

redis

新人工作的时候遇到问题怎么办

波波

学习 编程 职场 新人

[读书随笔]从哲学上的问题分类看TDD

老狗

哲学 TDD

技术人赚钱的9个路线

品牌运营|陆晓明

副业 赚钱 技术人 码农 生财有术

我也曾对架构师的力量一无所知

曲水流觞TechRill

基于vue(element ui) + ssm + shiro 的权限框架

吴邪

如何对Code Review的评论进行分级

宝玉

代码审查 Code Review

婚姻就是合伙开公司,各自做好自己的工作很重要

鼎玉谷

管理 婚姻 公司 付出 人情

金融「中台」十宗罪

FinClip

中台 企业中台 业务中台

信仰

小天同学

人生 个人成长 思考 读书感悟 信仰

年轻人的世界

boyzcl

年轻人 系列

关于CodeReview的一些思考

Yezhiwei

对你来说,阅读是另一种生活的方式吗?

叶小鍵

读懂才会用 : Redis的多线程

小眼睛聊技术

Java redis 学习 程序员 编程语言 后端

UITableView 手势延迟导致subview无法完成两次绘制

AlienJunX

在今天种下一棵树

陈医僧Ethan

感悟 育儿

Hello World !

ATGU:阿宝哥

Java Hello World ! Info

详解iOS性能优化,安装包瘦身

Usama Bin Laden

ios 源码分析 性能优化 性能 原理

瞎琢磨先生の好物推荐(软件/网站)

瞎琢磨先生

JAVA小抄-000-初始

NoNoGirl

Java

开通InfoQ写作平台测试

ytl

Redis学习笔记(基础命令)

编程随想曲

redis

准备重读测试驱动开发

escray

学习 CSD 认证实战营

系统的伸缩性以及扩展性设计

Janenesome

读书笔记 程序员 架构

关于「后浪」,ta 们在说什么?

boyzcl

年轻人 系列 后浪

瞎琢磨先生の常用的 linux 命令

瞎琢磨先生

Linux Shell

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