オルタナティブ・ブログ > 森崎修司の「どうやってはかるの?」 >

計測できそうでできない多くのこと。エンピリカル(実証的)アプローチで。

下流から攻めるテストファースト、上流から攻めるラウンドトリップエンジニアリング - 選ぶならどっち?

»

両者ともソフトウェア開発中の変更を容易にするための手法だ。両者の概要は以下の通り。両者を同時に使える場合もあるがその割合は低いだろう。

  • テストファースト
    コーディングよりも先にテストコードを開発する。テストコードは、単体テスト、モジュールテストレベルのものが主流(全てのテストをテストコードとして書くのは原理的に可能だがコスト的に現実的ではない場合が多い)。テストコードは、テスト対象に入力を与える部分と出力が期待通りかを確かめる部分から成る。理論上、デグレードの発生がなくなるので改変を安心しつつ実施できる。リファクタリングを気楽に行えるようになる。
    ここ(ITmediaの記事)に紹介記事がある。単体テストのテストファーストのためのフレームワークとしてxUnitが有名。
  • ラウンドトリップエンジニアリング
    要件定義、設計、コーディングをいったりきたりしながら、それぞれで中間成果物を洗練させていく。IDE等のラウンドトリップエンジニアリング開発支援ツールを用い、設計書、コードのいずれかの変更の一部を他方に自動的に反映していくものが一般的(その場合、原理的に全ての設計書、全てのコードが対象となるわけではない)。その場合、UML等の特定の記法に従って設計書を書き、コードを変更すると設計書に記述されている部分が反映される。設計とコーディングを同時に進めることができる。ここに(@ITの記事)に商用ツールの紹介がある。DBの定義作成(DB設計)とSQL(コーディング)をイメージするとわかりやすいかもしれない。

両者ともコーディングとその他の開発作業を同時進行的に進めることにより、理解を深めたり、品質を高めようとする方法だ。

テストファーストにおいて、テストコードの作成はテスト設計や設計と近い部分があり、コーディングの前に設計をしていると解釈することもできる。

ラウンドトリップエンジニアリングという名前を明に使っていなくても、プロトタイピングや未知の製品の評価をする際には、ラウンドトリップエンジニアリングに近いことをしていると言えなくもないだろう。

ご自身の開発では、どちらがなじみやすいだろうか。

Comment(2)

コメント

試される大地

> 要件定義、設計、コーディングをいったりきたりしながら、それぞれの青果物を洗練させていく。

「成果物」ですよね?

試される大地さん

ご指摘のとおりです。ありがとうございます。
「中間成果物」のほうがより適しているように思ったので、「青果物」→「中間成果物」に変更しました。

コメントを投稿する