JSTQB2023最新版シラバス対応

➀ソフトウェア開発ライフサイクルとは

ソフトウェア開発ライフサイクル(SDLC)は、ソフトウェア開発プロセス全体を包括する枠組みです。SDLCは、ソフトウェアの概念化から開発、テスト、展開、そして保守までのすべての段階を指します。一般的に、SDLCは以下の基本的なフェーズで構成されます。

1.要件定義
2.設計
3.開発
4.テスト
5.展開
6.保守

さまざまなSDLCモデルがあり、ウォーターフォール、アジャイル、スパイラルなどが一般的です。それぞれのモデルは異なるアプローチを取りますが、全体的な目標は同じです:高品質なソフトウェアを効率的に提供することです。

②ソフトウェア開発ライフサイクルがテストに与える影響

テストの成功のためには、SDLCへの適応が必須になってきます。SDLCの選択は以下に影響を与えます。

・テスト活動の範囲とタイミング
・テストドキュメントの詳細レベル
・テスト技法とテストアプローチの選択
・テスト自動化の範囲
・テスト担当者の役割と責任

様々な開発モデルの特徴を以下の表にまとめてみました。

開発モデル 特徴
シーケンシャル開発モデル ・プロジェクトを段階的かつ順次に進める
・各段階の完了後に次の段階に進む
・変更が難しい傾向がある
・プロジェクトの要求が確定しており、変更が少ない場合に適している
イテレーティブ開発モデル ・プロジェクトを複数のイテレーション(一連の工程を短期間で繰り返す、開発サイクル)に分割し、各イテレーションごとに要求の一部を実装する
・毎回のイテレーションで機能を追加し、改善し、フィードバックを受け取る
・頻繁な変更や要求の変更に適している
インクリメンタル開発モデル ・ソフトウェアを複数の段階的なインクリメント(部分的な機能追加)で開発する
・初期段階では基本的な機能を提供し、その後の段階で機能を追加していく
・顧客のニーズに合わせてソフトウェアを拡張する
アジャイルソフトウェア開発 ・柔軟性と進化性を重視し、短いイテレーションを通じてソフトウェアを開発する
・頻繁な顧客とのコミュニケーションを重視し、要求の変更に柔軟に対応する
・進化的な要求定義と反復的な開発プロセスを特徴とする

➂テストが主導するソフトウェア開発

テストが主導するソフトウェア開発は、従来の開発プロセスとは異なるアプローチを取ります。TDD、ATDD、BDDは、類似の開発アプローチで、いずれもテストが開発を導く手段であると定義しています。以下が各開発アプローチの説明です。

1.テスト駆動開発(TDD)
コーディングをする前にテストケースを作成し、そのテストを満たすコードを書く方法です。このプロセスでは、最初にテストを書き、その後にコードを書いてテストを満たし、最後に必要に応じてコードとテストを改善します。

2.受け入れテスト駆動開発(ATDD)
システムの受け入れ基準からテストを作成し、そのテストに合格するためにアプリケーションを開発する方法です。この手法では、開発前に受け入れテストを作成し、それに基づいてアプリケーションを開発します。

3.振る舞い駆動開発(BDD)
アプリケーションの望ましい振る舞いをステークホルダーが理解しやすい形式で記述したテストケースを使用して開発する方法です。通常、Given/When/Thenのフォーマットでテストケースを書き、そのテストケースを実行可能なテストに自動的に変換します。

これらのアプローチでは、コード品質を確保するために、将来の適応やリファクタリングにおいてテストケースを自動化されたテストとして持続的に利用することが一般的です。

④DevOpsとテスト

DevOpsとはこれまで別々に役割分担されていた開発(Development)と運用(Operations)の二つのプロセスの連携を重視した組織的な考え方になります。連携を強固にしていくことで柔軟かつスピード感のある開発・運用を可能にすることが期待できます。また、DevOpsのフレームワークには自動化がポイントとなっており、作業の効率化や人的ミスの防止といった品質についても向上できることが期待できます。開発と運用にはギャップがあるため双方の価値を活かすためにも組織内の文化の転換が求められます。

DevOpsの推進にあたり以下について技術的に実施することが必要となります。

・チームの自律性
・迅速なフィードバック
・統合ツールチェーン
・継続的インテグレーション(Continuous Integration:CI)
・継続的デリバリー(Continuous Delivery:CD)

