Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

てすとくどう~Ognacの場合

電卓祭りには乗り遅れたので、こちらは遅れないように..って遅れているかも。
私もテストドリブン万能主義は行き過ぎだと考えています。(勿論メソッドやプロパティ単位のテストは必要です。)
テスト仕様書を書くためには設計段階でメソッド単位の設計が完成している事が前提になります。これはウォーターフォールの思想のような感じがしてならないのです。
一つのモジュールの開発は、クラス構築を考えて製造に取り掛かりますが、途中で考えの稚拙さに気づき、インターフェースに変えたり、より小さいクラスに展開して継承関係を変えたりすることが多いので、都度テスト仕様を作るのは面倒です。
業務アプリは業務仕様を分析して開発単位を確定していきます。サブシステム化=>サブサブシステム化=>業務面から見た細部クラス。
実装レベルでは細部クラスを実装しやすいようにHas a なり is a なりで実装するので業務からみた単位と異なります。
製造に入る前に仕様が決まるの筈なので、業務面から見た細部クラスのテストケースを洗い出して、それをテスト中心というのなら納得です。

「書いたソースはすべて通るテストする」というのも疑問を感じます。
    Private Sub 被テスト(ByVal 引数 As String)
        Select Case 引数
            Case "1"
                'xxx
            Case "2"
                'xxx
            Case Else
                Debug.Assert(False, "ロジックエラー:引数の設定ロジックがバグっている") '<== ★
        End Select
    End Sub
このメソッドがあるとします。業務的には引数は "1"か"2"しか発生しません。
Case Elseの文(★)は論理的には不要です。
しかしロジックバグが自己検出しやすいようにこの手の文はあちこちに埋め込むのが好いと考えます。
"書いたソースはすべて通る" という意味とは矛盾することになるので疑問に感じるのです。
もちろん
  if 1=1 then
     xxxx
  eles
     yyyy
  end if
の場合はyyyyは決して実行されませんし駄目ですが、上記とは意味合いが違うと考えています。

システムは単体の集まりではないです。完璧な単体を集めてもシステムは完璧にはなりません。
逆に不完全な単体を集めても欠点を熟知して補完する仕組みを加えれば格好は付きます。(本来は駄目なんですが、お手上げよりましでしょう)
クラス単位で業務仕様/例外を満たすか否かのテスト駆動で十分だと考えるのです。(もちろんソースは綺麗に書いてね)

 

投稿日時 : 2007年7月27日 13:55

Feedback

# re: てすとくどう~Ognacの場合 2007/07/27 14:56 まどか

ここだけ反応。

> 「書いたソースはすべて通るテストする」というのも疑問を感じます。
> 業務的には引数は "1"か"2"しか発生しません。
> しかしロジックバグが自己検出しやすいようにこの手の文はあちこちに埋め込むのが好いと考えます。
> "書いたソースはすべて通る" という意味とは矛盾することになるので疑問に感じるのです。

書いても書かなくても「1でも2でもない」テストはすると思うんですが。。。
例の場合は「1でも2でもない」のテストはしないとおっしゃってますか?

# re: てすとくどう~Ognacの場合 2007/07/27 15:11 片桐

えっと……

単体:1と2とそれ以外の3パターンがテスト必須
結合以降:1と2がテストできればいいじゃん♪

と思いましたデスです。

単体はプログラムモジュールのロジックテストだけど
結合以降は仕様充足確認のテストだし……<これが極論というものか

# re: てすとくどう~Ognacの場合 2007/07/27 15:15 まどか

いや、単体でもしないのかと思っちゃいました。(^^;

# re: てすとくどう~Ognacの場合 2007/07/27 15:27 ひろえむ

誤解があるといけないのでもいちど言っておくと別に私はテスト駆動開発信奉者というわけではないですよ(^^;

ただ、テスト駆動開発やテストファーストを否定する理由にはならないんじゃないかなと思ったので書いただけなんですよ(^^;

# re: てすとくどう~Ognacの場合 2007/07/27 22:11 Ognac

片桐さん代弁していただいてありがとうございます。
まさにその意味です。
単体でもしないのはありえないかと...この部分を納品物にするか否かで分かれるのかと...
ホワイトテストにするかブラックテストにするかは開発者側の都合で決まるものかとも思います。一般的な発注者は業務仕様を満たすか否かとパフォーマンスに視点があると感じるのです。製造物の品質は開発者のモラルと性善説に立脚している度合いが大きいのでより一層の精進が必要かと感じてます。

# re: てすとくどう~Ognacの場合 2007/07/28 22:53 名無し

業務におけるテスト駆動は、いかに網羅的なテストができたかではなくて、テストした内容が曖昧さを残さずに残ってそれを第三者が確認できることだと思ってみたり…
テスト内容についてはエンジニアの質みたいなところに左右されるのでそのに厳密性(網羅性)を追求してもあまりいいことにはならないかなあと諦めムード(ぉ

# re: てすとくどう~Ognacの場合 2007/07/29 2:12 Ognac

>してもあまりいいことにはならないかなあと諦めムード
結局、人的能力次第とならざるを得ないのが現実ですね。
完璧なテスト駆動が実現できてもシステムのテストにはならない...その意味でテストドリブンには懐疑的です。
勿論単体の品質維持には意味を持つとは認識してます。

タイトル
名前
Url
コメント