SlideShare ist ein Scribd-Unternehmen logo
1 von 59
“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
ソフトウェア開発企業から見たOSS

  一般ユーザとしての利用環境
       – Linux, Firefox …


  開発品質と効率を向上させるリソース
       – 開発環境と言語
            • Eclipse, Ruby …
       – フレームワーク
            • Sprint, Struts …
       – ミドルウェア
            • Tomcat …
       – サブシステム
            • PostgreSQL …
       – ライブラリ
            • Apache-commons, Jun


©Software Research Associates, Inc.   2
競争力向上としてのOSS

  よく知られているOSSを利用する

  活用知識の蓄積により効果的に利用

  先手を取って、まだ知られていないOSSを利用

  Free Beerではなく、Free Speechとして活用
       – プログラムを通して、プログラミングの知識を共創、共有する
       – OSSを開発知識の媒体として活用

©Software Research Associates, Inc.     3
OSSを活用する課題

  必要となるOSSを発見する
       – 知らないOSSプロジェクトの検索
            • How? (sourceforge.netには230,000プロジェクトがある)
       – OSSの一部機能や実装を自分のシステムに取り入れる
         (Black-box reuse)
  OSSを活用する知識の蓄積
       – 評価:品質、ライセンス
       – 利用知識を会社範囲での共有
  OSSから開発知識を学習(Glass-box reuse)
       – アルゴリズムの実装
       – APIの利用方法
©Software Research Associates, Inc.                      4
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
JSONを検索語にし、ウェブ検索




©Software Research Associates, Inc.   6
一番目のjson.orgのページを開く、読む




©Software Research Associates, Inc.   7
JAVA 系処理プログラムを調べる
18個もある。どれを使うべき?




©Software Research Associates, Inc.   8
1個目のorg.jsonの詳細を調べる
ソースコードもブラウザで読めるので、便利




©Software Research Associates, Inc.   9
下の方にあったgoogle-gsonを調べる
ドキュメントや技術支援も充実している




©Software Research Associates, Inc.   10
検索駆動型ソフトウェア開発

  検索エンジンを含む様々な情報検索ツールを利
  用し、「いま目前にある」開発作業に必要となる知
  識と情報を調査、活用しながら、ソフトウェア開発
  諸活動を効率よく進める方法

  検索される対象
            外部のウェブ                    社内のリソース
            開発済みのシステム                 メーリングリスト
            各種文書                      開発中のシステム
            etc. etc.

©Software Research Associates, Inc.              11
The WHY: 検索駆動型ソフトウェア開発

  ソフトウェア開発の本質
       – ソフトウェアシステムは一つの情報空間(Information
         Space)
       – ソフトウェア開発は知識労働である
            • 農業労働:なにもないところから物質を生産する
            • 工業労働:複数の物質を別の物質に変換させる
            • 知識労働:なにもないところから物質的な存在ではない情報空間を創出
       – ソフトウェア開発者は情報収集と情報創出を繰り返す
            • 原材料は知識と情報である
            • 全ての知識は開発者の頭にあるとは限らない


   必要な情報を適時に収集、獲得する能力はソフト
   ウェア開発の品質と効率に多大な影響を与える
©Software Research Associates, Inc.          12
ソフトウェア開発には検索は欠かせない

  よく使われる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
検索駆動型に関する研究動向

  ソフトウェア開発における検索の重要性を確認
       – 開発活動の24%-40%は、ソースコードから情報を検索
       – 同僚との打ち合わせの40%はソースコードに関する情報
         を求める
  ソフトウェア開発者の情報検索プロセスの解明
       – ファイル名や識別子は重要な手がかり
       – Just-in-time comprehension
       – コメントはindirect communicationの役割を果たす
  検索技術を利用して開発の諸活動を支援する方法
       – 学習、理解、要求追跡、バグ発見、再利用、
         Intelligent Editor、ライセンス管理、
         プログラマー同定、タスクアサインメント

©Software Research Associates, Inc.           14
検索の重要性
 数百万行のリアルタイム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
検索の重要性
 数百万行のリアルタイム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
開発者の情報検索プロセス

  検索のきっかけとなる行為
       – 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
ソースコード検索研究プロトタイプ

  第一世代: 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
産業界の動向:次のGoogleへの争い


            general purpose search




                                      social     desktop
                                      search      search


                                 vertical      enterprise
                                  search         search




