
拓海先生、最近社内で『JavaScriptの呼び出し関係を正確に把握できない』と現場が困っています。こうした解析をAIで補えると聞いたのですが、本当に導入価値はあるのでしょうか。

素晴らしい着眼点ですね!大丈夫ですよ、JavaScriptの呼び出し関係(Call Graph)の不足を機械学習で補う研究がありますよ。それを使えば見落としを減らせる可能性が高いんです。

機械学習と言うとブラックボックスで、結果の信頼性が読めません。現場は何を渡せばいいのですか。データの準備だけでコストがかかりませんか。

いい質問です。要点は3つです。1つ目、既存の静的解析ツールが作る呼び出し関係をそのまま使える点。2つ目、動的実行情報があれば混ぜて学習できる点。3つ目、結果は候補リストとして示され、人が最終判断できる点です。

なるほど、既存ツールの結果をそのまま頼りにしてよいということですね。それならば部分的に使って現場の判断を補助する運用もできそうです。

はい、現場が怖がる必要はありません。具体的には、プログラム全体をノードと多様な辺で表現した大きなグラフを作り、そこに対してリンク予測を行います。これにより非局所的な関係も検出できますよ。

“リンク予測”という言葉が出ましたが、それは要するに『今は接続が見えていない可能性のある関係を候補として挙げる』ということですか?

まさにその通りですよ。リンク予測(link prediction)は、ネットワーク上で見えていない、あるいは欠落している可能性のある接続を確率的に予測する手法です。難しい専門語ですね、身近に例えると名簿の欠落を埋める作業に似ていますよ。

投資対効果の観点で聞きますが、まず何を用意すれば最も早く効果を見られますか。数カ月で成果を示せますか。

大丈夫です。要点を3つで整理します。1つ目は既存の静的解析出力を集めること。2つ目はテスト実行で得られる動的コール情報があれば提供すること。3つ目は現場エンジニアが候補を検証する体制を作ること。この3つを揃えれば数ヶ月で候補精度の評価はできますよ。

現場に負担をかけず、まずは候補を提示して判断させる運用なら現実的ですね。これって要するに現場の『見落とし防止の補助ツール』ということ?

その理解で合っています。完全自動ではなく、人と機械の協働で見落としを減らすアプローチです。安全性や誤検知の管理もしやすい運用となりますよ。

分かりました、まずは小さく試して現場の信頼を得る運用から始めます。要点を自分の言葉でまとめると、既存解析を土台に機械学習で候補を提案し、現場が最終判断することで見落としを減らす、ということですね。
