プログラマーはコードのどこを見ている?アイトラッキング研究が解き明かす「コード読解」のメカニズム
公開日
ソフトウェア開発において、私たちは書く時間よりも読む時間の方がはるかに多いと言われています。他人が書いたコード、あるいは過去の自分が書いたコードを理解し、その文脈を把握する「コード読解」は、機能追加やバグ修正に不可欠なスキルです。しかし、優秀なプログラマーは、複雑なコードの中からどのようにして素早く、そして正確に必要な情報を読み取っているのでしょうか。
この記事では、プログラマーがコードを要約する際の「視線の動き」をアイトラッキング技術で詳細に分析した研究「Programmer Visual Attention During Context-Aware Code Summarization」を基に、コード読解のメカニズムを解き明かしていきます。この研究から見えてきた発見は、私たちプログラマーのコード読解スキルを向上させるヒントになるだけでなく、AIによるコード要約ツールの未来にも大きな示唆を与えてくれます。
調査の概要:10人のプログラマーの視線を60時間追跡
この研究の目的は、プログラマーがコードの自然言語による説明(要約)を作成する際に、プロジェクト全体の文脈(コンテキスト)をどのように利用し、コードのどこに視覚的に注目するのかを明らかにすることです。
調査に参加したのは、Java開発経験が平均2.8年、プログラミング全体の経験年数は平均5年に及ぶ10人の大学院生です。 参加者には、5つの異なる大規模Javaプロジェクトに含まれる合計40個のメソッドについて、それぞれ3文からなる「コンテキストを意識した要約」を作成してもらいました。その際、アイトラッキング装置を用いて、参加者がタスクを遂行している間の視線の動きを精密に記録しました。これにより、どのコード要素を、どのくらいの時間、どのような順番で見ていたのかを定量的に分析しています。
発見1:タスクに慣れると視線は効率化する - 読む量は減っても質は落ちない
まず明らかになったのは、プログラマーは同じプロジェクト内で作業を続けるうちに、視線の使い方が効率的になるということです。
タスクが進むにつれ、読む単語の量が最大35%減少
実験では、セッションの最初に取り組むメソッドと、最後に取り組むメソッドとで、視線の動きに明確な違いが見られました。具体的には、最後のメソッドを要約する際には、最初のメソッドと比較して視点が留まる回数(固視回数)が平均で35%も減少していました。 また、一度読んだ場所に戻って読み返す動き(回帰)も13%減少しており、より少ない視線の動きで情報を収集できるようになっていることが分かります。
これは単なる疲労ではなく、プロジェクトへの「学習効果」を示唆
読む量が減ると、要約の質も低下するのではないかと考えるかもしれません。しかし、作成された要約の品質スコアを比較したところ、セッションの最初と最後で統計的に有意な差は見られませんでした。 このことは、視線の動きの減少が単なる疲労や集中力の低下によるものではなく、プログラマーがプロジェクトの構造やコーディングスタイルを学習し、どこに重要な情報があるかを予測できるようになった結果、より効率的に情報を収集できるようになった可能性を示唆しています。
発見2:コードの読みすぎは逆効果? - 要約の質と情報量の絶妙な関係
次に、作成された要約の「質」と、そのためにどれだけのコードを読んだかという「量」の関係性について、興味深い発見がありました。この研究における要約の品質は、2人の研究者が 「正確性 (Accuracy)」「完全性 (Completeness)」「簡潔性 (Conciseness)」「明瞭性 (Clarity)」 という4つの観点から、すべての要約を手動で5段階評価したスコアに基づいています。
「完全な要約」のためには情報量が必要だが、「簡潔な要約」のためには情報過多は禁物
高品質な要約の条件として挙げられる、この中の「完全性(必要な情報が網羅されているか)」と「簡潔性(不要な情報がないか)」に注目すると、分析の結果、この2つはトレードオフの関係にあることが分かりました。
図表1を見ると、完全性(Completeness)の評価が高い要約を作成した参加者は、より多くのコード行やメソッドを閲覧している(青いバーがプラス方向)のに対し、簡潔性(Conciseness)の評価が高い要約を作成した参加者は、閲覧量が少ない(オレンジのバーがマイナス方向)傾向が見られます。 つまり、多くの情報をインプットしようとすればするほど、要約から不要な情報を取り除くのが難しくなることを示しています。
図表1: 要約の完全性・簡潔性の評価と視線指標の関係
コードの読みすぎは逆効果?品質と閲覧量が描く正規分布の関係
さらに分析を進めると、参照するコードの量と要約の全体的な品質は、単純な比例関係にはないことが明らかになりました。 関係性はむしろ「正規分布曲線」を描き、ある閾値まではコードを多く読むほど品質が向上しますが、その閾値を超えて読みすぎると、逆に情報の取捨選択がうまくいかなくなり、品質が低下してしまうのです。 質の高い要約を作成するためには、「読みすぎず、読まなすぎず」という絶妙なバランスが重要であると言えます。
発見3:プログラマーが最も注目するのは「同じクラス内のコード」
では、プログラマーはその「最適な情報量」を、コードベースのどこから得ているのでしょうか。研究では、視線が集中した場所を5つのコンテキストに分類して分析しました。
要約対象メソッドと同じクラス内の「他のメソッド」や「変数宣言」に大半の時間を費やす
図表2は、プログラマーが各コードコンテキストに費やした時間の割合を示しています。驚くべきことに、どのプロジェクトにおいても、参加者は 視線の大半(平均40〜65%)を、要約対象のメソッドと同じクラス内に存在する他のメソッド(class methods)や、変数などの宣言(class declarations) に費やしていました。
図表2: プログラマーが注目するコードコンテキストの分布
驚くべきことに、メソッドの呼び出し関係(コールグラフ)はあまり見られていない
一方で、多くの開発者が重要だと考えがちな、そのメソッドを呼び出しているメソッドや、そのメソッドが呼び出しているメソッド、つまり呼び出し関係(call graph)に費やされた時間は、ごくわずかでした。 これは、メソッドの役割や振る舞いを理解するためには、まずそのメソッドが所属するクラス全体の責務や状態を把握することが最も重要であると、プログラマーが無意識的に判断していることを示唆しています。
この傾向はプロジェクトや個人のスキル差によらず共通
この「まずは同じクラスから」という傾向は、プロジェクトの種類や参加者個人の経験年数などによらず、非常に一貫して見られました。 これは、プログラマーがコードを理解する上での、普遍的な認知戦略の一つである可能性を示しています。
まとめ:効率的なコード読解と次世代AIツールへの応用
今回の研究は、プログラマーの視線の動きを科学的に分析することで、効率的なコード読解における重要なポイントを明らかにしました。複雑なコードを理解しようとする際、私たちはついメソッドの呼び出し関係を深く追いがちですが、熟練したプログラマーの視線はまず、そのメソッドが属するクラス全体の文脈、つまり他のメソッドや変数定義に向けられていました。また、高品質な要約のためには、参照する情報量が多ければ良いというわけではなく、むしろ適切な範囲に絞ることが重要であることも示唆されています。
こうした人間のプログラマーが持つ優れた認知プロセスは、AIによるソフトウェア開発支援ツールの進化にも大きな影響を与えるでしょう。例えば、AIがコードの要約を自動生成する際に、人間と同じように「同じクラス内の情報」を重点的に考慮することで、より的確で質の高い要約を生み出せるようになるかもしれません。人間の知能を解明することが、結果として私たちを助ける技術の発展に繋がるという、興味深い未来を示していると言えます。
開発生産性やチームビルディングにお困りですか? 弊社のサービス は、開発チームが抱える課題を解決し、生産性と幸福度を向上させるための様々なソリューションを提供しています。ぜひお気軽にご相談ください!
参考資料: