Extreme Programming Yahoo Groupの最近のディスカッションにおいて、ソフトウェアを再利用可能にすることと、必要になるまでコードを書かないというXPのプラクティスの間で明らかな対立が起こった。Ron Jeffries氏その他の人たちは、コード再利用の費用と効果、そして、アジャイル環境でコードの再利用を行う方法と時期についての考えを共有した。
Brandon Olivares氏がこの議論を始めた。Olivares氏はあるコードを書くのにちょうど30時間を費やし、再利用できる可能性があると考えた。そして、他のプロジェクトでそのコードを使えるかもしれないので、コードを一般化すべきかどうかという葛藤を感じた。
私が理解する限り、XPでは、必要となる地点に実際に到着するまで、何かが必要になるであろうと仮定しないように勧めています。また、私の理解するところでは、このようなXPのやり方では、再利用のために一般化する抽象的なコードを含んでいても、重複が起こった場合にはそのコードをリファクタリングできます。
ソフトウェアの再利用は、素晴らしい時間節約の手段として、長い間、大げさに宣伝されてきた。たぶん、別のプロジェクトの開発者は、コードを作り直さなければならない代わりに、そのコードを再利用することで利益を受けることができた。Brandon氏は、グループメンバに他のプロジェクトがコードを使うことができるように、コードを抽象化して一般化する時期をどのように決めたのか尋ねた。
Ron Jeffries氏(リンク)が最初に返信し、チーム間でコードを再利用することは最初に考えたよりも難しく、費用がかかることがある理由をいくつか説明した。
私は、自分のためではないコードをパッケージにするために仕事をしなければなりません。コードに関するドキュメントを作成しなければなりません。ただ自動的に対処した部分を取り除いて、もっと安定したものにしなければなりません。コードをサポートし、コードに関する質問に答えなければなりません。コードの使い方を人々に教え込まなければなりません。
これらのことをすれば、費用がかかります。しかし、これらのことをしなければ、私が作ったコードは他の人たちには難しく、それほど手助けにはなりません。
このことすべてによって、Ron氏は、次のようにこのトピックに取り組んだ:
必要な抽象化を構築します。わずかに異なる内容でこの抽象化したものが再度必要な場合は、この抽象化を改善するでしょう。しかし、プロジェクトの目的が他のプロジェクトのために何かを構築することでない限り、他のプロジェクトのために構築することで、私のいかなる時間とお金も無駄にしないようにします。
別の投稿者は、共通のビルドシステムとひとつにまとめられたテストを共有するプロジェクトでは、再利用が容易にできると述べた。このように、あるコードを再利用したいチームは、必要に応じてそれを一般化できる。そして、ビルドとテストのシステムは、そのコードを利用する他のプロジェクトでは何も壊していないと確認する役に立つだろう。
George Dinwiddie氏(リンク)、Ralph E. Johnson氏(リンク)などは、第二の(または、さらに後の)利用のために一般化することを勧めた。Adam Sroka氏(リンク)はこれを「創発的な再利用」と呼び、これは「再利用のための設計」というアプローチよりも効率的に思われることに言及した。投稿者のTim氏は、ビジネス関連の人たち対し、コードの再利用を次のように説明する。「最初、再利用するコードをコーディングするためにお金を払わなければなりません。二番目に、再利用するコードを再利用可能にするためにお金を払わなければなりません。三番目に、再利用するコードは無料になります。」
George氏は、さらに難しい問題は、他のチームに再利用できる可能性のあるコードをどのように気づかせるかということかもしれないと指摘した。役に立つ発見をするために必要なコミュニケーションの費用は、かなり大きい可能性がある。Jeff Langr氏(リンク)は、プロジェクト間で開発者同士がペアプログラミングをすることは、この発見に関する問題に取り組む効果的な方法ではないかと提案した。
Scott Ambler氏(リンク)がこの話し合いに参加して、オープンソースはかなり成功した再利用の形だと指摘した。Ambler氏は、さらにコードライブラリ、開発キッド、そして、マッシュアップでさえソフトウェアの再利用がうまくいっている例だと述べた。
Adam氏がこの意見に続けて述べた:
自分のチームにおいて、自分のチームが以前利用したものをまた利用するときと、他の人が別の機会に利用したものを利用するときを区別することは重要です。 後者は、通常、チーム外部の人であってもそのことに気づくようにさらなる考慮が要求されます。このように考慮することは費用がかかりますが、その費用によってあるビジネスの価値がもたらされます。
あなたは、コードを再利用する時期をどのように決めるだろうか?コメントを残して、あなたの意見と経験を共有しよう。