N2 ToolBox(跡地)

跡地です。引っ越しました。http://d.hatena.ne.jp/nosen

ツールと記法の問題について

2007-01-08 03:13:29 | 開発手法/方法論
koichikさんひがさん
指摘されているように、確かにDSLとしてのJavaの表現力は非常に弱いです。
それは、Java で DSL ぽいことをやるフレームワークを実際に書いた当人である
私は、すごく実感しています。

LiQ Containerを作りながら、何度「mix-inしてぇー」と叫びたくなったことか。
私も、「全て」の設定情報や定義情報をJavaで表現すべきだとは思っていません。
そこでJavaで勝負しようとするのは辛すぎます。
プログラミング言語をDSL的に使うという点では、Rubyとかの方がずっと能力が
高いと思います。

ただ、私がそれでもDIコンテナの設定にJavaコードを使うのが良いと
思うのには以下の2つ理由があります。

1. DIコンテナが扱う設定情報の多くがJavaクラスに関するものである
2. Javaクラスという情報を扱うのに、Eclipse JDTというツールが使える

ある情報を表現する記法の是非を問うときの観点として、記法自体の能力と同じくらい、
その記法を記述するのに使えるツールの善し悪しは重要だと思います。
もし、Javaコードを書くツールがメモ帳とjavacしかなかったら、
Javaで設定書こうなんて言い出してなかったと思います。

たとえば、私は結構 Excel VBA マクロをよく使うのですが、
別にVisual Basicの文法が好きで使っているわけではありません。
いまさら言うまでもないことですが、Visual Basicの文法は完全に腐っています。
にもかかわらずExcel VBAが「それでも使える」と思う理由は、
エディタの存在です。軽快なエディタが、Excelインストールすると
デフォルトで付いてきてAlt-F11を押すだけで起動すること、
イミディエイトペイン経由で現在のExcelオブジェクトの状態を
簡単に見られること、デバッガが軽いことなどが Excel VBA を救っています。

私は、あるツールの善し悪しを決める要素として、そのツールの機能の成熟度
も、もちろん大事なのですが、ツールのセットアップにかかる手間も結構大事
だと思っています。Eclipseプラグインだったら、デフォルトで入っているJDT
のようなツールが十分使えるなら、それが一番いいし、入っていないなら、
ダウンロードしてインストールしなければいけないプラグインよりも、
ちゃんとupdate siteが用意されているプラグインの方が良いと思います。

それは、単純にセットアップがめんどくさいという理由だけで
そう思うわけではなくて、デフォルトで入っているツールは、それだけ
多くの人に使われて、叩かれて、磨かれていると思うからです。
実際、JDTの成熟度は凄いと思います。


DIコンテナの設定がJavaで十分簡潔かつ宣言的に書けるのであれば、
Javaで設定を書いてJDTで編集するほうが、
XMLで設定情報を書いて、裏でJDTを利用する特別なプラグインで編集するよりも
良い、というのが私の立場です。koichikさんとはちょうど真逆の立場ですね。

そんなわけで、「Javaで十分簡潔かつ宣言的に書ける」という仮定を成り立たせる
ことができるかどうかがLiQ Containerの生命線になってくるわけです。
あらゆる設定情報を書ける必要は全然なくて、DIコンテナの設定さえできれば
問題ないのです。

いまのところ、良くある設定のパターンに関しては、
かなりいい線いってんじゃないかと自分では思っていますがどうでしょうか?
拡張性に関して、クリアしなければいけない課題をいくつか抱えてはいますが、
それはalpha2である程度改善したいと考えています。

尚、私がこのような立場をとっているのは、
多分私があんまりEclipseプラグインとかを書けないということも関係があると
思います。もし、自分にものすごい勢いでハイクオリティなプラグインを作る能力が
あったら、もしかしたら全然違うこと言ってたかもしれないですね。


工程分割のメリット

2005-12-07 02:43:46 | 開発手法/方法論
工程を分割せずにすむなら分割しない方がよい

このエントリの草稿をしたためている時に、この原則が当てはまらない、
つまり、工程を分割する積極的理由が存在する
ケースを発見してしまいました。

それは、
前工程の成果物をチェックして、
事前に何を作ろうとしているか確認すること
によって、後工程でのより大きな手直しのリスクを回避する

ということです。

しかし、このメリットが成り立つためには、当然の前提条件があります。
それは、
前工程の成果物をチェックするコストが
後工程の手直しによる潜在的コストより小さい

という条件です。私の意見としては、最近のオープン系のシステム開発に
おいて、この前提条件が成り立つケースは少なくなっているのでは
ないかと思います。ゆえに、オープン系のシステム開発に限っていうと、
やはりほとんどの場合、「工程を分割せずにすむなら分割しない方が良い」
ということは正しいと思います。

なぜ、私が、
前工程の成果物をチェックするコストが
後工程の手直しによる潜在的コストより小さい

ということが成り立たないと思うのか?それにはもちろんいくつか理由があります。

3つほどあります。

1つは要求が複雑化しているため、上流工程で
前もって何をつくろうとしているのか確認するコストが増加している

ということが言えると思います。

2つめはシステム構成の複雑さの増加という問題です。
システムに必要なこと全てをメインフレームが面倒を
見てくれていた時代と異なり、現在ではシステムは実に様々な
構成要素から成り立っています。サーバ側で基本的なものだけでも、
OS, RDBMS, アプリケーションサーバ、様々なライブラリやフレームワークを
組み合わせて構築する必要があります。
その結果、システム構築上の技術的な問題点を
設計段階で全て洗い出すことは難しく
なっているとおもいます。
つまり、いくら前工程でコストをかけても
後工程での手戻りのリスクを減らせるとはかぎらない
状況が生まれている
と思います。

3つめは技術の進歩による、生産性の向上
という問題です。新しい技術の登場は常に開発者の悩みの種でしたが、
でも、それでも新しい技術が登場するたびに、ソフトウェア開発の生産性は
確実に上がり、開発者から単純作業を奪っていると思います。特に、
本番環境と同じプログラムが手元のPCでも
実行できるようになったこと
および、
xUnitのようなテスティングフレームワークによって
回帰テストのコストが下がったこと
によって、
下流工程における手直しのコストがどんどん下がっている
と感じています。

以上の理由により、現状では多くの場合、
上流工程での品質確認のコストより下流工程での手直しの
コストの方が少ない、つまり、
動いているソフトウェアを確認した方が早い状況が生まれている
と思っています。


作業の分割/分業/工程

2005-11-28 01:52:54 | 開発手法/方法論
前回のエントリにも何人かの方からコメントを頂きました。

頂いたコメントを読んでみて、私の中でも工程というものの
定義自体があいまいだったと思いました。
コメントを下さった方の意見は、工程に対する異なる定義に
基づいていて、そこがどうも議論のかみあわなさにつながって
いるような気がします。

私は、ソフトウェア開発における
・作業の分割
・分業
・工程の分割
の3つを区別して考えたいと思います。

3つのうち、もっとも基本的なものは作業の分割
です。これは単に、開発作業全体を管理可能な部分に分割することです。
これは単に分割するということ以上の何者も意味していません。
この分割は、スコープ管理、進捗管理など、プロジェクト管理の基礎と
なるため、ほぼ どのプロジェクトでも必要と思われます。
前回のエントリに対するhiro345さんの意見は、工程というものを
この最も基本的な意味での作業の分割という意味に捉えていると
想定され、その限りにおいて私はhiro345さんの意見に同意します。

分業分割した作業を異なる担当者にアサインすることです。

さて、問題の工程です。過去のエントリを
読みなおしてみると、私は工程をほとんど作業の分割
と同じように語ってしまっていましたが、実は私の中では勝手に
もっと純粋にウォーターフォール的な意味での工程をイメージしていました。

