アジャイル開発

意識の高いシステム開発者の間では、すでに広く浸透しつつある「アジャイル開発」。アジャイル開発を取り巻く状況やそのあり方について、今一度、弊社エンジニアの視点から考察してみたいと思います。

アジャイルを巡る状況

ソフトウェア開発現場には、様々な課題が山積しています。例えば、短納期化が進んでいるにも関わらず、システムの複雑さは増していますし、安価な海外技術者を活用したオフショア開発が徐々に定着し始め、コスト競争が激しくなってきています。また、技術が多様化し、顧客の要求はより厳しいものになってきています。そういった厳しい開発現場の中で、技術者が長時間の残業を迫られたり、モチベーションを落としたりすることも少なくはありません。

「アジャイル開発」という言葉は、これらの課題を乗り越える切り札となる期待を背負って、キーワードとして広く使用されるようになったと考えられます。以下に示す「アジャイル開発宣言」や、アジャイル開発プロセスの代表格であるXP(エクストリームプログラミング)の内容の詳細についての情報は、ウェブや文献を通じて容易に獲得できるようになりました。

【アジャイル開発宣言】

  • プロセスやツールよりも、個人と相互作用
  • 包括的なドキュメントよりも、動作するソフトウェア
  • 契約交渉よりも、ユーザとの協調
  • 計画に従うよりも、変化に対応

また、XPが示すプラクティスのうちのいくつかは、すでに広く世の中に浸透して馴染み深いものになっています。xUnitを使用したテスト駆動開発、Subversionによるコード共有、Eclipseを活用したリファクタリングなどがそれに該当するでしょう。(これらの技術についてご関心がある方は、弊社トレーニングページをご覧ください。)

しかし、アジャイル開発そのものについては、誰もが理解し、実践できるものになったかと問われると、まだまだその域には達していないのが実情だと言わざるを得ないでしょう。

アジャイル開発への期待と誤解

アジャイル開発は「銀の弾丸」ではありません。JavaWorld Day 2007 でのScott W.Ambler氏の講演にも示されているように、そこには多くの誤解が存在しています。アジャイル開発プロセスを用いれば低予算で高品質なものをたくさん作れる、XPのプラクティスを適用すれば技術者のモチベーションが回復し、納期も守れる、あるいは、JUnitやRuby on Railsを使って楽しくプログラミングをし、ドキュメントも書かず、手動でテストも行わず、残業もせずに帰宅できる…。

これらはアジャイル開発プロセスを適用した結果もたらされる可能性のある効能ではありますが、プロセスをきちんと理解して適用しなければ、夢物語となります。仮にこれらを実現出来たとしても、結果として実装されたシステムは使い物にならない代物になってしまう可能性もあります。

アジャイル開発とは何か?

それでは、効能ばかり唄われて実態の掴めない「アジャイル」とは、一体何なのでしょうか?それは、アジャイルの根底に流れる思想「変化を受け入れる」という言葉に示される通り、刻々と変化する状況に対応するために、各々が課題を判断しながら自分の役割を考えて仕事をする、プログラミングを進めていく、という考え方にあります。

品質が良くて使いやすいソフトウェアを作りあげる事をあくまで追求し、お客様の満足を獲得する事に目標を置く、目標を達成するために状況に合わせて臨機応変に手段を変えて対応していく、このような考え方が極めて重要です。

ソフトウェア開発を成功させるという困難な目標を達成するためには、今までの常識や開発手法に囚われずに、各々が持っているアイディアや技術を最大限に活用して、大胆にプラクティスを適用していく必要があります。このような考え方のもとに進行されたプロジェクトは開発スピードが上がり、結果として「アジャイル開発」となるのです。

アジャイル開発の実践 - 従来型の縦割りチームからの脱却

アジャイル開発を実践するためには;

  1. 高いモチベーション
  2. ある程度の技術力
  3. 他の開発者と協調出来る人柄
  4. プロジェクト全体の状況を見渡せる感受性

を備えたメンバー必要になります。

アジャイル開発宣言にあるように、アジャイル開発の考え方では、プロセスやツールにはこだわらず、プロジェクトを構成する人を重要視します。前述のようなメンバーが集まったプロジェクトは、従来のように役割や責任を固定して割り当てて縦割りにせずに、フラットな状態で必要に応じて権限を委譲する事により、より高いパフォーマンスを発揮できるでしょう。

アジャイル開発の実践 - 新しいリーダー像

フラットな組織構成の中でメンバーを指導・育成し、適切な権限委譲を行いながらプロジェクト全体をアジャイル化していく新たなリーダーが必要とされます。

そこで、近年注目されているのは、「プロジェクトファシリテーション」の技術です。スケジュール管理を行って指示を出す従来型のリーダーではなく、メンバーのモチベーションを最大限に引き出しながら作業の進め方は各々の判断に委ね、コミュニケーションを活性化しながら細かい調整を行っていくのが、アジャイル型のリーダーです。プロジェクトファシリテーションのスキルは、アジャイルプロセスのみならず、より広い分野で注目を集めています。