OSS ソースコードサーチツールの効能、有効活用方法

3,097 views

Published on

OSSAJミニセニナー開催要領
タイトル:OSSソースコードサーチツールの効能、有効活用方法の討論
講演概要:オープンソースを真に活用するとは、単に安価でソフトウェアを利用するだけではなく、ソースコードを再利用する、また改良して活用すること。OSSの理解、再利用、改変を支援する便利な検索ツールであるコードサーチツールの解説とOSSを実際に検索するデモを行います。
日時:2009年12月14日(月)16:00~19:30
15:45~16:00 受付
16:00~18:00 セミナー
18:00~19:30 Q&Aとフリーディスカッション(軽食付き)
会場:関東ITソフトウェア健保会館 市ヶ谷(曙橋)D会議室
地図:下記URLをご参照下さい
http://www.its-kenpo.or.jp/restaurant/itigaya_kaigisitu/index.html
講師:(株)SRA  葉雲文
参加費用:賛助会員、正会員 : 500円(軽食費含む)
一般会員、協賛団体会員 :1,000円(軽食費含む)
上記以外のゲスト参加 :1,500円(軽食費含む)
(当日、受付時に参加費をお支払い下さい。領収書を発行致します)
お申込み・お問合せ
下記参加お申込書を参考に、mailまたはFAXにてお申し込み下さい。
Mail: adm@ossaj.org  FAX: 03-5940-4582
その他:会場・食事の手配の都合上、セミナーへ参加お申込された後の取消しはできませんのでご注意下さい。なお参加できない場合は、代理の方にご出席頂きますようご手配の程お願い致します。

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,097
On SlideShare
0
From Embeds
0
Number of Embeds
66
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

OSS ソースコードサーチツールの効能、有効活用方法

  1. 1. “Nature does not reveal itself as it is, but only through the questions we put to it.” (Heisenberg) 検索によるOSSを活用する方法 葉 雲文 (Ye, Yunwen) (株)SRAニュービジネス戦略本部 2009年12月14日 ye@sra.co.jp
  2. 2. ソフトウェア開発企業から見たOSS 一般ユーザとしての利用環境 – Linux, Firefox … 開発品質と効率を向上させるリソース – 開発環境と言語 • Eclipse, Ruby … – フレームワーク • Sprint, Struts … – ミドルウェア • Tomcat … – サブシステム • PostgreSQL … – ライブラリ • Apache-commons, Jun ©Software Research Associates, Inc. 2
  3. 3. 競争力向上としてのOSS よく知られているOSSを利用する 活用知識の蓄積により効果的に利用 先手を取って、まだ知られていないOSSを利用 Free Beerではなく、Free Speechとして活用 – プログラムを通して、プログラミングの知識を共創、共有する – OSSを開発知識の媒体として活用 ©Software Research Associates, Inc. 3
  4. 4. OSSを活用する課題 必要となるOSSを発見する – 知らないOSSプロジェクトの検索 • How? (sourceforge.netには230,000プロジェクトがある) – OSSの一部機能や実装を自分のシステムに取り入れる (Black-box reuse) OSSを活用する知識の蓄積 – 評価:品質、ライセンス – 利用知識を会社範囲での共有 OSSから開発知識を学習(Glass-box reuse) – アルゴリズムの実装 – APIの利用方法 ©Software Research Associates, Inc. 4
  5. 5. A motivating example: JSONの利用 データ交換のフォーマットとして、JSONを利用 JSONを読み込みと書き出しのJavaプログラムを作成 JSON (Javascript Object Notation) の記述例 { username: “Barack Obama”, password: “tacklegloblewarming”, inauguration: {year: 2009, month: 1, date: 20 } } ©Software Research Associates, Inc. 5
  6. 6. JSONを検索語にし、ウェブ検索 ©Software Research Associates, Inc. 6
  7. 7. 一番目のjson.orgのページを開く、読む ©Software Research Associates, Inc. 7
  8. 8. JAVA 系処理プログラムを調べる 18個もある。どれを使うべき? ©Software Research Associates, Inc. 8
  9. 9. 1個目のorg.jsonの詳細を調べる ソースコードもブラウザで読めるので、便利 ©Software Research Associates, Inc. 9
  10. 10. 下の方にあったgoogle-gsonを調べる ドキュメントや技術支援も充実している ©Software Research Associates, Inc. 10
  11. 11. 検索駆動型ソフトウェア開発 検索エンジンを含む様々な情報検索ツールを利 用し、「いま目前にある」開発作業に必要となる知 識と情報を調査、活用しながら、ソフトウェア開発 諸活動を効率よく進める方法 検索される対象 外部のウェブ 社内のリソース 開発済みのシステム メーリングリスト 各種文書 開発中のシステム etc. etc. ©Software Research Associates, Inc. 11
  12. 12. The WHY: 検索駆動型ソフトウェア開発 ソフトウェア開発の本質 – ソフトウェアシステムは一つの情報空間(Information Space) – ソフトウェア開発は知識労働である • 農業労働:なにもないところから物質を生産する • 工業労働:複数の物質を別の物質に変換させる • 知識労働:なにもないところから物質的な存在ではない情報空間を創出 – ソフトウェア開発者は情報収集と情報創出を繰り返す • 原材料は知識と情報である • 全ての知識は開発者の頭にあるとは限らない 必要な情報を適時に収集、獲得する能力はソフト ウェア開発の品質と効率に多大な影響を与える ©Software Research Associates, Inc. 12
  13. 13. ソフトウェア開発には検索は欠かせない よく使われるUnixコマンド top cd ls ln clear find tar/zip/gzip cp man nano/vi/emacs grep vi grep lpr cat chmod ls more dmesg mkdir grep kill more chmod/chown man mv ps mount pwd cp/mv/rm ©Software Research Associates, Inc. 13
  14. 14. 検索駆動型に関する研究動向 ソフトウェア開発における検索の重要性を確認 – 開発活動の24%-40%は、ソースコードから情報を検索 – 同僚との打ち合わせの40%はソースコードに関する情報 を求める ソフトウェア開発者の情報検索プロセスの解明 – ファイル名や識別子は重要な手がかり – Just-in-time comprehension – コメントはindirect communicationの役割を果たす 検索技術を利用して開発の諸活動を支援する方法 – 学習、理解、要求追跡、バグ発見、再利用、 Intelligent Editor、ライセンス管理、 プログラマー同定、タスクアサインメント ©Software Research Associates, Inc. 14
  15. 15. 検索の重要性 数百万行のリアルタイムOSシステム を開発する開発者を観察 あるベテラン開発者の14日間の開発活 動を観察した結果 (合計 157 イベント) サーチ 37回 ソースコード閲覧 33回 43%ぐらいは検索活動 Singer, J., Lethbridge, T., Vinson, N., and Anquetil, N., "An examination of software engineering work practics," in Proceedings of the 1997 conference of the centre for advanced studies on collaborative research ©Software Research Associates, Inc. 15
  16. 16. 検索の重要性 数百万行のリアルタイムOSシステム を開発する開発者を観察 8人の開発者の開発活動の観察結果 (合計 356 イベント) UNIXコマンド 54回 ソースコード閲覧 52回 ハードウェア 36回 デバッガ 32回 サーチ 31回 ソースコード編集 30回 24%ぐらいは検索活動 Singer, J., Lethbridge, T., Vinson, N., and Anquetil, N., "An examination of software engineering work practics," in Proceedings of the 1997 conference of the centre for advanced studies on collaborative research ©Software Research Associates, Inc. 16
  17. 17. 開発者の情報検索プロセス 検索のきっかけとなる行為 – 40人がタスク記述中の単語でサーチ – 8人がEclipseのPackage Explorerでブラウジング 関連性の判断 – fileの名前で関連性を判断 – 識別子を見て、関連性を判断 – 関連ありそうなコード断片だけを注目 依存性のトレース – 70分間で65個の依存性を追跡 • 58% direct dependency • 42% indirect dependency A. Ko, B. Myers, “An exploratory study of how developers seek, relate, and collect relevant information during software maintenance tasks,” IEEE ToSE 32(12), 2006 ©Software Research Associates, Inc. 17
  18. 18. ソースコード検索研究プロトタイプ 第一世代: Black-boxのライブラリ再利用 LATTIS (1987, F. William, Virginia Polytechnic Institute and State University) CodeFinder (1993, S. Henninger, U. of Colorado) 第二世代: 多様な目的に応じる検索 CodeBroker (2000, Yunwen Ye, SRA-KTL/U. of Colorado) Spars-J (2003, 大阪大学) Prospector (2005, Mandelin et al., UC Berkley) Merobase (2006, Hummel et al. ドイツMannheim大学) Sourcerer (2006, Bajracharya et al., UC Irvine) Examplar (2007, Grechanik et al., Accenture Lab) ParseWeb (2007, Thummalapenta, Xie, North Carolina State Univ.) ©Software Research Associates, Inc. 18
  19. 19. 産業界の動向:次のGoogleへの争い general purpose search social desktop search search vertical enterprise search search ©Software Research Associates, Inc. 19
  20. 20. ソースコード検索エンジン ソフトウェア開発者に特化した検索エンジン(vertical search) ソフトウェア開発企業に特化した検索エンジン(enterprise search) Players in the market – krugle (Aragon Consulting Groupに買収, enterprise版あり) – google/codesearch – koders.com (Blackduckに買収, enterprise版あり) – JExamples.com – codase.com – codefetch.com – my.safaribooksonline.com (o’Reilley 検索) – kickjava.com – docjar.com – merobase.com – www.grepcode.com ©Software Research Associates, Inc. 20
  21. 21. ソフトウェア開発者の検索エンジン利用 米国最新調査結果 よく利用 59% たまに利用 39% koders.com 2007年一年間実績 全部言語 Java言語 検索件数 1千万件 1,055,105 ダウンロード回数 755,588 ユーザ数 3百万件 291,839 ©Software Research Associates, Inc. 21
  22. 22. “turn your source into the force” CodeDepot a vertical and enterprise code search engine ©Software Research Associates, Inc. 22
  23. 23. CodeDepot 目的 – ソースコードを知識のアセットとして管理、活用 – ソフトウェア開発の生産性と品質の向上に資する – 開発者の技術スキルの習得と共有を支援 アプローチ – 全社のソースコードを検索可能なポータルに集約 – 利用可能な膨大なOSSも同一なインタフェースで検索 – ソースコードにノート(メモ)を加える機能により、保守システ ムと外部ライブラリに関する知識を蓄積、共有 ©Software Research Associates, Inc. 23
  24. 24. CodeDepotの高度且つ高速な検索機能 ソースコードに特化した検索方法 – 文法アウェアな検索 • コード、コメント • ファイル名、クラス名 • メソッドの利用、定義 • シグネチャー – コードクローン検索 – 強力なフィルター機能 • プロジェクト別、ライセンス別、パッケージ別 ©Software Research Associates, Inc. 24
  25. 25. CodeDepot機能説明 シナリオ 指定した長さの範囲のパスワードを生成するコードを再利用する ためにCodeDepotで検索 ©Software Research Associates, Inc. 25
  26. 26. powered by CodeDepot :再利用 ①検索対象を 関数に指定 ©Software Research Associates, Inc. 26
  27. 27. powered by CodeDepot :再利用 ②検索キーワード ①検索対象を random string を 関数に指定 指定 ©Software Research Associates, Inc. 27
  28. 28. powered by CodeDepot :再利用 ②検索キーワード ①検索対象を random string を 関数に指定 指定 ③キーワード を含む場所を メソッド定義に指定 ©Software Research Associates, Inc. 28
  29. 29. powered by CodeDepot :再利用 ②検索キーワード ①検索対象を random string を 関数に指定 指定 ③キーワード を含む場所を メソッド定義に指定 ④入力タイプを2個 のint(“int int”)を指 定 ©Software Research Associates, Inc. 29
  30. 30. powered by CodeDepot :再利用 ②検索キーワード ①検索対象を random string を 関数に指定 指定 ③キーワード を含む場所を メソッド定義に指定 ④入力タイプを2個 のint(“int int”)を指 ⑤出力タイプを string を指定 定 ©Software Research Associates, Inc. 30
  31. 31. powered by CodeDepot :再利用 ②検索キーワード ①検索対象を random string を 関数に指定 指定 ③キーワード を含む場所を メソッド定義に指定 ④入力タイプを2個 ⑥ライセンスを のint(“int int”)を指 ⑤出力タイプを string を指定 ASFを指定 定 ©Software Research Associates, Inc. 31
  32. 32. powered by CodeDepot :再利用 ©Software Research Associates, Inc. 32
  33. 33. powered by CodeDepot :再利用 ©Software Research Associates, Inc. 33
  34. 34. powered by CodeDepot :知識の蓄積と共有 ©Software Research Associates, Inc. 34
  35. 35. powered by CodeDepot :知識の蓄積と共有 ©Software Research Associates, Inc. 35
  36. 36. lucene 過去プロジェクトZ 過去プロジェクト 現在プロジェクトZ 過去プロジェクトB 過去プロジェクトA commons 過去プロジェクト 過去プロジェクトB source code Jun4Java source code 過去プロジェクトA source code CVSリポジトリ source code source code source code source code source code source code source code 現在プロジェクトB インデクス作成 SVNリポジトリ イ と ン 自 デ 現在プロジェクトA 動 ク 社内ソースコード 更 ス 利用可能なOSS 新 作 コードディレクトリ 成 検索コントロール ウェブブラウザーによる検索とノート追加 品質管理 部門長 開発者 ©Software Research Associates, Inc. 36
  37. 37. powered by CodeDepot :アルゴリズム実装例 最長共通部分文字列のアルゴリズム。 common longest (substring or subsequence)で検索 ©Software Research Associates, Inc. 37
  38. 38. powered by CodeDepot :デバッグ&学習 URL url = new URL("http://192.168.24.128:8080/search"); URLConnection conn = url.openConnection(); //検索キーワードを送る conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write("q=string"); wr.flush(); wr.close(); //検索結果を受ける conn.setDoInput(true); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line=br.readLine()) != null) { System.out.println(line); } ©Software Research Associates, Inc. 38
  39. 39. powered by CodeDepot :デバッグ&学習 URL url = new URL("http://192.168.24.128:8080/search"); URLConnection conn = url.openConnection(); //検索キーワードを送る conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write("q=string"); wr.flush(); wr.close(); //検索結果を受ける conn.setDoInput(true); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line=br.readLine()) != null) { System.out.println(line); } ©Software Research Associates, Inc. 39
  40. 40. powered by CodeDepot :デバッグ&学習 URL url = new URL("http://192.168.24.128:8080/search"); URLConnection conn = url.openConnection(); //検索キーワードを送る conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write("q=string"); wr.flush(); wr.close(); //検索結果を受ける conn.setDoInput(true); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line=br.readLine()) != null) { System.out.println(line); } ©Software Research Associates, Inc. 40
  41. 41. powered by CodeDepot :デバッグ&学習 URL url = new URL("http://192.168.24.128:8080/search"); URLConnection conn = url.openConnection(); //検索キーワードを送る conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write("q=string"); wr.flush(); wr.close(); //検索結果を受ける conn.setDoInput(true); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line=br.readLine()) != null) { System.out.println(line); } Exception in thread "main" java.lang.IllegalStateException: Already connected at java.net.URLConnection.setDoInput(Unknown Source) at ye.example.URLExample.main(URLExample.java:18) ©Software Research Associates, Inc. 41
  42. 42. powered by CodeDepot :デバッグ&学習 URL url = new URL("http://192.168.24.128:8080/search"); URLConnection conn = url.openConnection(); //検索キーワードを送る conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write("q=string"); wr.flush(); wr.close(); //検索結果を受ける conn.setDoInput(true); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line=br.readLine()) != null) { System.out.println(line); } Exception in thread "main" java.lang.IllegalStateException: Already connected at java.net.URLConnection.setDoInput(Unknown Source) at ye.example.URLExample.main(URLExample.java:18) ©Software Research Associates, Inc. 42
  43. 43. ©Software Research Associates, Inc. 43
  44. 44. 利用例No.1 openConnection setDoInput getOutputStream の順で呼び出している ©Software Research Associates, Inc. 44
  45. 45. 利用例No.2 openConnection setDoInput getOutputStream の順で呼び出している ©Software Research Associates, Inc. 45
  46. 46. 利用例No.3 openConnection setDoInput getOutputStream の順で呼び出している ©Software Research Associates, Inc. 46
  47. 47. powered by CodeDepot :デバッグ&学習 URL url = new URL("http://192.168.24.128:8080/search"); URLConnection conn = url.openConnection(); //検索キーワードを送る conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write("q=string"); wr.flush(); wr.close(); //検索結果を受ける conn.setDoInput(true); 原因: BufferedReader br = new BufferedReader(new openConnection InputStreamReader(conn.getInputStream())); String line; setDoInput getOutputStream while ((line=br.readLine()) != null) { System.out.println(line); の順で呼び出すべきだが、いまは } openConnection Exception in thread "main" getOutputStream java.lang.IllegalStateException: Already connected setDoInput at java.net.URLConnection.setDoInput(Unknown Source) の順で呼び出している at ye.example.URLExample.main(URLExample.java:18) ©Software Research Associates, Inc. 47
  48. 48. powered by CodeDepot :検収と問題発見 原則: equalsを上書 きすると、 hashCodeも 上書きすべき。 検収するプロジェク トsolrに equalsだけを上書 きしているコードが 入っているかを調べ る ©Software Research Associates, Inc. 48
  49. 49. powered by CodeDepot :検収と問題発見 原則: equalsを上書 きすると、 hashCodeも 上書きすべき。 検収するプロジェク トsolrに equalsだけを上書 きしているコードが 入っているかを調べ る 5個のクラスが見つ かった ©Software Research Associates, Inc. 49
  50. 50. powered by CodeDepot :検収と問題発見 原則: equalsを上書 きすると、 hashCodeも 確かに問題コード 上書きすべき。 検収するプロジェク トsolrに equalsだけを上書 きしているコードが 入っているかを調べ る 1個のクラスには問 題がある ©Software Research Associates, Inc. 50
  51. 51. powered by CodeDepot :影響分析 クロスプロジェ クト影響分析 JSONObject を 利用ているプログ ラムを調査する 44個のクラスが 利用している ©Software Research Associates, Inc. 51
  52. 52. powered by CodeDepot :保守支援(デモ) デモシナリオ: – 文字検索機能により、不具合を起こす場所を発見 – クローン検索により、修正するコードと同じ構造を持っているコードも一緒に修 正 デモ想定状況: – antのClear Caseのunlock機能に不具合があるとする デモステップ: 1. unlock prj:antで検索、7個のクラスを発見 2. 一番目のCCUnlockクラスをクリックして、コードを見る 3. 82-111行を修正する必要があると分かった。その部分をコピーする 4. クローン検索画面にペーストし、検索する 5. 14個もあり、eclipseとantの両プロジェクトに跨っていると分かった 6. 全てを修正する。今後も同じことが起こるかもしれないので、クローンが存在し ていることをノート(メモ)に加える ©Software Research Associates, Inc. 52
  53. 53. デモ ©Software Research Associates, Inc. 53
  54. 54. CodeDepotにより開発効率と品質向上 再利用 学習 保守 プロジェクト管理と製品検収 ©Software Research Associates, Inc. 54
  55. 55. CodeDepotにより開発効率と品質向上 再利用 学習 保守 プロジェクト管理と製品検収 – 組織横断的な再利用を簡単にする • 初期コストなし、既存コードを登録するだけ • OSSも再利用の対象となる – 再利用する開発者を支援 • black-box ライブラリとして組み込み • white-box 一部のコードを修正して再利用 • glass-box 認知負荷の低減によりバグが減る – 共通コードを割り出し、コンポーネント化 ©Software Research Associates, Inc. 55
  56. 56. CodeDepotにより開発効率と品質向上 再利用 学習 保守 プロジェクト管理と製品検収 – アルゴリズムの実装方法 – APIの利用方法の学習と共有 – プログラム・イディオム (call chain) – 利用しているOSSシステムのコードを理解 ©Software Research Associates, Inc. 56
  57. 57. CodeDepotにより開発効率と品質向上 再利用 学習 保守 プロジェクト管理と製品検収 – 修正する場所の把握と発見 – 修正の影響範囲の把握 – ソースコードにノートを付けることにより、保守知識 を蓄積、共有 ©Software Research Associates, Inc. 57
  58. 58. CodeDepotにより開発効率と品質向上 再利用 学習 保守 プロジェクト管理と製品検収 – 社内アセットを一元的なアクセスインタフェースを通 して、プロジェクトの提案と見積もり段階でも活用 – 製品検収で望ましくないコードの検出 – 問題コードをプロジェクト横断的に一気に同定 ©Software Research Associates, Inc. 58
  59. 59. おわりに 検索によりOSSを活用するアプローチ – 情報の収集と獲得はソフトウェア開発の基本活動 – 効率向上、品質改善、スキル向上の新しいアプローチ CodeDepot:Vertical and Enterprise Search Engine – 高速、強力な検索機能 – 大規模なコードにも対応 – ウェブベースシステムなので、利用がシンプル – 再利用、学習、保守、管理といった多様なタスクに利用可能 “Software may be invisible, but gets revealed through the questions we put to it.” ©Software Research Associates, Inc. 59

×