blog

アジャイル開発の理由

アジャイル開発に関連する情報を概観し、私が長期にわたってアジャイル開発を実践してきたことと合わせて、アジャイル開発の本質について考えてみたいと思います。本稿では、アジャイル開発の核心を整理し、そこから...

May 22, 2014 · 6 min. read
シェア

アジャイル開発に関連する情報を整理し、長年アジャイル開発を実践してきた私の経験も合わせて、アジャイル開発の本質に迫ります。本稿では、アジャイル開発の核心を明らかにし、そこからアジャイル開発の価値を導き出すつもりです。本稿でこのレンガを投げ出すことで、巨匠たちの玉の輿を引き出せればと思います。

リアルなソフトウェア

ソフトウェアは現実の問題を解決するために作られます。したがって、ソフトウェアは現実に適合するために存在します。アジャイル開発の核心は、現実に適合するソフトウェアです。現実に適合したソフトウェアは、持続可能な方法で現実とともに進化することができます。ソフトウェアが現実から逸脱すると、ソフトウェアのライフサイクルは終わりを迎えます。

現実の世界はダイナミックな変化であり、人間が作ったものは、しばしば世界の変化に遅れをとります。例えば、地図が構築された後、いくつかのより多くの道路、いくつかのより多くの建物があるかもしれません;ちょうど高構成のコンピュータを買って、数ヶ月後、自分のマシンの構成は、再び捨てられる位置にある......これらの変更は、人々は受け入れることを余儀なくされています。これらのことはハードウェアに属するので、現時点では、人々は簡単にハードウェアを変更することはできません。

対照的に、ソフトウェアは異なる現象です。ソフトウェアの変更は非常に安価です。ソフトを変えるということは、ハードディスクの磁気を変えるということです。ソフトウェアの変更が容易であることは、次のような結果をもたらします: i. ソフトウェア開発者が、自分の想像でソフトウェアをどうするかを決めることが容易である ii. 無駄なソフトを開発することは、販売する10万枚の地図をエラーで破棄したり、すでに販売したコンピュータをプロセスのバグでリコールしたりするよりもコストがかからないこと。 第二に、ソフトウェアが現実に適合していること。 ソフトウェアを現実に適合させるための開発者のコストは非常に低い。

つまり、アジャイル開発の核心は、現実に適合したソフトウェアです。現実に適合したソフトウェアを構築するために、さらなる価値観や方法論が生まれます。

簡単

物事の本質を理解すれば、シンプルさは手に入ります。ソフトウェアを開発していると、多種多様な要求を扱うことに疲れることがよくあります。複雑な要求をシンプルな概念に変えることができる人はほとんどいません。例えば音楽ソフトを作る場合、「お気に入り」「最近再生した曲」「最近追加した曲」など、曲の性質は様々です。開発者の中には、3種類の曲を保存するために3つのリストを作る人もいます。実は、これらはプレイリストという性質は同じです。違いは、プレイリストの追加をトリガーする条件にあります。ですから、リストを作成し、リスト内の各曲のトリガー条件をマークすればよいのです。

ソフトウェアを複雑にするということは、通常、そのソフトウェアがまだ本質をほとんど捉えていないことを意味します。さらに単純化するためには、もっと多くのことを考える必要があります。ソフトウェアのコンセプトをシンプルにすることは、一方ではユーザーにとって理解しやすく、操作しやすくすることであり、他方では世の中の変化に対応することを可能にします。上の音楽ソフトをもう一度考えてみましょう。リストを3つ作って、「聴いた」曲を追加するには、またリストを作らなければならないのはどうでしょう。リストの場合は、「もう一度聴く」というトリガー条件だけを扱えばいいのです。

現実に即したソフトウェアは、必然的にシンプルになります。したがって、アジャイル開発の最初の価値はシンプルさです。アジャイル開発の実施は、シンプルさという価値を中心に行われます。つまり、常にソフトウェアのシンプルさを確保することです。シンプルさには2つの側面があります。1つ目は、ユーザーにとってコンセプトが非常にシンプルであること、2つ目は、開発者にとって開発技術やコードが非常にシンプルであることです。

ソフトウェアの持続可能性は、ソフトウェアのシンプルさにも依存します。持続可能性とは、現実の変化に素早く対応することです。複雑なソフトウェアは、ユーザーを圧倒するか、コードのメンテナンスが不可能になります。どちらもソフトウェアを持続不可能にします。これでは、ハードウェアを作るのと同じ方法でソフトウェアを開発せざるを得なくなります。ハードウェアは捨てられ、最後の手段としてアップグレードされます。

情報を送り返す

ソフトウェアが現実に適合するためには、現実からのフィードバックによって進化する必要があります。ソフトウェアが前進する原動力は、現実的なフィードバックです。アジャイル開発とは、現実を受け入れ、変化を受け入れる開発です。その価値を重視するのは、開発者が犯しがちな過ち、つまりソフトウェアをどうするかを自分の想像で決めてしまうことをなくすためです。

ですから、ソフトウェアを作るには、まずフィードバックできる人を見つけることが重要です。フィードバックできる人さえいなければ、ソフトを作る意味がありません。

フィードバックの重要性は、もっと言い換えれば「矛盾が物事を動かす」ということです。フィードバックは欠点を指摘する槍であり、ソフトウェアはそれを補う盾です。槍の絶え間ない攻撃によって、盾は継続的に改善されます。槍が存在しなければ、盾が強くなるわけがありません。

方法論という点では、アジャイル開発は、迅速なリリースと、開発者が頭の中で想像しているフィードバックではなく、現実的なフィードバックを得ることを重視しています。開発者がたまたまユーザーでもあれば、ソフトウェアが作られる可能性はずっと高くなります。ほとんどのオープンソースソフトウェアは、自ら問題を解決しようとする開発者によって作られています。

くむ

コミュニケーションは、開発者がフィードバックを得るための手段です。良い開発者はコミュニケーションが上手です。コミュニケーションには、話したり文書を書いたりといったさまざまな方法があります。優れた開発者は、自分の考えを明確かつ整理された方法で表現できなければなりません。

コミュニケーションの目的は心の交流です。コミュニケーションでは、相手の考え方を学び、自分の考え方を表現し、さらにそれをより良い考え方へと発展させていきます。良い考え方があってこそ、現実と自分を一致させることができるのです。良い開発者は、良い考え方を身につける機会を与えません。

アジャイル開発では、この価値観はまさに開発者を優秀にするために提唱されています。優秀であることを諦めた開発者は、アジャイル開発に適応できません。

ゆうもう

実生活において、勇気がないことは比較的よくあることです。例えば、大々的に告白する勇気がない、新しいことに挑戦する勇気がない......ソフトウェア開発の分野では、勇気の欠如はさらに一般的です:技術は数世代にわたって更新されているのに、会社はまだ新しい技術を使うことを恐れている、会社は新しい開発モデルを試す勇気がない......。

勇気とは、要するに現状を否定することです。人は永遠を願望的に信じる傾向があり、一度確信すると、変えようとしません。そこで勇気の出番です。勇気は永遠を否定し、変化を受け入れることを可能にします。勇気は創造性の源です。勇気がなければ、人は常にありのままであり、勇気があるからこそ、人は変わらざるを得ないのです。

開発に関しては、多くの時間を費やして多くのコードを書いたかもしれませんが、書いたコードをすべて放棄することを決断するのはとても勇気のいることです。もしそれができれば、ソフトウェア開発において非常に有利な立場に立つことができます。例えば、ユーザーからのフィードバックを期待して、ページのプロトタイプを書くのに多くの時間を費やすかもしれません。ユーザーのフィードバックを確認した後、プロトタイプのコードを完全に破棄することができます。

アジャイル開発では、勇気の大切さが強調されます。この勇気こそが、開発者が変化の現実を受け入れ、開発者とソフトウェアを現実に沿った方向へと導くために必要なものなのです。

反復開発

4つの価値について話した後、私は次にそれらを結びつけて、反復的開発という方法論を得ました。

[]

図のように、シンプルさはソフトウェア開発の始まりであり、終わりでもあります。

なぜなら、開発しようとしているものがまだ複雑であれば、コンセプトをよりシンプルにする必要があるからです。第一に、複雑なシステムを半分にすること、第二に、個々の機能をできるだけ抽象化することです。

次に、簡単なソフトウェアをコミュニケーションに持ち込みます。1つ目は、ソフトウェアのロジックが要件を満たしているかどうかについてのユーザーとのコミュニケーション、2つ目は、ソフトウェアが技術的にコストがかかるかどうか、それをどのように量るかについての開発者とのコミュニケーションです。

このコミュニケーションによって、現実的なフィードバックが可能になり、現実的なフィードバックがあるからこそ、人は勇気をもって変更を加え、ソフトウェアのシンプルさを維持し続けるために使用することができるのです。これでソフトウェアの反復が完了します。

結語

アジャイル開発は単なる開発手法ではなく、心を鍛える手段です。アジャイル開発で鍛えられるのは、「現実に即したことをする」ということです。そうすることで、権威よりも生きた現実を尊重し、現実に鋭く対応する力が身につきます。

Read next

検証コードのC# Unicom社の新バージョンの実装を識別するために

以前はUnicomのリチャージカードの自動再充電の実装を書いた、最近Unicomの公式サイトが改訂されている発見、何気なく検証コードと以前の異なるの新しいバージョンを見て、彼の識別コードを勉強するためにいくつかの時間を送信しました。

Mar 31, 2014 · 6 min read