« プログラマーのお仕事 | トップページ | できるなら二つの方法で動作を確認しよう »

2005年6月11日 (土)

生きている内に終わらない動作確認

大抵プログラマーは、作成したプログラムが
正しく動作しているか正確に確認してない

例えば、「C = A + B」を確認するときは、
幾つか思いつく数値を入れて帰ってくる値を確認する。
「A=1/B=1」とか入れて「C=2」と返ってきたら
「ちゃんと動いてるやん。」と思う。

でも、「A=2147483647/B=1」のとき、「C=-1」に
なるのは、確認しない…。多分しない…。

もし確実に動作しているかを確認するのなら
2種類の方法を作成し結果を比較する形にするしかないが…
こいつが結構難しい。

例えば、「C = A + B」の動作を確認するには…
(CPUの動作確認のようだ…)

#include <stdio.h>
#include <time.h>
#define        INT_MAX        0x7FFFFFFF
void main( void )
{
    char tmpbuf[128];
    int A, B, C;
    double DA, DB, DC;

    _strtime( tmpbuf );
    printf( "開始:\t\t\t\t%s\n", tmpbuf );
    for( A = 0 ; A < INT_MAX ; A++ )
    {
        for( B = 0 ; B < INT_MAX ; B++ )
        {
            C = A + B;
            DA = A;
            DB = B;
            DC = DA + DB;
            if( DC != ( double )C )
            {
                printf( "ちょっと違うよ!%f - %f\n", DC, ( double )C );
            }
        }
        _strtime( tmpbuf );
        printf( "経過(%d):\t\t\t\t%s\n", A, tmpbuf );
    }
    _strtime( tmpbuf );
    printf( "終了:\t\t\t\t%s\n", tmpbuf );
}

ちなみに「for( b = 0 ; b < INT_MAX ; b++ )」ループの
ワンカウントにつき3分ほど掛かるので…
全てが終わるのに
6442450941分
107374182.3時間
4473924.2日
12257.3年?!

おお、生きているうちに終わらん…。
いくら長生きするつもりでも…
一万歳じゃあ既にミイラですよ…。<て、生きていないし。

いやその前にPCが壊れる!
絶対壊れる!

要するにものによっては、検証が不可能なのだ…。

まあ、人海ならぬPC海(?)で4473924.2台用意して
分散実行すれば一日で結果を出せるのだろうが…
安いPCでも一兆円ぐらい出せば揃うのか?
広さだって、東京都23区ぐらい必要…?
想像できん…。

つまり

プログラマーが作成した処理、つまりプログラムは、
正しく動くか確認または、検証が
出来ないこともある…。

(これを「プログラム原則の2」と…しよう…)

アレ?これでよかったんだっけ…?

|

« プログラマーのお仕事 | トップページ | できるなら二つの方法で動作を確認しよう »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 生きている内に終わらない動作確認:

« プログラマーのお仕事 | トップページ | できるなら二つの方法で動作を確認しよう »