Files
cobol-tna-system/基本設計書/05_人事情報管理システム_設計書(サブシステムE).md

22 KiB
Raw Permalink Blame History

人事情報管理システム 設計書(サブシステムE)

システム概要

本サブシステムは、従業員の基本情報(氏名カナ/漢字)のフォーマット検証、 スキル評価データの集計・分析、社員台帳印刷、および 人事異動データによるDB更新を行う。 既存プログラム(JIN01KNS/JIN02SKL/JIN03RAN)に加え、 JIN04PRT(社員台帳印刷)と JIN05UPD(人事異動DB更新)を新規追加し、 未カバーのCOBOL予約語を計16語カバーする。 さらに JIN06SRT(社員データ並替)・JIN07SUB(社員情報取得サブPGM)・ JIN08TST(JIN07SUB呼出テスト)を追加し、 SORT/RELEASE/EXIT PROGRAM/ADDRESS/OMITTED をカバーする。 最後に JIN09RPT(社員別スキル集計レポート)を追加し、 CANCEL/I-O-CONTROL/NEXT SENTENCE/EJECT/FALSE の5語をカバーし、 PERFORM(複合条件)・SET(条件名 SET)を昇格させる。 (SKIP2 はソース行 *SKIP2 がコメント扱いでディレクティブとして機能しないため、 実装せず統計対象から除外する。当初は SAME RECORD AREA もカバー予定だったが、GnuCOBOL 3.2 でレコード長の 異なるファイル間の共有領域が最小レコード長に固定される制約が判明したため、 SAME は断念した。)

サブシステム情報