私のイメージする「工程」を語るためには、まず「作業の分割」にも
次の2つのやり方があることを示さねばなりません。

1.直列に分割する
2.並列に分割する

1.の直列に分割することは、ある機能を実現する作業を

要件定義->基本設計->詳細設計->プログラム設計->
実装->単体試験->結合試験

といったように上流から下流に向かい、前の作業が終わらなければ次の作業に
移れない
ように分割することです。

2.の並列に分割することは、
システム全体を実現する作業を並行して行えるように、多くの場合は
機能毎に分割することです。

工程とは、作業を直列に分割し、かつ分割した作業に対し
分業が可能なようにInputとOutputとなる成果物を定義し、生成すること
です。

tatakahaさんの指摘は、作業を並列に分割し、それを異なる担当者で分業
するというものでした。それによって、コストをかけることで
納期が短縮できる。まったくそのとおりだと思います。
私自身、この後のエントリで作業を分割するなら工程と言う形で直列に
分割するのではなく、並列に分割した方が良いという話を書こうと思っていた
所です。

並列に分割した場合は、ここで定義した意味での工程に分割した場合に
発生する問題は発生しませんが、その代わりに並行して開発した部分を
統合するコストが発生します。
しかし、JUnitの様なテストのためのフレームワークや、Mavenのような
ビルドツールの進歩のおかげで、この統合のコストはあまり問題に
ならなくなっています。だから、作成するソフトウェアの規模が大きく、
かつ納期が限られているため、追加の要員を投入して
分業を行うことが必要なケースでは作業を直列に分割する
より並列に分割することを優先した方がうまく行くと思っています。

言葉の定義を後付けするのはあまりよろしくないとは思いますが、
blogでは最初から体系的に書くことは難しいので、
大目に見て頂ければと思います。

今ちょっと酔ってるので何か言ってること
おかしかったらご指摘ください。

次は、どうしても工程を分けざるを得ない場合に、
その分け方の善し悪しをどう判断したらいいか、という話題を取り上げたいと
思っています。


まだ工程の意義を問う

2005-11-23 14:21:07 | 開発手法/方法論
つづきです。

昨日途中で力尽きて結論を最後まで言っていなかったのが
悪いのですが、実は今回私はソフトウェア開発から工程を
完全に無くすべきだとか、
重量級開発プロセスよりも軽量級開発プロセスの方が
常に優れているとかいうことを
言いたい訳ではありません。
主張したかったことは、もっとシンプルで、単に

工程を分割せずに済むなら、分割しないほうが良い

ということです。

昨日のエントリに対し、tatakahaさんとSaisseさんからコメントを頂きましたが、
注意を促したいのは、開発プロセスを複数の工程に分割すべき
積極的理由、つまり、
「工程に分けるとこんな良いことがある」ということはまだ示されていない、
ということです。

「何でも出来る人でなくても開発が可能になる」

これは積極的理由ではないと思います。
「良いこと」とはソフトウェアプロジェクトにとって良いことです。
ソフトウェアプロジェクトにとって「良いこと」とは
QCD(Quality, Cost, Delivery)にプラスの影響を与えることです。

何でも出来る人でなくても開発が可能になることによって、
品質が向上するでしょうか? 向上する理由は思い付きません。
納期は短縮されるでしょうか? 短縮する理由は思い付きません。

コストはどうでしょう?

確かに何でも出来る人より、限られた事しかできない人の方が人件費は
安いかもしれません。しかし、そのコスト的なメリットは
工程を分割することによって発生する余分な作業、やり直し作業の
コストと見合うものなのでしょうか?定量的なデータはありませんが、
少なくとも、明らかに人件費が安いメリットの方が大きいということは
いえないと思います。

だから、「何でも出来る人でなくても開発が可能になる」が
工程を分割することのデメリットを補ってあまりある程の「良いこと」
であると断定する事はできないと思います。

結局のところ、工程に分割すべき理由の多くは、
消極的理由、つまり、「工程に分けないとこういう場合に
うまく行かない」ことなのです。

工程を分割せずに済むなら、分割しないほうが良い

という主張に反論するためには、消極的理由ではなく、
積極的理由をあげる必要があります。

言葉を変えて、今一度問います。

開発作業を複数の工程に分ける積極的理由はありますか?
工程に分けることによって、品質は向上しますか?納期は短縮されますか?
コストは削減されますか?


まだつづきます。

"工程"の意義を問う

2005-11-17 08:33:38 | 開発手法/方法論
ここ数ヵ月、モチベーション最悪でした。
ストレスで2kgほど太りました。酒の量も増えました。
ホントに身体壊した人もいたので、まだましですが。。。
この業界は病んでるなぁ、とつくづく思う今日この頃です。

何か書くと愚痴しかでて来そうになかったので
書いてなかったのですが、久しぶりに書きます。

最近、業界の病気の根っこにはなにがあるのか、という
ことをよく考えます。
語らねばならぬことは沢山ありますが、今日は、開発プロセスに
おける"工程"というものについて考えてみたいと思います。

伝統的な開発プロセスにおいては、
工程というものによって、開発作業が複数の部分に分割されます。
一般的な考えです。
でもよく考えてみて下さい。
工程に分けることによって何か良いことありますか?

悪いことは3つほど思い付きます。

その1:余計な作業が増える
前工程を担当する人は後工程の人に必要な情報を伝達
するために、文書の作成等の作業をする必要があります。
これは工程に分割しなければ必要無い作業なので、
純粋なオーバーヘッドです。

その2:コミュニケーションロスのリスクが生じる
どんなに緻密な文書を作成しても、常にコミュニケーションロスの
リスクは残ります。

その3:仕様変更に弱くなる
工程間の情報伝達のために作成した文書をメンテナンスするため、
システム全体が仕様変更に弱くなります。

でも良いことは、少なくとも私には思い付きません。
みなさんは思い付きますか?

この件についてはまだまだ言いたいことがあるので、
また続きをかきます。

バリバリの重量級プロセス信奉者の方の反論をお待ちしてます。

アジャイル仮想論争:スキルの問題(3)

2005-02-26 20:42:32 | 開発手法/方法論
まぁ、もういい加減机上の空論でアジャイル開発を
語るのも疲れてきた感も否めないんですが、まだしつ
こく頑張ります。

しかもさらにしつこいことにまたスキルの問題に関する
議論というか、この問題の根本に関する私の私見です。

そもそも何故アジャイル開発に参加する開発者には
一定のスキルが必要だ、ということがそんなに問題
なのでしょうか?その一定のスキルの開発者が簡単に
集められるならば、「集めりゃいいじゃん」という話で
終わるはずです。

そうならないのは、結構多くのマネージャが、
そして、標準的な手順に従えば誰でもある程度の
品質で開発ができるという妄想に取り付かれていて、
個人のスキルに依存して開発を進めることに拒否反応を
示すからだと思います。

この妄想はまた、スキルの高い開発者を育成することも
阻んでいます。そのため、ますますアジャイルな開発手法
を採用することが難しくなるという、状況を生んでいる
と思います。

世の中には比較的低スキルの、取り換え可能な開発者を
供給することによって食っている会社もあるかと思いますが、
そういう会社はもし、アジャイルな開発手法がもっと一般的
になってきたら厳しいだろうな、と思います。

Language Oriented Programming

2005-02-13 23:54:53 | 開発手法/方法論
随分間が空いてしまいました。
忙しかった、というよりちょっとしたモチベーション層の
障害ってところでしょうか。。

さて、去年Martin FlowerのBlogに紹介されていた記事で
取り上げられていた、Language Orient Programming(LOP)というもの、
これはいったい何だろうと呼んでみたところ、
なんのことはない、MDAとかモデル変換っぽい話でした。
これが新しい話題ではないことは著者も認めています。

簡単にいうと、DSL(Domain Specific Language)を簡単に
作れるプラットフォームがあればソフトウェア開発がもっと
楽にできるようになる、というお話でした。
現状のソフトウェア開発では頭の中にあるもやもやっと
した概念をソースコードに落とす課程に多大なる労力を費して
いますが、概念とのギャップが少ないDSLをプログラマが簡単に
作れるようになればもっと楽ができる、と。
それは確かにその通りだと思いますが、実現するのは結構
難しそうです。この記事の著者は、Meta Programming Systemという
LOPのコンセプトを実現した実装を作ったそうです。
(もちろんまだreal worldで使えるレベルには達していないと
本人も認めていますが)

とはいえ、あらゆるモデルを記述できる言語を作ってしまおう
というUML2.0のようなアプローチと比べればずっと健全だと
思います。

さて、ここでDSLとは

  1. 言語の構造

  2. 言語構造を操作するためのエディタ

  3. 言語構造を実行可能なコードに変換するトランスレータ

の3つの部分からなると言われています。
ですから、LOPのコンセプトを具現するには

  1. 言語の構造を定義するメタ構造

  2. 言語構造を操作するためのエディタを簡単に作る仕組み

  3. 言語構造を実行可能なコードに変換するトランスレータを簡単につくる仕組み

の3つが必要であることがわかります。

Meta Programming Systemはすべてを自前で用意しようとしてる
みたいなのですが、実は個々の要素を見てみると世の中に既にあるものも
結構あるのかと思います。

1.は多分OMGのMOF(Meta Object Facility)とかEclipse EMF
のECoreとかにあたるものでしょう。
2.はEclipse のGEFとかEMFのエディタ生成機能とかが
近いものがありますが、GEFは"簡単に"エディタを作るには
あまりにも複雑ですし、EMFが自動生成する
ツリーのエディタは逆にあまりにもシンプルすぎます。
3.はMOF QVT RFPでいわれているものと同等のもので、
まともな実装はまだ無いのでしょうが、謎のEclipse GMT
とかがこれにあたるのでしょう。
(最近全然おっかけてないのですが、どうなってるんでしょうか?)

LOPというコンセプトはこれらを統合したところに新しさが
あるといえばあるといえると思います。
確かに実現できたら素晴らしいんですけどね。。

個人的には最後にDSLの構造を実行可能コードに落とす所を
"簡単に"記述するのがかなり難しいのではと感じています。
これは、去年仕事で自分が頑張った経験に基づいているかなり
確信の持てる意見です。ここが簡単にできないと、やっぱり
普通にJavaとかのソースコードごりごり書くほうが良いって
ことになってしまいそうです。

自分でLOPの実装に取り組むなら、やっぱりEcilpse EMF+GEFを
ベースにするかな。。でもあまりにも状況が混沌としているため、
容易にはとても手が出せないですが。

でもこのような考えをもとに、数年後にとてつもない
イノベーションが起こって、みんなHappyになってると
いいな、と期待します。でも難しいんだろうな。。。

アジャイル仮想論争:スキルの問題(2)

2005-01-26 12:49:17 | 開発手法/方法論
前回のエントリに関するhiro345さんの指摘は、非常にロジカル
で、理に適ったものに感じました。
Saisseさんから頂いたコメントについても、契約は確かに重要な問題のうちの
一つなので、後のエントリで取り上げなくてはと感じています。

前回のエントリの議論の進め方にはいろいろ穴があると自分でも感じているので、
今回はhiro345さんの指摘を参考にしつつ、もう少しスキルの問題について
考えてみたいと思います。よくよく考えてみると、非常に深い問題で、あまり
明快な解答にはなっていないのですが。。。


「アジャイル開発を行うには高いスキルの開発者をそろえなければならない。
しかし、そもそもスキルの高い開発者をそろえればどのようなやり方をしよう
ともプロジェクトを成功させることはできる。」