また、テストをする観点から、DevOpsの利点として以下が挙げられます。

DevOpsの利点

・コード品質や既存のコードへの影響を迅速に把握するため、テスト結果から即座にフィードバックを受け取る。
・CIは、開発者にコンポーネントテストや静的解析を通じた高品質なコードの提出を促し、テストにおけるシフトレフトのアプローチを推進する。
・CI/CDなどの自動化プロセスを活用することで、安定したテスト環境の構築が容易になる。
ソフトウェアの非機能品質特性(例:性能、信頼性)に対する関心が高まる。
・デリバリーパイプラインによる自動化により、手動での繰り返しテストが不要になる。
自動化されたリグレッションテストにより、リグレッションのリスクを最小限に抑える。

一方で、DevOpsを取り入れる上で以下のようなリスクも存在します。

DevOpsを取り入れる上でのリスク

・DevOpsにおけるデリバリーパイプラインを設計し、運用する必要がある。
・CI/CDツールの導入と維持管理を担当しなければならない。
・テスト自動化は、追加の資源が必要であり、その設計と保守が課題となる場合がある。

DevOpsには高度な自動テストが必要ですが、手動テスト、特にユーザーの視点からのテストは依然として不可欠です。

devopsスキームソフトウェア開発ライフサイクル

⑤シフトレフトアプローチ

早期テストの原則は、時に「シフトレフト」と呼ばれることがあります。なぜなら、このアプローチではテストがソフトウェア開発ライフサイクル(SDLC)の早い段階で実行されるからです。しかし、シフトレフトでは、テストが通常よりも早い段階で行われるべきだと提唱していますが、これはSDLCの後半でのテストを軽視することを意味しているわけではありません。SDLCの早い段階(要件定義や設計など)からテスト活動を行うことは追加でキャッチアップや労力などのコストがかかります。しかし、上流からの品質活動を行うことで早期フィードバックが可能となり、大きな手戻りの防止などが行え、テスト工程時やリリース後の労力やコストを削減することが期待できます。(仕様段階の修正コストを1とした場合、リリース後の修正コストは200倍とされています)テストにおけるシフトレフトアプローチの例として以下のようなものが考えられます。

・テストをする観点から仕様書をレビューする。

⇒仕様書の曖昧さ、不完全さ、矛盾など、潜在的な欠陥を発見することが可能

・コードを書く前にテストケースを書き、コード実装時にテストハーネスでコードを実行する。

・CIやCDを用いる。

⇒ソースコードをコミットした段階で自動コンポーネントテストを行い、高速フィードバックを可能にして、環境に出る前に修正を行えるようにする

・動的テストの実施前に静的解析を行う。

・コンポーネントテストレベルで非機能テストの実施を始める。

⇒非機能面の不具合を早期に発見する

⑥振り返りとプロセス改善

振り返り(Retrospective)はプロジェクトやイテレーションの終了、リリース後に行われることが多いです。基本的にSDLCに従う形で振り返りが設定されますが、障害発生時や緊急の出来事など起きた際にはタイミングを待つことなく、必要な時に行われることもあります。

・成功したこと、成功したことで継続すること
・成功しなかったこと、改善できること
・改善を取り入れ、成功をどう活かすか、残していくか

振り返りにおいて、どうしても成功しなかったことにフォーカスがあたりやすいので成功したことについても振り返りを行うことも必須となります。また、振り返りを行っただけにしないためにも、振り返りの結果を記録として残し、テスト完了のレポートとして活用することが大事になってきます。振り返りは継続的改善を成功させるために必要不可欠なものであるので、改善を追求することが重要になります。

テストにおいて振り返りとプロセス改善を行うことで以下のようなメリットがあります、

・テストの有効性/効率性の向上
・テストウェアの品質向上
・チームの絆と学び
・テストベースの品質向上
・開発とテストの連携が向上

テストにおける振り返りとプロセス改善は、定期的に行われる活動であり、過去のテストの実施や結果を評価し、より効果的な方法やプロセス改善を特定することができます。

⑦まとめ

ソフトウェアテスト開発ライフサイクル(SDLC)は、ソフトウェアテスト活動を計画し、設計し、実装し、実行し、管理するための一連のプロセスとフェーズを指しています。このライフサイクルは、ソフトウェア開発のライフサイクルと密接に関連し、ソフトウェア製品の品質や信頼性を確保するために重要です。

 

お問い合わせ