BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース デバッガは有害か?

デバッガは有害か?

Giles Bowkett 氏は、Debugger Support Considered Harmful (デバッガサポートは有害だ) (source)で次のように記述している。

Ruby のデバッガサポートが貧弱である理由を尋ねるのは、イルカにえらがない理由を尋ねているのと同じです。Ruby のデバッガサポートが貧弱であるのは、Ruby プログラマはデバッガを使用すべきではないからです。Ruby は、おそらく Smalltalk を除いた他のどの言語よりも TDD および BDD に対するサポートが優れています。デバッガサポートは、テストを正常に実行することができない言語のためのものです。

注意: TDD は「テストドリブン設計/開発」、BDD は「ビヘイビアドリブン開発」を表す。 

この記事はさまざまな反響を呼んだ。その多くが、Smalltalk コミュニティからのものであった。Smalltalk と Ruby は近い親戚のようなものであり、特に関係が深い。Cincom Systems の James Robertson 氏(source)は、TDD を行う際に Smalltalk のデバッガが有用であることを説明するスクリーンキャスト(source)を作成し、次のように説明している。

私は、テストを作成し、それを実行します。テストが失敗したら、テストをデバッグして、デバッガで不足しているメソッドを作成します。つまり、デバッガでそのメソッドのコードを記述し、すぐにもう一度テストを実行するのです。これは、うまく機能しない場合のための予備的手段ではなく、より高度な TDD の方法であると言えるでしょう。 

Avi Bryant 氏 (Smalltalk の Seaside Web フレームワークの作成者) は次のように述べている(source)

Giles 氏は、コードを最初にどのように理解するかについて触れていません。コードを理解するには、それが自分で記述したものであっても、他の人が記述したものであっても、デバッガで一行ずつ追ってみるのが一番です。Giles 氏は、脚本家でもあるようなので、次のようなたとえが良いでしょう。コードを読むことは、脚本を読んでいるようなものです。テストを作成することによって、絵コンテを作成するのと同じように、最終的な成果物を視覚化することができます。デバッガを使用するのは、スロー再生などの機能を使用しながら映像を見ていくことに似ています。

Blaine Buxton 氏は、デバッガの役割を別の方向から考えている(source)

デバッガは、新しいフレームワークを試し、それがどのように機能するかを確認する際に、試験的にプログラミングをしてみるときに非常に役立ちます。私は、一行ずつ追ってみることが好きなので、実際に Seaside を学習するときにそうしました。これは、どんな文書よりも役立ちました。デバッガ内に展開されるすばらしいコードを見ることは、まさに優れた書籍を読むことと同じだと言えます。また、ひどいコードを扱っているときは、単に見ているだけではわからないことをデバッガが教えてくれます。動物なら、生きていれば、各器官がどのように機能するかを見ることができます。それなのに、なぜ動かないものを解剖して調べようとするのでしょうか。
Ben Matasar 氏は、「デバッガ」という名前が問題である(source)とコメントを寄せた。

私は、デバッガという名前が人々に間違った考えを抱かせていると思います。少なくとも、Smalltalk に関してはそうでしょう。私は、昨年の 12 月に初めて Smalltalk を使いましたが、このときデバッガを使用しようとはしませんでした。デバッガは、困ったときに使う補助機能であると考えていたからです。現在は、コードベースの中で自分の方向性を見出すためによく使用しています。実際、私は、デバッガからそのまま大量のコードを記述します。Web ブラウザの応答を待っている間に作業してしまうこともよくあります。

今では、デバッガはメソッドコンテキストブラウザであると考えています。コールスタックの各ステップに有効な REPL が存在します。これが優れているのは、オブジェクトにメッセージを送信し、オブジェクトを調査し、それらがメッセージにどのように応答するかを確認できる点です。 

上記から考えると、従来のデバッガは、ブレークポイントや任意の場所で実行を中断し、現在の状態を確認するためのツールを指していた。こうした機能は、ソースコードを単に見るだけの場合に比べて、システムの実行時の実際の動作を開発者がより理解できるようにするための、一連のツールの一部であると考えることができる。この一連のツールには、カバレッジツール (たとえば、rcov(サイト・英語))、プロファイラトレーサ、またはロガーなどが含まれる。

最初のブログ記事には、Ruby のデバッガサポートが十分ではないという主張も含まれていた。しかし、何を指してそう主張しているのか明らかではない。Ruby インタプリタにはデバッガサポートがある (Ruby で作成された遅いものと、ruby-debug(サイト・英語)などのより高速なもの)。これは、JRuby についても言えることであり、現在では、高速なソリューション (jruby-debug)(source) が機能するようになっている。Rubinius などの他のRuby 実装には、オーバーヘッドの少ないデバッグ機能がある(source)。また、下層にある VM のデバッグサポートを使用することもある。

当然ながら、デバッガの実装は一面でしかない。デバッガのユーザーインターフェイスも使用可能でなければならない。しかし、これも Ruby において使用することができる。主な最新の Ruby IDE は、デバッグをサポートしている。RDT (現在は Aptana の一部)(サイト・英語) では、長年にわたってデバッグがサポートされている。最近の Netbeans(source) のデバッグサポートは、RDTと同じコードベースを基にしている(source)。Eclipse DLTK Ruby(サイト・英語) にも、他の非 Java ベース IDE (Steel IDE 内の Sapphire Steel の Ruby(サイト・英語)、Komodo(サイト・英語)など) と同じようにデバッグサポートがある。  

Ruby のデバッグに関して、どのような経験をお持ちだろうか。

原文はこちらです:http://www.infoq.com/news/2007/10/are-ruby-debuggers-harmful

この記事に星をつける

おすすめ度
スタイル

BT