情報処理安全確保支援士試験 令和5年秋期午前Ⅱ システムの耐障害性及びシステム運用の信頼性を高める手法

出典:令和5年秋期 午前Ⅱ 問22 分野:ソフトウェア開発管理技術 / 開発プロセス・ 手法
目的別のサービスが多数連携して動作する大規模な分散型のシステムでは,障害時の挙動を予知することが困難である。このようなシステムにおいて,ステージング環境や本番環境で意図的に障害を引き起こしてシステムの挙動を観察し,発見した問題を修正することを継続的に実施し,システムの耐障害性及びシステム運用の信頼性を高めていく手法はどれか。
  • ア:DevOps
  • イ:Infrastructure as Code
  • ウ:カオスエンジニアリング
  • エ:テスト駆動開発
解説

カオスエンジニアリングは、システムに意図的に障害を発生させ、そのときの挙動を観察することで、潜在的な問題を発見し、耐障害性を高める手法です。

大規模な分散システムでは、サービス同士が複雑に連携しているため、障害時の影響を事前に完全に予測することが難しくなります。そのため、ステージング環境や本番環境で制御された障害を起こし、継続的に改善していきます。

したがって、が適切です。

❌他選択肢が誤りの理由
ア:DevOps
⇒開発と運用が連携し、継続的に開発・リリース・改善を進める考え方です。意図的に障害を起こして耐障害性を検証する手法そのものではありません。
イ:Infrastructure as Code
⇒サーバやネットワークなどのインフラ構成をコードで管理する考え方です。障害を意図的に発生させて挙動を確認する手法ではありません。
エ:テスト駆動開発
⇒プログラムを書く前にテストを作成し、そのテストに合格するように実装を進める開発手法です。分散システムに障害を起こして耐障害性を高める手法ではありません。
TSUNAGARU-ADVICE

まず押さえたいこと

カオスエンジニアリングは、分散システムなどに対して意図的に障害を発生させ、実際の障害時にシステムがどう振る舞うかを観察して改善する手法です。

迷ったときの判断軸

DevOpsは開発と運用の連携、Infrastructure as Codeはインフラ構成のコード管理、テスト駆動開発はテストを先に作る開発手法です。一方で、障害を意図的に起こして耐障害性を高める文脈なら、カオスエンジニアリングと整理すると判断しやすくなります。

科目Bにつなげるために

科目Bでは、システムの信頼性向上について、障害を避けるだけでなく、障害が起きたときにどう耐えるかを問われます。カオスエンジニアリングは、障害発生を前提にシステムの弱点を見つけ、継続的に改善する考え方として理解しておきましょう。※開発関連試験向け