Index: [Article Count Order] [Thread]

Date:  Sat, 20 Oct 2001 10:33:44 +0900
From:  "Katsuya Higuchi" <bugbear@....nu>
Subject:  [XP-jp:02686] Re: リファクタリングブラウザについて
To:  <extremeprogramming-jp@....jp>
Message-Id:  <004701c15907$44f87020$4687140a@....nu>
References:  <20011018153648.40F1.MATUURA@....jp> <20011019214639.34CA.SHIMADEN@....jp>
X-Mail-Count: 02686

樋口です

----- Original Message -----
From: "Hiroyuki Shimada" <shimaden@....jp>
To: <extremeprogramming-jp@....jp>
Sent: Friday, October 19, 2001 9:47 PM
Subject: [XP-jp:02684] Re: リファクタリングブラウザについて

>  すみません、すごく基本的なことなんですけれど、リファクタリングブラウザっ
> てなんでしょうか。


たとえば、メソッドの名前を変えたい時、
単純に一括置換すると、実はその名前が無関係のところで使われていたりして
トラブルを起したりします。
だからといって、手作業で置換作業すると、
grep して、それが本当にそのメソッドを指しているのか目で確認しながら
地道に置換することになってしまいます。
リファクタリングブラウザは、
そのメソッドをどこから呼んでいるのかを調査してくれて、
一発置換が出来るようになったりします。

また、関数内の特定の範囲を、別関数として追い出す時に、
その範囲とその外の間とで受け渡す必要がある局所変数を調べて、
自動的に引数として渡してくれるようになります。

f()
{
    int x;
    int y;

    for (;;)
    {
        /* ここから */
        x = ...;
        y = ...;
        /* ここまで追い出す */
        h(x, y);
    }
}

結果

f()
{
    int x;
    int y;

    for (;;)
    {
        f2(&x, &y);
        h(x, y);
    }
}

f2(int *px, *py)
{
        *px = ...;
        *py = ...;
}

てな感じですか。

とこういうことを(半)自動的にやってくれるのがリファクタリングブラウザです。
このへんの話は「リファクタリング:プログラミングの体質改善テクニック」に載っ
ています。

というわけで、私も C++ のリファクタリングブラウザがあったらほしいです。
リファクタリングブラウザと呼べるレベルではないと思いますが、
ソースブラウザとしては、Cygwin の SourceNavigator がお気に入りです。
VC++ のソースブラウザも悪くはないんですけど、
コンパイルできないとブラウズできなかったりして泣けてきます。

// 樋口 勝也
// bugbear@....nu