2014年04月

複雑な構造を生むのはTDDのせいなのか

いろいろ腑に落ちない。

テストファーストのユニットテストは、中間的オブジェクトや間接的で過剰に複雑な構造を生みがちだ。「遅い」ものをすべて避けようとするのがその理由で、データベースやファイルIOなどを避ける。ブラウザを使ってシステム全体をテストするのも避けようとする。結果として、本当に恐ろしく巨大なアーキテクチャが生まれてしまう。

TDDは死んだ。テスティングよ栄えよ。 by DHH

テストファーストでなければ、ユニットテストは複雑な構造を生まないのだろうか。先に書こうが後で書こうが、遅いものをすべて避けようとすれば、ユニットテストは複雑な構造を生むだろう。TDDは無関係ではないか。

また、DHHは「すべての依存関係をモックにし、何千というテストが数秒で終わるようなユニットテスト」は「Railsアプリケーションのテスティングにおいてはいいやり方ではない」というが、その根拠がよく分からない。


ぼく自身は、複雑な構造を避けたいなら、そういう構造を要請するユニットテストを排するしかないと思う。そのかわり、システムテストを重視すればよい。その点においては、DHHの意見に賛同できる。

だが、DHHは「システムテストがすべてだ!」といった極論には与しないという。どうしたらよいのか。


DHHの挙げている参考文献(Why Most Unit Testing is Waste by James Coplien)では、どんなときにユニットテストを書くべきで、どんなときにシステムテストを書くべきか議論されている。

  • Keep regression tests around for up to a year — but most of those will be system-level tests rather than unit tests.
  • Keep unit tests that test key algorithms for which there is a broad, formal, independent oracle of correctness, and for which there is ascribable business value.
  • Except for the preceding case, if X has business value and you can text X with either a system test or a unit test, use a system test — context is everything.

"In most businesses, the only tests that have business value are those that are derived from business requirements. Most unit tests are derived from programmers' fantasies about how the function should work; that has no provable value." だって。

HTTP PUT/DELETEをブラウザがサポートしたら面白そう

どうしてもブラウザからHTTP PUT/DELETEリクエストを(JavaScriptを使わずに)発行したい、というユースケースがあるとして、それをサポートすべきは、HTMLではなくブラウザなのではないか。

DELETEメソッドのほうから考えると、要は、URIを指定してDELETEリクエストを送れればよいだけの話だ。選択したアンカーをDELETEできるコンテキストメニューとか、表示中のURIをDELETEできるボタンとか、そうしたインターフェースがあれば済む。

PUTメソッドにしても、保存先URIを指定してファイルをアップロードできるようにするとか、表示中のリソースを直接編集して更新できるようにするとか、そんなインターフェースがあればよい。

そういうものがないからPOSTで代替したりJavaScriptで頑張ったりしているわけだけれど、ぼく自身は現状のままで充分だと思う反面、前記のようなインターフェースが実際に普及したら面白そうだとも思う。

TOEICの目標点数をクリアした/大学に合格した

3月に受けたTOEICの結果が出ました。780点。目標の730点を超えていました。

今回、6年ぶりにTOEICを受けたのは、J検と同じく、大学の単位を狙ってのことでした。470点で2単位、730点で4単位もらえます。

前回は実力が知りたかったので事前勉強しませんでした。そのときは705点。今回は参考書を読んだり模試を解いたりしたので、そのぶん上乗せがあったということですね。狙い通りでした。


肝心の大学ですが、書類の準備に手間取りながらも、先日どうにか合格通知が届きました。2年次に編入できたので、3年間で卒業したいと思っています。おもに情報と経営を、少しだけ医療を学びます。

プロフィール
知識欲と謎解き欲が旺盛なWebエンジニア。AWS認定ソリューションアーキテクト - アソシエイト。JAPAN MENSA会員
記事検索