Facebookが今日(米国時間6/11)、Inferをオープンソースにする、と発表した。Inferは、同社が発表前のモバイルコードのバグを見つけるために使っているスタティックな(==非実動時)プログラムアナライザで、これまで同社はこのツールを使ってAndroidやiOS、Facebook Messenger、Instagramなど用のFacebookアプリを分析していた。
Facebookによると同社は、Inferのおかげで毎月何百ものバグを見つけることができている。このツールはコードをスキャンして、NULLポインタへのアクセスや、メモリなどのリソースのリーク、等々の問題点を指摘する。いずれも、アプリが確実にクラッシュしてしまうほどの、プログラムの深刻な欠陥だ。
Facebookは自社製アプリの開発がはやいことで知られているが、バグの修復もWebアプリケーションならはやくて簡単だが、モバイルではそうは行かない。デバッグしたアプリを、ユーザがダウンロードしてアップデートしなければならないからだ。
FacebookはInferを主に、AndroidのJavaコードとiOSのObjective-Cをチェックするために使ってきたが、CやJavaのコードならiOS/Androidに限らずなんでも調べられる。実際にFacebookは今、Inferを使える環境と対応言語を広げようとしている。
FacebookではInferの起動は自動化されていて、デベロッパがソースコードをちょっとでも書き変えると動き出し、見つけた問題をコード中にコメントとして書き込む。
このツールの技術的な詳細はFacebookのブログ記事を読めば分かるが、ここではInferが“分離論理(separation logic)”と呼ばれる概念を利用していることを、挙げておこう。分離と言ってもそれは、conscious uncouplingとは無関係だ。それは分析者が、アプリケーションの全体ではなく小さな部分を見ていくための理論だ。Inferはこれを使うことによって、コードの変更の分析を多くの場合10分以内で完了する。さらにInferは、コードの、前回とは変わった部分だけを見ることによって、デバッグをスピードアップする。このようなテクニックを駆使しなければ、大きなコードのスタティックな分析はほぼ不可能だ。
Inferは、ここで入手できる。