2. 大規模分散処理システムにおける検証
2.3 大規模分散処理システムの検証の効率化に関する先行研究
本節では大規模分散処理システムにおけるシステム検証の効率化に関する先行研究をレビュ ーする.最初に大規模分散処理システムの検証の効率化について,次に従来の検証である従来 の情報システムにおける検証の効率化の研究について紹介する.システム検証で発生する問題に 関する研究は,3,4,5 章の各章で記述する.
1.1 節で記述したように,対象とする大規模分散処理システムは,近年の BigData に対応するシ ステムとして注目されている.しかし,以降に示すように,大規模分散処理システムに関する論文や ソフトウェアの検証に関する論文はあるが,大規模分散処理システムにおけるシステム検証の効率 化に関する研究は報告されていない.報告の少なさは,大規模分散処理システムが注目されて間 もないため,従来の情報システムと比較すると開発例が多くないことや,企業にとって検証の効率 化は費用削減のアドバンテージになることから,率先して公表をしないことが一因と考えられる.
倉持[24]は,大規模分散処理システムにおいて,処理のトレースが可能なライブラリや,サービス 間の呼び出し関係と処理時間をトラッキングする API を開発して利用する報告をしている.また,
LIU ら[25]は,実際に実行されているプロセスの動作と,定義された仕様の動作とを自動的に比較 するツールを開発し利用する報告している.これらの方法は,工数をかけてライブラリや API やツー ルを開発する必要があるが,機能が少なく開発工数が開発全体に影響しない場合,デバックの効 率化に効果的である.その他には,Jerry Gao ら[26],坂西ら[27],Haryadi S. Gunawi ら[28],Sergiy VILKOMIR[29],Lian Yu ら[30],Leah Muthoni Riungu ら[31]は,ホストマシン上の仮想的なバーチ ャルマシン(VM) で構成された大規模分散処理システムにおいて,従来の情報システムにおける システム検証と比較し,ハードウェアに依存する検証や実運用の環境でのシステム検証を不要とす る報告をしている.この方法は,物理的なマシンではなく VM を利用する場合に有効である.
一方,従来の情報システムにおける検証については,Cem Kaner ら[41],Glenford J. Myers ら [42],IEEE の SWEBOK[14] で詳しく報告されている.これらは,検証の方法について記載されて おり,大規模分散処理システムの検証に全て適用が可能である.しかし,1,2 章で記述したとおり,
大規模分散処理システムに特有である大規模なデータ量で,多くのマシン台数を利用する検証作 業は,従来の情報システムにおける方法では時間を要してしまう.期間が定められた商用開発に おいては,時間を要したことで期間を延伸して検証を完了することは許されない.従来の情報シス テムにおけるシステム検証で利用する技術を,1.2.2 項で示したアクティビティの分類を利用して以 下の表 7 に示す.
表 7. 従来の情報システムにおいてシステム検証で利用する技術
アクティビティ 利用する技術 適用可否
(可:○,否:×)
計画 プロセス計画
成果物の決定
工程およびコスト見積もり
資源割り付け
リスクマネジメント
品質マネジメント
計画マネジメント
○
○
×
×
○
○
○ テ ス ト ケ ー ス
生成
論理網羅テスト(全数テスト)
組み合わせテスト(直交表,HAYST 法,オールペア,k-way)
同値分割,境界値分析
原因-結果グラフ(デシジョンテーブル,CFD 法)
機能テスト
ユースケース
統計的テスト
シナリオテスト
リスクベース
欠陥仮設法(エラー推測,異常値,特異値分析)
例外ユースケース(探索テスト)
状態遷移テスト
モデル検査(カバレッジ)
タイミングテスト
静的解析によるピンポイントテスト
ランダムテスト(モンキーテスト)
×
×
×
×
×
○
○
○
○
○
×
×
×
×
×
× テスト環境の
開発
ソフトウェアエンジニアリングツール
テストジェネレータ
テスト実行フレームワーク
テスト評価ツール
テストマネジメントツール
性能分析ツール
保守ツール
×
×
実行 動的検証
ホワイトボックステスト
パステスト(組み合わせテスト,エラー推測,欠陥仮 設法)
トランザクションフローテスト(タイミングテスト)
データフローテスト(同値分割,境界値分析)
状態遷移(グラフ)テスト(原因-結果グラフ)
ブラックボックステスト
ドメインテスト(ユースケース,統計的テスト,シナリ オテスト,リスクベース,例外ユースケース)
ランダムテスト
静的検証
構文テスト
論理テスト(カバレッジ,モデル検査,静的解析)
○
△(構文テスト は適用可)
テスト結果の 評価
テストされるプログラムの評価
テスト計画およびテスト設計におけるプログラム計量
フォールトタイプ/クラス分け/統計
フォールト密度
ライフテスト/信頼性評価
信頼度成長モデル
実施されたテストの評価
カバレッジ/徹底度計量尺度
フォールトの人為的種まき
得意仕留め得点数
種々の技法の比較および相対的有効度
○
○
問 題 報 告 / テストログ
データの収集
データの分析および情報プロダクトの開発
結果の伝達
○
○
○
欠陥追跡 欠陥/増補/論点および問題追跡ツール ○
計画アクティビティで利用する技術は,プロセス計画,成果物の決定,工数,工程,およびコスト 見積もり,資源割り付け,リスクマネジメント,品質マネジメント,計画マネジメントである[14].
プロセス計画は,ウォータフォール,スパイラル,進化的プロトタイピングといったソフトウェアライフ サイクルモデルの選定,および適切なソフトウエアライフサイクル・プロセスの適応化,および割り
付け配置の技術である.
成果物の決定は,タスクそれぞれから成果物を仕様化し決定する技術である.その過程におい て,先に開発した成果物や他のプロジェクトで開発した成果物の再利用が検討される.
工数,工程,およびコスト見積もりは,タスク,入力,出力の要素それぞれの工数として過去の開 発における規模対工数データが利用および参照可能であれば,そのデータに基づいて見積もり をする技術である.利用および参照ができない場合は,エキスパートによる判定のような開発の データを分析する方法で見積もりをする.この工数,工程,およびコスト見積もりの技術は,類似 なシステム開発のデータが存在する場合に有効である.そのため,類似なシステムが少ない大規 模分散処理システムでは適用ができない.
資源割り付けは,ガントチャートなどを用いて装置,設備,および人員をタスクに割り当てる技術 である.この資源割り付けの技術は,工数,工程,およびコスト見積もりの技術の結果を反映して おり,結果が正しい場合は有効である.見積もりの技術が確立していない大規模分散処理システ ムでは適用ができない.
リスクマネジメントは,意思決定樹やプロセスシミュレーションによるリスク査定法により,リスクの識 別と分析を行いリスクの軽減,リスクの発生による処理を行う技術である.品質マネジメントは,プ ロダクトに対して適切に定量的,定性的に定義し,全プロセスに渡って実施されるプロダクトに対 する検証と妥当性確認をする技術である.
計画マネジメントは,プロジェクト全体をどのようにマネジメントするか,および計画そのものをどの ようにマネジメントするのかをマネジメントツール[15]を活用しながら計画する技術である.
上記のとおり,プロセス計画,成果物の決定,リスクマネジメント,品質マネジメント,計画マネジメン トの技術は,どのソフトウェア開発に適用可能な技術である.しかし,工数,工程,およびコスト見積 もり,資源割り付けの技術は,大規模分散処理システムでは適用ができない.
テストケース生成アクティビティで利用する技術は,論理網羅テスト,組み合わせテスト,同値分 割,境界値分析,原因-結果グラフ,機能テスト,ユースケース,統計的テスト,シナリオ,リスクベー ス,例外ユースケース,欠陥仮設法,エラー推測,状態遷移テスト,モデルチェッキング,タイミング テスト,静的解析によるピンポイントテスト,ランダムテストである[42].
論理網羅テスト(全数テスト)は,プログラムのソースコードを網羅的に実行する技術である.
組み合わせテスト(直交表を用いたテスト)は,テストケース生成の技術を組み合わせて検証する 技術である.任意の 2 因子についての組み合わせを決定するために,直交表を利用する.
同値分割は,2 つ以上の同値のテストケースからいくつかのテストケースを選択する技術である.
境界値分析は,テストケースで入力条件と出力条件から 1 つまたは複数個の要素を選ぶ技術で ある.
原因-結果グラフ(デシジョンテーブル)は,原因-結果グラフのツールを使って問題の摘出効果 の高いテストケースを選択する技術である.原因-結果の判定の組み合わせを決定するために,
デシジョンテーブルを利用する.
機能テストは,システムの機能が規定された役割や処理ができているかどうかを確認する技術で ある.
ユースケースは,ユーザの利用シーンを想定した検証の技術である.
統計的テストは,統計的に利用が多い代表的なテストケースを作成し検証する技術である.
シナリオテストは,業務を想定したシナリオを作成し検証する技術である.
リスクベースは,バグが出た場合の影響度を品質リスクと捕らえ検証期間の早い段階で品質リスク を低減する検証の技術である.
例外ユースケースは,ユーザの利用シーン以外やトラブル状態を想定した検証の技術である.
欠陥仮設法は,品質特性から欠陥の兆候の仮説を立て,仮説に基づいて検証をする技術であ る.
エラー推測は,経験から問題を抽出できそうなテストケースを作成し検証する技術である.
状態遷移テストは,状態遷移図や状態遷移表に基づいて検証する技術である.
モデル検査は,システムを有限後の状態を持つモデルで表現し,システムが満たすべき性質が モデル上で成り立つかどうかを,モデルが取りえる全ての状態およびパス上で機械的かつ網羅 的に検証する技術である.
タイミングテストは,イベントの同時発生などタイミングが関係する箇所に着目し検証する技術であ る.
静的解析によるピンポイントテストは,ソースコードを解析してコーディングルールに合っているか どうかや,データフローや制御フローを解析し,エラーが発生しやすい箇所を分析し検証する技 術である.
ランダムテストは,ランダムな入力を与えて検証する技術である.
上記のとおり,ユースケース,統計テスト,シナリオテスト,リスクベース,欠陥仮説法の技術は,ど のソフトウェア開発に適用可能な技術である.論理網羅テスト,組み合わせテスト,同値分割,境界 値分析,原因-結果グラフ,機能テスト,例外ユースケース,状態遷移テスト,モデル検査,タイミン グテスト,静的解析によるピンポイントテスト,ランダムテストは,大規模分散処理システムでは,検 証項目数が多くなることから適用ができない.
テストケースが膨大な場合,品質を確保し効率的に検証をするには,利用する検証技術は,図 12 の縦軸と横軸が交差する中心近くに位置する検証技術の必要がある.これは,横軸の「ピンポイ ント」に位置する検証だと項目の網羅性がなく,それ以外だと大規模分散処理システムで検証項目 を抽出すると項目数が多くなってしまうからである.しかしながら,どの技術を使えば品質を確保し 効率的に検証ができるかは明らかになっていない.