開発者支援

 ソフトウェアが複雑で大規模になるにつれ,開発中に間違い(バグ)が入り込むことが以前にも増して問題になっています.一方で,厳しさを増すビジネス環境に対応するために従来以上に素早いシステム開発が必要とされており,大規模なシステムをより短い時間で,高品質で,より安価に作ることが求められています.しかし,ソフトウェアは直接見たり触れたりすることができないため,製品が正しく出来ているかの判断が難しく,不具合の発見や修正は非常に困難です.
このような現状を支援するための,高品質,低価格,短納期を満たしたソフトウェア開発の支援が本研究の目的です.本研究室では開発中のソフトウェアやその作成過程を様々な視点から計測し,定量的な分析を行うための支援環境の開発と,分析結果に基づいた支援方法を開発しています.

上野研究室では,以下の3つの視点から計測・分析を行っています.

  • 作業履歴を用いた開発プロセスの計測・分析
  • 生体計測を用いた人的要因の計測・分析
  • 情報共有システムを用いた開発者間コミュニケーションの計測・分析

作業履歴を用いた開発プロセスの計測・分析

 工学分野全般において,実務者の行動を観察・記録し,効率の悪い点や改良できる点を見つける改善活動は効果的なプロセスです.
ソフトウェア開発でのプロセス改善の手法としては,Personal Software Process(PSP)があります.これは開発者自身やチームが自ら,日々の開発作業を分析することでスキルやプロセスの継続的な改善を続ける取り組みです.
PSPなどの開発プロセス改善の取り組みには,日々の開発作業の記録と収集が必要になります.しかし,これらの作業を人手で行う場合,大きな時間と労力が必要になります.
そこで,上野研究室では奈良先端大と共同で,作業履歴の自動計測システム”TaskPit”を開発しました.TaskPitを使うことで,開発者個人の日々の開発を作業履歴として,「ファイル閲覧」「ソースコード編集」などの粒度で自動的に漏れなく計測できます.本研究室ではTaskPitを用いて,開発プロセスの計測・評価を少ない労力で出来るような仕組みを研究しています.
具体的には,TaskPitで得た作業履歴から,それぞれの作業がどういった目的で行われたかを自動判別する技術を開発中です.たとえば,同じ「設計書閲覧」という作業でも,ソフトウェアの設計のためなのか,実装のためにしているのかが違うはずです.もし作業履歴を目的毎に自動で振り分けできれば,開発の目的ごとに作業の分析ができるようになります.そのために機械学習を用いて,開発者が最小限の入力をするだけで,計測した作業の目的を自動判別し,目的ごとの開発プロセスの分析を可能にします.
またTaskPitをクライアント・サーバ型のシステムに拡張し,多数の開発者の作業履歴をリアルタイムに取得する技術の開発を進めています.このシステムにより,一度に多くの開発者の作業履歴を,場所や時間を問わず集めることができるようになります.またこのシステムによって集めた作業履歴から,第三者機関が開発プロセスを評価する仕組みを整えることで,スキルや能力が見えにくいソフトウェア開発組織へ公正な評価を与えることが可能になると考えています.

関連する主な業績

  • 池田 祥平, 上野 秀剛, “第三者によるソフトウェア開発作業評価のための作業記録の保護手法,” 情報処理学会研究報告ソフトウェア工学研究会, 2014.
  • 上野 秀剛, 大橋 亮太, “PSP 支援のためのタスク時系列情報を用いた目的推定,” ウィンターワークショップ2013・イン・那須, pp.25-26, 2013.
  • Ryouta Ohashi, Hidetake Uwano, and Takao Nakagawa, “Task Classification with Chronological Action History for PSP Support,” In 13th ACIS International Conference on Software Engineering, Artificial Intelligence, Networking and Parallel/Distributed Computing (SNPD 2012), 2012.
  • 門田 暁人, 亀井 靖高, 上野 秀剛, 松本 健一, “プロセス改善のためのソフトウェア開発タスク計測システム,” ソフトウェア工学の基礎XV, 日本ソフトウェア科学会 FOSE2008, pp.123-128, 2008.

生体計測を用いた人的要因の計測・分析

 多くの物作りと同様に,ソフトウェア開発においても熟練した技術者の知識やノウハウは大変重要です.今までに行われた研究によると,熟練していない開発者に比較して,熟練開発者の開発効率は5倍から28倍になると言われています[1].またソフトウェア工学の古典のひとつである「ピープルウェア」では,”ソフトウェア開発においては,人的な要因はツールや開発手法,プログラム言語,プロセスといった技術的なことよりも重要な要素である”と述べられています[2].しかしながら,製作過程が目に見えにくいソフトウェア開発において,開発者のスキルやノウハウなどの人的要因を外部から計測・評価することは非常に困難です.
上野研究室では,視線や脳活動などの生体計測装置を用いて開発者の行動を詳細に分析することで,ソフトウェア開発における人的要因の計測・分析を行っています.これにより,熟練者のノウハウを教育や開発支援システムの作成に生かしたり,プログラミング初心者がつまづきやすい問題点の特定が可能になります.下の2つの図はプログラムに含まれるバグ(不具合)を探しているときの開発者の視線移動を記録したものです.縦軸は各ドキュメントの行番号を示し,横軸は時間を示しています.初心者(上)はシステムの機能や設計について書かれた仕様書や設計書をほとんど読んでいない一方,熟練者(下)は頻繁に仕様書と設計書を読んでいる様子が分かります.このような熟練者と初心者のさまざまな行動を分析することで,効率的な開発方法や教育方法を明らかにできると期待しています.
また脳活動計測を利用して,開発者がソースコードをどのように理解するかを分析する研究も行っています.計測装置としては脳波(EEG)や脳血流(NIRS)を利用してプログラムを理解するときの脳活動を計測・分析しています.脳活動を分析することで,プログラム理解という活動を,人間がもつ言語理解や数値計算などの認知機能の観点から分析できます.この研究は,世界でも最大規模の学会であるIEEEのSoftwareBlogで論文が紹介されるなど,いま大きな注目を集めています[3].

 

初心者の視線移動

熟練者の視線移動

参考文献

  • [1] The High Cost of Software, Practical Strategies for Developing Large Software Systems (1975).
  • [2] Demarco, T. and Lister, T.: Peopleware: Productive Projects and Teams, 2nd Edition, Dorset House (1999).
  • [3] http://blog.ieeesoftware.org/2016/01/using-biometrics-to-assess-developers.html

関連する主な業績

  • 幾谷 吉晴, 上野 秀剛, “ソースコード中の変数と条件分岐による脳活動の差,” コンピュータ ソフトウェア, Vol.32, No.3, pp.84-90, 2015.
  • Yoshiharu Ikutani, Hidetake Uwano,”Brain Activity Measurement during Program Comprehension with Nirs,” International Journal of Networked and Distributed Computing, Vol.2, No.4, pp.259-268, 2014.
  • 應治 沙織, 上野 秀剛, “コードレビュー時の読み方教示によるレビュー効率の向上,” 情報処理学会研究報告ソフトウェア工学研究会, 2014
  • Hidetake Uwano, Masahide Nakamura, Akito Monden, and Ken-ichi Matsumoto, “Exploiting Eye Movements for Evaluating Reviewer’s Performance in Software Review,” IEICE Transactions on Fundamentals, Vol.E90-A, No.10, pp.317-328, 2007.

情報共有システムを用いた開発者間コミュニケーションの計測・分析

 ソフトウェアの開発現場では,地理的に離れた場所にいる開発者が協力して作業を行うことがあります.Linuxに代表されるオープンソースソフトウェアの開発は,世界中の開発者がインターネットでコミュニケーションをとりながら開発が行われています.また企業でも外部企業への委託開発や,海外に開発の一部を外注するオフショア開発などが多く見られます.このような分散した拠点での開発作業においては,コミュニケーション不足によるソフトウェアの品質低下が起こりやすくなります.そのためネットワーク上で開発に関する様々な情報を管理・共有するための支援システム(バグ管理システム,バージョン管理システムなど)が開発されています.
一般に支援システムは記録する情報の種類(バグ情報やバージョン情報)ごとに用意されます.開発者はソースコードを変更したりバグを発見/修正したりするたびにその情報を各システムに記録していきます.このとき,同じシステム内で関連する情報(たとえば,あるメールとそれに対する返信メール)がある場合,それらは関係のある情報としてシステムに記録され,まとめて表示するなど情報の見逃しがないように処理されます.また,異なるシステム間であっても関連する情報のIDなどを入力することでリンクをつけるような機能も存在します.開発者は関連情報を合わせて読むことで,あるバグについてどんな議論がされ,どのように修正されソースコードのどこに反映されたのかといった開発の流れ(コンテキスト)を知ることが出来ます.このような開発のコンテキストは新たにプロジェクトに参加した開発者や,以前と似たようなバグを見つけた開発者にとってきわめて重要な情報です.
しかし,実際の開発においてはコンテキストが記録されておらず,調査や理解に多くの時間がかかっているのが現状です.なぜならば,同じシステム内の関連情報であっても不適切な操作がされると関連があるものとして記録されません.また,異なるシステム間の場合,開発者が関連する情報のIDを調べた上で各システムのルールに従った入力する必要があるため,入力されなかったり,正しく入力されなかったりしてしまいます.
本研究では,開発者が閲覧している情報に関連する情報を自動で見つけ出すことで情報収集の手間を省き,見逃しなどのトラブルを軽減する手法を開発しています.それぞれの支援システムに記録された情報について,文章解析手法や情報の類似性を求める手法を組み合わせた処理を行うことで,開発者の入力が無くても関連情報を探し出すことができるようになります.

関連する主な業績

  • Hiroki Kawai, Hidetake Uwano, and Soichiro Tani, “Aggregation of Development History from Distributed Support Systems,” In 13th ACIS International Conference on Software Engineering, Artificial Intelligence, Networking and Parallel/Distributed Computing (SNPD 2012), pp.470-475, 2012.
  • Soichiro Tani, Akinori Ihara, Masao Ohira, Hidetake Uwano, and Ken-ichi Matsumoto, “A System for Information Integration between Development Support Systems,” In 3rd International Workshop on Empirical Software Engineering in Practice (IWESEP), 2011.
  • 谷 宗一郎, 上野 秀剛, “コンテキストの推定による開発支援システム間の情報統合,” 情報処理学会研究報告,ソフトウェア工学, Vol.169, No.9, 2010.