「エクストリームプログラミング」を含む日記 RSS

はてなキーワード: エクストリームプログラミングとは

2007-01-19

RE:複数経路プログラミング

http://anond.hatelabo.jp/20070119141655

デバッグ地獄を見た話とか、エクストリームプログラミングの話とか、みんなバグを取るための方法論を語るけれど、バグを内包したまんま動きつづけるものを想定する発想、あんまりないんだろうか。


素人の私が言うのもなんだが、面白い考えだと思う。

大きなアプリケーションの中で、もっとも大切な部分はコンペ型式で作って、一番まともに動いたものを「一軍」、それ以外を「控え」にする。

これらとは別に、「正しい結果を出したかどうか?」を判定するプログラムを別に作って、「正しく動いていない」と判断された場合、同じデータを控えに回して、その結果を出力するようにする。

動作判定は素朴なもの、たとえば結果が出てくるまでの時間とか、得られたデータの桁数とか、そんなもので判定して、ちょっとでもおかしかったら次々に「控え」を前に出して、とにかくまともそうな結果が出るまで選手を入れ替えていく。

ひとつのデータの処理と出力が終了したら、また一軍が元の位置に戻って、次のデータの処理にかかる。


この辺のやり方はいろいろあると思う。

例えば、RAIDのようなイメージ

そこそこの品質の同機能・別設計プロセス流行マルチコアで、並列に走らせる。もちろん、高度なプログラミングが要求されるモジュールだけを並列に走らせても良い。

当然、ひとつのプロセスバグったり、フリーズしたりしても、そのプロセスだけ終了させれば良い。また、例えば、各プロセスの演算結果の「多数決」で、正しい演算結果を決め、信頼性を上げることも可能だ。子プロセスとして「部品化」させておけば、親プロセスには影響はないし。

部品は壊れるのが当たり前。

プログラムバグを内包しているのが当たり前。

では、冗長性を上げるには?

すでにあってもいい考えだ。(…すでにありそうだなあ)

複数経路プログラミング

こんな前提条件が成立しうるなら、バグの少ない高品質なプログラム労働力をつぎ込むのではなくて、同じ動作をするプログラムを複数重ねて、動作判定をするプログラムを追加するという戦略を取ることはできないだろうか?

具体的には以下のとおり。

大きなアプリケーションの中で、もっとも大切な部分はコンペ型式で作って、一番まともに動いたものを「一軍」、それ以外を「控え」にする。

これらとは別に、「正しい結果を出したかどうか?」を判定するプログラムを別に作って、「正しく動いていない」と判断された場合、同じデータを控えに回して、その結果を出力するようにする。

動作判定は素朴なもの、たとえば結果が出てくるまでの時間とか、得られたデータの桁数とか、そんなもので判定して、ちょっとでもおかしかったら次々に「控え」を前に出して、とにかくまともそうな結果が出るまで選手を入れ替えていく。

ひとつのデータの処理と出力が終了したら、また一軍が元の位置に戻って、次のデータの処理にかかる。

デバッグ地獄を見た話とか、エクストリームプログラミングの話とか、みんなバグを取るための方法論を語るけれど、バグを内包したまんま動きつづけるものを想定する発想、あんまりないんだろうか。

人間の頭なんかは、どちらかというとこんな構造をしているように思うんだけれど。

 
ログイン ユーザー登録
ようこそ ゲスト さん