上記の意見を数学風に表現すると、

・開発者のスキルを x とする。
・やり方に依存せずにプロジェクトを成功させることができる最低限のスキル
レベルを a とする。
・アジャイル開発に必要な最低限のスキルを b とする。

このとき、

x >= a を満たす全ての x について、
x >= b が成り立つ。

さらにここから、
a <= b
が成り立つこと、
つまり、上記の意見はアジャイル開発ができるスキルを持った開発者であれば、
やり方に依存せずにプロジェクトを成功させるできることを前提にしている
ということを導きだすことができます。

hiro345さんの議論の前半部分は、ここで

x >= a を満たす x が現実的には存在しないこと

つまりやり方によらずプロジェクトを成功させるスキルをもった開発者は
存在しないことを示しています。このとき、

a <= b

より、

x >= b を満たす x は存在しない、

つまり、アジャイル開発に必要なスキルをもった開発者は存在しない、
という結論になってしまいます。

ここでアジャイル開発に必要なスキルをもった開発者が存在する
ことを論証できれば、上記の意見の誤りをつくことができるはずです。

しかし、実際には問題はそう簡単ではありません。

スキルというものは、 x >= a, x >= b などのように単純に比較演算子で
比較できるものではないからです。
この問題を理解するには、以下のような問いを考えてみればよいでしょう。

DBの知識がある人とネットワークの知識がある人とどちらがスキルが
高いか?


この例を見れば分かるとおり、2つのスキルに量的な違いだけでなく、
質的な違いがある場合、単純な比較はできないのです。
単純な比較が出来ないとき、ここまで述べたアプローチは根底から覆り
ます。

さらに問題をややこしくしているのは、「高いスキルの開発者」という
のは実はとても曖昧なことばで、話し手が一体そのことばによって
どんなスキルの人を想定しているのかよくわからない、ということです。

とくに、今回のように、「やり方によらずプロジェクトを成功させること
ができる最低限のスキル」という現実にはなかなかありえない
スキルに関しては、話し手によってその具体的なイメージにかなりの
開きがでてくるものと思われます。

冒頭の意見に関する議論がいまいちかみあわず、
不毛なものになりがちなのは、スキルと言葉のもつ曖昧さ、
多様性によるところが大きいと思います。

アジャイル開発ができるスキルを持った開発者というのが何者であるのか、
やり方に依存せずにプロジェクトを成功させることができる開発者というのが
何者であるのか、実はよく分からないし、両者のスキルの間には量的な違いしか
ないのか、質的な違いもあるのかも分かりません。

そして、そのよくわからない部分を全て包含したかたちで、
冒頭の意見に反論することは難しく、少なくとも私の知能ではとても出来そうに
ありません。

できることは、まずは逆に質問をしてよくわからない部分を減らすことの
ような気がします。

とりあえず以下のような質問をして、相手の立場を明らかにするのがよいのでは
ないでしょうか?

「アジャイル開発ができるスキルとはどのようなスキルですか?」
「やり方に依存せずにプロジェクトを成功させることができるすきるとは
どのようなスキルですか?」

アジャイル仮想論争:スキルの問題

2005-01-18 02:46:32 | 開発手法/方法論
去年は仕事の関係もあって結構アジャイル開発方法論に関して
いろいろと勉強して来た訳ですが、今年はさらに踏み込んで
実際にアジャイルなやりかたでソフトウェア・プロジェクトを
まわしていくチャンスを探って行きたいと思っています。

そこで避けられないのが、ウォーターフォール型の開発プロセス
しか知らず、それが最高だ、と思っている人々との戦いです。

そこで、このBlogでも向こう2,3回は、来るべき戦いに備えた、
いわばスパーリングとして、アジャイル開発方法論に
関連する論争のうち、代表的と思われるトピックに関して
僕なりに仮想的な議論を展開して行きたいと思っています。

最初のトピックとして、アジャイル開発におけるスキルの問題
を取り上げてみたいと思います。

