ソフトウェア分析学研究室の紹介(学生の皆さんへ)

研究室の特徴
ソフトウェア分析学研究室では, ソフトウェアのソースコード,開発過程,バグ,仕様書,開発者の行動履歴などのデータを計測・分析し, 得られた知見を開発現場や開発者教育へ役立てます. 研究目的は,ソフトウェアの品質向上,開発コストの低減,開発失敗の回避, 開発計画の立案支援,プロジェクト管理支援,開発者の育成などです. 要素技術としては,データマイニング,統計処理,機械学習,自然言語処理など, 近年の人工知能(AI)の要素技術と重なる部分が多いです. ただし,ビッグデータ+機械学習は近年の流行ですが,ソフトウェア開発に関するデータは 「ノイズの多いスモールデータ」であることが多く, 様々な工夫を用いた分析(2017.10.3 JFPUG 招待講演資料)を行います.

上記に加えて,2017年4月に着任されたZeynep Yucel先生による人間行動分析学に関する 研究を行っています. 研究課題としては, 人間の集中力の分析, 人間の行動とインタラクションの分析などがあります. 具体的な研究内容については, Zeynep先生のWebサイトも併せてご覧ください.

他には,ソフトウェア中のアルゴリズムやデータを隠蔽するためのプログラム難読化, ソフトウェアの盗用を発見するための電子透かしやバースマークなども研究しています.

当研究室では,研究論文の執筆・研究発表を通して,自分の考えを整理し, 他人に分かりやすく伝える技術を学んでもらうことを重視しています. 4年生も卒業までに1回は学会発表を目指してもらいます. 特別研究(卒業研究)や修士論文で取り組んだ研究内容が就職後にすぐ役立つことは 少ないかもしれませんが,研究を試行錯誤して進めたことや,論文執筆・研究発表の経験は,将来必ず役立つと考えています.

また,当研究室は国際色豊かなことが特徴です. 研究テーマによっては,Zeynep Yucel先生を交えて研究を進めていきます. 留学生が在籍してることも多いです. 2017年度は,タイ・カセサート大学(2か月間),香港城市大学(1カ月間),中国・西北工業大学(半年,継続中),フランス・グルノーブル大学(2か月間,継続中)からの研究生が在籍していました.


今日のソフトウェア開発とデータに基づく支援
当研究室の研究対象であるソフトウェア開発は,今日,非常に多様化しています. 伝統的なオンプレミスの開発案件に加えて,クラウドコンピューティング環境での開発やサービスが急増しています. また,オープンソースソフトウェア(OSS)の普及に伴い,Git,GitHubを利用したソーシャルコーディングによる開発が増えています. 商用ソフトウェア開発におけるOSSの利活用も日常的に行われています. 開発プロセスも,従来のウォーターフォール開発だけでなく反復型の開発が増えています. 形式手法も普及が進んでいます. AI技術を活用した,自動デバッグといった新しい技術も出てきています.

見方を変えると,新しいソフトウェア開発技術が次々と現れ,クラウドやOSSの利用も可能となっていることから,開発そのものは楽になってきているとも言えます. ただし,それ以上に,ソフトウェアの大規模化,高信頼性化,短納期化,低コスト化の要求が強まっており,ビジネスとしては楽にはなっていません. さらに,ソフトウェア業界の成長・多様化に伴い,契約履行,特許,著作権,ライセンス等についての訴訟が頻発しています. 従って,様々な技術をうまく活用し,法的側面への対処もしっかりした上で, いかに大規模ソフトウェアをきっちり作るか,ということが大きな課題となっています.

当研究室では,ソフトウェア開発支援を行うにあたり,データ計測と分析を重視しています. ソフトウェア開発はその大部分の工程が人手により行われるため,KKD(勘,経験,度胸)に頼りがちです. データ計測・分析の基本的な狙いは,勘と経験に頼っているソフトウェア開発に,定量的な裏づけを与えることです. 客観的なデータに基づいて,開発計画の立案を行ったり,開発プロセスの問題点を発見したり,プロセス改善の提案を行います.

また,ソーシャルコーディング時代においては,開発組織ではなく,開発者個人の技術や能力に焦点が当たります. 当研究室では,GitHub上のプログラマの活動を分析したり, ソフトウェア開発行動記録システムTaskPit などにより開発行動を分析することで,開発者の教育や採用の支援を目指します.


ソフトウェア開発に関するデータ
日本のソフトウェア開発の成功率は所説様々ですが,ソフトウェア開発データ白書2014-2015によると, 65%程度です.つまり,3回に1回は失敗していることになります. AI技術を活用し,失敗を減らしていくべき分野であるといえます. そして,その基礎となるビッグデータ/スモールデータが急激に生み出されつつあるのがこの分野です.

近年のOSSの普及に伴い,ソフトウェア開発リポジトリホスティングサービスが発展してきました. その代表的なサービスの一つであるGitHubでは,約2000万のソフトウェア開発リポジトリが公開されており,各リポジトリにはソースファイル単位の詳細なソフトウェア開発履歴が記録されています. これらリポジトリはまさにビッグデータであり,世界中の研究者が分析を進めています. GitHub以外にも, Socorroなどのクラッシュレポートリポジトリ, Mavenなどのライブラリリポジトリ, Travis-CIやJenkinsなどの継続的インテグレーションのリポジトリ, Gerrit Code Review,Rietveldなどのコードレビューリポジトリなども分析されています. また,プログラミング技術に関するQ&AサイトであるStack Overflow上のデータの分析や,Google Play上のAndroidモバイルアプリの分析, Aizu Online JudgeやTopCoderなどのオンラインジャッジシステム上のプログラミング課題とその解答の分析など,分析の題材となるデータは枚挙にいとまがありません. このような,ソフトウェア開発リポジトリに蓄積されているデータを分析する研究分野は,「ソフトウェアリポジトリマイニング」と呼ばれています.詳しくは,日本ソフトウェア科学会第 33 回大会における公演資料 や, コンピュータソフトウェア誌の解説記事 をご覧ください.

その他のデータとしては, ソフトウェア開発企業において計測される開発プロジェクトの実績データ, 個々のソフトウェア開発者から計測されるキーストローク,マウス操作,脳波, 注視点などの行動履歴データ, ソフトウェアの仕様書やバグレポート等の自然言語で書かれたドキュメントなどが研究対象となります.


研究テーマ
  • ソフトウェア開発支援
    バグ予測,バグの要因分析, 開発作業の自動推定, ソフトウェア発注仕様書(提案依頼書)の分析, バグレポートの自動分類, コードクローン分析, ITオペレーションのコスト分析, OSS開発における開発者の流動性の分析, ソフトウェア開発工数予測,開発コストの要因分析など
  • 開発者教育支援
    プログラミング作法の分析,GitHub上のプログラマの分析, プログラマの脳活動の分析, ソフトウェア開発企業の求人票の分析など
  • データマイニング
    オーバーサンプリング,アソシエーションルールマイニングの拡張, データの機密保持,データの無矛盾性の分析など
  • ソフトウェアプロテクション
    ソフトウェアバースマーク,プログラムの難読化, ソフトウェア盗用の分析,ソースコードの不自然さの分析など.
研究テーマの詳細は,左のメニューの「研究テーマ」のリンク先にあります.