項目 内容
サブシステムID JIN(人事→JINji
COBOLプログラム数 9(主7・サブ1・テスト1
JCL数 7
DB JIN05UPD のみ DB2 使用(EMPLOYEE マスタ)

サブシステム内ファイル

# ファイル名 編成 RECM サイズ 用途 区分
1 EMP-IMPORT SEQUENTIAL FB 200 人事取込データ(外部システムよりCSV→EBCDIC変換済) 新規
2 EMP-VALID SEQUENTIAL FB 200 チェック通過正常データ 新規
3 VALID-ERROR SEQUENTIAL FB 80 バリデーションエラーレコード(PROGRAMID・EMP-ID・ERR-CODE・詳細) 新規
4 SKILL-EVAL SEQUENTIAL FB 200 スキル評価明細データ 新規
5 SKILL-MST SEQUENTIAL FB 80 スキル評価基準マスタ 新規
6 SKILL-AGG SEQUENTIAL FB 200 スキル別評価集計結果 新規
7 JIN-LEDGER SEQUENTIAL FB 132 社員台帳印刷ファイル(WRITE ADVANCING + LINAGE制御)。JIN04PRT出力 新規
8 HR-TRANS SEQUENTIAL FB 200 人事異動トランザクション。JIN05UPD入力 新規
9 SORTED-EMP SEQUENTIAL FB 200 社員データ並替済ファイル(EMP-ID昇順)。JIN06SRT出力 新規
10 SKILL-SUM SEQUENTIAL FB 120 社員別スキル集計結果レポート。JIN09RPT出力 新規

システム定数

定数 説明
KANA-MAX-LEN 20 氏名カナ最大桁数(半角)
SUBCODE-LEN 4 補助コード桁数
SKILL-LEVEL-MAX 10 スキルレベルの最大値
EVAL-SCORE-MAX 999 評価点数の最大値
PAGE-LINES 66 台帳印刷1ページ行数(LINAGE
FOOT-LINE 60 台帳印刷フッティング開始行
TOP-MARGIN 2 台帳印刷上部余白
BOTTOM-MARGIN 4 台帳印刷下部余白
MAX-TRANS 500 JIN05UPD 最大処理件数(PERFORM UNTIL の上限ガード)
MAX-SORT-REC 999 JIN06SRT 最大SORT件数(PERFORM UNTIL + WRK-SORT-CNT の上限ガード)
SKILL-LIST-MAX 20 JIN09RPT 内部表(スキル別集計)最大要素数
SUM-LINES-MAX 100 JIN09RPT 1社員あたり最大出力行数

共通関数利用方針

既存のサブプログラム(SUB01DAT〜SUB05TIM)は本サブシステムでも利用する。 連絡領域のCOPY書式は JINDATACJINMSGACJINENDAC を全プログラムで共用する。 JIN05UPD は DB2EMPLOYEE マスタ)へアクセスするため、EXEC SQL を使用する。 DBアクセス用の COPY 書式として DB-COMMON を WORKING-STORAGE に取り込む。


処理フロー

╞══ JINJ010 ═══════════════════════════════════╡
│ JIN01KNS(カナ氏名チェック) PGMパターン: 27
│   人事取込データ(EMP-IMPORT)を1レコードずつ読み込み
│   IF KANA-SEI IS ALPHABETIC-UPPER AND KANA-MEI IS ALPHABETIC-UPPER → 正常
│   半角20桁超過 OR 補助コード4桁不一致 → エラーファイル出力
│   ADD 1 TO WS-READ-CNT END-ADD(件数カウント)
│   RETURN-CODE に終了ステータス設定
│   PROGRAM-ID IS INITIAL 指定
├── 正常 → EMP-VALID(200B 正常データ)
└── 異常 → VALID-ERROR(80B エラーレコード)
│
╞══ JINJ020 ═══════════════════════════════════╡
│ JIN02SKL(スキル別評価集計) PGMパターン: 19
│   SKILL-EVALM件の評価明細)× SKILL-MST(N件の評価基準)
│   SEARCH ALL でSKILL-CODEに対応するLEVEL判定
│   内部表にスキルコード×レベル別の件数と合計点を集計
│   集計後、PERFORM VARYINGで降順(DESCENDING)走査し出力
│   DIVIDE ... GIVING ... END-DIVIDE で平均点算出
│   SUBTRACT 1 FROM WS-IDX END-SUBTRACT で内部表走査
│   USAGE BINARY / USAGE PACKED-DECIMAL でカウンタ・金額定義
│   エラー件数表示に ZZZZ9 編集
├── → SKILL-AGG(200B スキル別評価集計結果)
└── 異常 → VALID-ERROR(80B エラーレコード)
│
╞══ JINJ030 ═══════════════════════════════════╡
│ JIN03RAN(スキル評価ランキング出力) PGMパターン: 36
│   SKILL-AGG(集計結果)を読込、平均点降順にランク付け
│   OCCURS DESCENDING KEY で内部表定義、SET UP BY/DOWN BY で走査
│   MOVE CORRESPONDING でWS→W01転記
│   COMP-4 バイナリカウンタ使用
├── → RANK-OUT(200B ランキング出力ファイル)
│
╞══ JINJ040 ═══════════════════════════════════╡
│ JIN04PRT(社員台帳印刷) PGMパターン: 編集出力
│   EMP-VALID(200B チェック済社員データ)を読込み、台帳形式で印刷出力
│   ACCEPT FROM DATE / FROM TIME で印刷日時取得
│   LINAGE 制御(66行/ページ)でページ管理
│   PAGE-COUNTER 特殊レジスタでページ番号出力
│   DISPLAY UPON CONSOLE で開始/終了メッセージ
│   WRITE AFTER ADVANCING PAGE / AT END-OF-PAGE で改ページ制御
│   CLOSE WITH LOCK で出力ファイル保護
│   STRING ON OVERFLOW で安全な文字列編集
│   エラー時 STOP literal で終了
├── → JIN-LEDGER(132B 台帳印刷ファイル)
│
╞══ JINJ050 ═══════════════════════════════════╡
│ JIN05UPD(人事異動DB更新) PGMパターン: DB更新
│   HR-TRANS200B 人事異動)を読込み、DB2 の EMPLOYEE マスタを更新
│   CALL ON EXCEPTION でサブプログラム呼出エラー捕捉
│   SET TO FALSE で状態フラグ制御
│   INITIALIZE REPLACING で特定項目のみ初期化
│   PERFORM UNTIL WS-EOF OR WS-COUNT > 500 でループ(TIMES相当)
│   88-level VALUE 'A' 'B' 'C'(複数値)でトランザクション種別判定
│   EVALUATE WHEN THRU で範囲条件分岐
│   CALL BY CONTENT で値渡し呼出
│   EXIT PARAGRAPH で段落終了
├── DB2 → EMPLOYEE マスタ更新
└── 異常 → VALID-ERROR(80B エラーレコード)
│
╞══ JINJ060 ═══════════════════════════════════╡
│ JIN06SRT(社員データ並替) PGMパターン: 34SORT
│   EMP-VALID200B)を INPUT PROCEDURE で読込
│   PERFORM UNTIL + WRK-SORT-CNT 比較で最大件数制限(MAX-SORT-REC
│   RELEASE で SORT ファイルへ送出
│   SORT ... ON ASCENDING KEY EMP-ID
│   OUTPUT PROCEDURE で RETURN 受取 → SORTED-EMP へ書出
├── → SORTED-EMP(200B 並替済社員データ)
│
╞══ JINJ070 ═══════════════════════════════════╡
│ JIN07SUB(社員情報取得サブPGM PGMパターン: 25(サブPGM
│   LINKAGE SECTION で検索条件(EMP-ID)と取得項目(JIN01REC 既存項目)を受取
│   EMP-VALID を順次検索し一致レコードの項目を返却
│   IS OMITTED 判定で OMITTED 引数対応(ADDRESS OF は MOVE ADDRESS OF で別途カバー)
│   終了は EXIT PROGRAMGOBACK 不使用)
└── JIN08TST から CALL2回:全引数 / KANJI-NAME OMITTED
│
╞══ JINJ090 ═══════════════════════════════════╡
│ JIN09RPT(社員別スキル集計レポート) PGMパターン: 32(1:N+キーブレイク)
│   SKILL-EVALM件)を EMP-ID 昇順で読み込み、社員キーブレイク集計
│   I-O-CONTROL 段落(予約語カバー)を記載
│   NESTED IF3〜4段)でスコア→S/A/B/C レベル判定(複合条件 AND/OR
│   PERFORM VARYING の多重ループ(社員×明細×内部表20要素)
│   NEXT SENTENCE で文言継続制御、SET 条件名 TO FALSE で状態リセット
│   集計完了後、社員別に SKILL-SUM120B)へ出力
│   CANCEL 'SUB02MSG' でメッセージサブPGMを解放
│   EJECT でソースページ・行制御
├── → SKILL-SUM(120B 社員別スキル集計結果)
└── 異常 → VALID-ERROR(80B エラーレコード)

JCL

JINJ010 — カナ氏名チェック

//JINJ010  JOB (ACCT),'カナ氏名チェック',CLASS=A
//*
//*=====================================================================
//* STEP010: 半角カナチェック(Type 27
//*=====================================================================
//STEP010  EXEC PGM=JIN01KNS
//JIN01R01  DD DSN=EMP-IMPORT.DAT,DISP=SHR
//JIN01W01  DD DSN=EMP-VALID.DAT,DISP=(NEW,CATLG)
//JIN01W02  DD DSN=VALID-ERROR.DAT,DISP=(NEW,PASS)

JINJ020 — スキル別評価集計

//JINJ020  JOB (ACCT),'スキル別評価集計',CLASS=A
//*
//*=====================================================================
//* STEP010: M:N→N件(Type 19
//*=====================================================================
//STEP010  EXEC PGM=JIN02SKL
//JIN02R01  DD DSN=SKILL-EVAL.DAT,DISP=SHR
//JIN02R02  DD DSN=SKILL-MST.DAT,DISP=SHR
//JIN02W01  DD DSN=SKILL-AGG.DAT,DISP=(NEW,CATLG)
//JIN02W02  DD DSN=VALID-ERROR.DAT,DISP=(NEW,PASS)

JINJ030 — スキル評価ランキング出力

//JINJ030  JOB (ACCT),'スキル評価ランキング',CLASS=A
//*
//*=====================================================================
//* STEP010: ランキング出力(Type 36
//*=====================================================================
//STEP010  EXEC PGM=JIN03RAN
//JIN03R01  DD DSN=SKILL-AGG.DAT,DISP=SHR
//JIN03W01  DD DSN=RANK-OUT.DAT,DISP=(NEW,CATLG)

JINJ040 — 社員台帳印刷

//JINJ040  JOB (ACCT),'社員台帳印刷',CLASS=A
//*
//*=====================================================================
//* STEP010: 台帳印刷(編集出力)
//*=====================================================================
//STEP010  EXEC PGM=JIN04PRT
//JIN04R01  DD DSN=EMP-VALID.DAT,DISP=SHR
//JIN04W01  DD DSN=JIN-LEDGER.DAT,DISP=(NEW,CATLG)

JINJ050 — 人事異動DB更新

//JINJ050  JOB (ACCT),'人事異動DB更新',CLASS=A
//*
//*=====================================================================
//* STEP010: DB更新(Type 09
//*=====================================================================
//STEP010  EXEC PGM=JIN05UPD
//JIN05R01  DD DSN=HR-TRANS.DAT,DISP=SHR
//JIN05W01  DD DSN=VALID-ERROR.DAT,DISP=(NEW,PASS)

JINJ060 — 社員データ並替

//JINJ060  JOB (ACCT),'社員データ並替',CLASS=A
//*
//*=====================================================================
//* STEP010: SORTType 34
//*=====================================================================
//STEP010  EXEC PGM=JIN06SRT
//SORTLIB   DD DSN=SYS1.SORTLIB,DISP=SHR
//SORTWK01  DD DSN=&&SORTWK1,UNIT=SYSDA,SPACE=(CYL,(50,50))
//SORTWK02  DD DSN=&&SORTWK2,UNIT=SYSDA,SPACE=(CYL,(50,50))
//SORTWK03  DD DSN=&&SORTWK3,UNIT=SYSDA,SPACE=(CYL,(50,50))
//JIN06R01  DD DSN=EMP-VALID.DAT,DISP=SHR
//JIN06W01  DD DSN=SORTED-EMP.DAT,DISP=(NEW,CATLG)
//JIN06W02  DD DSN=VALID-ERROR.DAT,DISP=(NEW,PASS)

注:JIN07SUB はサブプログラム(CALL される側)のため JCL を持たない。 JIN08TST は JIN07SUB の動作確認用テストドライバであり、ローカル開発環境で単体実行する(本番 JCL は不要)。 JIN07SUB が EMP-VALID を読込むための DDJIN07R01)は、呼出側 JIN08TST の実行時に環境変数で割当てる。 ※ AGENTS.md 規約「サブプログラムは GOBACK を使用」に対し、JIN07SUB はキーワードカバー目的で EXIT PROGRAM を 使用する例外とする(IBM COBOL 上 EXIT PROGRAM は正しい終了文。GnuCOBOL でもコンパイル実証済み)。

JINJ090 — 社員別スキル集計レポート

//JINJ090  JOB (ACCT),'社員別スキル集計',CLASS=A
//*
//*=====================================================================
//* STEP010: SKILL-EVAL を EMP-ID 昇順でソート
//*=====================================================================
//STEP010  EXEC PGM=SORT
//SORTLIB   DD DSN=SYS1.SORTLIB,DISP=SHR
//SORTWK01  DD DSN=&&SORTWK1,UNIT=SYSDA,SPACE=(CYL,(50,50))
//SORTWK02  DD DSN=&&SORTWK2,UNIT=SYSDA,SPACE=(CYL,(50,50))
//SORTWK03  DD DSN=&&SORTWK3,UNIT=SYSDA,SPACE=(CYL,(50,50))
//SORTIN    DD DSN=SKILL-EVAL.DAT,DISP=SHR
//SORTOUT   DD DSN=SKILL-EVAL-SORTED.DAT,DISP=(NEW,CATLG)
//SYSIN     DD *
  SORT FIELDS=(5,8,CH,A)
/*
//*
//*=====================================================================
//* STEP020: 社員別スキル集計(Type 32
//*=====================================================================
//STEP020  EXEC PGM=JIN09RPT
//JIN09R01  DD DSN=SKILL-EVAL-SORTED.DAT,DISP=SHR
//JIN09R02  DD DSN=SKILL-MST.DAT,DISP=SHR
//JIN09W01  DD DSN=SKILL-SUM.DAT,DISP=(NEW,CATLG)
//JIN09W02  DD DSN=VALID-ERROR.DAT,DISP=(NEW,PASS)

プログラム一覧

# PGM-ID PGMパターン 機能概要 使用COPY DBアクセス CALL先
1 JIN01KNS 27 半角20桁/4桁チェック 人事取込データの氏名カナ桁数・半角英大文字チェック JIN01REC, JINDATAC, JINMSGAC, JINENDAC なし SUB01DAT, SUB02MSG, SUB03END
2 JIN02SKL 19 M:N→N件 スキル評価明細×評価基準マスタの集計(M件→N件出力) SKILL-EVAL-REC, SKILL-MST-REC, SKILL-AGG-REC, VALID-ERROR-REC, JINDATAC, JINMSGAC, JINENDAC なし SUB01DAT, SUB02MSG, SUB03END
3 JIN03RAN 36 ランキング生成 スキル評価集計結果を平均点降順にランキング出力 SKILL-AGG-REC, JIN03REC, JINDATAC, JINMSGAC, JINENDAC なし SUB01DAT, SUB02MSG
4 JIN04PRT 04 編集出力(印刷制御) 社員マスタを読込みLINAGE制御で台帳印刷。PAGE-COUNTER/DATE/TIMEカバー JIN01REC, JIN04RPT-REC, JINDATAC, JINMSGAC, JINENDAC なし SUB01DAT, SUB02MSG, SUB03END
5 JIN05UPD 09 DB更新 人事異動トランザクションを読込みDB2社員マスタを更新。EXCEPTION/FALSE/VALUES/REPLACING/TIMES/THRU/ON OVERFLOW/BY CONTENTカバー JIN05REC, VALID-ERROR-REC, JINDATAC, JINMSGAC, JINENDAC, DB-COMMON DB2EMPLOYEE SUB01DAT, SUB02MSG, SUB03END
6 JIN06SRT 34 SORT EMP-VALIDをEMP-ID昇順に並替。SORT/RELEASEカバー(上限はPERFORM UNTIL+WRK-SORT-CNT>999 JIN01REC, VALID-ERROR-REC, JINDATAC, JINMSGAC, JINENDAC なし SUB01DAT, SUB02MSG, SUB03END
7 JIN07SUB 25 サブPGM 社員IDで社員情報を取得して返却。EXIT PROGRAM/ADDRESS/OMITTEDカバー JIN01REC なし —(CALLされる側)
8 JIN08TST 05 振り分け(IF JIN07SUB呼出テストドライバ。OMITTED引数でCALL。テスト専用 JINDATAC, JINMSGAC, JINENDAC なし JIN07SUB, SUB01DAT, SUB02MSG, SUB03END
9 JIN09RPT 32 1:N+キーブレイク 社員別スキル集計レポート。CANCEL/I-O-CONTROL/NEXT SENTENCE/EJECT/FALSEカバー SKILL-EVAL-REC, SKILL-MST-REC, JIN09REC, VALID-ERROR-REC, JINDATAC, JINMSGAC, JINENDAC なし SUB01DAT, SUB02MSG, SUB03END

COPY書式一覧

# COPY ID 用途 サイズ 備考
1 JIN01REC EMP-IMPORT/EMP-VALID レコード 200 JIN01KNS入出力、JIN04PRT入力で流用
2 VALID-ERROR-REC VALID-ERROR エラーレコード 80 JIN01KNS/JIN02SKL/JIN05UPD共用
3 SKILL-EVAL-REC SKILL-EVAL スキル評価明細 200 JIN02SKL入力(M件)
4 SKILL-MST-REC SKILL-MST 評価基準マスタ 80 JIN02SKL入力(内部表LOAD
5 SKILL-AGG-REC SKILL-AGG 評価集計結果 200 JIN02SKL出力、JIN03RAN入力
6 JINDATAC SUB01DAT連絡領域 CALL I/F(全JINプログラム共用)
7 JINMSGAC SUB02MSG連絡領域 CALL I/F(全JINプログラム共用)
8 JINENDAC SUB03END連絡領域 CALL I/F(全JINプログラム共用)
9 JIN03REC RANK-OUT ランキング出力レコード 200 JIN03RAN出力
10 JIN04RPT-REC JIN-LEDGER 台帳印刷レコード 132 JIN04PRT出力(WRITE ADVANCING + LINAGE制御)
11 JIN05REC HR-TRANS 人事異動トランザクション 200 JIN05UPD入力
12 DB-COMMON DB接続共通変数(WS-SQL-STR/SQLCODE等) tools/DB-COMMON.cpy。JIN05UPDのみ使用
13 JIN09REC SKILL-SUM 社員別スキル集計結果 120 JIN09RPT出力

キーワードカバレッジ改善対象

# 予約語 現状 改善方法 対象PGM
1 DATE × ACCEPT WS-DATE FROM DATE JIN04PRT
2 TIME × ACCEPT WS-TIME FROM TIME JIN04PRT
3 PAGE-COUNTER × WRITE ADVANCING PAGE 時の特殊レジスタ参照 JIN04PRT
4 UPON × DISPLAY msg UPON CONSOLE JIN04PRT
5 EJECT × ソース行 EJECT によるページ制御 JIN04PRT
6 SKIP2 × 実装しない。*SKIP2 はコメント行であり SKIP2 ディレクティブとして機能しないため統計対象から除外 JIN04PRT
7 CLOSE WITH LOCK △(単純のみ) CLOSE file WITH LOCK JIN04PRT
8 STOP literal △(RUNのみ) STOP 'error message' JIN04PRT
9 STRING ON OVERFLOW △(未使用) STRING ... ON OVERFLOW JIN04PRT, JIN05UPD
10 EXCEPTION × CALL ... ON EXCEPTION JIN05UPD
11 FALSE × SET condition TO FALSE JIN05UPD
12 VALUES88複数値) × 88 WRK-TYPE VALUE 'A' 'B' 'C' JIN05UPD
13 VALUE THRU △(未使用) EVALUATE WHEN 'D' THRU 'G' JIN05UPD
14 INITIALIZE REPLACING △(基本形のみ) INITIALIZE WS-REC REPLACING NUMERIC BY ZEROS JIN05UPD
15 PERFORM UNTIL + 上限件数 △(UNTILのみ) PERFORM UNTIL WS-EOF OR WS-COUNT > 500TIMES相当の上限ガード制御) JIN05UPD
16 CALL BY CONTENT △(BY REFのみ) CALL sub BY CONTENT WS-VAL JIN05UPD
17 EXIT PARAGRAPH △(EXITのみ) EXIT PARAGRAPH / EXIT PROGRAM JIN05UPD
18 INSPECT AFTER △(未使用) INSPECT ... AFTER CHARACTERS JIN05UPD
19 DISPLAY WITH NO ADVANCING △(未使用) DISPLAY 'msg' WITH NO ADVANCING JIN05UPD
20 SORT × SORT ファイル ON ASCENDING KEY ... INPUT/OUTPUT PROCEDURE JIN06SRT
21 RELEASE × INPUT PROCEDURE 内で RELEASE 送出 JIN06SRT
22 PERFORM TIMES △(UNTILのみ) 実装しない。PERFORM UNTIL + 上限カウンタ(WRK-SORT-CNT>MAX-SORT-REC)で上限ガードを実装 JIN06SRT
23 EXIT PROGRAM △(EXITのみ) サブPGM終了を EXIT PROGRAM で実施 JIN07SUB
24 ADDRESS × MOVE ADDRESS OF 引数 TO WS-PTR で引数アドレス取得 JIN07SUB
25 OMITTED × CALL ... USING ... OMITTED + IS OMITTED 判定 JIN08TST, JIN07SUB
26 CANCEL × CANCEL 'SUB02MSG' でサブPGM解放 JIN09RPT
27 I-O-CONTROL × I-O-CONTROL 段落(予約語カバー目的。SAME句なし) JIN09RPT
28 NEXT × NEXT SENTENCE で後続文へ JIN09RPT
29 SENTENCE × NEXT SENTENCE で後続文へ JIN09RPT
30 EJECT × ソース行 EJECT によるページ制御 JIN09RPT
31 SKIP2 × 実装しない。*SKIP2 はコメント行であり SKIP2 ディレクティブとして機能しないため統計対象から除外 JIN09RPT
32 FALSE × SET 条件名 TO FALSE で状態リセット JIN09RPT
33 PERFORM(多重ループ/複合条件) △(UNTIL/単一のみ) PERFORM VARYING 多重ループ + 複合条件(AND/OR) JIN09RPT
34 SET(条件名) △(UP BY/DOWN BYのみ) SET 条件名 TO TRUE/FALSE による条件名設定 JIN09RPT

改善効果まとめ(JIN09RPT 追加時点の比較):

指標 現状 改善後
予約語×(未使用) 41語 35語(6語削減:CANCEL/I-O-CONTROL/NEXT/SENTENCE/EJECT/FALSE
PERFORM ◎(多重ループ+複合条件IFで実質的カバー)
SET ◎(条件名 SET TO FALSE で実質的カバー)
◎+△率 80.0%164/205 83.4%171/205
プログラムタイプカバレッジ 97.2%35/36 97.2%(変更なし)