矢崎です。
[XP-jp:01265]の私の投稿の内容について、再度じっくり
考えてみたのですが、ちょっと考えの正しくないことがわ
かったので、訂正します。
firo wrote:
> > 私もこの点が気になってJPLoPの友野さんにお聞きしたのですが、XPでいう
> > テストはMeyerの契約主導設計の実現の一種であるというお話でした。「表
> > 明」というのでしょうか。「表明」は「こうなっているべきだ」というのを事
> > 前条件、事後条件、不変条件で通常そのプログラムの内部で記述するものです
> > (というのは平鍋さんのほうが詳しいと思います)が、それを外側にもってきた
> > のが、XPのテストということでしょうか。
> >
>
> 私は、表明とXPのテストは、レベルが1段階異なると思います。
>
> まず表明、テストの一般論として、、
>
> 表明は、事前条件が満たされる時に、そのメソッドを実行すると
> 必ず事後条件が満たされていなければならない、とか、オブジェクト
> は常にその不変条件を満たしていなければならない、とかいう
> もので、ざっくりといえば、仕様だと思います。しかし、表明を定義
> しただけでは、クラスがそのとおりインプリメントされていることが
> 保障されているわけではありません。プログラマは、表明を *実現*
> しなければなりません。
>
表明は、1つ1つの条件文(真偽値を持つ文)である。つまりここでは、
個々の事前条件、事後条件、クラス不変表明です。ですから、「表明は、
事前条件が満たされる時に、そのメソッドを実行すると必ず事後条件が
満たされていなければならない(というものである)」、というのは、表明の
説明としては、明らかに間違い。
上の文の趣旨の文における、正しい主語は、契約によるプログラム
とか、表明つきプログラムとかになるでしょう。例えば、
「プログラム検証論」林晋著、共立出版によれば、表明つきプログラム
{A}P{B}の意味を説明するとして、
「表明つきプログラム{A}P{B}の意味:プログラムPを条件Aが成り立っ
ている状態で実行したとき、停止するならば、そのとき条件Bが必ず
成り立つ。」
と説明されています。そうした意味にのっとって、{A}が表明であり、{B}も
また別の表明であり、{A}と{B}のセットが仕様になる、そういうことだと思
います。
さて、表明そのものの認識が間違っていたので、[XP-jp:01265]を読まれ
た方には非常にご迷惑をおかけしました。このテーマに関しましては、
もう少し考えを整理して、投稿しなおしたいと思います。
--
矢崎 博英 <firo@....jp>