実装・構築
モジュールの強度と結合度、MVCモデルとデザインパターン、コードレビューとデバッグ、命令網羅や限界値分析などのテスト手法を理解できるようになります。
ねらい
設計をコードにする実装の工程を学びます。このレッスンを終えると、モジュールの独立性の評価基準、アーキテクチャパターンとデザインパターン、レビューとデバッグの手法、ユニットテストのテストデータ作成法を説明できるようになります。
ストーリー
「このプログラム、1か所直すと別の場所が壊れるんです」。保守の現場のよくある悲鳴です。原因の多くは、部品どうしの絡まり合い。部品の独立性を高く保ち、書いたコードを人の目と機械で確かめる。壊れにくいソフトウェアは、実装の規律から生まれます。
モジュールの独立性:強度と結合度
モジュール分割の善し悪しは、独立性で評価します。物差しは2つあります。
- 結束性(強度)は、1つのモジュールの中身がどれだけ1つの目的にまとまっているかです。強いほど良い設計です。
- 結合度は、モジュールどうしの結び付きの強さです。弱いほど良い設計です。
「中身は濃く、つながりは薄く」が合言葉です。良い設計のモジュールは内部の結び付きが密で外部への結び付きが疎になり、悪い設計はその逆になります。分割の際は、モジュールの制御領域と影響領域、分割量も考慮し、必要ならモジュール再分割を行います。モジュール仕様の作成には、流れ図、決定表、NS図、ジャクソン法、ワーニエ法を使います。
パターンとレビュー
アーキテクチャパターンとデザインパターン
ソフトウェア構造の定石をアーキテクチャパターンといい、画面(View)、業務ロジック(Model)、制御(Controller)に分けるMVCモデルが代表です。オブジェクト指向設計の定石集はデザインパターンと呼ばれ、生成に関するパターン、構造に関するパターン、振る舞いに関するパターンの3種類に分類されます。定石を使うことで、設計の質と伝わりやすさが上がります。部品化と再利用の実現にはコンポーネントウェアの考え方が生きています。
レビュー
成果物は人の目で確かめます。対等な立場で確認し合うピアレビュー、設計を対象とするデザインレビュー、コードを対象とするコードレビューがあり、進め方には、作成者が説明しながら歩くウォークスルーと、モデレーターが進行し役割を決めて厳密に行うインスペクションがあります。コードレビューでは、コーディング標準の順守や効率性・保守性を確認し、プログラムの複雑さを測るサイクロマティック複雑度などのメトリクス計測も行われます。
コーディングとデバッグ
ソフトウェアユニットの作成は、コーディング標準(インデンテーション、ネスト、命名規則、使用禁止命令)とプログラム言語の仕様に従い、ソフトウェア詳細設計書に基づいて行います。コードとテスト結果は、要件との追跡可能性、外部一貫性と内部一貫性、テスト網羅性などの基準で評価します。
エディタや開発環境のコーディング支援手法として、コード補完、オートインデント、シンタックスハイライト、実行を一時停止させるブレークポイントがあります。誤り(バグ)を取り除くデバッグでは、コードを実行せずに調べる静的解析と、動かして調べる動的テストを併用し、満たすべき条件を検査するアサーション、デバッガ、トレーサー、スナップショットといった道具を使います。
ユニットテストの手法
テストは、テスト計画、テスト準備(テスト環境、テストデータ)、実施、評価の手順で進めます。障害が見つかったら記録し、障害分析を行って修正します。テストの進み具合と残存バグの傾向は、バグ曲線やバグ管理図で管理します。
テストデータの作り方は、2つの立場に分かれます。
ホワイトボックス法:内部構造から作る
プログラムの内部構造に着目し、コードのどこまでを通すかという網羅基準でテストケースを作ります。
| 基準 | 網羅する対象 |
|---|---|
| 命令網羅 | すべての命令を少なくとも1回実行する |
| 判定条件網羅 | すべての分岐の真と偽を少なくとも1回ずつ通す |
| 条件網羅 | 分岐を構成する個々の条件の真偽を網羅する |
| 複数条件網羅 | 個々の条件の真偽のすべての組合せを網羅する |
下に行くほど厳しい基準になります。
ブラックボックス法:仕様から作る
内部を見ずに、入力と出力の仕様からテストケースを作ります。入力を同じ結果になるグループに分けて代表値を選ぶ同値分析法、誤りが出やすい境界の値を狙う限界値分析法、入力と出力の因果関係を整理する原因結果グラフ法があります。このほか、わざとバグを混ぜて検出率からテストの質を測るエラー埋込法や、組合せを効率よく選ぶ実験計画法という手法もあります。
例題
次の問いに答えてください。
問1 モジュールの独立性を高めるには、結束性(強度)と結合度をそれぞれどうすべきですか。
問2 入力の有効範囲が1から100のとき、0、1、100、101のような値を選んでテストする手法を何といいますか。
解答と解説
問1の答えは、結束性(強度)は強く、結合度は弱くです。中身のまとまりが濃く、外とのつながりが薄いモジュールほど、変更の影響が広がりにくくなります。
問2の答えは限界値分析法です。誤りは境界のすぐ内側と外側に潜みやすいという経験則に基づくブラックボックス法の手法です。
応用
本試験を意識した問題を解いてみましょう。
問 ホワイトボックステストの網羅基準のうち、すべての分岐について真になる場合と偽になる場合の両方を少なくとも1回ずつ実行する基準はどれでしょうか。次の中から選んでください。
- 判定条件網羅
- 命令網羅
- 同値分析法
- 限界値分析法
解答と解説
答えは1の判定条件網羅(decision coverage)です。分岐のすべての向きを通すため、命令網羅よりも厳しい基準になります。2の命令網羅は、すべての命令を1回は実行するという最も緩い基準で、分岐の両方の向きまでは求めません。3の同値分析法と4の限界値分析法は、内部構造ではなく入出力の仕様からテストケースを作るブラックボックス法の手法であり、網羅基準の名前ではありません。
分からなかった点・気になった点
読み込み中です。