DUICUO

Android および Java 用の Meta のオープンソース静的デッドロック検出器。

Meta(旧Facebook)は、AndroidのJavaコードにおけるデッドロックを、コードを実行せずに検出できる新しい静的アナライザーを開発しました。このデッドロック検出ツールは、オープンソースの静的解析フレームワーク「Infer」の一部です。

エンジニアのニコス・ゴロギアニス氏によると、この新しいデッドロック検出ツールは、数億行に及ぶコードベースのリビジョンを分析できるとのことです。このツールはすでにMetaの継続的インテグレーションシステムに導入されており、Androidアプリケーションファミリーのすべてのコミットをスキャンしています。過去2年間で、Metaの開発者はデッドロックレポートに基づいて200件以上の修正を実施しており、修正率は約54%です。

この検出器はどのように動作するのでしょうか?

このアナライザーは抽象解釈技術を用いて設計されています。各メソッドについて、アナライザーはロックの取得と解放におけるメソッドの動作の概要、およびメソッドがメインスレッドで実行されているかバックグラウンドスレッドで実行されているかを計算します。次に、キーペア (A, B) を使用して、メソッドがロックBの取得を試みたものの、その時点で既にセットAのロックを正確に保持していたという事実を記録します。すべてのメソッドにわたって計算されたこのデータは、2つの同時実行メソッド間でデッドロックが発生する可能性があるかどうかを判断するのに十分なものです。

速度と効率性を確保するため、このツールはアプリケーション内のすべてのソースファイルを解析するのではなく、まず変更されたファイル内のすべてのメソッドを処理します。次に、このデータに基づいてヒューリスティックを適用し、変更されたバージョンのメソッドとデッドロックする可能性のある、変更されたファイル外のメソッドを特定します。

デッドロックは通常、回復不可能なエラーであり、スレッドのスケジューリングは本質的に予測不可能であるため、診断が非常に困難です。そのため、デッドロックのテストでは、問題を明らかにするために数千回または数百万回の実行が必要になる場合があり、コードを実行したりビルドしたりすることなく、デッドロックを静的に検出できることは非常に価値があります。

Nikos Gorogiannis 氏は、彼のチームのアプローチによってデッドロック分析の目標を達成するとともに、大規模なコードベースにアナライザーを展開できるほどスケーラブルになったと述べました。

この記事はOSCHINAから転載したものです。

タイトル: Android および Java 向け Meta オープンソース静的デッドロック検出ツール

この記事のアドレス: https://www.oschina.net/news/185948/deadlock-detector-for-android-java