【プログラム】プログラムバグのパターン

引数や戻り値に意図していない値を引き継いでいる

* 以下のサンプルではいまいち分かりにくいかもしれないが、引数が多くなると上記のようなことが起こりえる(ってゆーかー起こった)

サンプル

ISample.cs (共通インターフェイス)

public interface ISample
{
    double Execute(int x, int y);
}

SubClassA.cs (共通インターフェイスを継承したクラス)

public class SubClassA : ISample
{
    public double Execute(int x, int y)
    {
        return x / y;
    }
}

SubClassB.cs (共通インターフェイスを継承したクラス)

public class SubClassB : ISample
{
    public double Execute(int x, int y)
    {
        return x * y;
    }
}

Form1.cs (呼び出し側)

private void button1_Click(object sender, EventArgs e)
{
    this.ShowDivide(new SubClassB(), 10, 2);
    this.ShowMultipe(new SubClassA(), 10, 2);
}

private void ShowDivide(ISample instance, int x, int y)
{
    // ★重要★ 期待してる出力としては、割り算を行うSubClassA()を
    // 渡さなくてはならないがインターフェイスが引数の型なので、
    // 掛け算を行うSubClassA()を渡せてしまい、バグの原因になってしまう
    this.label1.Text = x + " ÷ " + y + " = " + instance.Execute(x, y).ToString();
}

private void ShowMultipe(ISample instance, int x, int y)
{
    this.label2.Text = x + " × " + y + " = " + instance.Execute(x, y).ToString();
}

関連記事

Java のプログラムバグのパターン

http://blogs.yahoo.co.jp/dk521123/33742935.html