The Qualitas Corpus: A Curated Collection of Java Code for Empirical Studies
アブストラクト
- ソフトウェア開発の実践を支援するための測定技術の活用能力を高めるには、コードの分析をさらに進める必要がある
- しかし、コードの実証研究はコストが高く、結果の比較も困難
- そこで、オープンソースのJavaシステムを厳選した大規模なコレクションであるQualitas Corpusを作成した
- このコーパスは、コードの大規模な実証研究の実施コストを削減し、同じ成果物に対する測定結果を比較できるようにする
- Qualitas Corpusの設計、構成、開発に伴う課題についても考察
はじめに
- 業界で意思決定をサポートするために定期的に使用されているソフトウェアメトリクスはほとんどない
- 測定方法と、変更可能性、理解可能性、拡張性、再利用性、テスト可能性などの私たちが重視する品質特性との関係が分かりにくいことがその主な理由である
- この論文では、コードの成果物の測定値を取得し、共有するのをサポートするインフラストラクチャであるQualitas Corpusについて説明
- コードを測定し、その測定結果の意味を理解する上での障壁として、測定対象コードにアクセスしにくいことと、測定ツールが不足していることが挙げられる
- OSSの登場により、以前よりもはるかに多くのコードを測定できるようになった
- これにより、コードに関する実証研究への関心が高まっている
- しかし、研究を有益なものにするために十分な数のOSSプロジェクトから成果物を収集するには、依然として多くのコストがかかる
- Qualitas Corpusの主な目標の1つは、大規模なコードに関する実証研究の実施コストを大幅に削減することである
- しかし、コードを測定するだけでは不十分である
- 測定値と品質特性の関係を説明するモデルと、そのモデルを検証するための実験が必要である
- 実験の形態によっては、結果を比較できるように、同じ成果物を使用することが望まれる
- Qualitas Corpusの2つ目の目標は、同じ成果物の測定値の比較をサポートすること、つまり、コードの実証研究のためのコーパスを提供することである
動機と関連研究
- コードコーパスが必要かどうかという問いに答えるために、過去のコードに関する実証研究を調査した
- コードに関する実証研究とは、調査対象となる成果物がソースコードで構成され、複数の無関係な成果物が存在し、かつ、それらの成果物が研究とは独立して開発された研究を指す
- Knuthは実際に書かれたコードがどのようなものかを理解するための実証研究を行った最初の1人であった
- 彼は400を超えるFORTRANプログラムの静的解析と、約25のプログラムの動的解析を発表した
- ChevanceとHeidetは50のCOBOLプログラムを研究し、言語機能の使用方法についても調査した
- 1990年代には、アクセスできるシステムの数、特にC++で書かれたシステムの数が増加し、それに伴い研究数も増加した
- ChidamberとKemererは、2つのシステムにメトリクスを適用した
- 1つは634のC++クラスであり、もう1つは1,459のSmalltalkクラスであった
- 2000年代末までに、SourceForgeなどのオープンソース開発を支援するリポジトリや、インターネット検索システムの効率性の向上により、多数のシステムにアクセスできるようになった
- これは、実施された研究の数だけでなく、多くの場合、その規模にも影響を与えた
- 特に大規模な研究は、SucciらとCollbergらによるものである
- Succiらは、100のJavaアプリケーションと100のC++アプリケーションを調査した
- Collbergらは、インターネットから収集した1,132のjarファイルを分析した
- これらの研究にはいくつかの問題がある
- 第一に、これらの研究はいずれも同じシステムセットを使用していないため、結果の比較や統合が困難
- 第二に、分析されたシステムの詳細がすべて提供されていないため、再現する能力が限られている
- 第三に、著者自身でさえ研究対象を十分に認識しているかどうかが明らかではない
- 最後に、著者は研究に必要な成果物を収集するためにかなりの労力を費やしているが、その労力の恩恵を受けられる人はほとんどいない
- つまり、新しい研究を行うたびに労力が重複することになる
- Qualitas Corpusはこれらの問題に対処している
- オープンソースのJavaシステムには、デプロイ可能なバイナリコードとソースコードの両方が存在
- さらに、ソースコードには、テストに使用されるコード、システムの様々な側面を示すコード、コードのインストール・ビルド・その他の管理タスクをサポートするコードなどが含まれることが多い
- このようなコードはデプロイされたコードを代表するものではない可能性があるため、研究結果に偏りが生じる可能性がある
コーパスの設計
- Qualitas Corpusの主な目的は、コードの静的解析を含む研究を支援することである
- オープンソースのJavaシステムが多かったため、それらをQualitas Corpusのコンテンツとして採用した
Qualitas Corpus
- Qualitas Corpusには、開発者が配布した各システムのバージョンのソースコードとバイナリコードが含まれている
構成
- このコーパスにはシステムのコレクションが含まれており、各システムは一連のバージョンで構成されている
- 各バージョンは、圧縮された元の配布物と2つの展開形式(binとsrc)で構成されている
- bin形式には、使用を意図したバイナリシステム、つまりJavaバイトコードが含まれている
- src形式には、ソースコードの配布物がすべて含まれている
- バージョンとファイルの内容に関する詳細情報が含まれるmetadataディレクトリがある
内容
- コーパスのドメイン
- 3D/グラフィックス/メディア
- IDE
- SDK
- データベース
- 図表/視覚化
- ゲーム
- ミドルウェア
- パーサー/ジェネレーター/make
- プログラミング言語
- テスト
- ツール
包含基準
- Javaで記述されている
- 利用できるソースコードの量が多いため
- 比較的分析しやすいため
- ソースコードとバイナリコードの両方を配布している
- ソースコードとバイナリコードを比較できるようにするため
- バイナリファイルをjar形式で配布している
- 誰でも利用できるシステムである
- 一時的なシステムや、他の研究者が入手できないシステムを避けるため
- ソースコードとバイナリコードの関連性を識別できる
メタデータ
- .propertiesファイルに保存されている主なメタデータ
- Javaの型を示すパッケージのプレフィックス
- バージョンのリリース日
- システムや個々のバージョンに関する注記
- ドメイン情報
- システムの配布元
問題点
- システムの名前が変更されたときに、コーパスのユーザーに対してそれを明確に伝える手段がない
- システムのサポートが終了したり、何等かの理由でシステムが利用できなくなったりした場合に、そのシステムをコーパスに残しておくとコーパスの信頼性が低下する恐れがある
コンテンツ管理
- コーパスの新しいリリースには、以前のリリースに含まれていたシステムの全てのバージョンが含まれる
考察
- このコーパスにはオープンソースのJavaシステムのみが含まれており、実験結果の一般化可能性に影響を与える
- コーパス内のコードは、開発者がどのようなコードを書いたかを表すが、開発者が何を意図してそのコードを書いたかは分からない
結論
- ソフトウェア開発の実践のためにコード測定を活用する能力を高めるためには、研究においてより多くのコード測定を行う必要がある
- そのためには、コード分析の実証研究を行うための、大規模で厳選されたコーパスが必要である
- Qualitas Corpusは、必要なコードセットの検索、収集、整理にかかる時間、コーパスのダウンロード時間まで短縮することで、コードに関する実証研究のコストを大幅に削減
引用情報
- 著者: Ewan Tempero, Craig Anslow, Jens Dietrich, Ted Han, Jing Li, Markus Lumpe, Hayden Melton, James Noble
- タイトル: The Qualitas Corpus: A Curated Collection of Java Code for Empirical Studies
- 雑誌 / 会議名: 2010 Asia Pacific Software Engineering Conference
- ページ: pp. 336-345
- 出版日: November 2010 - December 2010
- DOI: https://doi.org/10.1109/APSEC.2010.46