DEIM Forum 2016 G2-5
プログラム作成者の開発スキルを考慮した
ソースコード検索システム
李
書
†築地 勇人
†鷹野 孝典
‡†神奈川工科大学情報学部 情報工学科 〒243-0292 神奈川県厚木市下荻野 1030
E-mail: †{s1221109, s1321033}@cce.kanagawa-it.ac.jp, ‡[email protected]
あらまし ソフトウェア開発時におけるソースコード検索において,ユーザはソースコード検索エンジンに特定
の関数名や定数名を問い合わせとして入力する必要があり,ソフトウェア開発に特化した専門的な検索スキルが必
須である.また,検索結果として得られたソースコードの使用法などについて,開発者自身がそれらを吟味する必
要があるため,目的のソースコードのサンプルを獲得するために多くの時間と労力がかかる.本研究では,まず,
分散バージョン管理システムの共同開発履歴に基づいてソフトウェア開発者を特徴付ける役割や開発スキルの抽出
を試みる.次に,ソースコードとその開発者の役割や開発スキルを関連付けることにより,ソースコード開発者の
開発実績や経験に応じて,ソースコードをランキングする手法について示す.本研究では,分散バージョン管理シ
ステム
GitHub 上のソフトウェア開発プロジェクトを対象とした実験により,提案システムの実現可能性を検証す
る.
キーワード ソースコード検索, 特徴抽出, 開発者スキル, ソフトウェア開発, 分散バージョン管理システム
1. は じ め に
ソ フ ト ウ ェ ア 開 発 時 に お け る ,Web 検 索 エ ン ジ ン や ソ ー ス コ ー ド 検 索 エ ン ジ ン を 利 用 し た ソ ー ス コ ー ド 獲 得 結 果 が , ソ フ ト ウ ェ ア 開 発 の 生 産 性 に 大 き く 影 響 す る よ う に な っ て い る . し か し , 既 存 の 検 索 エ ン ジ ン か ら 目 的 の 情 報 を 得 る た め に は , ユ ー ザ は 特 定 の 関 数 名 や 定 数 名 を 問 い 合 わ せ と し て 入 力 す る 必 要 が あ り , ソ フ ト ウ ェ ア 開 発 に 特 化 し た 専 門 的 な 検 索 ス キ ル が 必 須 で あ る . ま た , 既 存 の 検 索 エ ン ジ ン に は , 検 索 結 果 と し て 得 ら れ た ソ ー ス コ ー ド の 機 能 性 や 信 頼 性 な ど を 評 価 す る 仕 組 み が な い た め , 開 発 者 自 身 が そ れ ら を 吟 味 す る 必 要 が あ る . こ の た め , 多 く の 開 発 者 が 検 索 エ ン ジ ン を 用 い て 目 的 の ソ ー ス コ ー ド の サ ン プ ル を 獲 得 す る た め に , 非 常 に 多 く の 時 間 と 労 力 を 費 や し て い る . 我 々 は こ れ ま で , ソ フ ト ウ ェ ア 開 発 者 の 役 割 や ス キ ル に 関 す る 特 徴 を 分 析 す る こ と を 目 的 と し た , 分 散 ソ ー ス コ ー ド 管 理 シ ス テ ム の 共 同 開 発 履 歴 に 基 づ い た 開 発 者 の 特 徴 抽 出 手 法 を 提 案 し て き た[6]. こ の 方 式 は , MVC フ レ ー ム ワ ー ク に 着 目 す る こ と で ,フ ォ ル ダ 構 成 , フ ァ イ ル 名 , フ ァ イ ル 拡 張 子 等 か ら , 開 発 者 が 開 発 に 携 わ っ て い る プ ロ グ ラ ム の 開 発 層 を 抽 出 し , 開 発 層 ご と に 開 発 者 の 役 割 や 開 発 ス キ ル に つ い て の 特 徴 抽 出 を 行 う . 本 研 究 で は , 開 発 者 の プ ロ グ ラ ム 開 発 実 績 や 経 験 を 考 慮 し た ソ ー ス コ ー ド 検 索 シ ス テ ム を 提 案 す る . 本 研 究 で は , ま ず , 文 献[6]の 方 式 を 適 用 す る こ と に よ り , 分 散 バ ー ジ ョ ン 管 理 シ ス テ ム の 共 同 開 発 履 歴 に 基 づ い て ソ フ ト ウ ェ ア 開 発 者 を 特 徴 付 け る 開 発 ス キ ル の 抽 出 を 試 み る . 次 に , ソ ー ス コ ー ド と そ の 開 発 者 の 開 発 ス キ ル を 関 連 付 け る こ と に よ り , ソ ー ス コ ー ド 開 発 者 の 開 発 ス キ ル に 応 じ て , ソ ー ス コ ー ド を ス コ ア 化 し , ラ ン キ ン グ す る 手 法 に つ い て 示 す . 本 研 究 で は , 分 散 バ ー ジ ョ ン 管 理 シ ス テ ム GitHub[20]上 の ソ フ ト ウ ェ ア 開 発 プ ロ ジ ェ ク ト を 対 象 と し た 実 験 に よ り , 提 案 シ ス テ ム の 実 現 可 能 性 を 検 証 す る .2. 関 連 研 究
ソ ー ス コ ー ド 検 索 に 関 し て , こ れ ま で 多 く の 研 究 者 が 様 々 な 方 式 や ツ ー ル を 提 案 し て い る . ソ ー ス コ ー ド 検 索 シ ス テ ム で は , 問 い 合 わ せ と し て 入 力 し た 関 数 名 や ク ラ ス 名 を 含 む コ ー ド 断 片 検 索 機 能 を 基 本 要 件 と し て い る も の が 多 数 提 案 さ れ て い る . 文 献[3]で は ,ソ ー ス コ ー ド 中 の 複 数 の モ ジ ュ ー ル に ま た が る 概 念 や コ ー ド 断 片 を 検 索 す る こ と を 目 的 と し た ソ ー ス コ ー ド 検 索 を 実 現 す る た め に , デ ー タ 構 造 で あ る And/Or/Call グ ラ フ 及 び そ の グ ラ フ 上 の 検 索 ア ル ゴ リ ズ ム を 提 案 し て い る .文 献[5]で は ,制 御 文 及 び メ ソ ッ ド 名 か ら な る ス テ ー ト メ ン ト の シ ー ケ ン ス を 検 索 条 件 と し , 検 索 条 件 か ら を 派 生 さ せ た 有 意 な 検 索 条 件 の す べ て に 対 し て 検 索 を 実 現 す る 構 造 派 生 検 索 モ デ ル を 用 い た 検 索 手 法 を 提 案 し て い る .Mcmillan 等 の 提 案 す る Portfolio で は ,開 発 者 が ソ ー ス コ ー ド の 断 片 よ り も , 関 数 定 義 や そ の 使 用 方 法 を 知 り た い と 考 え て い る こ と に 着 目 し , 問 い 合 わ せ に 関 連 す る 関 数 の 内 容 や そ の 使 用 方 法 を 検 索 し , 可 視 化 し て ユ ー ザ に 提 示 す る[15]. 協 調 フ ィ ル タ フ ィ ル タ リ ン グ の 利 用 や , ソ ー ス コ ー ド の 再 利 用 性 , ソ ー ス コ ー ド の 人 気 度 等 に 着 目 し た 推薦 手 法 を 適 用 し た も の も 見 受 け ら れ る .文 献[11]で は , ユ ー ザ の 検 索 履 歴 に 対 し て 協 調 フ ィ ル タ リ ン グ 手 法 を 適 用 し , ユ ー ザ に 必 要 と 思 わ れ る 部 品 を 推 薦 す る た め の ソ フ ト ウ ェ ア コ ン ポ ー ネ ン ト 手 法 を 提 案 し て い る . 亀 井 等 は , 進 行 中 の プ ロ ジ ェ ク ト と コ ン ポ ー ネ ン ト の 利 用 状 況 が 類 似 す る 過 去 の プ ロ ジ ェ ク ト を 見 つ け る こ と に よ り , 進 行 中 の プ ロ ジ ェ ク ト に 有 用 な コ ン ポ ー ネ ン ト を 協 調 フ ィ ル タ リ ン グ の 適 用 に よ り 推 薦 す る ソ フ ト ウ ェ ア コ ン ポ ー ネ ン ト 推 薦 手 法[7]を 提 案 し ,さ ら に , 29 件 の プ ロ ジ ェ ク ト を 用 い て 評 価 実 験 を 行 う こ と に よ り , 汎 用 性 の 高 い コ ン ポ ー ネ ン ト 及 び 低 い コ ン ポ ー ネ ン ト に 着 目 し た 場 合 , 協 調 フ ィ ル タ リ ン グ を 用 い た コ ン ポ ー ネ ン ト 推 薦 方 法 は , 汎 用 性 の 低 い コ ン ポ ー ネ ン ト に 対 し て 効 果 が あ る こ と を 示 し た[8]. 文 献 [12]で は , 問 い 合 わ せ と し て , ク ラ ス 名 や メ ソ ッ ド 名 を 指 定 し た 際 の 優 先 順 位 や , ソ ー ス コ ー ド の 人 気 度 に 応 じ た ソ ー ス コ ー ド の ラ ン キ ン グ 手 法 を 提 案 し て い る . 文 献 [10]で は ,従 来 手 法 に お い て ,メ ソ ッ ド や ク ラ ス 等 の プ ロ グ ラ ミ ン グ 言 語 単 位 で コ ー ド 片 を 提 示 す る の に 対 し , 過 去 に 再 利 用 さ れ た コ ー ド 片 を 検 出 し , そ の 中 か ら ユ ー ザ の 入 力 す る ク エ リ と 関 連 す る 機 能 を 持 つ コ ー ド 片 を 提 示 す る 手 法 を 提 案 し て い る . ま た , 競 技 プ ロ グ ラ ム 参 加 者 や プ ロ グ ラ ミ ン グ 初 学 者 を 対 象 と し た 応 用 研 究 も な さ れ て い る .文 献[1]で は , 既 存 の 回 答 ソ ー ス コ ー ド の 再 利 用 を 支 援 す る こ と を 目 的 と し て , 競 技 プ ロ グ ラ ム の テ ス ト ケ ー ス で あ る 大 量 の 回 答 ソ ー ス コ ー ド を , 解 法 に よ っ て 回 答 ソ ー ス コ ー ド を 分 類 す る こ と に よ り , 検 索 す る 手 法 を 提 案 し て い る .文 献 [4]で は ,検 索 開 始 時 点 で は プ ロ グ ラ マ が 検 索 す べ き 具 体 的 な 条 件 ・ キ ー ワ ー ド を よ く 把 握 し て い な い 点 に 着 目 し , 検 索 キ ー ワ ー ド に 関 連 す る 識 別 子 を 提 示 し て ユ ー ザ に選択させることで, 対 話 的 な 検 索 条 件 の 試 行 錯 誤 を 支 援 す る シ ス テ ム の 実 現 に よ り , 検 索 時 間 の 低 減 を 図 っ て い る . コ ー ド ク ロ ー ン 検 出 に 着 目 し た 研 究 と し て は , 文 献 [2][9][19]等 が あ る .曽 和 等 は ,コ ー ド ク ロ ー ン 検 出 に 膨 大 な 時 間 コ ス ト が か か る こ と を 問 題 意 識 と し て , メ ソ ッ ド か ら の 戻 り 値 や 引 数 の 数 , ロ ー カ ル 変 数 の 数 に 着 目 し た ソ フ ト ウ ェ ア メ ト リ ク ス を 用 い た オ ー プ ン ソ ー ス 再 利 用 の た め の ソ ー ス コ ー ド 絞 込 み 手 法 を 提 案 し て い る[2].ま た ,文 献 [9][19]で は ,高 速 化 に コ ー ド ク ロ ー ン 検 出 を 行 う こ と が 可 能 な コ ー ド ク ロ ー ン 検 出 ツ ー ル CCFinder 及 ソ フ ト ウ ェ ア 保 守 を 支 援 す る た め の 検 索 ツ ー ル が 提 案 さ れ て い る . さ ら に , ソ ー ス コ ー ド 検 索 に 関 連 し て , 様 々 な 応 用 研 究 や 調 査 が な さ れ て い る .CodeGenie は , 検 索 結 果 と し て 獲 得 し た ソ ー ス コ ー ド を , 検 索 者 自 身 の 開 発 し て い る ソ ー ス コ ー ド に 組 み 込 み , テ ス ト を 実 施 す る こ と で , そ の 適 合 性 を 判 定 す る 仕 組 み を 導 入 し て い る [13][14]. Subramanian 等 は ,JavaScript や Java で 作 成 さ れ た プ ロ グ ラ ム を 対 象 と し て , ソ ー ス コ ー ド 内 で 使 用 さ れ て い るAPI を 該 当 す る API ド キ ュ メ ン ト へ 関 連 付 け を 行 う 手 法 を 提 案 し て い る .文 献[17]で は ,ソ ー ス コ ー ド の 属 す る カ テ ゴ リ を 抽 出 す る こ と で , ソ ー ス コ ー ド 検 索 の 精 度 改 善 が 可 能 で あ る こ と を 示 し て い る . 文 献[18]で は , 開 発 者 が ソ ー ス コ ー ド 検 索 時 に 求 め て い る も の を 調 査 ・ 分 析 し ,開 発 者 は 主 に API の 使 用 方 法 , ソ ー ス コ ー ド の 機 能 , エ ラ ー の 原 因 , ソ ー ス コ ー ド の 場 所 等 を 検 索 結 果 と し て 期 待 し て い る こ と を 示 し た .
3. 分 散 ソ ー ス コ ー ド 管 理 シ ス テ ム の 共 同 開 発
履 歴 に 基 づ い た 開 発 者 の 特 徴 抽 出 方 式
文 献[6]で 示 さ れ て い る 分 散 ソ ー ス コ ー ド 管 理 シ ス テ ム の 共 同 開 発 履 歴 に 基 づ い た 開 発 者 の 特 徴 抽 出 方 式 の 概 要 ( 図 1) に つ い て 説 明 す る . 図 1 開 発 者 の 特 徴 抽 出 方 式 の 概 要 本 方 式 は ,(1) MVC フ レ ー ム ワ ー ク を 構 造 分 析 す る こ と に よ り ,MVC 層 ご と に ,新 規 ソ ー ス・プ ロ グ ラ ム 作 成 数 の 分 析 , 他 者 開 発 ソ ー ス ・ プ ロ グ ラ ム 修 正 数 の 分 析 , 共 通 関 数 作 成 数 の 分 析 を 行 う . こ れ ら の 分 析 に 基 づ い て , プ ロ ジ ェ ク ト に お け る 開 発 者 の 役 割 , 貢 献 度 ,サ ポ ー ト 性 ,リ ー ダ ー 性 に 関 す る 特 徴 抽 出 を 行 う . [(A)開 発 箇 所 ( 層 ) の 抽 出 ] MVC フ レ ー ム ワ ー ク を 対 象 と し て , コ ン ト ロ ー ル , ビ ュ ー , モ デ ル の 各 開 発 層 の 作 成 ・ 修 正 フ ァ イ ル 数 を 数 え る こ と に よ り , 開 発 者 の 役 割 を 抽 出 す る . コ ン ト ロ ー ル , ビ ュ ー , モ デ ル の 各 層 ご と に , 新 規 作 成 し た ソ ー ス ・ プ ロ グ ラ ム , お よ び 他 者 開 発 ソ ー ス ・ プ ロ グ ラ ム を 修 正 し た 割 合 が , し き い 値 α%よ り 大 き い 場 合 に ,そ の 開 発 層 の 中 心 的 役 割 を 担 っ て い る と 判 断 す る . [(B)貢 献 度 の 抽 出 ] 開 発 者 の 貢 献 度 は , 質 的 な 貢 献 度 と 量 的 な 貢 献 度 に 分 け て 抽 出 す る . 質 的 な 貢 献 度 は , プ ロ ジ ェ ク ト 中 の 重 要 な モ ジ ュ ール 群 の 開 発 量 に 応 じ て 算 出 す る . こ こ で は , ラ イ ブ ラ リ 関 数 の よ う な 参 照 回 数 の 多 い 関 数 の 作 成 数 が し き い 値 β よ り 大 き い 場 合 , そ の ラ イ ブ ラ リ 関 数 の 開 発 者 は プ ロ ジ ェ ク ト の 質 的 な 貢 献 度 が 高 い と 判 定 す る .ま た , 量 的 な 貢 献 度 は , コ ン ト ロ ー ル , ビ ュ ー , モ デ ル の 各 層 全 体 に お い て , 新 規 作 成 し た ソ ー ス ・ プ ロ グ ラ ム お よ び 他 者 開 発 ソ ー ス ・ プ ロ グ ラ ム を 修 正 し た 割 合 に 応 じ て , 量 的 な 貢 献 度 を 算 出 す る . [(C)サ ポ ー ト 性 の 抽 出 ] サ ポ ー ト 性 は , 他 の 開 発 者 へ の 援 助 の 度 合 を 表 す 性 質 で あ り , 他 者 開 発 ソ ー ス ・ プ ロ グ ラ ム の う ち , 修 正 し た ソ ー ス ・ プ ロ グ ラ ム か ら 算 出 す る . 他 者 開 発 フ ァ イ ル の 修 正 数 が し き い 値 δ 以 上 な ら ば , そ の 開 発 者 は サ ポ ー ト 性 が あ る と す る . [(D)先 導 性 の 抽 出 ] 設 定 フ ァ イ ル や ラ イ ブ ラ リ 定 義 フ ァ イ ル 等 , シ ス テ ム 環 境 構 築 に 必 要 な ソ ー ス ・ プ ロ グ ラ ム を 率 先 し て 作 成 す る こ と は , プ ロ ジ ェ ク ト に 参 加 す る 他 の 開 発 者 が 効 率 よ く 開 発 を 進 め る 上 で 重 要 あ る . こ の た め , シ ス テ ム 環 境 構 築 に 必 要 な プ ロ グ ラ ム の コ ミ ッ ト 数 が 多 い 開 発 者 は , 先 導 性 が 高 い と 判 定 す る . [(E)リ ー ダ ー 性 の 抽 出 ] リ ー ダ ー 性 は ,(A)~ (D)で 抽 出 し た , 開 発 層 の 視 点 に 基 づ い た 役 割 , 貢 献 性 , サ ポ ー ト 性 , 先 導 性 の 複 合 条 件 に よ っ て 決 定 す る . 例 え ば , サ ポ ー ト 性 と 先 導 性 が あ る こ と を リ ー ダ ー 性 の 条 件 と す れ ば , こ の2 つ の 性 質 を 同 時 に 満 た す 開 発 者 に リ ー ダ ー 性 が あ る と 判 定 す る .
4. 提 案 方 式
図 2 提 案 方 式 の 概 要 提 案 方 式 の 概 要 図 を 図2 に 示 す .提 案 方 式 で は ,3 章 で 述 べ た 方 式 に 従 っ て 抽 出 し た ソ ー ス コ ー ド 開 発 者 の 役 割 や ス キ ル を , そ の 開 発 者 が 作 成 し た ソ ー ス コ ー ド に 関 連 付 け る こ と に よ り , ソ ー ス コ ー ド を ラ ン キ ン グ す る 方 式 で あ る . ソ ー ス コ ー ド 検 索 モ ジ ュ ー ル の 実 現 に つ い て は , 図 2 に 示 す よ う に , 全 文 検 索 型 ソ ー ス コ ー ド 検 索 エ ン ジ ン を 適 用 す る . 本 方 式 で は , ソ ー ス コ ー ド の ラ ン キ ン グ ・ ス コ ア を 下 記 の よ う に 算 出 し , 検 索 結 果 と し て 提 示 す る . Step-1: 3 章 で 述 べ た 方 式 に 従 っ て 抽 出 し た ソ ー ス コ ー ド 開 発 者 の 特 徴 に 従 っ て , 開 発 者 ご と に ポ イ ン ト を 集 計 す る . 表 1 に 示 す 例 の よ う に , 開 発 者 の 特 徴 に 応 じ た ポ イ ン ト を あ ら か じ め 決 め て お き , 開 発 者 が リ ー ダ ー 性 や サ ポ ー ト 性 が あ る ご と に ポ イ ン ト を 加 算 す る . 表 1 開 発 者 の 特 徴 に 応 じ た ポ イ ン ト 例 特 徴 ポ イ ン ト ポ イ ン ト 例 リ ー ダ ー 性 p(leader) 3 サ ポ ー ト 性 P(support) 1 貢 献 性 p(contribution) 2 先 導 性 p(initiative) 1 例 え ば ,3 名 の 開 発 者 d1,d2,d3に 対 し て , 下 記 の よ う な 特 徴 が 抽 出 さ れ た と す る . d1 = { leader, support } d2 = { support } d3 = { initiative } こ の 場 合 , 各 開 発 者 に 対 す る ポ イ ン トp1,p2,p3は 次 の よ う に 計 算 さ れ る . p1 = p(leader) + p(support) = 3 + 1 = 4 p2 = p(support) = 1 p3 = p(initiative) = 2 Step-2:ソ ー ス コ ー ド ・ フ ァ イ ル の ス コ ア を 決 定 す る . ソ ー ス コ ー ド ・ フ ァ イ ル ご と に そ の 開 発 者 全 員 に つ い て ,Step-1 で 算 出 し た ポ イ ン ト を 加 算 し ,平 均 を と る . 例 え ば , ソ ー ス コ ー ド ・ フ ァ イ ル Source1,Source2, Source3の 開 発 者 が 下 記 の よ う で あ っ た と す る . Source1の 開 発 者 = { d1, d2, d3 } Source2の 開 発 者 = { d3 } Source3の 開 発 者 = { d2 } こ の 場 合 ,各 ソ ー ス コ ー ド・フ ァ イ ルSource1,Source2, Source3の ス コ ア は , 下 記 の よ う に 算 出 さ れ る .Score(Source1) = (p1 + p2 + p3) / 3 = (4 + 1 + 2) / 3 = 2.33 Score(Source2) = p2 = 1 Score(Source3) = p3 = 2 Step-3: ソ ー ス コ ー ド 検 索 時 に , Step-2 で 求 め た ソ ー ス コ ー ド の ス コ ア と 全 文 検 索 ス コ ア を 考 慮 し て ソ ー ス コ ー ド の ラ ン キ ン グ ・ ス コ ア を 算 出 す る . RankingScore(Source, {QueryKeywords}) = α x Score(Source) + (1 - α) x TextSeachScore(Source, {QueryKeywords}) (1) こ こ で ,α (0≦ α≦ 1)は 重 み 係 数 ,{QueryKeywords}は 問 い 合 わ せ に 用 い た キ ー ワ ー ド 集 合 で あ る . 例 え ば , 問 い 合 わ せ キ ー ワ ー ド’explode’に 対 す る , 各 ソ ー ス フ ァ イ ル の 全 文 検 索 ス コ ア が 下 記 の よ う に 算 出 さ れ た と す る .
TextSeachScore (Source1, { ’explode’ }) = 1
TextSeachScore (Source1, { ’explode’ }) = 2
TextSeachScore (Source3, { ’explode’ }) = 2
さ ら に , α = 0.5 と す れ ば , ラ ン キ ン グ ・ ス コ ア は 下 記 の よ う に 算 出 さ れ る .
RankingScore (Source1, { ’explode’ })
= 0.5 x 2.33 + 0.5 x 1 = 1.67 RankingScore (Source2, { ’explode’ })
= 0.5 x 1 + 0.5 x 2 = 1.50 RankingScore (Source3, { ’explode’ })
= 0.5 x 2 + 0.5 x 2 = 2.00 Step-4: Step-3 で 求 め た ラ ン キ ン グ ・ ス コ ア で ソ ー ト し て , ユ ー ザ へ 検 索 結 果 を 提 示 す る . Step-3 の 例 で は , 問 い 合 わ せ キ ー ワ ー ド ’explode’に 対 し て , 表2 の 検 索 結 果 が 得 ら れ る . 表 2 問 い 合 わ せ キ ー ワ ー ド ’explode’に 対 す る 検 索 結 果 の 例 順 位 ソ ー ス コ ー ド ・ フ ァ イ ル ラ ン キ ン グ ・ ス コ ア 1 Source3 2.00 2 Source2 1.67 3 Source1 1.50
5. 実 験
分 散 バ ー ジ ョ ン 管 理 シ ス テ ム GitHub 上 の ソ フ ト ウ ェ ア 開 発 プ ロ ジ ェ ク ト を 対 象 と し た 実 験 に よ り , 提 案 シ ス テ ム の 実 現 可 能 性 を 検 証 す る . 今 回 の 実 験 で は ,4 章 で 示 し た ソ ー ス コ ー ド の ラ ン キ ン グ ・ ス コ ア 算 出 式(1)に つ い て , 重 み 係 数 α を 0.5 に 設 定 し た . ま た , 全 文 検 索 ス コ ア と し て は , 問 い 合 わ せ キ ー ワ ー ド を grep し た 結 果 に つ い て ,ソ ー ス フ ァ イ ル が ヒ ッ ト す る 毎 に 1 点 ず つ 加 算 し た 値 を 用 い た . 表3 に ,分 析 対 象 の 開 発 プ ロ ジ ェ ク ト に つ い て 示 す . 表 3 分 析 対 象 の 開 発 プ ロ ジ ェ ク ト プ ロ ジ ェ ク ト 名 開 発 者 数 ソ ー ス コ ー ド 数 Gitlabhq [21] 16 183 Ghost [22] 61 931 October [23] 20 402 Gitlabhq プ ロ ジ ェ ク ト ,Ghost プ ロ ジ ェ ク ト ,お よ び October プ ロ ジ ェ ク ト に 参 加 す る 開 発 者 を 対 象 と し た , 開 発 者 ポ イ ン ト の 算 出 結 果 を 表 4~ 6 に 示 す .ま た ,各 プ ロ ジ ェ ク ト の ソ ー ス コ ー ド ・ ス コ ア の 算 出 結 果 の 例 を , そ れ ぞ れ 表 7~ 9 に 示 す . 表 4 の 結 果 よ り , 例 え ば ,Gitlabhq プ ロ ジ ェ ク ト に お い て , 開 発 者 ’ Douwe Maan’ さ ん と ’ Sullivan SENECHAL’ さ ん が リ ー ダ ー 性 や サ ポ ー ト 性 が 抽 出 さ れ て お り , 開 発 者 ポ イ ン ト も 7 と 高 い 値 に な っ て い る こ と が わ か る . ま た , 表 8 の 結 果 よ り , 例 え ば ,Ghost プ ロ ジ ェ ク ト 中 の ソ ー ス コ ー ド ・ フ ァ イ ル’ gh-nav-menu.hbs’は , 5 名 の 開 発 者 に よ っ て 開 発 さ れ て お り ,ソ ー ス コ ー ド・ス コ ア が 7.00 と 高 い 値 が 算 出 さ れ て い る こ と が わ か る . さ ら に ,Gitlabhq プ ロ ジ ェ ク ト 上 の フ ァ イ ル 群 に 対 し て ,関 数 名’User.find()’を 問 い 合 わ せ キ ー ワ ー ド と し て 入 力 し た 場 合 の ソ ー ス コ ー ド 検 索 結 果 を 表 10 に 示 す . ま た ,Ghost プ ロ ジ ェ ク ト 上 の フ ァ イ ル 群 に 対 し て , 関 数 名’User.get()’を 問 い 合 わ せ キ ー ワ ー ド と し て 入 力 し た 場 合 の ソ ー ス コ ー ド 検 索 結 果 を 表 11 に 示 す . こ こ で ,’User.find()’や ’User.get()’は , PHP フ レ ー ム ワ ー ク で あ る Laravel [24]で 用 意 さ れ て い る 関 数 で あ る . 表8 と 表 9 の 結 果 に お い て , ヒ ッ ト 件 数 は そ れ ぞ れ 14 件 と 2 件 で あ っ た .ま た ,そ れ ぞ れ の 問 い 合 わ せ キ ー ワ ー ド を 用 い て grep し た 結 果 ,各 ソ ー ス フ ァ イ ル の ヒ ッ ト 数 は 1 件 ず つ で あ っ た の で , 全 文 検 索 ス コ ア は 全 て 1.00 と な っ て い る .表 8 と 9 の 結 果 よ り ,ソ ー ス コ ー ド 検 索 に お い て , 単 に 問 い 合 わ せ キ ー ワ ー ド を 用 い て grep し た だ け で は ラ ン キ ン グ で き な か っ た ソ ー ス コ ー ド 群 が , 提 案 方 式 を 用 い る こ と に よ っ て , ソ ー ス コ ー ド 開 発 者 の 開 発 実 績 や 経 験 に 応 じ て , ソ ー ス コ ー ド を ラ ン キ ン グ 可 能 で あ る 事 が 確 認 で き る .表 4 開 発 者 ポ イ ン ト の 算 出 結 果 ( Gitlabhq) 開 発 者 名 ポ イ ン ト 特 徴 Steve Norman 1 開 発 層:Model
貢 献 性:低 Douwe Maan 7 開 発 層: Model ,View, Control 貢 献 性:高 サ ポ ー ト 性: True リ ー ダ ー: True Jason Hollingsworth 2 開 発 層: View 貢 献 性:高 Sullivan SENECHAL 7 開 発 層:View 貢 献 性:True サ ポ ー ト 性: True リ ー ダ ー: True Drew Blessing 3 開 発 層: View, Control
貢 献 性:高 表 5 開 発 者 ポ イ ン ト の 算 出 結 果 ( Ghost) 開 発 者 名 ポ イ ン ト 特 徴 Kevin Ansfield 7 開 発 層: Model ,View, Control 貢 献 性:高 サ ポ ー ト 性: True リ ー ダ ー: True Austin Burdine 7 開 発 層: Model ,View, Control 貢 献 性:高 サ ポ ー ト 性: True リ ー ダ ー: True Ivan Votti 1 開 発 層: Control 貢 献 性
:低 vdemedes 5 開 発 層: Model 貢 献 性:低 サ ポ ー ト 性: True リ ー ダ ー: True Brandon Hops 1 開 発 層: Model
貢 献 性:低 表 6 開 発 者 ポ イ ン ト の 算 出 結 果 ( October) 開 発 者 名 ポ イ ン ト 特 徴 Samuel Georges 7 開 発 層: Model ,View, Control 貢 献 性:高 サ ポ ー ト 性: True リ ー ダ ー: True Dave Shoreman 1 開 発 層: Control 貢 献 性
:低 gergo85 3 開 発 層貢 献 性: Control
:高 Jeremy
GAULIN 1 貢 献 性 :低 Stefan Talen 6 開 発 層貢 献 性: Model
:高 表 7 ソ ー ス コ ー ド ・ ス コ ア の 算 出 結 果 ( Gitlabhq) ソ ー ス コ ー ド ・ フ ァ イ ル 名 ス コ ア 開 発 者 数 broadcast_messages_controller.rb 5.00 4 authenticates_with_two_factor.rb 7.00 1 _discussion.html.haml 7.00 5 edit.html.haml 6.20 5 accounts_controller.rb 7.00 2 avatars_controller_spec.rb 3.00 1 users_controller.rb 5.20 5 key_spec.rb 4.14 7 slack_service.rb 5.29 7 imports_controller.rb 7.00 3 表 8 ソ ー ス コ ー ド ・ ス コ ア の 算 出 結 果 ( Ghost) ソ ー ス コ ー ド ・ フ ァ イ ル 名 ス コ ア 開 発 者 数 delete-user.js 7.00 4 signin.hbs 7.00 7 role.js 5.00 5 tags.hbs 6.00 6 gh-nav-menu.hbs 7.00 5 gh-menu-toggle.hbs 4.00 2 user.js 6.00 6 app-setting.js 4.00 2 gh-activating-list-item.hbs 7.00 3 index.hbs 5.80 5 表 9 ソ ー ス コ ー ド ・ ス コ ア の 算 出 結 果 ( October) ソ ー ス コ ー ド ・ フ ァ イ ル 名 ス コ ア 開 発 者 数 AccessLogs.php 5.75 4 EditorPreferences.php 5.17 6 Files.php 7.00 1 Index.php 6.75 4 Users.php 5.83 6 Media.php 7.00 2 Themes.php 6.75 4 BackendPreferences.php 3.57 7 ThemeImport.php 4.00 2 File.php 5.25 4 ま た ,Ghost プ ロ ジ ェ ク ト と October プ ロ ジ ェ ク ト の 両 方 に PHP 標 準 関 数 で あ る ’trim()’を 問 い 合 わ せ キ ー ワ ー ド と し た 場 合 の ソ ー ス コ ー ド 検 索 結 果 を 表 10 に 示 す . こ の よ う に , 異 な る プ ロ ジ ェ ク ト を ま た が っ た ソ ー ス コ ー ド 検 索 も 可 能 で あ る が , 開 発 者 ポ イ ン ト の 算 出 は , 各 プ ロ ジ ェ ク ト で の そ の 開 発 者 の 開 発 状 況 に 依 存 し て い る た め , プ ロ ジ ェ ク ト 間 で 開 発 者 ポ イ ン ト を 正 規 化 す る 仕 組 み を 導 入 す る 必 要 が あ る .
6. ま と め
本 研 究 で は , ソ ー ス コ ー ド と そ の 開 発 者 の 役 割 や 開 発 ス キ ル を 関 連 付 け る こ と に よ り , ソ ー ス コ ー ド 開 発 者 の 開 発 実 績 や 経 験 を 考 慮 し た ソ ー ス コ ー ド ・ ラ ン キ ン グ 手 法 に つ い て 提 案 し た . 分 散 バ ー ジ ョ ン 管 理 シ ス テ ム GitHub 上 の ソ フ ト ウ ェ ア 開 発 プ ロ ジ ェ ク ト を 対 象 と し た 実 験 に よ り , 単 に 問 い 合 わ せ キ ー ワ ー ド を 用い て grep し た だ け で は ラ ン キ ン グ で き な か っ た ソ ー ス コ ー ド 群 が , 提 案 方 式 を 用 い る こ と に よ り , 検 索 対 象 と な っ て い る ソ ー ス コ ー ド 群 の 開 発 者 の 開 発 実 績 や 経 験 に 応 じ て , ソ ー ス コ ー ド を ラ ン キ ン グ 可 能 で あ る 事 が 確 認 で き た . 今 後 の 課 題 と し て , 実 験 考 察 と し て 述 べ た よ う に , 異 な る プ ロ ジ ェ ク ト を ま た が っ た ソ ー ス コ ー ド 検 索 に 適 用 す る た め に , 各 プ ロ ジ ェ ク ト に お い て 算 出 し た 開 発 者 ポ イ ン ト を 正 規 化 す る 機 能 を 組 み 込 む 予 定 で あ る . ま た , 現 在 ソ ー ス コ ー ド の 構 文 解 析 機 能 を 実 装 し て お り , 一 部 の プ ロ グ ラ ミ ン グ 言 語 を 対 象 と し て ク ラ ス 名 や メ ソ ッ ド 名 を 抽 出 可 能 と な っ て い る . 今 回 の 実 験 で は ,grep コ マ ン ド を 全 文 検 索 エ ン ジ ン と し て 代 用 し た が , ク ラ ス 名 や メ ソ ッ ド 名 を 全 文 検 索 エ ン ジ ン に 索 引 付 け す る こ と で , 全 文 検 索 エ ン ジ ン を 用 い た 評 価 実 験 の 実 施 を 検 討 し て い る . 今 後 さ ら に , よ り 多 く の 開 発 プ ロ ジ ェ ク ト を 対 象 と し た 開 発 者 の 特 徴 抽 出 , お よ び ソ ー ス コ ー ド 検 索 結 果 を 評 価 す る と と も に , 他 の ソ ー ス コ ー ド 検 索 シ ス テ ム と の 比 較 実 験 に よ り , 提 案 方 式 の 有 効 性 を 検 証 し て い く 予 定 で あ る . 表 10 ラ ン キ ン グ 結 果 ( Gitlabhq) 順 位 ソ ー ス コ ー ド ・ フ ァ イ ル 名 ス コ ア (1) (2) 1 admin/keys_controller.rb 4.00 7.00 1.00 2 profiles/keys_controller.rb 4.00 7.00 1.00 3 identities_controller.rb 4.00 7.00 1.00 4 models/user_spec.rb 3.54 3.04 1.00 5 models/member.rb 3.50 3.00 1.00 6 snippets_controller.rb 3.44 2.44 1.00 7 users_controller.rb 3.10 2.60 1.00 8 sessions_controller.rb 2.93 2.43 1.00 9 admin/users_controller.rb 2.80 2.30 1.00 10 autocomplete_controller.rb 2.34 1.84 1.00 (1) ソ ー ス コ ー ド・ス コ ア ,(2) 全 文 検 索 ス コ ア 表 11 ラ ン キ ン グ 結 果 ( Ghost) 順 位 ソ ー ス コ ー ド ・ フ ァ イ ル 名 ス コ ア (1) (2) 1 models/user.js 6.00 5.50 1.00 2 post.js 4.00 3.50 1.00 (1) ソ ー ス コ ー ド・ス コ ア ,(2) 全 文 検 索 ス コ ア 表 12 ラ ン キ ン グ 結 果 ( Ghost と October) 順 位 ソ ー ス コ ー ド ・ フ ァ イ ル 名 ス コ ア (1) (2) 1 index.js (Ghost) 5.40 5.40 1.00 2 User.php (October) 4.34 3.84 1.00 3 post.js (Ghost) 3.50 3.00 1.00 4 user.js (Ghost) 3.11 2.61 1.00 (1) ソ ー ス コ ー ド ・ ス コ ア , (2) 全 文 検 索 ス コ ア
参 考 文 献
[1] 藤 原 新 , 畑 秀 明 , 門 田 暁 人 , 松 本 健 一 , “プ ロ グ ラ ミ ン グ 初 学 者 の た め の ソ ー ス コ ー ド 再 利 用 支 援”, 研 究 報 告 ソ フ ト ウ ェ ア 工 学( SE),Vol. 2015-SE-190 (16), pp.1-7, 2015. [2] 曽 和 寛 史 ,尾 花 将 輝 ,深 海 悟 ,“ソ フ ト ウ ェ ア メ ト リ ク ス を 用 い た ソ ー ス コ ー ド 検 索 手 法 の 提 案”, 第77 回 全 国 大 会 講 演 論 文 集 ,Vol. 2015 (1),pp.309-311, 2015. [3] 神 谷 年 洋 , “And/Or/Call グ ラ フ の 提 案 と ソ ー ス コ ー ド 検 索 へ の 応 用”, 研 究 報 告 ソ フ ト ウ ェ ア 工 学 (SE), Vol. 2013-SE-182 (27), pp.1-6, 2013. [4] 平 山 拓 朗 ,丸 山 一 貴 ,寺 田 実 ,“対 話 的 な ソ ー ス コ ー ド 検 索 ツ ー ル の 提 案”, 第 76 回 全 国 大 会 講 演 論 文 集 ,Vol. 2014 (1), pp.395-396, 2014. [5] 宇 田 川 佳 久 , ”構 造 派 生 機 能 を 有 す る 検 索 モ デ ル の ソ ー ス コ ー ド 検 索 へ の 応 用”, 研 究 報 告 情 報 シ ス テ ム と 社 会 環 境(IS),2013-IS-123 (4),pp.1-8, 2013. [6] 李 書 ,鷹 野 孝 典 ,”分 散 ソ ー ス コ ー ド 管 理 シ ス テ ム の 共 同 開 発 履 歴 に 基 づ い た 開 発 者 の 特 徴 抽 出 手 法 の 検 討” , 研 究 報 告 デ ー タ ベ ー ス シ ス テ ム (DBS), 2015-DBS-162 (1), pp.1-8, 2015. [7] 亀 井 靖 高 ,角 田 雅 照 ,柿 元 健 ,大 杉 直 樹 ,門 田 暁 人 ,松 本 健 一 ,”進 行 中 の プ ロ ジ ェ ク ト に 有 用 な ソ フ ト ウ ェ ア コ ン ポ ー ネ ン ト の 推 薦 方 法”, 電 子 情 報 通 信 学 会 技 術 研 究 報 告. SS, ソ フ ト ウ ェ ア サ イ エ ン ス ,Vol. 106 (16), pp.25-30, 2006. [8] 亀 井 靖 高 ,角 田 雅 照 ,柿 元 健 ,大 杉 直 樹 ,門 田 暁 人 ,松 本 健 一 ,“ソ フ ト ウ ェ ア コ ン ポ ー ネ ン ト 推 薦 に お け る 協 調 フ ィ ル タ リ ン グ の 効 果”, 情 報 処 理 学 会 論 文 誌 , Vol. 50 (3), pp.1139-1143, 2009. [9] 泉 田 聡 介 ,植 田 泰 士 ,神 谷 年 洋 ,楠 本 真 二 ,井 上 克 郎 ,“ソ フ ト ウ ェ ア 保 守 の た め の 類 似 コ ー ド 片 検 索 ツ ー ル”, 電 子 情 報 通 信 学 会 論 文 誌 . Vol. J86-D-I (12), pp.906-908, 2003. [10] 石 原 知 也 ,堀 田 圭 佑 ,肥 後 芳 樹 ,楠 本 真 二 ,“再 利 用 実 績 に 基 づ い た コ ー ド 片 検 索 手 法 の 提 案”, 電 子 情 報 通 信 学 会 技 術 研 究 報 告. SS, ソ フ ト ウ ェ ア サ イ エ ン ス , Vol. 113 (269), pp.61-66, 2013. [11] 市 井 誠 ,山 本 哲 男 ,横 森 励 士 ,井 上 克 郎 ,”ソ フ ト ウ ェ ア 部 品 推 薦 の た め の 協 調 フ ィ ル タ リ ン グ 手 法 の 提 案 と 実 現”, 電 子 情 報 通 信 学 会 技 術 研 究 報 告 ,SS,ソ フ ト ウ ェ ア サ イ エ ン ス ,Vol.104 (243), pp.7-12, 2004.[12] S. Bajracharya, T. Ngo, E. Linstead, Y. Dou, P. Rigor, P. Baldi, and C. Lopes, “Sourcerer: a search engine for open source code supporting structure-based search”, Proceeding of the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications (OOPSLA '06), pp.681-682, 2006.
[13] O. Augusto, L. Lemos, S. K. Bajracharya, and J. Ossher, “CodeGenie:: a tool for test-driven source code search”, Proceedings of the 22nd ACM SIGPLAN conference on Object-oriented programming systems and applications (OOPSLA '07 ), pp.917-918, 2007.
[14] O. Augusto, S. Bajracharya, J. Ossher, P. C. Masiero, and C. Lopes, “Applying test-driven code search to the reuse of auxiliary functionality”, Proceedings of the 2009 ACM symposium on Applied Computing (SAC '09), pp.476-482, 2009.
[15] C. Mcmillan, D. Poshyvanyk, M. Grechanik, Q. Xie, and C. Fu, “Portfolio: Searching for relevant
functions and their usages in millions of lines of code”, ACM Transactions on Software Engineering and Methodology (TOSEM) - Testing, debugging, and error handling, formal methods, lifecycle concerns, evolution and maintenance, Vol. 22, Issue 4, Article No. 37, 2013.
[16] S. Subramanian, L. Inozemtseva, and R. Holmes, “Live API documentation”, Proceedings of the 36th International Conference on Software Engineering (ICSE 2014), pp.643-652, 2014.
[17] F. A. Durão, T. A. Vanderlei, E. S. Almeida, and S. R. de L. Meira, “Applying a semantic layer in a source code search tool”, Proceedings of the 2008 ACM symposium on Applied computing (SAC '08), pp.1151-1157, 2008.
[18] C. Sadowski, K. T. Stolee, and S. Elbaum, “How developers search for code: a case study”, Proceedings of the 2015 10th Joint Meeting on Foundations of Software Engineering, pp.191-201, 2015.
[19] T. Kamiya, S. Kusumoto, and K. Inoue, “CCFinder: A multilinguistic token-based code clone detection system for large scale source code”, IEEE Trans on Soft. Eng., 28(7), pp.654-670, 2002.
[20] GitHub, https://github.com, (visited on Jan. 9, 2016) [21] Gitlabhq, https://github.com/gitlabhq/gitlabhq,
(visited on Jan. 9, 2016)
[22] Ghost, https://github.com/tryghost/Ghost, (visited on Jan. 9, 2016)
[23] October, https://github.com/octobercms/october, (visited on Feb. 12, 2016)
[24] Laravel, https://laravel.com/, (visited on Feb. 12, 2016)