« 互いにパラサイトしあえるのなら(パラサイト・プログラマ) | トップページ | 「史上最悪のソフトウェアバグ」 »

2007年10月23日 (火)

ソフトウエアを機能ごとに縦に分けて開発すること

わたしには、この工程によって作業を分担するという方法が諸悪の根源であるように思えてならない。小さい会社が何十人もエンジニアを集められないので元請けになれないという事情があるというのは百歩譲ってあるとしよう。大規模な開発をするため何社かで共同作業が必要だったとしよう。その場合の分担を工程ごとに輪切りにするのではなく、機能ごとに縦に切る事を提案したい。

つまり、ある機能について、一社ないしは一人が仕様の決定から設計、実装、内部テストまで担当するのである。キモは設計者と実装者は同一人物とするのである。これを分離しない。

ユメのチカラ: 開発工程を別々に担当してはいけない

SI業界で行なわれている、開発の分担が、基本設計・外部設計・内部設計・コーディング...という風に、工程別に分かれているのが、非常に非効率だというのは、同感です。

こうした開発分担というのは、”紙の上でプログラミングする”というのが、暗黙の前提となっているように思うのですよね。内部設計まで紙の上でやってしまうと、後は、紙の上の日本語を、コードに”翻訳”するだけ、という感があります。これは、コンピュータが非常に高価であった時代の、バッチ・集中型のプログラミング・モデルの呪いであるかのように思えます。現代のように、安価にコンピュータが使え、また優れた開発環境をコンピュータ上で使える時代にあって、こうしたものに背を向け、延々と紙の上でプログラミングを行なうというのは、非効率・前時代的である、と思います。

ソフトウエアを工程別ではなく機能別に分割し、各々が機能別に全工程を担当すれば、紙の上でのプログラミング作業を、コンピュータ上でのソースコードに対するプログラミングに、その多くを移すことができるでしょうから、効率化が期待できると考えます。XPなどのアジャイル開発手法は、この”紙の呪い”からの脱却を目指すものでもあるのでしょう。

・・・

その上で、こうした開発手法を実現する上でのハードルをいくつか挙げてみたいと思います。ソフトウエアを機能別に分割し、これを機能ごとに複数の業者に発注することを考えます。

コードの共同所有

業者間で、コードを共同所有する必要があると思います。これは、技術的にはもちろん可能なことですし、OSS開発においては、実際に行なわれてもいるわけですが。

ソースコードのリポジトリを所有し、提供するのは、誰になりますかね。顧客か、あるいは、業者のなかの誰かか?

最終的に仕様を決めるのは顧客

大量の”紙”を用いずに、顧客に仕様を決定してもらうには、どのようにすれば良いか?を考える必要があります。XP開発手法では、オンサイト顧客、各イテレーションに対する顧客自身による受け入れテスト、によるようですけども、一般的な顧客にとって、これはなかなか受け入れがたいのではないかとも思います。

また、顧客は機能別に異なる業者に指示を出さなければならないのか? という問題もあります。顧客としては、指示する相手はひとつに絞りたいところでしょう。

責任は誰が持つのか

ソフトウエアを最終的に期日までに完成させる責任は、誰にあるのか。顧客か、あるいは、業者のなかの誰かか?

また、ソフトウエアに不具合があると考えられる場合に、対処するのは誰か? どの機能に不具合があるかを確定し、その機能を担当した業者に対処を依頼するのは誰か? 2つ以上の機能にまたがる不具合の場合は?

・・・

色々と超えなければならないハードルは出てくるのですが。逆にいえば、SI業界においても、まだやるべきこと・やれることは沢山あるわけでして。業界として努力が足りないといわれれば、その通りのように思います。

|

« 互いにパラサイトしあえるのなら(パラサイト・プログラマ) | トップページ | 「史上最悪のソフトウェアバグ」 »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/80472/8572118

この記事へのトラックバック一覧です: ソフトウエアを機能ごとに縦に分けて開発すること:

« 互いにパラサイトしあえるのなら(パラサイト・プログラマ) | トップページ | 「史上最悪のソフトウェアバグ」 »