アジャイル開発者の習慣-acts_as_agile

最終回 信頼貯金を増やす

この記事を読むのに必要な時間:およそ 7 分

アジャイル開発者のスキルは二階建て

本連載では何度も繰り返していますが,アジャイルは形容詞です。⁠アジャイル開発者」と呼ぶとき,それは開発者がアジャイルであるという状態を指しています。

ということは,アジャイル開発者とは「アジャイルな」開発者である以前にまず「開発者」であらねばなりません。

スキルの構成も同じです。まず「開発者としてのスキル」があり,それに支えられて「アジャイルな」開発者としてのスキルがあります。図2に示すように,このスキルは二階建てになっています。

図2 アジャイル開発者のスキル構成

図2 アジャイル開発者のスキル構成

開発者のスキル

二階建て構造の一階部分を構成する開発者のスキルは次の3つです。

開発者の3つのスキル
  • バージョン管理
  • ユニットテスト
  • 自動化

これらは,開発の進め方がアジャイルであるかどうかにかかわらず必要とされるスキルです。この3つが一体となって,二階部分の「アジャイルな」開発者のスキルを支えます。

このうちどれか一つが欠けても,アジャイルな開発は進められません。開発をアジャイルにしていくための前提と言ってもよいでしょう。

それぞれについて詳しく説明すると,文字どおり書籍になってしまいます(⁠⁠達人プログラマー ― ソフトウェア開発に不可欠な基礎知識 バージョン管理/ユニットテスト/自動化』注11がそれです⁠⁠。ここでは簡単に紹介しておきます。

バージョン管理

ソフトウェア開発には,成果物の信頼のおけるリポジトリが欠かせません。バージョン管理なしにユーザ価値のあるソフトウェアの提供を継続することは難しいでしょう。

この分野にはすでに実績のあるツールが存在しており,そのメリットは必ず習得コストに見合います。

もしもまだバージョン管理を導入していないのであれば,本誌Vol.39の特集1「構成管理 実践入門 ― バージョン管理,ビルド,リリース」などを参考に今すぐ取り組んでください。今から始めるなら,まずはSubversionの使い方を一通り身につけましょう注12⁠。

ユニットテスト

ユニットテストのスキルとは,いわゆるxUnitツールを利用して具体的なテストケースを記述するスキルです。本誌であれば,Vol.35の特集1「実演! テスト駆動開発」が参考になります。

テスト駆動開発(TDD)とユニットテストとを別のスキルにしているのには理由があります。TDDは開発をアジャイルにしていくうえで重要なスキルですが,xUnitを使って自分の書いたコードをユニットテストできることは開発がアジャイルであろうとなかろうと重要なスキルです。自分が書いたコードのテストの実行を自動化する手段は身につけておくべきです。

別の言い方をすれば,テストに開発を駆動させていくためには,まずテスト自身の書き方を身につけていなければならない,ということです。

自動化

人は繰り返し作業が苦手です。一方,コンピュータは繰り返し作業が非常に得意です。コンピュータが得意なことはコンピュータに任せましょう。

故石井勝さんは「自動化できないか考えること」を優れた技術者になるために必要な態度だと述べていました

自動化による作業の効率化も,開発手法を問わず重要な開発者のスキルです。本誌でいえば,バージョン管理の項目で紹介したVol.39の特集1は,自動化という観点からも参考になります。

注11)
『達人プログラマー ― ソフトウェア開発に不可欠な基礎知識 バージョン管理/ユニットテスト/自動化』⁠David Thomas/Andrew Hunt/Mike Clark(著⁠⁠,長瀬 嘉秀(監訳⁠⁠,テクノロジックアート(訳⁠⁠,ピアソン・エデュケーション⁠⁠。なお,黒い表紙の『達人プログラマー ― システム開発の職人から名匠への道』⁠Andrew Hunt/David Thomas(著⁠⁠,村上 雅章(訳⁠⁠,ピアソン・エデュケーション)と区別するために,私は「達人スターターキット」と呼ぶことが多いです。
注12)
前掲の『達人プログラマー』のバージョン管理の部で紹介されているのはCVSなので,⁠Subversion実践入門 ― 達人プログラマに学ぶバージョン管理 第2版』⁠Mike Mason(著⁠⁠,でびあんぐる(監訳⁠⁠,オーム社)も入手しておくとよいでしょう。

「アジャイルな」開発者のスキル

開発者の3つのスキルに支えられて存在するのが,本連載で取り上げてきた「アジャイルな」開発者のスキルです。それは次の4つです。

アジャイル開発者の4つのスキル
  • ストーリの作成
  • 計画づくり
  • テスト駆動開発
  • リファクタリング

開発者の3つのスキルとの関連を中心にこれらを見ていきます。

ストーリの作成

ストーリは,ユーザにとっての価値を,ユーザの語彙であらわしたものです。連載を通じて説明してきたとおり,私たちはユーザ価値をソフトウェアとして継続的に届けるために開発をしています。

ソフトウェアを正しく届けるためには,適切なユニットテストとバージョン管理された信頼のおけるリポジトリが必要です。ユーザ価値の提供を効率良く繰り返し継続するには自動化は欠かせません。

計画づくり

計画づくりは,タイムボックスを遵守するために作業を見積り,優先順位をつける活動です。

プロジェクト計画に合わせてコードベースにタグを打ったり,ビジネス状況に応じてブランチを作成したり,ブランチ間でのマージを行ったりするにはバージョン管理ツールのスキルが欠かせません。

テスト駆動開発(TDD)

TDDはツールの使い方やテストコードの書き方よりも上位レベルの,ソフトウェア設計の技法であり,開発の進め方についてのスキルです。TDDでは,作業に先立って,作業の完了条件をテストできるコード(または言葉)で定義します。

テストをコードとして表現するにはユニットテストのスキルが,テストコードをリポジトリに格納するにはバージョン管理のスキルが,そして実行を効率良く行うには自動化のスキルが欠かせません。

リファクタリング

リファクタリングとは,プログラムの外部から見た振る舞いを変えることなく,ソフトウェアの設計を改善していくことです。時間の経過に応じた環境の変化にソフトウェアを適応させていくためのスキルです。

リファクタリングで重要なのは,変更した設計が壊れていないことの確認です。そのためにはユニットテストが欠かせません。リファクタリングに失敗した際には,以前の状態へ巻き戻すためにバージョン管理のスキルも必要です。

スキルの磨き方

開発者のスキルとアジャイル開発者のスキルを紹介しました。これらのスキルの磨き方は,私の考えでは「全体を少しずつ育てていくべき」です図3⁠。

図3 スキルの磨き方

図3 スキルの磨き方

全体を少しずつ

まずは開発者の3つのスキルに取り組みましょう。そのあとで,なるべく早い段階からアジャイル開発者の4つのスキルにも挑戦してみてください。

スキルを1つずつではなく,全体を少しずつ磨いていくように心がけるのは,開発の現場では,スキルの要素が単独で役立つというよりは,全体が補完しあって効果を発揮するからです。

知識は分け与えても減らない

得手不得手があるのなら,チームメンバーの助けを借りましょう。ここでも「正直は割に合う」です。知らないこと,わからないこと,自信のないことを口にする勇気(と,それを歓迎する雰囲気)も大切です。

もちろん,自分の得意なことはメンバーとも共有しましょう。知識は分け与えても減ることのない珍しいものの一つです。

信頼貯金を増やすアジャイル開発

アジャイルな開発の特徴である,タイムボックスを重視したインクリメンタルかつイテレーティブな開発の進め方のメリットは,次の3つの視点から語られることが多いです。

  1. 早い段階でのビジネス価値の提供と継続
  2. 変化の適応
  3. リスクの低減

これに加えて,あるいはこの3つを貫く価値として,提供するソフトウェアとチームに信頼をもたらすという視点もアジャイル開発には欠かせません。

Kent Beckも『XP エクストリーム・プログラミング入門』注aの第2版を執筆するにあたって,XPの原則に「透明性」⁠transparency。開発チームが何をしているのかがユーザに見えること)と,⁠説明責任」⁠accountability。開発チームが作業の意義を説明できること)を加えることを考えたと語っています。いずれも信頼に関わるキーワードです。

注a)
『XP エクストリーム・プログラミング入門 第2版 ― 変化を受け入れる』⁠Kent Beck(著⁠⁠,長瀬 嘉秀(監訳⁠⁠,株式会社テクノロジックアート(訳⁠⁠,ピアソン・エデュケーション)

著者プロフィール

角谷信太郎(かくたにしんたろう)

(株)永和システムマネジメント,サービスプロバイディング事業部所属プログラマ。「『楽しさ』がシステム開発の生産性を左右する」と信じてRubyによるアジャイル開発を現場で実践するテスト駆動開発者。目標は達人プログラマ。好きな言語はRuby。好きなメソッドはextend。著書に『アジャイルな見積りと計画づくり』(共同翻訳),『JavaからRubyへ』(翻訳),『アジャイルプラクティス』(共同監訳),『インターフェイス指向設計』(監訳)。

URLhttp://kakutani.com/

著書