カスタム検索
表示順:
Relevance
Relevance
Date
ウェブ
 
 
 

Facebook、マルチスレッドのコードを静的解析してデータ競合を検出する「RacerD」、オープンソースで公開。同社Androidアプリのリリース前に1000以上の問題を検出

2017年10月23日

アプリケーションのレスポンスを改善するうえで、マルチスレッド化は重要な選択肢のひとつです。

その一方で、マルチスレッドのアプリケーションは十分に注意深くプログラミングしないと、変数の値が予期しないタイミングでほかのスレッドから書き換えられるなどの問題が紛れ込みやすいものです。

しかもマルチスレッドに起因する問題は再現が難しく、一般に発見するのが困難です。

RacerDリリース:Facebookで1000以上ものバグを発見

Facebookは、こうしたデータ競合の問題を、コードを静的解析することで発見し、警告してくれるツール「RacerD」をオープンソースで公開しました

RacerD

Facebookの説明によると、RacerDはロックもしくは@ThreadSafeアノテーションを用いたJavaコードが解析対象。

RacerDはすでに10カ月前からFacebookが開発しているAndroidアプリのコードに対して使われ、1000以上のバグを防いできたとのこと。

RacerD has been running in production for 10 months on our Android codebase and has caught over 1000 multi-threading issues which have been fixed by Facebook developers before the code reaches production. It has helped support the conversion of part of News Feed in Facebook's Android app from a single-threaded to a multi-threaded model.

RacerDはこれまで本番環境で10カ月、私たちのAndroidのコードベースに対して使われ、1000以上のマルチスレッドの問題を指摘してくれたおかげで、Facebookのデベロッパーは正式リリース前にそれらを修復できた。これはFacebookのAndroidアプリのニュースフィードの一部分を、シングルスレッドからマルチスレッドへ転換する支援となった。
(「Open-sourcing RacerD: Fast static race detection at scale」から)

正確性とスケーラビリティのバランス

静的コード解析でマルチスレッド動作時のすべての可能性を追っていくと、すぐに可能性が爆発してしまい現実的な解析時間では収まらなくなってしまいます。

そのためRacerDでは次の方針でコードを解析していると説明されています。

1. Don't do whole-program analysis; be compositional.

プログラム全体を解析するのではなく、合成的になる

2. Don't explore interleavings; track lock and thread information.

割り込みを探索するのではなく、ロックとスレッド情報を追う

3. Don't attempt a general, precise alias analysis; use an aggressive ownership analysis for anti-aliasing of allocated resources.

全般的で正確なエイリアス(ここでは別名の意味ではなく、データ競合問題のことを指すと推察される)分析をせず、割り当てられたリソースの反エイリアスのための積極的なオーナーシップ分析を行う

こうした方針で正確性とコード分析のスケーラビリティのバランスをとっているとのことです。

コード解析ツール「Infer」

RacerDは、2015年にオープンソースとして公開された静的コード解析ツール「Infer」の一部として公開されましたが、RacerD単独でも起動できます。

FacebookではInfer/RacerDをCI(継続的インテグレーション)の一部としてすでに組み込んでいるそうです。

follow us in feedly

カテゴリ 開発ツール / 言語 / プログラミング
タグ  Facebook , ソフトウェアテスト


前の記事
Kotlinのスキルを持たないAndroid開発者は恐竜のようになるリスクに直面。モバイルアプリプラットフォームのRealmが予測


カテゴリ



Blogger in Chief

photo of jniino Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

人気記事ランキング

  1. 「Bash on Windows」という名称は非推奨に。正式名称「Windows Subsystem for Linux」(WSL)としてベータを卒業、正式リリースに
  2. Kotlinのスキルを持たないAndroid開発者は恐竜のようになるリスクに直面。モバイルアプリプラットフォームのRealmが予測
  3. [速報]DockerがKubernetesとの統合およびサポートを発表。DockerCon EU 2017
  4. Kubernetes、Dockerに依存しないKubernetes用の軽量コンテナランタイム「cri-o」正式版1.0リリース
  5. HashiCorp創業者、ミッチェル・ハシモト氏に聞く(前編)~HashiCorpを設立した経緯、エンタープライズ市場へフォーカスする理由とは?
  6. [速報]次バージョンのDocker for Win/Macでは、ローカルにKubernetes環境も自動構築。DockerCon Europe 2017
  7. [速報]次バージョンのDocker for Win/Macでは、ローカルにKubernetes環境も自動構築。DockerCon Europe 2017
  8. GitHubでもっとも人気の言語はJavaScript、フォークされたのはTensorFlow。GitHubが今年の統計情報「The State of the Octoverse 2017」を発表
  9. HashiCorp創業者、ミッチェル・ハシモト氏に聞く(後編)~ハシモト氏と日本の関係、そしてファウンダーとしての役割とは
  10. Google Compute Engineの仮想マシン、複数ネットワークインターフェイスをサポート開始。最大8つまで


新着記事 10本


PR - Books


fig

fig

fig