ヒャッハー!ふっくら太郎です。

ソフトウェアテストやその他諸々について、適当に書いています。

ソフトウェアテストを学ぶ その9.ソフトウェア開発モデルとテスト② (反復型開発モデル)

こんちは。魅惑のハスキーボイン ふっくら太郎です。

今回も引き続き、ソフトウェア開発モデルとソフトウェアテストの蜜月関係のお話です。

第2回目は、反復型開発モデルとテストの関係について勉強したいと思います。

 

 

反復型開発モデルとは? 

ウォーターフォール型開発モデルの弱点を解消するために提案された開発モデル。

ウォーターフォール型開発モデルの弱点

  • ウォーターフォール型開発モデルは、全ての要求仕様を設計してから開発するため、ソフトウェアが形になるまで時間が掛かる。ソフトウェアライフサイクルの短期化に伴い、開発期間の短縮化が求められる現在の開発サイクルには合わない。
  • 仕様変更やテスト工程で欠陥が発生すると手戻りが発生し、工数・コストを圧迫する。
  • ソフトウェアの大規模化、プロジェクトの複雑化に伴い、要件定義、設計工程内で全ての作業を行うことが難しくなった。

 

反復型開発モデルは、ウォーターフォール型の開発ライフサイクル (要件定義→設計→開発→テスト)を繰り返し行い、ソフトウェアを段階的に完成させていく開発モデル。

ウォーターフォール型開発モデルと比較して、以下のメリットがある。

  • 開発ライフサイクルを繰り返しソフトウェアを作成するため、ソフトウェアが形になるまでの時間がウォーターフォール型開発より短い。
  • プロジェクト期間中、何度も、要件定義・設計を行うため、仕様変更や不具合修正に対応し易い。(臨機応変に計画の変更が可能)
  • プロジェクト開始時に全ての要件、仕様が決まってなくても開発作業を開始できる。

反面、以下のデメリットもある。

  • 複数回に分けて要件定義を行うため、機能ごとに要件定義の粒度が合わないことがある。また、全体像が見えないため、要件の抽出漏れが起こる恐れがある。
  • 機能追加・変更単位でテストするため、ソフトウェア全体に対してのテストをする工程が無い。(ウォーターフォール型開発のシステムテスト以降のテスト工程にあたるものが無い)

 

反復型開発モデルには以下の開発モデルがある。

  • プロトタイピング開発モデル

  • イテレーション開発モデル

  • インクリメンタル開発モデル

 

プロトタイピング開発モデル

 

要件定義の段階でソフトウェアの試作 (プロトタイピング) を作成し開発するモデル。

仕様策定時にソフトウェアの試作を作り、ソフトウェアを動かしながら、顧客と仕様を作り込む開発スタイル。

仕様の作り込みがし易いことと、ソフトウェアを動かしながら仕様策定するため、顧客と仕様の齟齬が発生し難いことがメリット。

技術的な不確定要素が多い要素技術開発等で用いられる。

試作プログラムは最低限の機能のみ搭載するため、プロトタイピングでは必要最低限のテストのみ行う。

設計工程以降は、ウォーターフォール型開発と同じように、開発工程、テスト工程を進める。

f:id:hukkura_tarou:20170814183551p:plain

 

イテレーション開発モデル

 

イテレーション開発モデルは、仕様策定時にプロトタイプ (試作版ソフトウェア) を作成して、段階的に機能拡張を行いソフトウェアを完成させる開発モデル。

プロトタイピング開発モデルを発展させた開発モデル。

 

代表的な開発モデルに、「RAD型開発 (高速アプリケーション開発)」がある。

 

RAD型開発 (高速アプリケーション開発)

短期間でソフトウェアを作成するための開発モデル。

要件定義からテストまでの全工程を顧客と開発者数名の小規模なチームで開発する。

プロトタイプ作成後、要件定義~テストのサイクルを繰り返し、プロトタイプを完成品にしていく。

f:id:hukkura_tarou:20170814185037p:plain

 開発工数を短縮するため、GUI作成ツールや自動プログラミングツールを使用して効率化する。テストも同様に、自動テストが用いられる。

 

インクリメンタル開発モデル

 

インクリメンタル開発モデルは、イテレーションと呼ばれる開発サイクル毎に実装対象機能を決め、段階的に機能を実装していきながらソフトウェアを開発するモデル。

代表的な開発モデルに「アジャイル開発モデル」がある。

アジャイル開発モデル

 2週間程度のサイクルでイテレーションを実行し、期間内に計画している機能を作成・リリースする。

優先度の高いタスクから計画化する。

 

f:id:hukkura_tarou:20170814181739p:plain

 イテレーション内で行うテストは、TDD (テスト駆動開発)と呼ばれる単体テストを実行する。

TDD (テスト駆動開発)

テスト設計・テストコードの実装後にソースコードを実装する手法。

テストに通すための最低限のソースコードを実装後、リファクタリングを実施し、実装を完了させる。

単体テストと実装を同時に行うことで以下の効果がある。

  • 実装とテストを同時に実施することでバグ検出・修正のタイムラグを無くす。
  • テストを考慮した実装になるため、ソースコードの保守性が高まる。
  • 回帰テストにテストコードの流用が可能。

デメリットとして以下の課題がある。

  • 実装時にテストコードを必ず実装するため、コーディング工数が増える。
  • 実装する内容によってはテストコード作成が困難なことがある。
  • テストコードの保守工数が掛かる。

 

ハイブリッドアジャイル (WF + アジャイル)

ウォーターフォール開発型モデルとアジャイル開発モデル混合型の開発モデル。

上流工程と下流工程はウォーターフォール開発型モデルを用いて、中流工程はアジャイル開発モデルを用いる。

2つの開発モデルを組み合わせることでお互いの開発モデルが弱点とする部分をカバーし、効率的に開発が行える。

f:id:hukkura_tarou:20170814231127p:plain

まとめ

特にまとめることはナッシング!

 

[参考]

 

ソフトウェアテスト教科書 JSTQB Foundation 第3版

ソフトウェアテスト教科書 JSTQB Foundation 第3版

  • 作者: 大西建児,勝亦匡秀,佐々木方規,鈴木三紀夫,中野直樹,町田欣史,湯本剛,吉澤智美
  • 出版社/メーカー: 翔泳社
  • 発売日: 2011/11/12
  • メディア: 単行本(ソフトカバー)
  • 購入: 5人 クリック: 85回
  • この商品を含むブログ (12件) を見る
 

 

www.linuxacademy.ne.jp

 

アジャイル開発モデルの説明で使った素敵なプログラムアイコン

Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY