トップ «前の日記(2007-09-22) 最新 次の日記(2007-09-24)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2007-09-23

_ Rjb-1.0.9

Rjb-1.0.9

戻り値の型がjava.lang.Objectかつ実際の型がjava.lang.StringかつRjb::primitive_conversionが真の場合に、RubyのString型のオブジェクトに変換するようにしました。

その他、Javaのメソッド呼び出し時に、型がRubyのBignumでかつint64の範囲の場合、ゴミをJavaに与えていたのをjava.lang.Longに変換することと、変換できない場合は例外をスローする修正の追加(テスト中に気付いた)。

x64 Linuxで、Doubleのコンストラクタ呼び出しに限りなく0に近い値が与えられていた良くわからない現象の対応。(x64のdoubleも64ビット幅だと思うのだが128ビット幅なんだろうか?)

_ 個性無用のジャングル

無責任な放言ではあるが、コードに求められるものが、

* オブジェクト指向はテストしづらいから使うな

* ひとつの長い流れにしたほうが見通しがいい

* エンジニアに個性なんて必要ない

* 本格的なコードは書くな、ステップ数を短くしろ

で、かつ、給料とか諸条件が良かったりして、まだやめないで済ませたい場合にはどういう方法で折り合いを付けることができるだろうか、考えてみる。

すると、ここで求められているコードは、まさに単純な自動生成向きなこことに気付く。

だらだらコードを機械的に吐き出していけば良いように見えるからだ(最後の条件が2番目の条件と矛盾しているようにも思うけど)。

ジェネレーションギャップ用のスタブも不要だし(というか、オブジェクト指向言語の特性を生かさなければ、ジェネレーションギャップパターンは適用するのが難しいから、逆に向いていることになる)、常に最初から生成して行けば良い。真に重要な定義ファイルを確保しておけば、いつでも再生産できるので、それで良いのだ。

実際のところ、納品物と開発するものが同一である必要はないのだから(等しい必要はもちろんあるのだが)、そんなことを試してみるとおもしろいかもなぁ、とか思った。

_ 用語のアフォーダンス

確か、以前角谷さんが用語が持つアフォーダンスというような記事を書かれていたのを読んだ覚えがあるのだけど、アフォーダンスとsite:kakutani.comでは見つからない。

確か内容は(まったくの記憶違いかも)、assertを表明すると訳すか、検証すると訳すかについてだと思うのですが(書いていて自信がないけど、もしかしたらBDDに関することかな? だとすると以下は見当外れで、僕が自分で勝手に考えただけか、あるいは自分で咀嚼しきった何かなのかも)。もし、出典をご存知のかたは、ツッコミで教えていただけないでしょうか?

英辞郎でassertionをひくと、名-1として主張、表明といった定義があって、名-2にはコンピュータ用語としてプログラムの形式検証における成立条件 という書き方をしている。

テストプログラムの、assertEquals(0, foo.getCount()) を実行するということは、fooの動作を検証しているといっても間違いではない。というか、実行しているときは表明しているのではなく、検証している。

では、テストプログラムを書いているときはどうだろうか?

assertEquals(0, foo.getCount());

と記述した時点では、foo#getCountが未実装の場合さえある。したがって、この行を書いている瞬間は、まさにfoo.getCount()が(その直前のプログラムの記述にしたがって動作している限りにおいて)0を返すというあるべき振る舞いを表明しているとしか表現しようがない。

テストプログラムは、すると2つの状態を持つ。記述時点での表明と、実行時点での検証だ。

したがって、assertionを表明と訳すか、検証と訳すかは、どちらを主とみなすか、の差だ。プログラマはまずプログラムを実行する人よりも前にプログラムを書く人である。したがって、assertionは検証ではなく、表明であるべきだ。

というような感じ。

#わかりやすさ(表明っていう日本語は普通の日本人の語彙には入ってないとおれは信じる)と、説明ゼロ(同じ理由から)で意味を通せるので、「検証」と訳して突っ走りながら、ふと振り返って考えて、やはり「表明」であるべきだろうか、とちょっと迷っているので、ご意見もツッコミ歓迎です。

本日のツッコミ(全3件) [ツッコミを入れる]
_ かくたに (2007-09-24 15:31)

BDDのイントロダクションでサピア=ウォーフ仮説に言及してましたが、それのことですかね……。http://giantech.jp/wiki/BDDIntro<br><br>ちなみに最近のRSpecは、あまりBDDという言葉は前面に出さずに「振舞定義用のDSL」と言ってるみたいです。<br><br>私もassertionで表明したことを実行して検証する、という感覚でいます。

_ ardbeg1958 (2007-09-24 17:25)

私は assertion を「表明」と訳しています。<br><br>くどく訳せば「あるべき状態をはっきりと述べたもの」とでもなるのでしょうか。そして、これがプログラム中に書いてあったとすると、その場所に差し掛かったときにその「表明」が成立しているか否かが判定されることになります。<br>よって assertion 文を「実行」するとは<br>「『あるべき状態をはっきりと述べたもの』が成立しているかどうかを確認」する行為です。<br>もう少しあっさり書くならば「表明の真偽を判定する」ということになり、この行為を「検証」と呼ぶことは自然だと思います。<br><br>ということで、assertion 自身の訳は「表明」でよろしいのでは(普段使いの言葉としては生硬ですが、専門用語としては市民権を得ていると思いますので)。

_ arton (2007-09-24 18:41)

かくたにさん、ardbeg1958さん(と書くべきなんですかね?)、どうもありがとうございます。<br>>サピア-ウォーフの仮説<br>ああ、そうか。それでアフォーダンスで検索しても出てこないはずですね。どうも引用されている「仕様である。検証ではない」がかもされたみたいです。<br>>assertion 自身の訳は「表明」でよろしいのでは<br>そうですね。そうします。ありがとうございました。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|

ジェズイットを見習え