第7回OACISシンポジウム 大阪大学におけるソフトウェア工学研究と産学連携活動 大阪大学 大学院情報科学研究科 井上 克郎
大阪大学情報科学研究科 情報基礎数学専攻 情報数理学専攻 コンピュータサイエンス専攻 情報システム工学専攻 情報ネットワーク学専攻 ソフトウェア設計学講座(谷口教授) ソフトウェア工学講座(井上) 情報システム工学専攻 ディペンダビリィティ工学講座(菊野教授) 情報ネットワーク学専攻 マルチメディア工学専攻 バイオ情報工学専攻
産学連携の代表的なテーマ例 ソフトウェア開発プロセスのモデル化とシミュレーションによる予測 ソフトウェア開発プロセスのモデル化とシミュレーションによる予測 ファンクションポイント法の拡張による上流工程の早期段階における工数見積もり Javaソフトウェア資産管理システム ソフトウェアメンテナンス用各種メトリクス計測 コードクローンを核としたソフトウェア品質の評価 …
産学連携の形態 広いテーマで継続的に 特定のテーマで集中的に 年度始めにテーマ設定、定期的な打合せ 卒論、修論 - 共同研究の目標物 長期的な企業のニーズに合致するもの 卒論、修論 - 共同研究の目標物 特定のテーマで集中的に 既存のツールをベース 集中的にツールを使って適用、実験 結果がそのまま企業のニーズになる
ソフトウェア工学工房 大学 ソフトウェア工房 産業界 実践的なソフトウェア開発・研究のための産学連携モデル 人的交流による知識共有、知識創生を目指す (今までの共同研究の枠組みは設備中心) 人材 新技術(シーズ) 人材 問題(ニーズ) 人材 問題の解決 ノウハウ吸収 人材 技術の評価(論文) 新しいテーマの発見 大学 ソフトウェア工房 産業界
事例1:Javaソースコード蓄積・ 検索システムSPARS-J
組織が持っているソフトウェア資産を一元管理 ソフトウェア資産管理 一体このソフトウェアは誰が持っているの? このソースを修正するとどこに影響が出るの? 似たようなシステムがあったような気がするが? これはもう使ってないような気がするが捨てれるの? 一体全部でどれぐらいのソフトウェアを使ってるの? ... 組織が持っているソフトウェア資産を一元管理
ソフトウェア資産管理システム 専門の管理者のいらない全自動システム 管理の難しさ 分類や適当な索引付けは、かなりの知識を持った技術者が行う必要あり(専用のライブラリアン) 更新を怠るとすぐに使われ・使えなくなる 取り出すために専門の知識がいる 専門の管理者のいらない全自動システム
ソースコード蓄積・検索システム SPARS-J Software Product Archive, Analysis, and Retrieve System for Java 新しい発想に基づいたソースコード蓄積・検索システム Javaを対象に 日々の管理は全自動 静的解析技術を用いて広域の依存関係抽出 メトリクス技術を用いて類似部品抽出
SPARS-Jの概要 SPARS-J 検索 登録 ユーザー Java 表示 ファイル群 依存関係 キーワード キーワード検索 解析・登録 パッケージ階層 表示 レポジトリ Webブラウザ SPARS-J
SPARS-Jの機能の概要(登録) Javaの1クラス(*.java) = 検索単位 :部品 クラス間の関係(継承,インターフェース,呼び出し,参照等)の大域解析 部品内に含まれるキーワードの抽出 部品の各種メトリクス取得
SPRAS-Jの機能(検索・表示) キーワード検索/パッケージ木ブラウズ 部品のソース,呼ばれている・呼んでいるクラス・メソドの表示や各種メトリクス表示 条件付検索(クラス名,コメント,・・・) 重要な部品を上位に表示 部品間の類似度を計測―類似部品集約 日本語/英語両用
SPARS-J検索入り口
検索結果表示
パッケージブラウザ
SPARS-Jの使い方 一つのプロジェクトのソース管理 同類のプロジェクトのソース管理 組織の全プロジェクトのソース管理 他人が作った部品が見える 前の版も調べられる 同類のプロジェクトのソース管理 部品の依存関係が分かる 再利用率,新規開発率が分かる 組織の全プロジェクトのソース管理 何か使われて何がいらないか 全資産量はどれだけあるか
SPARS-Jの利用例 JDKのライブラリ検索(約2000クラス) 研究室内のJavaの資産管理(約2500クラス) インターネット上から入手できるプログラムの検索(18万クラス) ソフトウェアハウスのJavaフレームワークにおける資産管理 大手食品会社の社内システム(Java, XML, JSP)の管理 新規ユーザ募集中!
SPARS-Jのライセンス 基本動作を行う部分はオープンソース化(BSDライセンス) ランク付け機能(CR)は特許申請中 変更,再配布,商用利用可能 大阪大学のクレジット表示義務 ランク付け機能(CR)は特許申請中 JST(科学技術振興機構)所有 なくても実用上支障はない
事例2:コードクローン検出ツールCCFinder
コードクローン コード片で他に類似したコード片があるとき、コードクローンと呼ぶ
クローンが引き起こす問題 コピー&ペーストを繰り返すと増加 クローンはソフトウェア保守を困難にする クローンにバグが存在する場合、すべてのクローンについて修正を行わなければならない システムの大きさが増す 普通、1割程度クローン
例題(Javaの2種類のメソド定義) 1. static void foo() throws RESyntaxException { 2. String a[] = new String [] { "123,400", "abc", "orange 100" }; 3. org.apache.regexp.RE pat = new org.apache.regexp.RE("[0-9,]+"); 4. int sum = 0; 5. for (int i = 0; i < a.length; ++i) 6. if (pat.match(a[i])) 7. sum += Sample.parseNumber(pat.getParen(0)); 8. System.out.println("sum = " + sum); 9. } 10. static void goo(String [] a) throws RESyntaxException { 11. RE exp = new RE("[0-9,]+"); 12. int sum = 0; 13. for (int i = 0; i < a.length; ++i) 14. if (exp.match(a[i])) 15. sum += parseNumber(exp.getParen(0)); 16. System.out.println("sum = " + sum); 17. }
ステップ(1):ソースコードを入力し,トークンの列にする
ステップ(2):変形ルールにより,トークン列を変形する
ステップ(3):パラメータ置換を行う
ステップ(4): マッチングアルゴリズムにより,クローンを検出
ステップ(4): マッチングアルゴリズムにより,クローンを検出
JDKのクローン散布図 両軸はソースファイルを辞書順に並べたもの 20行以上のクローンを図示 多くのクローンが密集している(A) 最長のクローン(B) B A
FreeBSD, Linux, NetBSDのクローン散布図
FreeBSDとLinuxのクローン ドライバ部分に多くのクローン「ファイル」が存在する 共通のソースから分岐したソースファイル 名前が付け替えられたソースファイル あるソースファイルを複数のファイルに分割している
BSD-Unixの発展
クラスタ分析
CCFinderの利用例 国内外の100以上の組織に配布 20年来使われてきている大規模システム (10M LOC)の保守 企業、大学 クローン分析ツールのスタンダード 20年来使われてきている大規模システム (10M LOC)の保守 開発したソフトウェアの品質チェック 下請け,受け入れチェック コードの改良(リファクタリングツールAries) 民事裁判(ソースコードの盗用訴訟)の証拠 学生の演習課題の類似性調査 システムの類似度,進化 新規ユーザ募集中!
CCFinderのライセンス 特許申請中 バイナリー形式での無償配布 配布先組織と1対1の簡単な覚書 再配布禁止 使途や問題点に関する報告
まとめ ソフトウェア工学 大学のソフトウェア工学研究はあまり役立たない? 関西: 日本のソフトウェア工学の中心! 社会的な要求が増し、今後、ますます重要 しかし、切れ味の鋭い万能のやり方、なし いろいろな技術を駆使し、長期間に渡って努力が必須 大学のソフトウェア工学研究はあまり役立たない? 社会のニーズから違う方向に行っていないか、常に確認 大学で開発した技術をうまくパッケージ化して、現場に適用、普及させるような努力 関西: 日本のソフトウェア工学の中心! いろいろな産学連携のモデル、政府プロジェクト 今後もますます発展させるよう努力