ソフトウェア工学研究の日々

ソフトウェア工学の学術研究を紹介しています。ソフトウェア開発に関する調査と実験が大好きです。

手法提案系研究と調査系研究

本ブログでは、様々な研究を「手法提案系」「調査系」の2つのカテゴリに分類して紹介しています。これらは正式な分類というわけではなく、私たちの研究室でときどき使う言い回しの一種です。

手法提案系研究は、既存の何らかの問題、通常はソフトウェア開発において時間のかかる作業や難しい作業に対して、時間短縮や精度向上の方法を提案するタイプの研究です。与えられたソースコードと似ているものをすべて見つける、API の利用例を提示する、ソースコード潜在的な問題を自動検知するなど、目的は様々ですが、手法をソフトウェアの形で実装して有効性を示すという形で研究を行います。有効性の評価は、既存研究で示された何らかの評価指標を測定するか、人間が何らかの作業に適用した効果を測定することによって定量的に行うことが多く、場合によっては利用者のコメントなどから定性的に評価を行っていくこともあります。

提案手法はただ作ればよいというわけではなく、研究としての新規性を示すために、既存のツール(=競争相手)をうまく活用した場合の限界をしっかり調査する必要があります。その過程で先進的な(研究レベルの)ソフトウェア開発環境の機能の裏にある技術や実装方法を学ぶことになるので、プログラミング自体が好きな人、プログラミング環境を整えるのが好きな人に向いている研究の方向性です。アイディアが非常に新しいときは、有効性の評価もそこそこに、ツールのデモンストレーションだけで国際会議発表まで進むこともあります。私たちの研究室の場合、ある程度出来上がったところで共同研究先の企業に配布するなどといった活動もしているので、提案手法の前提条件が少なく済む(簡単な準備だけで使える)など、実用性に関する特性を比較的重視する傾向にあります。企業の状況やニーズとうまくマッチしているものが作れると、本当に現場の開発者が使用するツールとなる可能性もあります。

一方の調査系研究は、ソフトウェア開発で現在実践されている方法や開発者の活動傾向などを理解するために調査を行い、それを報告するというタイプの研究です。たとえば「開発者はソフトウェア開発作業中に Web 検索でどんな情報を参照するのか?」「開発者はどれぐらいコピー&ペーストを使っているか?」といった開発者の行動を調査するものや、「同じようなソースコードをあちこちにコピーして使いまわすのは有害か?」「1つの関数の長さはどれぐらいが適切か?」というように開発者が取るべき行動の方針を考えるための調査があります。ソフトウェアの開発データなどから開発者の活動状況を調査し、統計的な分析によってデータを整理して、開発者や研究者が今後行うべきアクションの主張を研究報告としてまとめます。ソフトウェア工学の話題に出てくるようなソフトウェア品質に関する議論は、だいたいがこちらの成果になります。

調査の設問次第で新規性は担保しやすいものの、「そんなことを調べてどうするの?」「その結果は、やる前から分かっていたのでは?」と言われやすいところに難しさもありますが、現在のソフトウェア開発技法を詳しく調べたい人や、自動化よりも人間の作業方法が大事だと考える人に向いている研究の方向性です。単にデータを調べるだけと考えられがちですが、オープンソースソフトウェアのソースコードのような大規模データに対する解析的な調査や、特定の作業における人間の動きを詳細に記録・分析するといった活動には、技術的な工夫を凝らす余地もかなりあります。

調査系研究の成果が新しい提案手法の必要性を示す土台になり、手法提案系研究の成果が新しい調査方法を生み出すなど、これら2種類の研究は相互に密接なかかわりがあり、研究室ではどちらも等しく重要であると考えています。研究室に所属する学生も、興味と得手不得手に応じて、特定のテーマについて1人で両方をこなす人、とにかく新しい手法を作り性能を改善していく人、特定の調査技術を駆使して様々な調査を行う人など、それぞれに研究の方向性を選んでいます。