特集

.NET開発者のための開発プロセス入門(後編)

.NET開発でアジャイルを導入するための実践テクニック

福井 厚 & 小井土 亨
2004/12/22
Page1 Page2 Page3 Page4

 アジャイル開発プロセスのプラクティスをどのように導入すれば効果的だろうか?

 前編では、.NET開発者がアジャイル開発プロセスを導入できない理由と、筆者らが「ローカル・ライトウェイト開発プロセス」という名前を付けて、ウォーターフォール型の開発プロセスの中でアジャイル開発プロセスの手法を徐々に取り入れる方法について述べた。

 後編となる今回は.NET開発環境においてアジャイル開発のプラクティスを実践するための具体的な方法を紹介する。

ローカル・ライトウェイト開発プロセスを実践するには

 ここでは、ローカル・ライトウェイト開発プロセスを実践してみようと考えている開発者のために、1人からでも導入できるプラクティスと数人のチームで導入するプラクティスに分けて、その実践方法の解説を行う。

1人からでも導入可能なローカル・ライトウェイト開発プロセス

 最初は1人からでも実践できるローカル・ライトウェイト開発プロセスに挑戦するのがよいだろう。1人〜2人で実践できるので、比較的気軽に導入できる。この開発プロセスを導入する目的は、ずばり「ソフトウェアの品質向上」である。

■品質を向上させるためのプラクティス

 ソフトウェアの品質向上とは、実行速度を向上させるためにトリッキーなコードを記述することではない。

 要求は常に変化し、ソフトウェアは必ず修正されるものである。そのため保守しやすいコードが重要になる。重複したコードはメンテナンスのコストを増大させ、バグの発見を難しくする。意味不明な変数名や連番のようなメソッド名は、ソース・コードの可読性を極端に低下させる。

 一部のコードの修正がほかの部分へ思わぬ影響を与えていないかどうかをどのように確認するのか。これらの問題に対応するのが以下のプラクティスである。

1.ロジックの分離と単体テストの自動化

 単体テストを自動化するためのコツとして、アプリケーションの設計時にユーザー・インターフェイス(UI)とロジックを分離させることを意識するとよい。ロジックをUIから分離することで、UIからの操作を必要とせずにロジック部分を単独で呼び出すことが可能となり、結果的にテストを自動化することが容易になる。

 単体テストを自動化するとテストの頻度を増やすことができ、コードの修正が原因で以前はパスしていたコードが思わぬ影響を受けてパスしなくなるといった状況を早期に発見できるようになる。

 良いテストの原則を挙げるので、テスト作成のときの参考にしてほしい。

  • テスト目的が明確
     何をテストするか明確である。

  • テストの判定が正しい
     テストの成功、失敗が正しく判断されている。

  • テストを独立して実行することができる
     テストが他のテストに依存することなく、独立している。

  • 繰り返し実行することができる
     何度でも繰り返して、テストを実行することができる。

  • テストを実行しても、状態が変化しない
     テストを実行し、成功した場合でも失敗した場合でも、テストを実行する前と後で何も変わらない。

2.テスト・ファースト

 テスト・ファーストはテスト対象クラスのテスト・コードを、そのクラスを実装する前に記述する。これによって開発者が利用者側の視点を持つことになり、クラスのインターフェイスをより良いものにできる可能性が高くなる。

3.Mockオブジェクトの利用

 ソフトウェア開発では多くの場合、システムをいくつかのサブシステムに分割して開発することが多い。ほかのサブシステムに依存する部分を開発する場合、Mockオブジェクトを利用するとほかのサブシステムの開発状況や実装コードの品質に左右されることなく、開発を進めることが可能となる。

4.リファクタリング

 変化を繰り返しても品質を落とさないための有効なプラクティスとしてリファクタリングがある。リファクタリングはコードの重複をなくし、ソース・コードの可読性を高める。結果的に変更も容易になるので、コードの保守性が高まる効果がある。

 以上の4点について、.NET開発環境での具体的な実践方法を次に述べていく。

.NET開発環境でのプラクティスの導入

 それでは.NET環境で具体的にプラクティスを導入する方法を解説する。

■NUnitによる単体テストの自動化とテスト・ファースト

 .NET開発環境で、単体テストの自動化とテスト・ファーストを行うときには、NUnitというフリーのツールが利用できる。これはJava環境のJUnitをベースに.NET環境で構築されたもので、.NET環境ならではの機能が追加されている。インストールはMSIファイルを実行するだけの極めて簡単なものである。

 ここでは簡単な例を交えながら、NUnitによるテストについて解説する。より詳しい内容については、NUnit Ver2 利用ガイドNUnit トレーニングテキストを参照してほしい。

 NUnitを用いてテスト・ファーストを実践するときには、最初にちょっとしたコツが必要だ。新規プロジェクトのテンプレートとして「クラス・ライブラリ」を選択するのである。

プロジェクトを作成する
UIを含むアプリケーションでも、新規プロジェクトを「クラス・ライブラリ」から作成することで、単体テストがしやすくなる。

 よくプロジェクトの新規作成を行うときに、「Windowsアプリケーション」や「ASP.NET Webアプリケーション」を選択する開発者を見るが、最終的にUIを含むアプリケーションであっても、まず処理を行うロジック部分をクラス・ライブラリとして分離することが重要である。

 クラス・ライブラリとしてロジックを分離することでテスト・コードからクラス・ライブラリ内のクラスのメソッドを呼び出すことが容易になり、テストを自動化できる。

■テスト・ファーストによる実装例

 簡単な例として、顧客の注文の金額を集計する処理をテスト・ファーストで実装してみよう。ここでの集計とは、単純に注文明細の商品の単価に数量を掛けたものを明細分だけ合計するものとする。

 まずはVisual Studio .NETでプロジェクトの準備をしよう。ロジック用のプロジェクトを作成し、プロジェクト名を「PO.Core」とする。PO.Coreプロジェクトを含むソリューションに、同様にテスト・コード用にプロジェクトを新規作成して追加し、プロジェクト名を「PO.Test」とする。

 次に、テスト・コード用のプロジェクトをソリューション・エクスプローラから選択し、そのプロジェクトを右クリックしてコンテキスト・メニューを表示し、そのメニューから[参照の追加]を選択して[参照の追加]ダイアログを表示し、そのダイアログで、NUnitのフレームワークである「nunit.framework.dll」(このDLLファイルはNUnitのbinフォルダの中にある)への参照を追加する。さらに[参照の追加]ダイアログの[プロジェクト]タブをクリックし、PO.Coreプロジェクトも参照に追加しておく。

 準備が整ったら、いよいよ単体テストの自動化とテスト・ファーストを始めよう。


 INDEX
  [特集] .NET開発者のための開発プロセス入門(前編)
    1.アジャイル開発プロセスが誕生するまで
    2.アジャイル型開発プロセスとは何か?
    3..NET開発者がアジャイル開発プロセスを導入できない理由
    4.アジャイル開発プロセスの導入
  [特集] .NET開発者のための開発プロセス入門(後編)
  1.1人からでも導入可能なローカル・ライトウェイト開発プロセス
    2.単体テストの自動化とテスト・ファースト
    3.Mockオブジェクトとリファクタリング
    4.数名のチームで導入できるローカル・ライトウェイト開発プロセス
 

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • Kinectが切り開く“夢の近未来” (2012/2/2)
     日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか?
  • 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
     アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する
  • SQL Azure Data Sync入門 (2012/1/30)
     SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説
  • Windows Phoneアプリ市場の現状を分析する (2012/1/27)
     Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH