3.3 構造不良の原因分析

3.3.1 エラー処理混在による構造不良の発生

図[エラー処理の混在により構造不良が発生したチャート]は1行目に「構造不良/不足」が指摘できるチャートだが,この原因は,エラー処理を条件分岐で表現 しているために,2段目に「予約する」という項目を記述できないことに原因がある.図[エラー処理の混在により構造不良が発生したチャート]をエラー処理を本処理(予約)から別にして記述すると,図[エラー処理を本処理と別にしたチャート]のようなチャートに改善することができ,「構造不良/不足」も解消される.ここで重要なのは, エラー処理の部分(4行目からのブランチ)を省略しても,チャートに問題が発生しないことである.

図 3.3.1.1 エラー処理の混在により構造不良が発生したチャート
図 3.3.1.2 エラー処理を本処理と別にしたチャート

3.3.2 逆転による不良の誘発

構造不良は,で2種類に分類できると述べたが,多く見られるパターンは,「不足」と「矛盾」が同時に起こる場合である. これは,節[構造不良]で紹介した具体例でも起こっていたことであるが,改めて整理することにする.

図 3.3.2.1 2つの構造不良の誘発
図[2つの構造不良の誘発]の左のチャートは,項目「1」に不足が指摘され,項目「2」と「3」に矛盾が指摘されている. この2つの不良の本質的な原因は,「2」と「3」の目的-手段の関係が逆転して記述されているためである. よって,この2つの不良に対する対処案は「2」と「3」の階層を交換するということだけであるが,これで2つの不良が解決するパターン が非常に多い.節[構造不良]で提示した具体例では,「3」を「2」と同じ階層に引き上げるという対処案を提示したが, 本質的な原因は,「2」と「3」の項目間の関係が適正に表現されていないということである.

3.3.3 本処理の再出現

HCPチャート作成の初学者は,同じ目的を持った項目が下位の階層に再度出現することに違和感を覚える.しかし, それは間違いではない.

「座席予約システム」を例にとれば,プログラムの一番大きな目的は「列車の座席を予約する」である. しかし,その目的の下位に再び「列車の座席を予約する」という目的が出現してもなんら問題はない. これは,階層が深くなるに従い,前処理や後処理といった非本質的な目的をもった項目が削られ,プログラム全体の 目的がよりプリミティブなものになっていく(図[本処理の再出現])ということである.こうした記述を嫌っていると,構造不良を招く原因となってしますので,作成者 もこのようなチャートの性質を理解しておくべきである.

図 3.3.3.1 本処理の再出現