376 lines
22 KiB
Markdown
376 lines
22 KiB
Markdown
# 人事情報管理システム 設計書(サブシステム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書式は `JINDATAC`・`JINMSGAC`・`JINENDAC` を全プログラムで共用する。
|
||
JIN05UPD は DB2(EMPLOYEE マスタ)へアクセスするため、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-EVAL(M件の評価明細)× 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-TRANS(200B 人事異動)を読込み、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パターン: 34(SORT)
|
||
│ EMP-VALID(200B)を 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 PROGRAM(GOBACK 不使用)
|
||
└── JIN08TST から CALL(2回:全引数 / KANJI-NAME OMITTED)
|
||
│
|
||
╞══ JINJ090 ═══════════════════════════════════╡
|
||
│ JIN09RPT(社員別スキル集計レポート) PGMパターン: 32(1:N+キーブレイク)
|
||
│ SKILL-EVAL(M件)を EMP-ID 昇順で読み込み、社員キーブレイク集計
|
||
│ I-O-CONTROL 段落(予約語カバー)を記載
|
||
│ NESTED IF(3〜4段)でスコア→S/A/B/C レベル判定(複合条件 AND/OR)
|
||
│ PERFORM VARYING の多重ループ(社員×明細×内部表20要素)
|
||
│ NEXT SENTENCE で文言継続制御、SET 条件名 TO FALSE で状態リセット
|
||
│ 集計完了後、社員別に SKILL-SUM(120B)へ出力
|
||
│ CANCEL 'SUB02MSG' でメッセージサブPGMを解放
|
||
│ EJECT でソースページ・行制御
|
||
├── → SKILL-SUM(120B 社員別スキル集計結果)
|
||
└── 異常 → VALID-ERROR(80B エラーレコード)
|
||
```
|
||
|
||
---
|
||
|
||
## JCL
|
||
|
||
### JINJ010 — カナ氏名チェック
|
||
|
||
```jcl
|
||
//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 — スキル別評価集計
|
||
|
||
```jcl
|
||
//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 — スキル評価ランキング出力
|
||
|
||
```jcl
|
||
//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 — 社員台帳印刷
|
||
|
||
```jcl
|
||
//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更新
|
||
|
||
```jcl
|
||
//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 — 社員データ並替
|
||
|
||
```jcl
|
||
//JINJ060 JOB (ACCT),'社員データ並替',CLASS=A
|
||
//*
|
||
//*=====================================================================
|
||
//* STEP010: SORT(Type 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 を読込むための DD(JIN07R01)は、呼出側 JIN08TST の実行時に環境変数で割当てる。
|
||
> ※ AGENTS.md 規約「サブプログラムは GOBACK を使用」に対し、JIN07SUB はキーワードカバー目的で EXIT PROGRAM を
|
||
> 使用する例外とする(IBM COBOL 上 EXIT PROGRAM は正しい終了文。GnuCOBOL でもコンパイル実証済み)。
|
||
|
||
### JINJ090 — 社員別スキル集計レポート
|
||
|
||
```jcl
|
||
//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 | DB2(EMPLOYEE) | 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 | VALUES(88複数値) | × | 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 > 500(TIMES相当の上限ガード制御) | 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%(変更なし) |
|