アジャイル開発に批判的な人達がよく口にすることに

「アジャイル開発を行うには高いスキルの開発者を
そろえなければならない。しかし、そもそもスキル
の高い開発者をそろえればどのようなやり方をしよう
ともプロジェクトを成功させることはできる。」

というものがあります。
このような人達は

「開発プロセスというものは誰でも、手順通りに開発を進めれば、
誰でも70点の成果を上げられることを目指すものだ」

という間違った考えを前提に発言していると思われます。

手順が確立してさえいれば、だれでも同じようなことができる
というのが誤りであることは少し考えてみればわかることです。

飛行機に乗ったとしましょう。機内アナウンスで、

「当機の機長は、飛行機を操縦するのは今回が始めてですが、
完璧なマニュアルを携行しておりますので、問題ありません」

と言われたら、どういう気分がするでしょうか?

病院で手術をうけるとしましょう。事前の説明で、

「執刀医は始めて使う機材を使用しますが、完璧なマニュアルを
携行するので、ご安心ください」

と言われたら、どういう気分がするでしょうか?

飛行機の操縦や手術ほど人命に直結しないにせよ、
教育と訓練が重要である点はソフトウェア開発とて同じです。

厳密に定義された開発プロセスを実行するには、そのための
教育と訓練が必要なのです。

だから、ことさらにアジャイル開発の方が高いスキルが必要だと
は言えないと思います。

ただし、厳密なプロセスとは求められるスキルが異なる、
ということは言えると思います。
アジャイル開発では、経験から学習し、変化する状況に適応する
能力がより重視されるからです。

冒頭のような発言をしてしまう人は、アジャイルの考え方を理解して
いないだけでなく、厳密な開発プロセスについても本質的には
良くわかっていないと思われます。

そのような人がプロジェクトマネージャをつとめ、
教育と訓練がないがしろにされた状態で、
重量級の開発プロセスを採用したばあい、結末は悲惨です。

特をするのはただ一人、プロジェクトマネージャ
です。プロジェクトマネージャは自分でものを考えなくてよいので、
とても楽です。
お客様は当然まともな品質のソフトウェアは納品されない
ので、涙をのんで妥協せざるをえません。
開発者は膨大な文書に翻弄されながら、
なにが目的かわからない単調な作業を
延々と繰り返すはめになります。

Agile Management for Software Engineering

2004-08-14 13:51:22 | 開発手法/方法論
洋書なので読むのが遅いのですが、今Agile Management for Software Engineeringという本を読んでいます。
主にTOC(Theory Of Constraints)の観点から、アジャイル開発手法が従来型の手法と比べてどこが優れているのかについて考察しています。作者のDavid J. Andersonは最初にFDDを創り出したプロジェクトのメンバーだった人だそうです。

大きな組織、特に官僚主義的な組織の中で「アジャイル開発をやりたい」と言い出すと、多くの壁にぶつかることになります。アジャイル開発手法はなぜうまくいくかの因果関係はそれほど明確ではないけれども、経験的にはうまくいくと分かっている方法を採用しているので、経営者の視点から見ると開発者が自分が楽しく仕事するためになにやら怪しげな理屈をグダグダこねくりまわしているように見えてしまいます。そして最後には結局「それ、いくらですか?」と言われてしまうのです。

この本はTOCの理論を駆使してアジャイル開発手法がビジネスで利益を生み出す手法であることを豊富な図表と共に解説しています。

後半の章ではXP、FDD、Scrumについてそれぞれ生産性と財政上のメトリクスの収集方法を解説している、と思われます。まだ最後まで読んでいないのでわからないですが。。。

アテネ五輪から目が話せないので、今日はこの辺にしておきます。
さっきもこれ書きながらテレビみていたら、ちょっと目を離したすきに柔道の野村が3回戦で開始14秒で一本勝ちを決めたシーンを見逃しました。腹だたしいことです。