無差別に技術をついばむ鳥

情報処理技術全般を気まぐれにつつくゆるいブログです

バイナリをつつく7−テストと時間は効率的に

インドリィちゃん「本気を出すわよ。」
インドリ「何?何?何?何?何?何?何?何?何?何?何?何?」(ドキドキ)
インドリィちゃん「フルテスト実施」
インドリ「ピィ〜」
/// 
/// 16ビットのレジスタを全てテストする。
///
[TestMethod( )]
public void RegisterTo16BitTest( ) {
    //テスト用変数を準備
    ushort val;
    ControlProcessingUnit target = new ControlProcessingUnit( );
    Random dom = new Random( ( int ) DateTime.Now.Ticks );
    Type type = target.GetType();
    //リフレクション用変数を準備
    string[ ] names = new string[ ] { "AX", "BX", "CX", "DX", 
	"SI", "DI", "BP", "SP", "IP"};
    BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | 
            BindingFlags.SetProperty | BindingFlags.GetProperty | 
            BindingFlags.DeclaredOnly | BindingFlags.Instance;
    foreach ( string name in names ) {
        //テストするレジスタ用プロパティを取得
        PropertyInfo reg32 = type.GetProperty( "E" + name, flags);
        Assert.IsNotNull( reg32, "E" + name + "レジスタが足りないぃ〜。");
        PropertyInfo reg16 = type.GetProperty(name, flags);
        //値の取得&設定テスト
        Assert.IsNotNull( reg16, name + "レジスタが足りないぃ〜。" );
        for ( int i = 0; i < 100; i++ ) {
            //共有フィールドを汚しておく
            reg32.SetValue(target, 
                (uint)dom.Next(int.MinValue, int.MaxValue), null);
            //16ビットレジスタのテスト
            val = ( ushort ) dom.Next( ushort.MinValue, ushort.MaxValue );
            reg16.SetValue( target, val, null );
            Assert.AreEqual( val, reg16.GetValue(target, null),
               name + "に「" + val.ToString( ) + 
               "」を入れたら引っかかった。by ドリィ" );
        }
        //上下限チェック
        val = ushort.MinValue;
        reg16.SetValue( target, val, null );
        Assert.AreEqual( val, reg16.GetValue( target, null ), 
		name + "の上限チェック失敗。by ドリィ" );
        val = ushort.MaxValue;
        reg16.SetValue( target, val, null );
        Assert.AreEqual( val, reg16.GetValue( target, null ), 
		name + "の下限チェック失敗。by ドリィ" );
    }
}

インドリ「うわぁー何回もレジスタが足りないとか、間違っているとかいわれた。」
インドリィちゃん「わかればいいのよ。」
インドリ「これ何!何でひとつのテストで複数のチェックが出来るの?」
インドリィちゃん「リフレクション。内容を説明する。」
インドリ「インドリィちゃん嬉しそう。エラーが出たの」(途中でさえぎられる)
インドリィちゃん「似たようなプロパティがいっぱいあればトリは忘れる。」
インドリ「うっ言い返せない。」
インドリィちゃん「面倒だからコピーの誘惑も出る。だけど、そういう時は過ちを犯しやすい。」
インドリ「コピーしたのバレてる!」
インドリィちゃん「多くのバグは先入観が原因。先入観がないようにテストはプログラムに任せろ。」
インドリ「おみそれしました。」
インドリィちゃん嬉しそうに消える。
みんなテストはなるべくプログラムでやるようにしよう。
そうすれば思いがけない間違いを発見してくれるよ。
それにテストプログラムは長くなりがちだから、リフレクションなどを使って短くする工夫も大事だよ。
テストプログラムが長くなりすぎると生産性が逆に落ちるピヨ。
これでテストはバッチリなはず、みんなもCPUオブジェクトを作ってみよう。
次からはさらに本格的なマシンコードを解説するから、実際にプログラムするとよいよ。
じゃぁ近いうちにまた合いましょう。
じゃあ僕と一緒にバイナリに向かって飛ぼうー。
あれっ?誰もついてこない〜。 バサ バサ バサ バサ バサ バサ バサ バサ バサ バサ バサ バサ バサ バサ
別窓 | バイナリ | コメント:0 | トラックバック:0 | ∧top | under∨
<<バイナリをつつく8−狙いを定める | 無差別に技術をついばむ鳥 | ネタつつきー10年は泥のように働け>>

この記事のコメント

∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

∧top | under∨
| 無差別に技術をついばむ鳥 |