ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

Linuxの生みの親トーバルズさんの発言、リファクタリングの方向に取られると、ちょっとまずい

2005-04-04 15:22:06 | Linux
 「ものもの」さんのブログをみていたら、2つ面白い記事がありました。

開発中のカーネルを毎日テストすべきというトーバルスの発言と、
テストの自動化、その最新事情 (@IT)の、「テストの自動化」を「アジャイル」の中で考えようというアプローチ。

 この2つの記事とも、最近の「リファクタリング」の流れの中の話でおこる、「頻繁にテストして、バグがあったり、不具合があったら、どんどん修正すればいいじゃん!」っていう、よく、若手の人が言う考え方と同じと、とらえられますよね。
(って、まさか、トーバルスさん自身も、そう思ってるのかなあ??)




 で、この考え方がまずいのは、汎用やってた人なんかが、よく言うとおもうけど、

1.バグを修正したことによる、新たなバグを含有する危険性(デグレード)

2.頻繁にテストを行うと、テストでバグや問題点をみつけようとしてしまう
 →机上デバッグが減るため、バグが入りやすくなったり、仕様決めが甘くなる

3.そのうち、いつの間にか、インターフェース(*)まで直してしまい
 結果として、前のインターフェースをもとにして作ったソフトと、
 あとのインターフェースを基につくったソフトの両方をリンクしてしまって、
 動かない上に、仕様が混乱する。
(Javaのinterfaceの意味ではなく、関数、メソッドの引数などのこと。ポインタ渡し、動的リンクにしてると問題あり)

 まあ、この辺の話で、Linuxのディストリの話(kondaraとそれ以外)とかあるんだけど、ここでは省略。




 そんなことにくわえ、これは、若手の人にいっても、わかってもらえる話でないから言わないような話として、こんなところじゃないかしら。

4.プログラムは、全体を、ある程度の量、こなさないと分からない
   (パターンなどが見えてこない)。
   ある程度こなして、見えてきたら直すのと、
   その場で、少しずつなおすのでは、全然レベルが違う。

  なぜなら、量をこなして、ある程度パターンが見えたとき、
   確実に、次元が上がっているわけで、
   そこから前のプログラムをみると、
      今のプログラムは、(恥ずかしいくらい)違って見える。

5.同じプログラムをいつまでも修正してしまって、もっと大事なプログラムが、手付かずになる可能性がある。
 プログラムを修正していると、仕事している気になるから、そういう、やりやすいところからやって、肝心な、しかし大変な新しいプログラムの開発は手付かずなんていうことにもなりかねない。




 じゃあ、どうするべきかというと、

 ・パフォーマンス低下を引き起こすようなコードはどういうものか
  という情報の共有の周知徹底

 ってことは、いわれそうだけど、

 そもそも、周知徹底なんて、できるもんじゃないから、
「テストの自動化」を「アジャイル」の中で考えようというアプローチがでてくるわけだとおもう。

 つまり、トーバルスさんが指摘するように、全体が出来上がってからパフォーマンステストをしたんではおそい。

 そこで、自分の今回開発した一部分が出来たら、その修正前と後で、パフォーマンスをチェックする(アジャイルに)。
 しかし、そのパフォーマンスツールなんてないから、その部分はつくんないといけないけど、そんなもんは、お手軽につくっちゃいばいい、ごたいそうなもん(伽藍(がらん:Cathedral)と表現してる)でなれば、ノリノリでつくれるよね、ってはなし。

(ちなみに、この記事は、もっと先の話をしていて、そういうパフォーマンステストをやっているところを、ツールやさんが見れば、もっと有意義なテストツールを作れるよねっていう話で、この辺は最近、新人がドキュメント、テストをやっているところを見て、VBAなんかつかって、テストツールをつくるノリみたいな話してる)

 そうやって考えると、トーバルスさんの考え方も、「テストの自動化、その最新事情」からみれば、古いわけで(全体を毎日テストする)、部分ごとに、必要な目的をテストする、そのためのツールをノリノリで作らなきゃいけないってことなんでしょうね。




 でも、この考え方でも、上記(5)の、「大事なプログラムが、手付かずになる可能性がある」っていう問題は解決しない。
 つまり、アジャイルで、すべてをテストすることが、本当に大切なのか?という問題がある。

 そうすると、プロジェクトマネージャーさんとかは、

   プロジェクトの優先順位に基づき、
     適正な手順・管理下の元、
     行わなければならない。

 とかいうんだけど、そもそも、優先順位って、なんで付くの?
 っていうことから考えないといけない。。。





 たぶん、この優先順位っていうのは、全体最適から来るとすると、Linuxの場合は、

 カーネルのシステムコールのインターフェース
 glibcのインターフェース
    :
   (中略)
    :
 カーネルのパフォーマンス