©Software Research Associates, Inc.                         19
ソースコード検索エンジン
  ソフトウェア開発者に特化した検索エンジン(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
ソフトウェア開発者の検索エンジン利用

  米国最新調査結果

            よく利用                      59%
            たまに利用                     39%


  koders.com 2007年一年間実績
                                      全部言語   Java言語
            検索件数                      1千万件   1,055,105
            ダウンロード回数                           755,588
            ユーザ数                      3百万件     291,839

©Software Research Associates, Inc.                      21
“turn your source
   into the force”
    CodeDepot
              a vertical and enterprise code search engine




©Software Research Associates, Inc.                          22
CodeDepot

  目的
       – ソースコードを知識のアセットとして管理、活用
       – ソフトウェア開発の生産性と品質の向上に資する
       – 開発者の技術スキルの習得と共有を支援


  アプローチ
       – 全社のソースコードを検索可能なポータルに集約
       – 利用可能な膨大なOSSも同一なインタフェースで検索
       – ソースコードにノート(メモ)を加える機能により、保守システ
         ムと外部ライブラリに関する知識を蓄積、共有


©Software Research Associates, Inc.      23
CodeDepotの高度且つ高速な検索機能

  ソースコードに特化した検索方法
       – 文法アウェアな検索
            •   コード、コメント
            •   ファイル名、クラス名
            •   メソッドの利用、定義
            •   シグネチャー
       – コードクローン検索
       – 強力なフィルター機能
            • プロジェクト別、ライセンス別、パッケージ別




©Software Research Associates, Inc.   24
CodeDepot機能説明

  シナリオ
      指定した長さの範囲のパスワードを生成するコードを再利用する
      ためにCodeDepotで検索




©Software Research Associates, Inc.   25
powered by CodeDepot                :再利用

                 ①検索対象を
                 関数に指定




©Software Research Associates, Inc.          26
powered by CodeDepot                :再利用

                                      ②検索キーワード
                 ①検索対象を               random string を
                 関数に指定                     指定




©Software Research Associates, Inc.                     27
powered by CodeDepot                :再利用

                                      ②検索キーワード
                 ①検索対象を               random string を
                 関数に指定                     指定

                                                        ③キーワード
                                                        を含む場所を
                                                        メソッド定義に指定




©Software Research Associates, Inc.                                 28
powered by CodeDepot                :再利用

                                      ②検索キーワード
                 ①検索対象を               random string を
                 関数に指定                     指定

                                                        ③キーワード
                                                        を含む場所を
                                                        メソッド定義に指定




  ④入力タイプを2個
  のint(“int int”)を指
  定


©Software Research Associates, Inc.                                 29
powered by CodeDepot                    :再利用

                                           ②検索キーワード
                 ①検索対象を                    random string を
                 関数に指定                          指定

                                                             ③キーワード
                                                             を含む場所を
                                                             メソッド定義に指定




  ④入力タイプを2個
  のint(“int int”)を指                   ⑤出力タイプを
                                      string を指定
  定


©Software Research Associates, Inc.                                      30
powered by CodeDepot                    :再利用

                                           ②検索キーワード
                 ①検索対象を                    random string を
                 関数に指定                          指定

                                                               ③キーワード
                                                               を含む場所を
                                                               メソッド定義に指定




  ④入力タイプを2個                                                  ⑥ライセンスを
  のint(“int int”)を指                   ⑤出力タイプを
                                      string を指定             ASFを指定
  定


©Software Research Associates, Inc.                                        31
powered by CodeDepot                :再利用




©Software Research Associates, Inc.          32
powered by CodeDepot                :再利用




©Software Research Associates, Inc.          33
powered by CodeDepot                :知識の蓄積と共有




©Software Research Associates, Inc.               34
powered by CodeDepot                :知識の蓄積と共有




©Software Research Associates, Inc.               35
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
powered by CodeDepot                :アルゴリズム実装例
 最長共通部分文字列のアルゴリズム。
 common longest (substring or subsequence)で検索




©Software Research Associates, Inc.                37
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
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
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
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
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
©Software Research Associates, Inc.   43
利用例No.1




                                      openConnection
                                      setDoInput
                                      getOutputStream
                                      の順で呼び出している




©Software Research Associates, Inc.                     44
利用例No.2




                                      openConnection
                                      setDoInput
                                      getOutputStream
                                      の順で呼び出している



©Software Research Associates, Inc.                     45
利用例No.3




                                      openConnection
                                      setDoInput
                                      getOutputStream
                                      の順で呼び出している




©Software Research Associates, Inc.                     46
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
powered by CodeDepot                :検収と問題発見


  原則:
  equalsを上書
  きすると、
  hashCodeも
  上書きすべき。

  検収するプロジェク
  トsolrに
  equalsだけを上書
  きしているコードが
  入っているかを調べ
  る



©Software Research Associates, Inc.              48
powered by CodeDepot                :検収と問題発見


  原則:
  equalsを上書
  きすると、
  hashCodeも
  上書きすべき。

  検収するプロジェク
  トsolrに
  equalsだけを上書
  きしているコードが
  入っているかを調べ
  る
  5個のクラスが見つ
  かった
©Software Research Associates, Inc.              49
powered by CodeDepot                :検収と問題発見


  原則:
  equalsを上書
  きすると、
  hashCodeも                                確かに問題コード
  上書きすべき。

  検収するプロジェク
  トsolrに
  equalsだけを上書
  きしているコードが
  入っているかを調べ
  る
  1個のクラスには問
  題がある
©Software Research Associates, Inc.                   50
powered by CodeDepot                :影響分析



  クロスプロジェ
  クト影響分析

  JSONObject を
  利用ているプログ
  ラムを調査する



  44個のクラスが
  利用している




©Software Research Associates, Inc.           51
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
デモ




©Software Research Associates, Inc.   53
CodeDepotにより開発効率と品質向上

   再利用 学習 保守 プロジェクト管理と製品検収




©Software Research Associates, Inc.   54
CodeDepotにより開発効率と品質向上

   再利用 学習 保守 プロジェクト管理と製品検収
        – 組織横断的な再利用を簡単にする
             • 初期コストなし、既存コードを登録するだけ
             • OSSも再利用の対象となる

        – 再利用する開発者を支援
             • black-box ライブラリとして組み込み
             • white-box 一部のコードを修正して再利用
             • glass-box 認知負荷の低減によりバグが減る

        – 共通コードを割り出し、コンポーネント化




©Software Research Associates, Inc.        55
CodeDepotにより開発効率と品質向上

   再利用 学習 保守 プロジェクト管理と製品検収
        – アルゴリズムの実装方法
        – APIの利用方法の学習と共有
        – プログラム・イディオム (call chain)
        – 利用しているOSSシステムのコードを理解




©Software Research Associates, Inc.   56
CodeDepotにより開発効率と品質向上

   再利用 学習 保守 プロジェクト管理と製品検収
        – 修正する場所の把握と発見
        – 修正の影響範囲の把握
        – ソースコードにノートを付けることにより、保守知識
          を蓄積、共有




©Software Research Associates, Inc.   57
CodeDepotにより開発効率と品質向上

   再利用 学習 保守 プロジェクト管理と製品検収
        – 社内アセットを一元的なアクセスインタフェースを通
          して、プロジェクトの提案と見積もり段階でも活用
        – 製品検収で望ましくないコードの検出
        – 問題コードをプロジェクト横断的に一気に同定




©Software Research Associates, Inc.   58
おわりに

  検索により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

Weitere ähnliche Inhalte

Andere mochten auch

Andere mochten auch (8)

Ossaj seminar usi 20120118 print
Ossaj seminar usi 20120118 printOssaj seminar usi 20120118 print
Ossaj seminar usi 20120118 print
 
コモンパラダイムシステム(Common Paradigm - COPAS)のご紹介
コモンパラダイムシステム(Common Paradigm - COPAS)のご紹介コモンパラダイムシステム(Common Paradigm - COPAS)のご紹介
コモンパラダイムシステム(Common Paradigm - COPAS)のご紹介
 
コモン・オープンソース 10
コモン・オープンソース 10コモン・オープンソース 10
コモン・オープンソース 10
 
コモンパラダイムシステムのご紹介
コモンパラダイムシステムのご紹介コモンパラダイムシステムのご紹介
コモンパラダイムシステムのご紹介
 
OSSで構築した被災者管理システム
OSSで構築した被災者管理システムOSSで構築した被災者管理システム
OSSで構築した被災者管理システム
 
オープンソースソフトウェア検索サーバ Solr入門
オープンソースソフトウェア検索サーバ Solr入門オープンソースソフトウェア検索サーバ Solr入門
オープンソースソフトウェア検索サーバ Solr入門
 
もういちどOSSのことを思い出してみよう
もういちどOSSのことを思い出してみようもういちどOSSのことを思い出してみよう
もういちどOSSのことを思い出してみよう
 
オープンソースで開くビッグデータの扉
オープンソースで開くビッグデータの扉オープンソースで開くビッグデータの扉
オープンソースで開くビッグデータの扉
 

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

ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラム
Recruit Technologies
 
Apache Solrで実現する共創のエコ システム ‒検索、クロール、自然言語処理‒
Apache Solrで実現する共創のエコ システム  ‒検索、クロール、自然言語処理‒Apache Solrで実現する共創のエコ システム  ‒検索、クロール、自然言語処理‒
Apache Solrで実現する共創のエコ システム ‒検索、クロール、自然言語処理‒
MasayukiIke
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
Shuji Morisaki
 
DEIM2019 楽天技術研究所の研究とケーススタディ(推薦システム)
DEIM2019 楽天技術研究所の研究とケーススタディ(推薦システム)DEIM2019 楽天技術研究所の研究とケーススタディ(推薦システム)
DEIM2019 楽天技術研究所の研究とケーススタディ(推薦システム)
Sho Nakamura
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料
Recruit Technologies
 

Ähnlich wie OSS ソースコードサーチツールの効能、有効活用方法 (20)

Ldd13 present
Ldd13 presentLdd13 present
Ldd13 present
 
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
 
エンタープライズソフトウェア開発とOSS
エンタープライズソフトウェア開発とOSSエンタープライズソフトウェア開発とOSS
エンタープライズソフトウェア開発とOSS
 
「モダンな」可視化アプリケーション開発とはどのようなものか?
「モダンな」可視化アプリケーション開発とはどのようなものか?「モダンな」可視化アプリケーション開発とはどのようなものか?
「モダンな」可視化アプリケーション開発とはどのようなものか?
 
Kspin20121201 kobayashi
Kspin20121201 kobayashiKspin20121201 kobayashi
Kspin20121201 kobayashi
 
ビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラムビッグデータ活用支援フォーラム
ビッグデータ活用支援フォーラム
 
ICSE2014参加報告 (SE勉強会 6/12)
ICSE2014参加報告 (SE勉強会 6/12)ICSE2014参加報告 (SE勉強会 6/12)
ICSE2014参加報告 (SE勉強会 6/12)
 
Apache Solrで実現する共創のエコ システム ‒検索、クロール、自然言語処理‒
Apache Solrで実現する共創のエコ システム  ‒検索、クロール、自然言語処理‒Apache Solrで実現する共創のエコ システム  ‒検索、クロール、自然言語処理‒
Apache Solrで実現する共創のエコ システム ‒検索、クロール、自然言語処理‒
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
 
チケットの利用による経験を活かした開発の可能性
チケットの利用による経験を活かした開発の可能性 チケットの利用による経験を活かした開発の可能性
チケットの利用による経験を活かした開発の可能性
 
情報爆発シンポジウム infoplosion
情報爆発シンポジウム infoplosion情報爆発シンポジウム infoplosion
情報爆発シンポジウム infoplosion
 
Semat - a Japanese introduction
Semat - a Japanese introductionSemat - a Japanese introduction
Semat - a Japanese introduction
 
DEIM2019 楽天技術研究所の研究とケーススタディ(推薦システム)
DEIM2019 楽天技術研究所の研究とケーススタディ(推薦システム)DEIM2019 楽天技術研究所の研究とケーススタディ(推薦システム)
DEIM2019 楽天技術研究所の研究とケーススタディ(推薦システム)
 
Hadoopカンファレンス2013
Hadoopカンファレンス2013Hadoopカンファレンス2013
Hadoopカンファレンス2013
 
Find Your Ability: IA for a novice Web Creator
Find Your Ability: IA for a novice Web CreatorFind Your Ability: IA for a novice Web Creator
Find Your Ability: IA for a novice Web Creator
 
静的解析ツールKlocwork によるCERT-C/CWE対応
静的解析ツールKlocwork によるCERT-C/CWE対応静的解析ツールKlocwork によるCERT-C/CWE対応
静的解析ツールKlocwork によるCERT-C/CWE対応
 
20180124_ソフトウェアテストを効率的に実施するためのデータの仮想化と自動化とは? by 株式会社インサイトテクノロジー 益秀樹
20180124_ソフトウェアテストを効率的に実施するためのデータの仮想化と自動化とは? by 株式会社インサイトテクノロジー 益秀樹20180124_ソフトウェアテストを効率的に実施するためのデータの仮想化と自動化とは? by 株式会社インサイトテクノロジー 益秀樹
20180124_ソフトウェアテストを効率的に実施するためのデータの仮想化と自動化とは? by 株式会社インサイトテクノロジー 益秀樹
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
 
ソフトウェア産業に望まれる人材
ソフトウェア産業に望まれる人材ソフトウェア産業に望まれる人材
ソフトウェア産業に望まれる人材
 

Mehr von Open Source Software Association of Japan

「コーポレートサイトにちょうどいい」baserCMS 生い立ちと今 --- 大切にしているポリシーをみなさんにお伝えします ---
「コーポレートサイトにちょうどいい」baserCMS 生い立ちと今 --- 大切にしているポリシーをみなさんにお伝えします ---「コーポレートサイトにちょうどいい」baserCMS 生い立ちと今 --- 大切にしているポリシーをみなさんにお伝えします ---
「コーポレートサイトにちょうどいい」baserCMS 生い立ちと今 --- 大切にしているポリシーをみなさんにお伝えします ---
Open Source Software Association of Japan
 
オープンソース統合運用管理ツール『Hinemos』 --- その利便性及びインシデント管理について ---
オープンソース統合運用管理ツール『Hinemos』  --- その利便性及びインシデント管理について ---オープンソース統合運用管理ツール『Hinemos』  --- その利便性及びインシデント管理について ---
オープンソース統合運用管理ツール『Hinemos』 --- その利便性及びインシデント管理について ---
Open Source Software Association of Japan
 
3.11で変わる地域の防災対策と防災・減災コミュニティシステム
3.11で変わる地域の防災対策と防災・減災コミュニティシステム3.11で変わる地域の防災対策と防災・減災コミュニティシステム
3.11で変わる地域の防災対策と防災・減災コミュニティシステム
Open Source Software Association of Japan
 

Mehr von Open Source Software Association of Japan (19)

オープンソースがエンドユーザーイニシアティブをもたらす!? — 「シラサギ」使ったらこんなこともあんなことも —
オープンソースがエンドユーザーイニシアティブをもたらす!? — 「シラサギ」使ったらこんなこともあんなことも —オープンソースがエンドユーザーイニシアティブをもたらす!? — 「シラサギ」使ったらこんなこともあんなことも —
オープンソースがエンドユーザーイニシアティブをもたらす!? — 「シラサギ」使ったらこんなこともあんなことも —
 
オープンソースの来し方行く末@OSC 2017 Hokkaido
オープンソースの来し方行く末@OSC 2017 Hokkaidoオープンソースの来し方行く末@OSC 2017 Hokkaido
オープンソースの来し方行く末@OSC 2017 Hokkaido
 
「コーポレートサイトにちょうどいい」baserCMS 生い立ちと今 --- 大切にしているポリシーをみなさんにお伝えします ---
「コーポレートサイトにちょうどいい」baserCMS 生い立ちと今 --- 大切にしているポリシーをみなさんにお伝えします ---「コーポレートサイトにちょうどいい」baserCMS 生い立ちと今 --- 大切にしているポリシーをみなさんにお伝えします ---
「コーポレートサイトにちょうどいい」baserCMS 生い立ちと今 --- 大切にしているポリシーをみなさんにお伝えします ---
 
オープンソースの来し方行末@OSC 2017 Osaka
オープンソースの来し方行末@OSC 2017 Osakaオープンソースの来し方行末@OSC 2017 Osaka
オープンソースの来し方行末@OSC 2017 Osaka
 
オープンソースの来し方行く末@OSC 2016 Tokyo/Fall
オープンソースの来し方行く末@OSC 2016 Tokyo/Fallオープンソースの来し方行く末@OSC 2016 Tokyo/Fall
オープンソースの来し方行く末@OSC 2016 Tokyo/Fall
 
オープンソースの来し方行く末@OSC 2016 Nagaoka
オープンソースの来し方行く末@OSC 2016 Nagaokaオープンソースの来し方行く末@OSC 2016 Nagaoka
オープンソースの来し方行く末@OSC 2016 Nagaoka
 
オープンソースの来し方行く末@OSC 2016 Okinawa
オープンソースの来し方行く末@OSC 2016 Okinawaオープンソースの来し方行く末@OSC 2016 Okinawa
オープンソースの来し方行く末@OSC 2016 Okinawa
 
オープンソースの来し方行く末@OSC 2016 Hokkaido
オープンソースの来し方行く末@OSC 2016 Hokkaidoオープンソースの来し方行く末@OSC 2016 Hokkaido
オープンソースの来し方行く末@OSC 2016 Hokkaido
 
振り返ってみようOSS
振り返ってみようOSS振り返ってみようOSS
振り返ってみようOSS
 
日本発の日本語全文検索システム – Namazu を美味しく Kabayaki にするためにしたあれこれ
日本発の日本語全文検索システム – Namazu を美味しく Kabayaki にするためにしたあれこれ日本発の日本語全文検索システム – Namazu を美味しく Kabayaki にするためにしたあれこれ
日本発の日本語全文検索システム – Namazu を美味しく Kabayaki にするためにしたあれこれ
 
上海OSS事情
上海OSS事情上海OSS事情
上海OSS事情
 
自由な地図をみんなで作るOpenStreetMap
自由な地図をみんなで作るOpenStreetMap自由な地図をみんなで作るOpenStreetMap
自由な地図をみんなで作るOpenStreetMap
 
MySQLとオープンソースビジネスの10年、そして未来へ
MySQLとオープンソースビジネスの10年、そして未来へMySQLとオープンソースビジネスの10年、そして未来へ
MySQLとオープンソースビジネスの10年、そして未来へ
 
オープンソース統合運用管理ツール『Hinemos』 --- その利便性及びインシデント管理について ---
オープンソース統合運用管理ツール『Hinemos』  --- その利便性及びインシデント管理について ---オープンソース統合運用管理ツール『Hinemos』  --- その利便性及びインシデント管理について ---
オープンソース統合運用管理ツール『Hinemos』 --- その利便性及びインシデント管理について ---
 
ミャンマーのIT業とAWITDの戦略
ミャンマーのIT業とAWITDの戦略ミャンマーのIT業とAWITDの戦略
ミャンマーのIT業とAWITDの戦略
 
3.11で変わる地域の防災対策と防災・減災コミュニティシステム
3.11で変わる地域の防災対策と防災・減災コミュニティシステム3.11で変わる地域の防災対策と防災・減災コミュニティシステム
3.11で変わる地域の防災対策と防災・減災コミュニティシステム
 
クラウドコンピューティングと OSS
クラウドコンピューティングと OSSクラウドコンピューティングと OSS
クラウドコンピューティングと OSS
 
CSR からソーシャルビジネスまで、企業が今意識すべきもの
CSR からソーシャルビジネスまで、企業が今意識すべきものCSR からソーシャルビジネスまで、企業が今意識すべきもの
CSR からソーシャルビジネスまで、企業が今意識すべきもの
 
ソーシャルビジネスとしてのオープンソース
ソーシャルビジネスとしてのオープンソースソーシャルビジネスとしてのオープンソース
ソーシャルビジネスとしてのオープンソース
 

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

  • 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. ソフトウェア開発企業から見たOSS 一般ユーザとしての利用環境 – Linux, Firefox … 開発品質と効率を向上させるリソース – 開発環境と言語 • Eclipse, Ruby … – フレームワーク • Sprint, Struts … – ミドルウェア • Tomcat … – サブシステム • PostgreSQL … – ライブラリ • Apache-commons, Jun ©Software Research Associates, Inc. 2
  • 3. 競争力向上としてのOSS よく知られているOSSを利用する 活用知識の蓄積により効果的に利用 先手を取って、まだ知られていないOSSを利用 Free Beerではなく、Free Speechとして活用 – プログラムを通して、プログラミングの知識を共創、共有する – OSSを開発知識の媒体として活用 ©Software Research Associates, Inc. 3
  • 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. 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
  • 11. 検索駆動型ソフトウェア開発 検索エンジンを含む様々な情報検索ツールを利 用し、「いま目前にある」開発作業に必要となる知 識と情報を調査、活用しながら、ソフトウェア開発 諸活動を効率よく進める方法 検索される対象 外部のウェブ 社内のリソース 開発済みのシステム メーリングリスト 各種文書 開発中のシステム etc. etc. ©Software Research Associates, Inc. 11
  • 12. The WHY: 検索駆動型ソフトウェア開発 ソフトウェア開発の本質 – ソフトウェアシステムは一つの情報空間(Information Space) – ソフトウェア開発は知識労働である • 農業労働:なにもないところから物質を生産する • 工業労働:複数の物質を別の物質に変換させる • 知識労働:なにもないところから物質的な存在ではない情報空間を創出 – ソフトウェア開発者は情報収集と情報創出を繰り返す • 原材料は知識と情報である • 全ての知識は開発者の頭にあるとは限らない 必要な情報を適時に収集、獲得する能力はソフト ウェア開発の品質と効率に多大な影響を与える ©Software Research Associates, Inc. 12
  • 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. 検索駆動型に関する研究動向 ソフトウェア開発における検索の重要性を確認 – 開発活動の24%-40%は、ソースコードから情報を検索 – 同僚との打ち合わせの40%はソースコードに関する情報 を求める ソフトウェア開発者の情報検索プロセスの解明 – ファイル名や識別子は重要な手がかり – Just-in-time comprehension – コメントはindirect communicationの役割を果たす 検索技術を利用して開発の諸活動を支援する方法 – 学習、理解、要求追跡、バグ発見、再利用、 Intelligent Editor、ライセンス管理、 プログラマー同定、タスクアサインメント ©Software Research Associates, Inc. 14
  • 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. 検索の重要性 数百万行のリアルタイム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. 開発者の情報検索プロセス 検索のきっかけとなる行為 – 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. ソースコード検索研究プロトタイプ 第一世代: 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. 産業界の動向:次のGoogleへの争い general purpose search social desktop search search vertical enterprise search search ©Software Research Associates, Inc. 19
  • 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. ソフトウェア開発者の検索エンジン利用 米国最新調査結果 よく利用 59% たまに利用 39% koders.com 2007年一年間実績 全部言語 Java言語 検索件数 1千万件 1,055,105 ダウンロード回数 755,588 ユーザ数 3百万件 291,839 ©Software Research Associates, Inc. 21
  • 22. “turn your source into the force” CodeDepot a vertical and enterprise code search engine ©Software Research Associates, Inc. 22
  • 23. CodeDepot 目的 – ソースコードを知識のアセットとして管理、活用 – ソフトウェア開発の生産性と品質の向上に資する – 開発者の技術スキルの習得と共有を支援 アプローチ – 全社のソースコードを検索可能なポータルに集約 – 利用可能な膨大なOSSも同一なインタフェースで検索 – ソースコードにノート(メモ)を加える機能により、保守システ ムと外部ライブラリに関する知識を蓄積、共有 ©Software Research Associates, Inc. 23
  • 24. CodeDepotの高度且つ高速な検索機能 ソースコードに特化した検索方法 – 文法アウェアな検索 • コード、コメント • ファイル名、クラス名 • メソッドの利用、定義 • シグネチャー – コードクローン検索 – 強力なフィルター機能 • プロジェクト別、ライセンス別、パッケージ別 ©Software Research Associates, Inc. 24
  • 25. CodeDepot機能説明 シナリオ 指定した長さの範囲のパスワードを生成するコードを再利用する ためにCodeDepotで検索 ©Software Research Associates, Inc. 25
  • 26. powered by CodeDepot :再利用 ①検索対象を 関数に指定 ©Software Research Associates, Inc. 26
  • 27. powered by CodeDepot :再利用 ②検索キーワード ①検索対象を random string を 関数に指定 指定 ©Software Research Associates, Inc. 27
  • 28. powered by CodeDepot :再利用 ②検索キーワード ①検索対象を random string を 関数に指定 指定 ③キーワード を含む場所を メソッド定義に指定 ©Software Research Associates, Inc. 28
  • 29. powered by CodeDepot :再利用 ②検索キーワード ①検索対象を random string を 関数に指定 指定 ③キーワード を含む場所を メソッド定義に指定 ④入力タイプを2個 のint(“int int”)を指 定 ©Software Research Associates, Inc. 29
  • 30. powered by CodeDepot :再利用 ②検索キーワード ①検索対象を random string を 関数に指定 指定 ③キーワード を含む場所を メソッド定義に指定 ④入力タイプを2個 のint(“int int”)を指 ⑤出力タイプを string を指定 定 ©Software Research Associates, Inc. 30
  • 31. powered by CodeDepot :再利用 ②検索キーワード ①検索対象を random string を 関数に指定 指定 ③キーワード を含む場所を メソッド定義に指定 ④入力タイプを2個 ⑥ライセンスを のint(“int int”)を指 ⑤出力タイプを string を指定 ASFを指定 定 ©Software Research Associates, Inc. 31
  • 32. powered by CodeDepot :再利用 ©Software Research Associates, Inc. 32
  • 33. powered by CodeDepot :再利用 ©Software Research Associates, Inc. 33
  • 34. powered by CodeDepot :知識の蓄積と共有 ©Software Research Associates, Inc. 34
  • 35. powered by CodeDepot :知識の蓄積と共有 ©Software Research Associates, Inc. 35
  • 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. powered by CodeDepot :アルゴリズム実装例 最長共通部分文字列のアルゴリズム。 common longest (substring or subsequence)で検索 ©Software Research Associates, Inc. 37
  • 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. 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. 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. 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. 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
  • 44. 利用例No.1 openConnection setDoInput getOutputStream の順で呼び出している ©Software Research Associates, Inc. 44
  • 45. 利用例No.2 openConnection setDoInput getOutputStream の順で呼び出している ©Software Research Associates, Inc. 45
  • 46. 利用例No.3 openConnection setDoInput getOutputStream の順で呼び出している ©Software Research Associates, Inc. 46
  • 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. powered by CodeDepot :検収と問題発見 原則: equalsを上書 きすると、 hashCodeも 上書きすべき。 検収するプロジェク トsolrに equalsだけを上書 きしているコードが 入っているかを調べ る ©Software Research Associates, Inc. 48
  • 49. powered by CodeDepot :検収と問題発見 原則: equalsを上書 きすると、 hashCodeも 上書きすべき。 検収するプロジェク トsolrに equalsだけを上書 きしているコードが 入っているかを調べ る 5個のクラスが見つ かった ©Software Research Associates, Inc. 49
  • 50. powered by CodeDepot :検収と問題発見 原則: equalsを上書 きすると、 hashCodeも 確かに問題コード 上書きすべき。 検収するプロジェク トsolrに equalsだけを上書 きしているコードが 入っているかを調べ る 1個のクラスには問 題がある ©Software Research Associates, Inc. 50
  • 51. powered by CodeDepot :影響分析 クロスプロジェ クト影響分析 JSONObject を 利用ているプログ ラムを調査する 44個のクラスが 利用している ©Software Research Associates, Inc. 51
  • 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
  • 54. CodeDepotにより開発効率と品質向上 再利用 学習 保守 プロジェクト管理と製品検収 ©Software Research Associates, Inc. 54
  • 55. CodeDepotにより開発効率と品質向上 再利用 学習 保守 プロジェクト管理と製品検収 – 組織横断的な再利用を簡単にする • 初期コストなし、既存コードを登録するだけ • OSSも再利用の対象となる – 再利用する開発者を支援 • black-box ライブラリとして組み込み • white-box 一部のコードを修正して再利用 • glass-box 認知負荷の低減によりバグが減る – 共通コードを割り出し、コンポーネント化 ©Software Research Associates, Inc. 55
  • 56. CodeDepotにより開発効率と品質向上 再利用 学習 保守 プロジェクト管理と製品検収 – アルゴリズムの実装方法 – APIの利用方法の学習と共有 – プログラム・イディオム (call chain) – 利用しているOSSシステムのコードを理解 ©Software Research Associates, Inc. 56
  • 57. CodeDepotにより開発効率と品質向上 再利用 学習 保守 プロジェクト管理と製品検収 – 修正する場所の把握と発見 – 修正の影響範囲の把握 – ソースコードにノートを付けることにより、保守知識 を蓄積、共有 ©Software Research Associates, Inc. 57
  • 58. CodeDepotにより開発効率と品質向上 再利用 学習 保守 プロジェクト管理と製品検収 – 社内アセットを一元的なアクセスインタフェースを通 して、プロジェクトの提案と見積もり段階でも活用 – 製品検収で望ましくないコードの検出 – 問題コードをプロジェクト横断的に一気に同定 ©Software Research Associates, Inc. 58
  • 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