とかなるわけで、特にglibc のバージョンが違うと。。。

とかって、書くと、長くなるんだけど、こんな話、おもしろいかなあ。。。?
たぶん、読んでる人、長くて寝てるよね(;_;)




 ということで、クリック数が多かったら、このあとの話

Linuxのインターフェースとしては、なにが重要か?
  を、「Linuxのディストリの話(kondaraとそれ以外)」

とあわせてとか、
 Linuxのプロジェクトの問題点としての、
    横ならびチェックの軽視からくるハッキングの問題

とか、
Linuxの翻訳の問題(poファイルを訳せばいいだけじゃない)

とか書きます。
クリック数が、すくなかったら、(みんな興味ないということで)別の話題に変えますね。ちなみに、ウィリアムのいたずらは、とっても少ないと思ってます。




 あ、そうそう、「テストの自動化」の記事で、「優れたツール開発担当者は、ソリューションを短時間で準備できるよう、Java、Perl、あるいはPythonといった高級言語のプログラム手法に関する知識があるはずだ」ってあるけど、文中で出てきた、Excel VBAから、テストツールをアジャイルに作ってるなんていう話は・・・もっと興味ないよね。

 今回の記事は、思ったより、しょーもない出来であった。
 けど、せっかく書いたので、公開しておきます。
 (意外と、ウケたりして ^^;)

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ブログを利用した開発支援(構成管理などで)

2005-04-04 12:08:52 | 開発ネタ
 前のブログで、このような、構成管理がらみの話は、ブログと関係させると面白い。「コピーされるほど儲かるシステム」にも関係あるので、今度別にかきます。と書いた話。

 たしか、日経システム構築にもブログを開発に利用した話が載ってた気がしたけどけど、それ以上に、構成管理とバグ管理に、自動化する方法として利用する話。

ブログをこんな形で作ります。

1.開発上のまとまった単位で、1つのブログを立ち上げます
 →たとえば、1つのパッケージとかjarとか、とにかく区切りのいいまとまりだったら、なんでもいい。

2.カテゴリは、外部設計、内部設計、TIPS、ひとりごと、なんでもいいんだけど、1つ、
   リリース
  というカテゴリだけは、作ってください。

3.リリースとしたカテゴリ「だけは」書き方の形式を決めてください。
  このとき、どんな風に決めてもいいんだけど、かならず、
  リリースしたものの置き場所のリンクを入れるようにしてください。

で、こうしておくと、

 Windowsならタスク、Linux,Unixなら、cron-tabかなんかに、
 毎日、一定時間になったら、

   「自分が使っているもの(jar,ソースなど)が、更新されているか
    (=ブログに「リリース」のカテゴリの記事が追加されているか)確認し、

    もし、更新されていれば、

    その記事から、「リリースしたものの置き場所のリンク」をたどり

    それをダウンロードしてきて

    更新する」

 プログラムが起動されるように、プログラムを記述し、設定します。




って、これだけなら、あたりまえなんだけど、

4.さらに、リリースのカテゴリにおいて、依存関係にあるソフトのバージョンを記載しておく
  (たとえば、Linuxのソフトなら、カーネルとglibcのバージョン、
        Javaなら、1.4.0とか、javaのバージョン)

そうすると、そのプログラムは、依存関係を見ながら、更新するかどうか判断できる
 (たとえば、自分の開発環境が、Java 1.3で、今回のバグフィックス版が、1.4.0用なら、バージョンアップしないなどという判断ができる)




で、さらに、

5.バグを見つけたら、バグ表を、(どこのblogでもいいから)適当に書いて、リリースしたものに、トラックバックしておく。
 複数のバージョンで発生する場合は、複数トラックバックする。
 横並びチェックで、同じようなバグが、他のモジュールで見つかった場合も、トラックバックしたほうがいいかも。

 そして、そのバグをFIXしたら、バグ表のコメントにFIXしたことを書く
 (ほうがいいのか、バグフィックスしたバージョンのリリース記事に、トラックバックしたほうがいいのかわかんないけど)

しておくと、バグと、リリースの関係がつかめる。

まあ、これをバグ管理表にするには、そのような形で表示するソフトを作んないといけないけど。




 さらに、要求仕様と、外部設計、内部設計、テストなんかもここに書いて、トラックバックしておくと、カテゴリごとにまとめれば、ドキュメントができるし、トラックバックごとにまとめると、1機能ごとに連続したドキュメントになることはなるけど、そこまでやると、やりすぎかも。




 ちなみに、「コピーされるほど儲かるシステム」では、この自動的にブログを読んでくるという部分を、つくるのかあ!というところまで、盛り上げて、(ここの(あ)のところ)やめた。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする