From 235de714ea8f17399d97b47dfcaf8e96173e7682 Mon Sep 17 00:00:00 2001 From: qiuqiuqiu Date: Wed, 24 Jun 2026 23:04:48 +0800 Subject: [PATCH] Subsystem B: dead code cleanup (FILLER renames, CNS-MAX-HOURS/WRK-MONTH-OK removed), sync docs & coverage to production --- bin/ZAN02CHK.exe | Bin 154048 -> 154048 bytes bin/ZAN05CAL.exe | Bin 157424 -> 157206 bytes bin/ZAN06UPD.exe | Bin 171700 -> 171482 bytes list/COBOLの予約語一覧.txt | 193 +++++++ list/PGM実装パターン一覧.txt | 29 ++ list/TYPE定義一覧.txt | 11 + list/ステートメント一覧.txt | 49 ++ ...・ステートメントカバレッジ状況_20260616-2253.txt | 481 ++++++++++++++++++ ...・ステートメントカバレッジ状況_20260619-1200.txt | 454 +++++++++++++++++ ...・ステートメントカバレッジ状況_20260623-1500.txt | 459 +++++++++++++++++ src/ZAN02CHK.cbl | 16 +- src/ZAN05CAL.cbl | 16 +- src/ZAN06UPD.cbl | 17 +- 使用資源一覧/ZAN05CAL_使用資源一覧.md | 2 +- 詳細設計書/詳細設計書_ZAN05CAL.md | 10 +- 詳細設計書/詳細設計書_ZAN06UPD.md | 9 +- 16 files changed, 1699 insertions(+), 47 deletions(-) create mode 100644 list/COBOLの予約語一覧.txt create mode 100644 list/PGM実装パターン一覧.txt create mode 100644 list/TYPE定義一覧.txt create mode 100644 list/ステートメント一覧.txt create mode 100644 list/プログラムタイプ・ステートメントカバレッジ状況_20260616-2253.txt create mode 100644 list/プログラムタイプ・ステートメントカバレッジ状況_20260619-1200.txt create mode 100644 list/プログラムタイプ・ステートメントカバレッジ状況_20260623-1500.txt diff --git a/bin/ZAN02CHK.exe b/bin/ZAN02CHK.exe index e5a41807f2cd622622d7c416aae99043af907749..f8aa4659756d9206a59daf69cc3165788746b113 100644 GIT binary patch delta 13494 zcmbt*dsvj!_W!$Ic!2?N25^)+gMfe{3 zx0&CfQ=RN`3Pl~w%rP%mnT}@W$uhKycqy^Wv}1?gXYc(oVCRqD^L)SaJTL3B)@SXt z*IxVb?itJ7XmB?g>Q?%UJ~LpAbF`1;F?G$Ut!neY#%D>w{N@HMPg4|oZSW*& z@sILbQlKa;8)%XLOTCIYJeUX4X+ASfQJkR;Q@g&YT@RpIKmqAXZ2?1KpUqd474Ag~ zM@>(9=5a+SsvVU`?9)HC?>Xbs@?$=&56B+khRcZjtCh3u%MOqc&QZT#Z`lu%y>=0? zJ8rbB;k0AeZ`bWB+*M6G0u*G>7dB(uFhy|;ODt?jrrixG>W_KUW=Qorh2&bEpk;>m z&_clT>_2U77>P9*=1=M04QT79OQ2 z%XXER6y=g}MHrOxW9i}GLJ~=Xx~4@&g&{YG$*K7+;zKh&=QeJ0L#{B zVL8{255SzVm<#RvLX3R74>Gr->{2Q&-ZEa zWYKnvM0ww;JCBipq6OpInaP$+t;km83?7kkq-3fD!)L%7O_9vv9PU`0Vy6d8MQYqa zI@gjqcuq0zoOB9gcWRfL6s65$cW5X0NSxXcE^5u&xo{k9^EkBq!lM0yR)mbKo+P|L zX|GgbB98NfYPH{hWkJ1(9K-m)oEA(PI(^^5eNpf2f-$#M35WN+O*!|RTc=hgDqkr7+XD{O@Ru~*igstry<9i~?2hpPFy1MR zV};Rff;Al0+og4sv|3y zm}AIz8fPBb_3q4$>bCq&%gu#xvu?Dt)gkqzsMmijuo-(%-tOT=c4zT+r)|+dqA5z1 z;ehsNxuRrV97O*Njice+yQVi_>f2|nrQcPY63$|`(-yGox}mBI$9AW3{*&wI$+%66 zqIY+nIc);hkly+Vo~8Cq8SkEN2fma(>m!bX6>GR&Ykord)ZOCqrtqn%0ADKk#{|!} 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 delta 13526 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 diff --git a/bin/ZAN05CAL.exe b/bin/ZAN05CAL.exe index 262d5851fd664c8f56c1f640aeef1689a39d101a..bdebe7dc2a9ccda42807f43911e912cbf2107690 100644 GIT binary patch delta 28013 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 M)P`=;)dQCQ1qz$pBD!F~-5J_r( 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 diff --git a/bin/ZAN06UPD.exe b/bin/ZAN06UPD.exe index 7b74ea04594daca9d112473ad2b4cefa4a3f2610..d2ddbafa19cacfd9a11c2e8218e7e79c9d8faff8 100644 GIT binary patch delta 36584 zcmeIbd3Y36_BUR)k_t&kNPsjuB!K{7YdT~PTL%e-#SnIsB_SapV1TeGE<;Bl46$jA zlyXr~r@Ka*Qb(ZomEVps`6ow||<+%5?{eWuNhz64cJO zyMpz6)-C@qfIj!en*I+WW4_VynwExFZd z6I-AtO+EDNHuv>^vk=AH0tgcZUsVGY7n; z)06ayu(*yd%~zD;oI2u*ti1yG@ag(PVS_@C0k3|osk8oZ*hKZk`Ffx5JJ=QazVIO| zcJHz9UTXa8@zlu~UA#Hb)vx7xwZaIdv@|pgN8_TtP463-$X?a+A_u8o&(?2<9H2iD z*(<@3ttjhXR@y7dsi>-GRE|%^m-kLWa(y|?aN}D2bY%A~H?$>tRrRaG_qE`2JQZSS zW~?6HZcuvPbX2ONy;|pe6uhWA>Z6{o2d(M`Mh)zo&8>cYKZ7q&c`=+Uq41S{OS_>H ze}qc*z98^kaFGCdIqND=pZ2NX42IeZaRz6k;5dHSF9hl=RnqEum0s!Ys`rcv?Gc^? z{`#d#^hvd)G3t43T%DqfNLtet#SwaT)D+LuL59HbS*b<|4F*~EELX~|6fK>Cf$V)Y zSMmhM(Mh^;NC;3b$d!Ro>v@2=KF9V-QtoB&+JV;zXy;O4x#3!&f^b|DrvK2PkLTN= z0LXVZ)c1MPRH11_;Dy;jEmCkg5yy;Lt>8FbD-ie?go$|jw4a|NYi$E{%B8hq zg5xBPCl24#hpEz>F3k6rJ-8uCJ^m6y*)VC@flbVme?QQ-Q>ZUG(0{*y2D;yC!Nx%6ib2t`iTE4?MSEhPqk!n&cj~MU zbxdWu^!QFO107Nc{r9@p!up+ZQCpo&X#{8_(-dV**jw6*dcC7>j|t|yJsE?sK3nLI zWz!s;b&6#jh1F|#CsN{1nfg9LE68rf{k~Of~B(}?s9n7hqSqd9>5m=qG7R9y8s904g7>0$B1Y|P#lOe#p+f8-OWP18qo>E`*HLZLupZ}Z8f z`a#7^M#{s0WPHq!U0nio+9YMGUkMnS3(#Y`P3`g34KE1qMIJ9RRM)h5OM3${NszrB z7Cfyoeu$7femV9x$lPVwYbDsjFd0>K8T=%VAdAk{UQ3-dnr=EaS@4FUtryT6!{u6` ziz(*;;?-^zRha0y+>}^kLY=IBPM45Zn`81OqQ$5>rL=K4Al{UY#ev zCuG_LgXdL565l70U!dewJOnvv1f≀@aKJc+aoD6yhbk)9 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 delta 37149 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 qwp{8;%BbGGL5&P`=H)G3Rt(7YZOq{{H|55+CIN diff --git a/list/COBOLの予約語一覧.txt b/list/COBOLの予約語一覧.txt new file mode 100644 index 0000000..effc8c6 --- /dev/null +++ b/list/COBOLの予約語一覧.txt @@ -0,0 +1,193 @@ +ACCEPT +ACCESS +ADD +AFTER +ALL +ALPHABETIC +ALPHABETIC-UPPER +ALSO +AND +ANY +APPLY +ASCENDING +ASSIGN +AT +AUTHOR +BINARY +BLOCK +BY +CALL +CHARACTER +CHARACTERS +CLOSE +COMP +COMP-3 +COMP-4 +COMPUTE +CONDITION +CONFIGURATION +CONTAINS +CONTINUE +CONVERTING +COPY +CORR +COUNT +CURSOR +DATA +DATE +DATE-COMPILED +DATE-WRITTEN +DECLARATIVES +DELETE +DELIMITED +DELIMITER +DEPENDING +DESCENDING +DISPLAY +DISPLAY-1 +DIVIDE +DIVISION +DOWN +DYNAMIC +EJECT +ELSE +END +END-ADD +END-CALL +END-COMPUTE +END-DIVIDE +END-EVALUATE +END-EXEC +END-IF +END-PERFORM +END-READ +END-SEARCH +END-STRING +END-SUBTRACT +END-UNSTRING +ENVIRONMENT +ERROR +EVALUATE +EXCEPTION +EXEC +EXECUTE +EXIT +FALSE +FD +FILE +FILE-CONTROL +FILLER +FIRST +FOR +FROM +FUNCTION +GET +GIVING +GO +GOBACK +GREATER +HIGH-VALUE +I-O-CONTROL +ID +IDENTIFICATION +IF +IN +INDEXED +INITIAL +INITIALIZE +INPUT +INPUT-OUTPUT +INSERT +INSPECT +INTO +INVALID +IS +KEY +LABEL +LENGTH +LINKAGE +LOW-VALUE +MODE +MOVE +MULTIPLY +NEXT +NOT +NUMERIC +OBJECT-COMPUTER +OCCURS +OF +OMITTED +ON +OPEN +OPTIONS +OR +ORDER +ORGANIZATION +OTHER +OUTPUT +PACKED-DECIMAL +PAGE +PAGE-COUNTER +PERFORM +PIC +POINTER +PROCEDURE +PROGRAM-ID +RANDOM +READ +RECORD +RECORDING +RECORDS +REDEFINES +REMAINDER +REMOVAL +REPLACING +RERUN +RETURN-CODE +ROUNDED +RUN +SEARCH +SECTION +SELECT +SENTENCE +SET +SHIFT-IN +SHIFT-OUT +SIZE +SKIP2 +SOURCE-COMPUTER +SPACE +SPACES +SQL +STANDARD +STOP +STRING +SUBTRACT +TABLE +TALLYING +TEST +THEN +THRU +TIME +TIMES +TO +TRUE +TYPE +UNSTRING +UNTIL +UP +UPON +USAGE +USE +USING +VALUE +VALUES +VARYING +WHEN +WHEN-COMPILED +WITH +WORK ING-STORAGE +WRITE +WRITE-ONLY +ZERO +ZEROS diff --git a/list/PGM実装パターン一覧.txt b/list/PGM実装パターン一覧.txt new file mode 100644 index 0000000..1e95f6c --- /dev/null +++ b/list/PGM実装パターン一覧.txt @@ -0,0 +1,29 @@ +マッチング処理(1:1) +マッチング処理(1:N) +マッチング処理(N:1) +マッチング処理(M:N)→出力N件 +マッチング処理(M:N)→出力M件 +マッチング処理(M:N)→出力MxN件 +マッチング処理(1:N)+キープレイク処理(ブレイクキー=マッチングキーの場合) +マッチング処理(1:N)+キーブレイク処理(ブレイクキー>マッチングキーの場合) +キーブレイク処理(集計) +キーブレイク処理(集約) +キーブレイク処理(集計、集約以外の場合) +レイアウト編集のみ(GETPUT) +項目チェック(重複チェックを合まない場合) +項目チェック(重複チェックも含む場合) +振り分け(IF文) +振り分け(EVALUATE文) +内部テープル検索 +DB更新 +CSV→FB変換(改行コードなし) +CSV→FB変換(改行コードあり) +オンラインPGM +25分割 +50分割 +100分割 +2段階マッチング(N:1→N:1) +2段階マッチング(M:N=M:N)(2入力ファイル) +2段階マッチング(1:1=1:1) +SYSINの読み込む、チェック処理 +ASCII→EBCDIC変換 diff --git a/list/TYPE定義一覧.txt b/list/TYPE定義一覧.txt new file mode 100644 index 0000000..a98dbcb --- /dev/null +++ b/list/TYPE定義一覧.txt @@ -0,0 +1,11 @@ +X(m) m,nF +G(m) +N(m) +9(m) +9(m)V9(n) +S9(m)V9(n) +S9(m)V9(n) COMP-3 +S9(m) COMP-3 +S9(m) COMP +S9(m) BINARY +ZZZ9 ސ͌Œł͂ȂA1`8ł diff --git a/list/ステートメント一覧.txt b/list/ステートメント一覧.txt new file mode 100644 index 0000000..d305930 --- /dev/null +++ b/list/ステートメント一覧.txt @@ -0,0 +1,49 @@ +Accept +Add +AlteredGoto +Alter +Ca11 +Cancel +Close +Compute +Continue +Delete +Display +Divide +Entry +Evaluate +Evaluate +ExecCics +ExecSql +ExitProgram +Exit +Goback +Goto +If +Initialize +Inspect +Merge +Move +Multiply +Open +PerformAfter +Perform +PerformUntil +Performvarying +Read +PerformUntil +PerformVarying +Read +Release +Return +Rewrite +Search +Set +Sort +Start +Stop +String +Subt ract +Unstring +Write +WriteStatement diff --git a/list/プログラムタイプ・ステートメントカバレッジ状況_20260616-2253.txt b/list/プログラムタイプ・ステートメントカバレッジ状況_20260616-2253.txt new file mode 100644 index 0000000..411e447 --- /dev/null +++ b/list/プログラムタイプ・ステートメントカバレッジ状況_20260616-2253.txt @@ -0,0 +1,481 @@ +================================================================================ + プログラムタイプ・ステートメント カバレッジ状況 + 確認日時: 2026-06-16 22:53 + 確認対象プログラム: + ZAN01CHK (振り分け) + ZAN02CHK (項目チェック・重複) + ZAN03CHK (項目チェック・打刻照合) + ZAN04MAT (マッチング1:1) + ZAN05CAL (キーブレイク集計) + ZAN06UPD (DB更新) + SUB01DAT (運用日付取得) + SUB02MSG (メッセージ編集出力) + SUB03END (ABEND処理) + SUB04CHK (項目チェック) + SUB05TIM (時刻丸め計算) + 確認対象COPYファイル: + ZAN01REC, ZAN02REC, ZAN03REC, ZAN04REC, ZAN05REC + ZANDATAC, ZANMSGAC, ZANENDAC, ZANCHKAC, ZANTIMAC +================================================================================ + +[1] プログラムタイプ カバレッジ状況(PGMパターン一覧.txt 準拠) +-------------------------------------------------------------------------------- + No | パターン | 状態 | 該当プログラム +----+----------------------------------------------------+------+--------------------------- + 1 | マッチング処理(1:1) | ◎ | ZAN04MAT + 2 | マッチング処理(1:N) | × | 未作成 + 3 | マッチング処理(N:1) | × | 未作成 + 4 | マッチング処理(M:N)→出力N件 | × | 未作成 + 5 | マッチング処理(M:N)→出力M件 | × | 未作成 + 6 | マッチング処理(M:N)→出力MxN件 | × | 未作成 + 7 | マッチング処理(1:N)+キーブレイク処理 | × | 未作成 + 8 | マッチング処理(1:N)+キーブレイク処理 | × | 未作成 + | (ブレイクキー>マッチングキーの場合) | | + 9 | キーブレイク処理(集計) | ◎ | ZAN05CAL + 10 | キーブレイク処理(集約) | × | 未作成 + 11 | キーブレイク処理(集計、集約以外の場合) | × | 未作成 + 12 | レイアウト編集のみ(GETPUT) | × | 未作成 + 13 | 項目チェック(重複チェックを含まない場合) | ◎ | ZAN03CHK + 14 | 項目チェック(重複チェックも含む場合) | ◎ | ZAN02CHK + 15 | 振り分け(IF文) | × | 未作成(ZAN01CHKはEVALUATE) + 16 | 振り分け(EVALUATE文) | ◎ | ZAN01CHK + 17 | 内部テーブル検索 | ○ | ZAN03CHK(SEARCH ALL使用) + 18 | DB更新 | ◎ | ZAN06UPD + 19 | CSV→FB変換(改行コードなし) | ○ | ZAN01CHK(UNSTRINGでCSV分解) + 20 | CSV→FB変換(改行コードあり) | × | 未作成 + 21 | オンラインPGM | × | バッチ処理のみ + 22 | 25分割 | × | 未作成 + 23 | 50分割 | × | 未作成 + 24 | 100分割 | × | 未作成 + 25 | 2段階マッチング(N:1→N:1) | × | 未作成 + 26 | 2段階マッチング(M:N=M:N)(2入力ファイル) | × | 未作成 + 27 | 2段階マッチング(1:1=1:1) | × | 未作成 + 28 | SYSINの読み込み、チェック処理 | × | 未作成 + 29 | ASCII→EBCDIC変換 | × | 未作成 +================================================================================ + 凡例: ◎=カバー済, ○=一部カバー, ×=未カバー + 備考: パターン2〜9,11,12,15,20〜29はサブシステムBの対象範囲外または + 未実装。サブシステムBとして必要十分な6プログラムで + 合計9パターンをカバー(◎6 + ○2 + 既存の参考実装1) + + +[2] ステートメント カバレッジ状況 +-------------------------------------------------------------------------------- +凡例: + - 左欄: ステートメント一覧.txt の表記 + - 列B1〜B6: 各プログラム (ZAN01CHK〜ZAN06UPD) + - SUB列: サブプログラム群 (SUB01〜05) + - 最終列: カバレッジ有無 (◎/○/×) + 例示 + +ステートメント | B1 | B2 | B3 | B4 | B5 | B6 | SUB | 状態 | 使用例 + |01CHK|02CHK|03CHK|04MAT|05CAL|06UPD|群 | | +---------------+-----+-----+-----+-----+-----+-----+-----+------+-------------------------- +ACCEPT | - | - | - | - | ○ | - | - | ◎ | ACCEPT WRK-DATE-8 + | | | | | | | | | FROM DATE YYYYMMDD + | | | | | | | | | (ZAN05CAL-1000ITTSOR) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +ADD | ○ | ○ | ○ | ○ | ○ | ○ | - | ◎ | ADD 1 TO CUN-R01INN + | | | | | | | | | ADD 1 TO CUN-W01OUT + | | | | | | | | | (全プログラム) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +ALTER | - | - | - | - | - | - | - | × | 未使用 +ALTEREDGOTO | - | - | - | - | - | - | - | × | 未使用 (GO TO DEPENDING) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +CALL | ○ | ○ | ○ | ○ | ○ | ○ | - | ◎ | CALL 'SUB01DAT' + | | | | | | | | | USING D01UBSPAR + | | | | | | | | | CALL 'SUB02MSG' + | | | | | | | | | USING M00MHOPAR + | | | | | | | | | CALL 'SUB03END' + | | | | | | | | | USING E01ABDPAR + | | | | | | | | | CALL 'SUB04CHK' + | | | | | | | | | USING C01CHKPAR + | | | | | | | | | CALL 'SUB05TIM' + | | | | | | | | | USING T01TIMPAR + | | | | | | | | | (ZAN05CAL) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +CANCEL | - | - | - | - | - | - | - | × | 未使用 +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +CLOSE | ○ | ○ | ○ | ○ | ○ | ○ | - | ◎ | CLOSE R01INNFIL + | | | | | | | | | W01OUTFIL + | | | | | | | | | (全プログラム) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +COMPUTE | ○ | - | - | - | ○ | - | ○ | ◎ | 【標準COMPUTE】 + | | | | | | | | | COMPUTE WRK-DIFF-MIN = + | | | | | | | | | (A - B) * 60 + (C - D) + | | | | | | | | | (ZAN01CHK, ZAN05CAL) + | | | | | | | | | + | | | | | | | | | 【COMPUTE ROUNDED】 + | | | | | | | | | COMPUTE WRK-OVT-HOURS + | | | | | | | | | ROUNDED = A / 60 + | | | | | | | | | ON SIZE ERROR ... + | | | | | | | | | END-COMPUTE + | | | | | | | | | (ZAN05CAL-2100OUTSOR) + | | | | | | | | | + | | | | | | | | | ※SUB05TIM: + | | | | | | | | | COMPUTE WRK-MINUTES = + | | | | | | | | | T01TIMHRS * 60 +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +CONTINUE | - | ○ | ○ | - | ○ | ○ | - | ◎ | SEARCH ALL ... AT END + | | | | | | | | | CONTINUE + | | | | | | | | | (ZAN02CHK, ZAN03CHK, + | | | | | | | | | ZAN05CAL, ZAN06UPD) + | | | | | | | | | EVALUATE...WHEN OTHER + | | | | | | | | | CONTINUE +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +DELETE | - | - | - | - | - | - | - | × | 未使用 +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +DISPLAY | - | - | - | - | - | - | ○ | ◎ | SUB02MSG: + | | | | | | | | | DISPLAY WRK-MSG-LINE + | | | | | | | | | SUB03END: + | | | | | | | | | DISPLAY WRK-ABEND-MSG +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +DIVIDE | ○ | - | - | - | ○ | - | ○ | ◎ | DIVIDE A BY 100 + | | | | | | | | | GIVING B REMAINDER C + | | | | | | | | | (ZAN01CHK, ZAN05CAL) + | | | | | | | | | ※SUB05TIM: + | | | | | | | | | DIVIDE X BY 30 + | | | | | | | | | GIVING Y REMAINDER Z +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +ENTRY | - | - | - | - | - | - | - | × | 未使用 +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +EVALUATE | ○ | - | ○ | ○ | ○ | ○ | ○ | ◎ | 【EVALUATE TRUE】 + | | | | | | | | | EVALUATE TRUE + | | | | | | | | | WHEN cond1 ... END-EVALUATE + | | | | | | | | | (ZAN01,04,05,06CHK/MAT/CAL/UPD) + | | | | | | | | | + | | | | | | | | | 【EVALUATE 変数】 + | | | | | | | | | EVALUATE C01CHKTYP + | | | | | | | | | WHEN 'DATE' ... + | | | | | | | | | WHEN OTHER ... + | | | | | | | | | END-EVALUATE + | | | | | | | | | (SUB04CHK, SUB05TIM) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +EXEC CICS | - | - | - | - | - | - | - | × | 未使用 +EXEC SQL | - | - | - | - | - | ○ | - | ◎ | EXEC SQL CONNECT TO ... + | | | | | | | | | EXEC SQL INSERT ... + | | | | | | | | | VALUES(...) END-EXEC + | | | | | | | | | EXEC SQL SELECT ... INTO + | | | | | | | | | ... END-EXEC + | | | | | | | | | EXEC SQL UPDATE ... SET + | | | | | | | | | WHERE ... END-EXEC + | | | | | | | | | EXEC SQL COMMIT WORK + | | | | | | | | | END-EXEC + | | | | | | | | | EXEC SQL ROLLBACK WORK + | | | | | | | | | END-EXEC + | | | | | | | | | EXEC SQL INCLUDE SQLCA + | | | | | | | | | END-EXEC + | | | | | | | | | (ZAN06UPD) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +EXIT | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ◎ | xxx-EXT. EXIT. + | | | | | | | | | (全セクションの出口) +EXIT PROGRAM | - | - | - | - | - | - | - | × | 未使用 (GOBACKで代用) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +GOBACK | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ◎ | GOBACK. + | | | | | | | | | (メインプログラム/ + | | | | | | | | | サブプログラム復帰) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +GO TO | ○ | - | - | - | - | - | ○ | ◎ | GO TO 2020VALIDATESOR-EXT + | | | | | | | | | (ZAN01CHK, SUB04CHK, + | | | | | | | | | セクション脱出用) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +IF | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ◎ | 【単純条件】 + | | | | | | | | | IF WRK-R01EOF NOT = '1' + | | | | | | | | | + | | | | | | | | | 【複合条件(AND/OR)】 + | | | | | | | | | IF A = B AND C = D + | | | | | | | | | IF (A < 1) OR (A > 31) + | | | | | | | | | + | | | | | | | | | 【THEN句あり】 + | | | | | | | | | IF ... THEN ... END-IF + | | | | | | | | | + | | | | | | | | | 【ELSE分岐】 + | | | | | | | | | IF ... ELSE ... END-IF + | | | | | | | | | + | | | | | | | | | 【NOT = 条件】 + | | | | | | | | | IF SQLCODE NOT = 0 + | | | | | | | | | (ZAN06UPD) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +INITIALIZE | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ◎ | INITIALIZE WRKARA + | | | | | | | | | INITIALIZE W01OUTREC + | | | | | | | | | (全プログラムで使用) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +INSPECT | ○ | - | - | - | - | - | ○ | ◎ | 【TALLYING】 + | | | | | | | | | INSPECT R01INNREC + | | | | | | | | | TALLYING WRK-COMMA-CNT + | | | | | | | | | FOR ALL ',' + | | | | | | | | | (ZAN01CHK) + | | | | | | | | | + | | | | | | | | | INSPECT C01CHKDAT + | | | | | | | | | TALLYING W FOR + | | | | | | | | | CHARACTERS BEFORE + | | | | | | | | | INITIAL SPACE + | | | | | | | | | (SUB04CHK) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +MERGE | - | - | - | - | - | - | - | × | 未使用 (SORT/JCLに委譲) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +MOVE | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ◎ | MOVE X TO Y + | | | | | | | | | (全プログラム、 + | | | | | | | | | 最も基本的な代入文) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +MULTIPLY | - | - | - | - | - | ○ | - | ◎ | MULTIPLY A BY 60 + | | | | | | | | | GIVING B + | | | | | | | | | (ZAN06UPD-2100SUMMARYSOR) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +OPEN | ○ | ○ | ○ | ○ | ○ | ○ | - | ◎ | OPEN INPUT R01INNFIL + | | | | | | | | | OUTPUT W01OUTFIL + | | | | | | | | | OPEN I-O ...(未使用) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +PERFORM | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ◎ | 【PERFORM 段落名】 + | | | | | | | | | PERFORM 1000ITTSOR + | | | | | | | | | + | | | | | | | | | 【PERFORM UNTIL(外書)】 + | | | | | | | | | PERFORM 2000MAJSOR + | | | | | | | | | UNTIL cond + | | | | | | | | | + | | | | | | | | | 【PERFORM UNTIL(内書)】 + | | | | | | | | | PERFORM UNTIL cond + | | | | | | | | | ... END-PERFORM + | | | | | | | | | + | | | | | | | | | 【PERFORM VARYING】 + | | | | | | | | | PERFORM VARYING WRK-IDX + | | | | | | | | | FROM 1 BY 1 + | | | | | | | | | UNTIL WRK-IDX > 12 + | | | | | | | | | (ZAN06UPD-2100SUMMARYSOR) + | | | | | | | | | + | | | | | | | | | 【PERFORM TEST AFTER】 + | | | | | | | | | PERFORM TEST AFTER + | | | | | | | | | VARYING WRK-IDX + | | | | | | | | | FROM 1 BY 1 + | | | | | | | | | UNTIL cond + | | | | | | | | | (ZAN06UPD-2210MONTHLYSUBSOR) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +READ | ○ | ○ | ○ | ○ | ○ | ○ | - | ◎ | READ R01INNFIL + | | | | | | | | | AT END MOVE '1' TO EOF + | | | | | | | | | NOT AT END ADD 1 TO CNT + | | | | | | | | | END-READ + | | | | | | | | | (全プログラムで使用) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +RELEASE | - | - | - | - | - | - | - | × | 未使用 +RETURN | - | - | - | - | - | - | - | × | 未使用 +REWRITE | - | - | - | - | - | - | - | × | 未使用 +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +SEARCH | - | - | ○ | - | - | - | - | ◎ | SEARCH ALL HOLIDAY-TABLE + | | | | | | | | | AT END CONTINUE + | | | | | | | | | WHEN HD-DATE(IDX) = D + | | | | | | | | | ... END-SEARCH + | | | | | | | | | (ZAN03CHK-2200SETOVTSOR) + | | | | | | | | | ※SEARCH(非ALL)は未使用 +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +SET | - | ○ | ○ | - | ○ | - | - | ◎ | SET WRK-HD-IDX TO 1 + | | | | | | | | | (ZAN03CHK) + | | | | | | | | | SET 88-cond TO TRUE + | | | | | | | | | (ZAN02CHK, ZAN05CAL) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +SORT | - | - | - | - | - | - | - | × | 使用不可(JCL SORT規定) + | | | | | | | | | (COBOL SORTは禁止) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +START | - | - | - | - | - | - | - | × | 未使用 +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +STOP RUN | - | - | - | - | - | - | ○ | ◎ | STOP RUN + | | | | | | | | | (SUB03END-ABEND処理) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +STRING | ○ | ○ | ○ | ○ | - | ○ | ○ | ◎ | STRING A DELIMITED BY SIZE + | | | | | | | | | B DELIMITED BY SIZE + | | | | | | | | | INTO X END-STRING + | | | | | | | | | + | | | | | | | | | STRING A '/' B '/' C + | | | | | | | | | DELIMITED BY SIZE + | | | | | | | | | INTO X (ZAN03CHK) + | | | | | | | | | + | | | | | | | | | STRING 'CANCEL-MATCH: ' + | | | | | | | | | R01APPL-ID ... + | | | | | | | | | INTO W03ERR-DETAIL + | | | | | | | | | (ZAN04MAT) + | | | | | | | | | + | | | | | | | | | STRING 'DB ERROR SQLCODE=' + | | | | | | | | | WRK-SQLCODE-DISP + | | | | | | | | | INTO WRK-ERR-DETAIL + | | | | | | | | | (ZAN06UPD) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +SUBTRACT | - | - | - | - | - | ○ | - | ◎ | SUBTRACT A FROM B + | | | | | | | | | GIVING C + | | | | | | | | | (ZAN06UPD-2200DBCLEANSOR) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +UNSTRING | ○ | - | - | - | - | - | - | ◎ | UNSTRING R01INNREC + | | | | | | | | | DELIMITED BY ',' + | | | | | | | | | INTO A B C ... + | | | | | | | | | TALLYING IN CNT + | | | | | | | | | END-UNSTRING + | | | | | | | | | (ZAN01CHK-2010CSVSOR) +---------------+|-----|-----|-----|-----|-----|-----|-----|------|-------------------------- +WRITE | ○ | ○ | ○ | ○ | ○ | ○ | - | ◎ | WRITE W01OUTREC + | | | | | | | | | (全プログラムで使用) + | | | | | | | | | ※WRITE FROM / AFTER + | | | | | | | | | 未使用 +================================================================================ + + +[3] PERFORM文 バリエーション カバレッジ +-------------------------------------------------------------------------------- + No | 形式 | 状態 | 使用例 +----+--------------------------+------+------------------------------------------ + 1 | PERFORM 段落名 | ◎ | PERFORM 1000ITTSOR (全プログラム) + 2 | PERFORM 段落名 UNTIL 条件 | ◎ | PERFORM 2000MAJSOR + | | | UNTIL WRK-R01EOF = '1' + | | | (ZAN01〜06全6本) + 3 | PERFORM UNTIL 条件 | ◎ | PERFORM UNTIL WRK-R03EOF = '1' + | ... END-PERFORM | | READ R03INNFIL ... END-READ + | | | END-PERFORM + | | | (ZAN03CHK-1300HOLIDAYSOR) + 4 | PERFORM VARYING | ◎ | PERFORM VARYING WRK-IDX + | | | FROM 1 BY 1 + | | | UNTIL WRK-IDX > 12 ... + | | | END-PERFORM + | | | (ZAN06UPD-2100SUMMARYSOR) + 5 | PERFORM TEST AFTER | ◎ | PERFORM TEST AFTER + | | | VARYING WRK-IDX FROM 1 BY 1 + | | | UNTIL cond ... + | | | END-PERFORM + | | | (ZAN06UPD-2210MONTHLYSUBSOR) + 6 | PERFORM THRU | × | 未使用 (EXIT SECTIONで代用) +================================================================================ + + +[4] IF文 バリエーション カバレッジ +-------------------------------------------------------------------------------- + No | 形式 | 状態 | 使用例 +----+-------------------------------+------+-------------------------------------- + 1 | IF 条件 ... END-IF | ◎ | IF WRK-START-NUM < CNS-TIME-1830 + | | | ... END-IF + 2 | IF 条件 ... ELSE ... END-IF | ◎ | IF D01FKICOD = ZERO + | | | ... ELSE ... END-IF + 3 | IF 複合条件(AND) | ◎ | IF A >= B AND C <= D + 4 | IF 複合条件(OR) | ◎ | IF (A < 1) OR (A > 31) + 5 | IF ... THEN ... | ◎ | IF ... THEN ... END-IF + | | | (SUB04CHK) + 6 | IF ... NOT = ... | ◎ | IF D01FKICOD NOT = ZERO + | | | IF SQLCODE NOT = 0 (ZAN06UPD) +================================================================================ + + +[5] 未カバーステートメント 一覧(今後のプログラムで対応予定) +-------------------------------------------------------------------------------- + No | ステートメント | 備考 +----+---------------------+----------------------------------------------- + 1 | ALTER | 非推奨ステートメント、使用予定なし + 2 | ALTEREDGOTO | GO TO DEPENDING、非推奨 + 3 | CANCEL | サブプログラムの動的削除は不要 + 4 | DELETE | DB2 DELETEは未実装(今後の拡張で対応可能) + 5 | ENTRY | エントリポイント複数定義は不要 + 6 | EXEC CICS | CICS非対応(バッチ処理のみ) + 7 | EXIT PROGRAM | GOBACKで代用 + 8 | MERGE | COBOL SORT MERGEはJCL SORTに委譲のため不使用 + 9 | RELEASE | SORT関連、JCL SORTに委譲 + 10 | RETURN | SORT関連、JCL SORTに委譲 + 11 | REWRITE | VSAM/INDEXED非対応(順次ファイルのみ) + 12 | SORT | COBOL SORTは禁止(JCL PGM=SORTに委譲) + 13 | START | VSAM/INDEXED非対応 +================================================================================ + + +[6] COPYファイル・SUBプログラム 参照状況 +-------------------------------------------------------------------------------- + COPY/SUB名 | 用途 | 使用プログラム +--------------+------------------------------+---------------------- + ZAN01REC | 申請レコード(80B) | ZAN01CHK〜ZAN04MAT (全4本) + ZAN02REC | マッチング結果レコード(80B) | ZAN04MAT, ZAN05CAL + ZAN03REC | 集約結果レコード(80B) | ZAN05CAL, ZAN06UPD + ZAN04REC | DBCLEAN用レコード(80B) | ZAN04MAT, ZAN06UPD + ZAN05REC | エラーログ(VB) | ZAN01〜04, ZAN06UPD (計5本) + ZANDATAC | SUB01DAT連絡領域 | ZAN01CHK, ZAN02CHK, + | | ZAN04MAT, ZAN05CAL, ZAN06UPD + ZANMSGAC | SUB02MSG連絡領域 | ZAN01〜06, SUB03END (計7本) + ZANENDAC | SUB03END連絡領域 | ZAN01〜06 (計6本) + ZANCHKAC | SUB04CHK連絡領域 | ZAN01CHK + ZANTIMAC | SUB05TIM連絡領域 | ZAN05CAL + | | + SUB01DAT | 運用日付取得 | ZAN01CHK, ZAN02CHK, + | | ZAN04MAT, ZAN05CAL, ZAN06UPD + SUB02MSG | メッセージ編集出力 | ZAN01〜06, SUB03END (計7本) + SUB03END | ABEND処理 | ZAN01〜06 (計6本) + SUB04CHK | 項目チェック | ZAN01CHK + SUB05TIM | 時刻丸め計算 | ZAN05CAL +================================================================================ + + +[7] TYPE定義 カバレッジ状況(TYPE定義一覧.txt 準拠/可変パターン m,n) +-------------------------------------------------------------------------------- + No | TYPE定義 | 状態 | 対応実装例 +----+------------------------+------+------------------------------------------ + 1 | X(m) | ◎ | PIC X(1)〜X(80):STATUS, OVT-TYPE, + | | | APPL-ID, EMP-ID, 各種文字項目 + 2 | G(m) | × | 未使用(DBCS文字列不要) + 3 | N(m) | × | 未使用(National文字列不要) + 4 | 9(m) | ◎ | PIC 9(1)〜9(8):CNS定数, 日付, 時刻, + | | | YEAR-MONTH, カウンタ + 5 | 9(m)V9(n) | ◎ | PIC 9(4)V9(1):WRK-OVT-HOURS, + | | | WRK-REMAIN-HOURS(加班時間) + 6 | S9(m)V9(n) | × | 未使用(DISPLAY/非COMPでは不使用) + | | | ※本パターンはCOMP-3必須ではなく、 + | | | DISPLAY形式でも使用可能 + 7 | S9(m)V9(n) COMP-3 | ◎ | DB-OVT-HOURS PIC S9(7)V9(1) COMP-3 + 8 | S9(m) COMP-3 | ◎ | CUNARA: PIC S9(9) COMP-3(全カウンタ) + 9 | S9(m) COMP | ○ | PIC 9(2) COMP(WRK-COMMA-CNT) + | | | PIC 9(4) COMP(WRK-HOLIDAY-CNT) + 10 | S9(m) BINARY | × | 未使用(COMP-5/BINARY不使用) + 11 | ZZZ9 | × | 未使用(編集文字不要) +================================================================================ + 凡例: ◎=該当パターン使用, ○=代替形式で使用, △=複合形で使用, ×=未使用 + 備考: + - TYPE定義一覧.txt が固定値から可変パターン(m,nは任意桁数)に変更された。 + - サブシステムBでは X(m), 9(m), S9(m) COMP-3 を主に使用。 + - No.6 は純粋な S9(m)V9(n)(非COMP)は未使用だが、COMP-3 版(No.7)で代替。 + - No.9 の COMP 型は符号付(S9)ではないが、9(2) COMP, 9(4) COMP として使用実績あり。 + + +================================================================================ +設計書(02_残業統計管理システム_設計書(サブシステムB).md)対抗確認結果 +================================================================================ + 確認項目: 全6プログラムの機能・構文・パターン実装状況 + 確認日時: 2026-06-16 22:53 + 判定: 全項目 ◎(設計書通りの実装完了) + + プログラム別実装確認: + ------------------------------------------------------------------------------- + | PGM | 設計上のパターン | 実装状態 | 主要構文 | + |----------+-----------------------+----------+-------------------------------| + | ZAN01CHK | 振り分け(EVALUATE) | ◎ 完了 | UNSTRING, EVALUATE, DIVIDE | + | | CSV→FB変換(一部○) | | INSPECT TALLYING, STRING | + | ZAN02CHK | 項目チェック(重複含) | ◎ 完了 | IF, SET, CONTINUE | + | | 前終了>現開始→重複 | | STRING(エラー編集) | + | ZAN03CHK | 項目チェック(重複無) | ◎ 完了 | SEARCH ALL, SET, STRING | + | | SEARCH ALL休日判定 | | FUNCTION CURRENT-DATE | + | ZAN04MAT | マッチング(1:1) | ◎ 完了 | EVALUATE TRUE, STRING | + | | 処理番号1付与 | | HIGH-VALUE制御 | + | ZAN05CAL | キーブレイク(集計) | ◎ 完了 | ACCEPT FROM DATE, DIVIDE | + | | SUB05TIM呼出 | | COMPUTE ROUNDED ON SIZE ERROR | + | | | | SET 88条件 | + | ZAN06UPD | DB更新 | ◎ 完了 | EXEC SQL(6種), PERFORM VARYING| + | | | | PERFORM TEST AFTER, MULTIPLY | + | | | | SUBTRACT, COMMIT/ROLLBACK | + + 設計書「新規COBOL構文カバレッジ一覧(14種)」対抗: + 1. UNSTRING → ZAN01CHK ✓ + 2. STRING → ZAN01CHK, ZAN02CHK, ZAN03CHK, ZAN04MAT, ZAN06UPD ✓ + 3. SEARCH ALL → ZAN03CHK ✓ + 4. SET → ZAN02CHK, ZAN03CHK, ZAN05CAL ✓ + 5. COMPUTE ROUNDED ON SIZE ERROR → ZAN05CAL ✓ + 6. DIVIDE → ZAN01CHK, ZAN05CAL ✓ + 7. CONTINUE → ZAN02CHK, ZAN03CHK, ZAN05CAL, ZAN06UPD ✓ + 8. ACCEPT FROM DATE → ZAN05CAL ✓ + 9. EXEC SQL → ZAN06UPD ✓ + 10. IF (SQLCODE分岐) → ZAN06UPD ✓ + 11. PERFORM VARYING → ZAN06UPD ✓ + 12. PERFORM TEST AFTER → ZAN06UPD ✓ + 13. MULTIPLY → ZAN06UPD ✓ + 14. SUBTRACT → ZAN06UPD ✓ + + 設計書との差分: なし(全14種とも設計書に記載済) +================================================================================ + +以上 diff --git a/list/プログラムタイプ・ステートメントカバレッジ状況_20260619-1200.txt b/list/プログラムタイプ・ステートメントカバレッジ状況_20260619-1200.txt new file mode 100644 index 0000000..0bd455e --- /dev/null +++ b/list/プログラムタイプ・ステートメントカバレッジ状況_20260619-1200.txt @@ -0,0 +1,454 @@ +================================================================================ + プログラムタイプ・ステートメント カバレッジ状況 + 確認日時: 2026-06-22 14:00 + V2.3更新版: KIN06CLD追加(PGMパターン12新規実装 + PERFORM VARYING追認) + 対象: SRC11本 + SUB5本 + CPY11本 = 27ファイル実査 + ベース: PGM実装パターン一覧.txt (29件) + ステートメント一覧.txt (49表記→45ユニーク) + TYPE定義一覧.txt (11件) + COBOLの予約語一覧.txt (193語) +================================================================================ + +確認対象プログラム: + サブシステムA (勤怠休暇): KIN01INP, KIN02UPD, KIN03EXP, KIN04CHK, KIN05MAT, KIN06CLD + サブシステムB (残業統計): ZAN01CHK, ZAN02CHK, ZAN03CHK, ZAN04MAT, ZAN05CAL, ZAN06UPD + サブプログラム共通: SUB01DAT, SUB02MSG, SUB03END, SUB04CHK, SUB05TIM + +確認対象COPYファイル: + KIN系: KIN01REC, KIN02REC, KIN03REC, KIN04REC, KIN05REC + ZAN系: ZAN01REC, ZAN02REC, ZAN03REC, ZAN04REC, ZAN05REC + 共通連絡領域: ZANDATAC, ZANMSGAC, ZANENDAC, ZANCHKAC, ZANTIMAC + SQL埋込: SQLCA(EXEC SQL INCLUDE) +================================================================================ + + +[1] プログラムタイプ カバレッジ状況(PGM実装パターン一覧.txt 準拠) +-------------------------------------------------------------------------------- +凡例: ◎=完全実装 ○=一部実装 △=関連実装あり ×=未実装 空=対象外 + + No | パターン |状態 | 該当プログラム +----+-------------------------------------+------+--------------------------- + 1 | マッチング処理(1:1) | ◎ | ZAN04MAT (R01 vs R02, APPL-ID照合) + 2 | マッチング処理(1:N) | ◎ | KIN05MAT (R01 vs R02, 休暇種別優先順位) + | | | KIN03EXP (DB1行→日数分展開) + 3 | マッチング処理(N:1) | ◎ | ZAN03CHK (複数申請×同一打刻) + 4 | マッチング処理(M:N)→出力N件 | × | 未実装 + 5 | マッチング処理(M:N)→出力M件 | × | 未実装 + 6 | マッチング処理(M:N)→出力MxN件 | × | 未実装 + 7 | マッチング(1:N)+キーブレイク | × | 未実装 + 8 | マッチング(1:N)+キーブレイク | × | 未実装 + | (ブレイクキー>マッチングキー) | | + 9 | キーブレイク処理(集計) | ◎ | ZAN05CAL (APPL-ID単位累積集計) + 10 | キーブレイク処理(集約) | ○ | ZAN05CAL (先頭START-TIME保持) + 11 | キーブレイク処理(その他) | ◎ | ZAN02CHK (重複検出用), KIN03EXP (社員小計), KIN05MAT (N:1ループ) + 12 | レイアウト編集のみ(GETPUT) | ◎ | KIN06CLD (PARM年月の出勤日カレンダーをDB→FILE編集出力) + 13 | 項目チェック(重複チェック無) | ◎ | ZAN01CHK, ZAN03CHK, KIN01INP, SUB04CHK + 14 | 項目チェック(重複チェック有) | ◎ | ZAN02CHK (時間帯重複) + 15 | 振り分け(IF文) | ◎ | ZAN01CHK, ZAN02CHK, ZAN03CHK, ZAN05CAL, + | | | ZAN06UPD, KIN01INP, KIN02UPD, KIN03EXP, KIN05MAT + 16 | 振り分け(EVALUATE文) | ◎ | ZAN01CHK, ZAN03CHK, ZAN04MAT, ZAN05CAL, + | | | ZAN06UPD, KIN01INP, KIN02UPD, KIN05MAT, SUB04CHK, SUB05TIM + 17 | 内部テーブル検索 | ◎ | ZAN03CHK (SEARCH ALL休日), KIN01INP (SEARCH休暇種別), + | | | KIN03EXP (SEARCH ALL休日) + 18 | DB更新/参照 | ◎ | ZAN06UPD (INSERT, UPDATE, SELECT) + | | | KIN02UPD (INSERT, DELETE, SELECT) + | | | KIN03EXP (SELECT, FETCH) + 19 | CSV→FB変換(改行コード無) | ◎ | ZAN01CHK (UNSTRING), KIN01INP (UNSTRING) + 20 | CSV→FB変換(改行コード有) | × | 未実装 + 21 | オンラインPGM | × | バッチ処理のみ + 22 | 25分割 | × | 未実装 + 23 | 50分割 | × | 未実装 + 24 | 100分割 | × | 未実装 + 25 | 2段階マッチング(N:1→N:1) | × | 未実装 + 26 | 2段階マッチング(M:N→M:N) | × | 未実装 + 27 | 2段階マッチング(1:1→1:1) | × | 未実装 + 28 | SYSIN読込・チェック | × | 未実装 + 29 | ASCII→EBCDIC変換 | × | 未実装 +================================================================================ + カバー率: 29パターン中 実装13件 (◎12件 + ○1件) = 44.8% ※ + 凡例: ◎=完全実装, ○=一部実装, ×=未実装 + 備考1: 未実装パターン(4-8,12,20-29)は現行システムの要件範囲外 + 備考2: ※前版から低下したのは「DB参照」を正規29パターンに統合したため + (前版は正規リスト外のDB参照を19番に追加し30パターン表示していた) + + +ステートメント|KIN01|KIN02|KIN03|KIN04|KIN05|KIN06|ZAN01|ZAN02|ZAN03|ZAN04|ZAN05|ZAN06|SUB1|SUB2|SUB3|SUB4|SUB5|状態|使用例 + | INP | UPD | EXP | CHK | MAT | CLD | CHK | CHK | CHK | MAT | CAL | UPD |DAT |MSG |END |CHK |TIM | | +ACCEPT | - | - | - | - | - | ○ | - | - | - | - | ○ | - | - | - | - | - | - | ◎ | ZAN05CALのACCEPT DATE YYYYMMDD (+ KIN06CLDのACCEPT COMMAND-LINE) + | | | | | | | | | | | | | | | | FROM DATE YYYYMMDD + | | | | | | | | | | | | | | | | (ZAN05CAL) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +ADD | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - | ◎ | 全メインプログラム (ADD 1 TO CUN-R01INN) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +ALTER | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +ALTEREDGOTO | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 (GO TO DEPENDING) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +CALL | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - | ◎ | 全メインプログラム (CALL SUB01DAT, SUB02MSG, SUB03END, SUB04CHK, SUB05TIM) + | | | | | | | | | | | | | | | | CALL 'SUB02MSG'... + | | | | | | | | | | | | | | | | CALL 'SUB04CHK'... + | | | | | | | | | | | | | | | | CALL 'SUB05TIM'... +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +CANCEL | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +CLOSE | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - | ◎ | ファイル有りの全PGM (CLOSE R01INNFIL, W01OUTFIL) + | | | | | | | | | | | | | | | | W01OUTFIL + | | | | | | | | | | | | | | | | (ファイル有りの全PGM) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +COMPUTE | - | - | ○ | - | - | ○ | ○ | - | ○ | - | ○ | - | - | - | - | - | ○ | ◎ | ZAN01CHK, ZAN03CHK, ZAN05CAL, KIN03EXP, KIN06CLD, SUB05TIM + | | | | | | | | | | | | | | | | COMPUTE ROUNDED + | | | | | | | | | | | | | | | | ON SIZE ERROR + | | | | | | | | | | | | | | | | (ZAN01, ZAN03, ZAN05, KIN03, KIN06, SUB05) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +CONTINUE | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | ○ | - | ○ | ○ | - | - | - | - | - | ◎ | SEARCH ALL AT END, EVALUATE WHEN OTHER, COMPUTE ON SIZE ERROR + | | | | | | | | | | | | | | | | EVALUATE WHEN OTHER CONTINUE + | | | | | | | | | | | | | | | | COMPUTE ON SIZE ERROR CONT. +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +DELETE | - | ○ | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | ○ | KIN02UPDのみ (EXEC SQL DELETE) + | | | | | | | | | | | | | | | | (KIN02UPDのみ) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +DISPLAY | - | - | - | - | - | - | - | - | - | - | - | - | - | ○ | ○ | - | - | △ | SUB02MSG, SUB03END + | | | | | | | | | | | | | | | | SUB03END: DISPLAY abend +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +DIVIDE | - | - | - | ○ | - | - | ○ | - | - | - | ○ | - | - | - | - | - | ○ | ◎ | ZAN01CHK, ZAN05CAL, SUB05TIM (DIVIDE...GIVING...REMAINDER) + | | | | | | | | | | | | | | | | GIVING B REMAINDER C + | | | | | | | | | | | | | | | | (ZAN01, ZAN05, SUB05) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +ENTRY | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +EVALUATE | ○ | ○ | ○ | - | ○ | - | ○ | - | ○ | ○ | ○ | ○ | - | - | - | ○ | ○ | ◎ | KIN01INP, KIN02UPD, KIN03EXP, KIN05MAT, ZAN01-06, SUB04CHK, SUB05TIM (12本中) + | | | | | | | | | | | | | | | | EVALUATE C01CHKTYP + | | | | | | | | | | | | | | | | (KIN01-03, KIN05, ZAN01,03-06, SUB04,05) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +EXEC CICS | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 (全バッチ) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +EXEC SQL | - | ○ | ○ | - | - | ○ | - | - | - | - | - | ○ | - | - | - | - | - | ◎ | KIN02UPD, KIN03EXP, KIN06CLD, ZAN06UPD (CONNECT, SELECT, INSERT, UPDATE, DELETE, COMMIT, ROLLBACK) + | | | | | | | | | | | | | | | | UPDATE, DELETE, COMMIT, + | | | | | | | | | | | | | | | | ROLLBACK, INCLUDE + | | | | | | | | | | | | | | | | (ZAN06UPD, KIN02UPD, + | | | | | | | | | | | | | | | | KIN03EXP, KIN06CLD) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +EXIT | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ◎ | 全14プログラム (xxx-EXT. EXIT.) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +EXIT PROGRAM | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 (GOBACKで代用) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +GOBACK | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ◎ | 全14プログラム +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +GO TO | ○ | - | - | ○ | - | - | ○ | - | - | - | - | - | - | - | - | ○ | - | ◎ | ZAN01CHK, KIN01INP, KIN04CHK, SUB04CHK (GO TO xxx-EXT) + | | | | | | | | | | | | | | | | (ZAN01CHK, KIN01INP, + | | | | | | | | | | | | | | | | KIN04CHK, SUB04CHK) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +IF | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | ○ | ○ | ◎ | 全メインプログラム + SUB04CHK, SUB05TIM + | | | | | | | | | | | | | | | | IF cond ... ELSE ... END-IF + | | | | | | | | | | | | | | | | IF cond1 AND cond2 + | | | | | | | | | | | | | | | | IF SQLCODE NOT = 0 + | | | | | | | | | | | | | | | | (メイン全PGM+SUB04,05) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +INITIALIZE | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - | ◎ | 全メインプログラム + | | | | | | | | | | | | | | | | INITIALIZE W01OUTREC + | | | | | | | | | | | | | | | | (全メインプログラム) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +INSPECT | - | - | - | ○ | - | - | ○ | - | - | - | - | - | ○ | - | - | - | - | ◎ | ZAN01CHK, KIN04CHK, SUB04CHK (INSPECT TALLYING) + | | | | | | | | | | | | | | | | (ZAN01CHK, KIN04CHK, SUB04CHK) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +MERGE | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 (SORT/JCL委譲) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +MOVE | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ◎ | 全14プログラム +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +MULTIPLY | - | - | - | - | - | - | - | - | - | - | - | ○ | - | - | - | - | - | ○ | ZAN06UPDのみ (MULTIPLY A BY 60 GIVING B) + | | | | | | | | | | | | | | | | (ZAN06UPDのみ) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +OPEN | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - | ◎ | ファイル有りの全PGM + | | | | | | | | | | | | | | | | (ファイル有りの全PGM) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +PERFORM | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | ○ | ○ | ◎ | 全メインプログラム + SUB04CHK, SUB05TIM +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +PERFORM UNTIL | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - | ◎ | 全メインプログラム (PERFORM UNTIL END-PERFORM) + | | | | | | | | | | | | | | | | ... END-PERFORM (ZAN03CHK) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +PERFORM VARY | - | - | - | - | - | ○ | - | - | - | - | - | ○ | - | - | - | - | - | ◎ | ZAN06UPD, KIN06CLD (PERFORM VARYING線形探索) + | | | | | | | | | | | | | | | | (ZAN06UPD, KIN06CLD) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +PERM TEST AFT | - | - | - | - | - | - | - | - | - | - | - | ○ | - | - | - | - | - | ○ | ZAN06UPDのみ (PERFORM TEST AFTER VARYING) + | | | | | | | | | | | | | | | | VARYING ... (ZAN06UPD) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +READ | ○ | ○ | - | ○ | ○ | - | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - | ◎ | KIN03EXP以外の全メインPGM + | | | | | | | | | | | | | | | | AT END/NOT AT END/END-READ + | | | | | | | | | | | | | | | | (KIN03EXP,KIN06CLD以外の全メインPGM) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +RELEASE | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +RETURN | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +REWRITE | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +SEARCH | ○ | - | ○ | - | - | - | - | - | ○ | - | - | - | - | - | - | - | - | ◎ | KIN01INP (SEARCH), KIN03EXP (SEARCH ALL), ZAN03CHK (SEARCH ALL) + | | | | | | | | | | | | | | | | SEARCH (KIN01INP, 直線探索) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +SET | ○ | - | ○ | - | - | - | - | - | ○ | - | ○ | - | - | - | - | - | - | ◎ | KIN01INP, KIN03EXP, ZAN03CHK, ZAN05CAL + | | | | | | | | | | | | | | | | SET cond TO TRUE + | | | | | | | | | | | | | | | | (KIN01,03, ZAN03,05) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +SORT | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 使用禁止 (JCL PGM=SORT) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +START | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 (VSAM非対応) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +STOP RUN | - | - | - | - | - | - | - | - | - | - | - | - | - | - | ○ | - | - | ○ | SUB03ENDのみ (STOP RUN RETURN-CODE) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +STRING | ○ | - | - | ○ | - | ○ | ○ | ○ | ○ | ○ | - | ○ | - | ○ | - | - | - | ◎ | KIN01INP, KIN04CHK, KIN06CLD, ZAN01-ZAN04, ZAN06UPD, SUB02MSG + | | | | | | | | | | | | | | | | INTO X END-STRING + | | | | | | | | | | | | | | | | (KIN01,04,06, ZAN01-04,06, SUB02) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +SUBTRACT | - | - | - | - | - | - | - | - | - | - | - | ○ | - | - | - | - | - | ○ | ZAN06UPDのみ + | | | | | | | | | | | | | | | | (ZAN06UPDのみ) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +UNSTRING | ○ | - | - | ○ | - | - | ○ | - | - | - | - | - | - | - | - | - | - | ◎ | KIN01INP, KIN04CHK, ZAN01CHK + | | | | | | | | | | | | | | | | INTO ... TALLYING IN CNT + | | | | | | | | | | | | | | | | (KIN01INP, KIN04CHK, ZAN01CHK) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +WRITE | ○ | - | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - | ◎ | ファイル出力有りの全PGM + | | | | | | | | | | | | | | | | (ファイル出力有りのPGM) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +WRITE FROM/ | - | - | - | ○ | - | - | - | - | - | - | - | - | - | - | - | - | - | ○ | KIN04CHK (2050NORMSOR正常出力にWRITE FROM使用) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +WRITE AFTER | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 (WRITE FROMはKIN04CHKで使用) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +================================================================================ + ステートメントカバー率: 45ユニーク中 使用33件 (◎=25 + ○=2 + △=6) + カバー率 73.3% (33/45) + 未使用12件: ALTER, ALTEREDGOTO, CANCEL, ENTRY, EXEC CICS, EXIT PROGRAM, + MERGE, RELEASE, RETURN, REWRITE, SORT, START, WRITE AFTER + + +[3] PERFORM文 バリエーション カバレッジ +-------------------------------------------------------------------------------- + No | 形式 | 状態 | 該当プログラム +----+--------------------------+------+------------------------------------------ + 1 | PERFORM 段落名 | ◎ | 全メインプログラム(ZAN01-06, KIN01-03) + | | | + SUB04CHK, SUB05TIM + 2 | PERFORM 段落名 UNTIL | ◎ | 全メインプログラム(ZAN01-06, KIN01-03) + | | | PERFORM 2000MAJSOR UNTIL cond + 3 | PERFORM UNTIL ... | ◎ | ZAN03CHK (1300HOLIDAYSOR: 休日ファイル) + | END-PERFORM | | KIN03EXP (2200-EXPAND-DATE: 日付展開) + 4 | PERFORM VARYING | ◎ | ZAN06UPD (2100SUMMARYSOR: 月バリデーション) + | | | KIN06CLD (休日線形探索) + 5 | PERFORM TEST AFTER | ○ | ZAN06UPD (2210MONTHLYSUBSOR: リトライ制御) + 6 | PERFORM THRU | ○ | KIN03EXP (2100-PROCESS-EMP THRU ...-EXIT, + | | | 2200-EXPAND-DATE THRU ...-EXIT) +================================================================================ + + +[4] IF文 バリエーション カバレッジ +-------------------------------------------------------------------------------- + No | 形式 | 状態 | 該当プログラム +----+-------------------------------+------+-------------------------------------- + 1 | IF 条件 ... END-IF | ◎ | ZAN01-06, KIN01-03, SUB04, SUB05 + 2 | IF 条件 ... ELSE ... END-IF | ◎ | ZAN01-03, KIN01-03, SUB04 (ほか) + 3 | IF 複合条件(AND) | ◎ | ZAN03CHK (時間範囲), ZAN06UPD (月判定) + | | | SUB04CHK (日付範囲) 等 + 4 | IF 複合条件(OR) | ◎ | KIN03EXP (週末判定: 0 OR 6) + 5 | IF ... THEN ... | ◎ | SUB04CHK, SUB05TIM + 6 | IF ... NOT = ... | ◎ | ZAN06UPD (SQLCODE判定), KIN02UPD +================================================================================ + + +[5] 未カバーステートメント 一覧 +-------------------------------------------------------------------------------- + No | ステートメント | 備考 +----+---------------------+----------------------------------------------- + 1 | ALTER | 非推奨、使用予定なし + 2 | ALTEREDGOTO | GO TO DEPENDING、非推奨 + 3 | CANCEL | サブプログラム動的削除は不要 + 4 | ENTRY | エントリポイント複数定義不要 + 5 | EXEC CICS | CICS非対応(全バッチ処理) + 6 | EXIT PROGRAM | GOBACKで代用 + 7 | MERGE | COBOL MERGEはJCL SORTに委譲 + 8 | RELEASE | SORT関連、JCL SORT委譲 + 9 | RETURN | SORT関連、JCL SORT委譲 + 10 | REWRITE | VSAM/INDEXED非対応 + 11 | SORT | COBOL SORT禁止(JCL PGM=SORT) + 12 | START | VSAM非対応 + 13 | WRITE AFTER | 未使用 (WRITE FROMはKIN04CHKで使用) +================================================================================ + + +[6] COPYファイル・SUBプログラム 参照状況 +-------------------------------------------------------------------------------- + COPY/SUB名 | 用途 | 使用プログラム +---------------+----------------------------+------------------------------- + KIN01REC | 休暇申請レコード(80B) | KIN01INP, KIN02UPD + KIN02REC | 休暇日別レコード(80B) | KIN03EXP, KIN05MAT + KIN03REC | 照合結果レコード(160B) | KIN05MAT + KIN04REC | 打刻編集レコード(80B) | KIN04CHK, KIN05MAT + KIN05REC | エラーログ(VB) | KIN01INP + KIN06REC | 出勤日カレンダー(80B) | KIN06CLD + ZAN01REC | 申請レコード(80B) | ZAN01CHK, ZAN02CHK, ZAN03CHK, + | | ZAN04MAT (全4本) + ZAN02REC | マッチング結果(80B) | ZAN04MAT, ZAN05CAL + ZAN03REC | 集計結果レコード(80B) | ZAN05CAL, ZAN06UPD + ZAN04REC | DBCLEAN用レコード(80B) | ZAN04MAT, ZAN06UPD + ZAN05REC | エラーログ(VB) | ZAN01-04, ZAN06UPD (計5本) + ZANDATAC | SUB01DAT連絡領域 | ZAN01,02,04,05,06, KIN01, KIN03 + ZANMSGAC | SUB02MSG連絡領域 | ZAN01-06, KIN01-06, SUB03END + ZANENDAC | SUB03END連絡領域 | ZAN01-06, KIN01-06 + ZANCHKAC | SUB04CHK連絡領域 | ZAN01CHK, KIN01INP, KIN04CHK + ZANTIMAC | SUB05TIM連絡領域 | ZAN05CAL + SQLCA | SQLCA (EXEC SQL INCLUDE) | ZAN06UPD, KIN02UPD, KIN03EXP, KIN06CLD + | | + SUB01DAT | 運用日付取得 | ZAN01,02,04,05,06, KIN01, KIN03 + SUB02MSG | メッセージ編集出力 | ZAN01-06, KIN01-06, SUB03END + SUB03END | ABEND処理 | ZAN01-06, KIN01-06 + SUB04CHK | 項目チェック | ZAN01CHK, KIN01INP + SUB05TIM | 時刻丸め計算 | ZAN05CAL +================================================================================ + + +[7] TYPE定義 カバレッジ状況(TYPE定義一覧.txt 準拠) +-------------------------------------------------------------------------------- + No | TYPE定義 | 状態 | 使用例 +----+---------------------+------+------------------------------------------- + 1 | X(m) | ◎ | PIC X(001)〜X(198): STATUS, OVT-TYPE, + | | | APPL-ID, EMP-ID, ERR-DETAIL, + | | | FILLER, 各種MSG領域 (全COPY/全PGM) + 2 | G(m) | × | 未使用(DBCS文字列不要) + 3 | N(m) | × | 未使用(National文字列不要) + 4 | 9(m) | ◎ | PIC 9(001)〜9(009): CNS定数, 日付, 時刻, + | | | APPL-ID(KIN系), ERR-CATEGORY, + | | | PROC-SEQ, RRCコード, MSG-CODE + 5 | 9(m)V9(n) | ◎ | PIC 9(004)V9(001): OVT-HOURS, + | | | 加班時間(集計/丸め/残容量) + | | | (ZAN03REC, ZANTIMAC, ZAN05CAL, ZAN06UPD, SUB05TIM) + 6 | S9(m)V9(n) | ○ | PIC S9(005)V9(001): WRK-HOURS + | | | (SUB05TIM, DISPLAY形式, COMP無) + 7 | S9(m)V9(n) COMP-3 | ○ | PIC S9(007)V9(001) COMP-3: DB-OVT-HOURS + | | | (ZAN06UPDのみ) + 8 | S9(m) COMP-3 | ◎ | PIC S9(009) COMP-3: CUN-R01INN他 + | | | (全メインプログラム: カウンタ領域) + 9 | S9(m) COMP | ○ | PIC S9(004) COMP: D01FKICOD + | | | (ZANDATAC, SUB01DAT) + | | | PIC 9(002) COMP: WRK-COMMA-CNT + | | | (ZAN01CHK, KIN01INP) + | | | PIC 9(004) COMP: WRK-HOLIDAY-CNT + | | | (ZAN03CHK) + | | | PIC 9(004) COMP: WRK-HD-COUNT + | | | (KIN03EXP) + 10 | S9(m) BINARY | × | 未使用(COMP-5/BINARY不使用) + 11 | ZZZ9(編集文字) | × | 未使用 + | | | + | 補足1: 9(004).9(001) | △ | PIC 9(004).9(001) 編集数字(実小数点) + | | | WRK-OVT-HOURS-EDITED (ZAN06UPD) + | 補足2: S9(m) DISPLAY | △ | PIC S9(005): WRK-MINUTES, WRK-REMAINDER + | | | (SUB05TIM 符号付非COMP整数) + | | | PIC S9(004): WRK-SIGN (SUB04CHK) + | 補足3: +9(009) | △ | PIC +9(009): WRK-SQLCODE-DISP + | | | (ZAN06UPD, KIN02UPD 符号強制編集数字) + ================================================================================ + 凡例: ◎=複数プログラムで使用, ○=1プログラムのみ, △=特殊形式/補足, ×=未使用 + 備考: 全TYPE定義11件中、使用7件 (1,4,5,6,7,8,9) + 特殊形式3件 + 未使用4件 (2,3,10,11) + + [8] COBOLの予約語一覧.txt (193語) との対照 + -------------------------------------------------------------------------------- + 全予約語193語を全ソースファイル(src/*.cbl + sub/*.cbl + cpy/*.cpy)でgrep確認。 + 予約語出現判定は単語境界\bマッチ、大文字小文字不区別。 + -------------------------------------------------------------------------------- + 出現確認: 134語 (69.4%) + 未出現: 59語 (30.6%) + -------------------------------------------------------------------------------- + 出現確認した主な予約語 (134語): + ACCEPT, ADD, AFTER, ALL, AND, ASCENDING, ASSIGN, AT, BLOCK, BY, + CALL, CHARACTERS, CLOSE, COMP, COMP-3, COMPUTE, CONFIGURATION, + CONTAINS, CONTINUE, COPY, COUNT, DATA, DATE, DELETE, DELIMITED, + DEPENDING, DISPLAY, DIVIDE, DIVISION, ELSE, END, END-COMPUTE, + END-EVALUATE, END-EXEC, END-IF, END-PERFORM, END-READ, END-SEARCH, + END-STRING, END-UNSTRING, ENVIRONMENT, ERROR, EVALUATE, EXEC, EXIT, + FD, FILE, FILE-CONTROL, FILLER, FIRST, FOR, FROM, FUNCTION, GIVING, + GO, GOBACK, HIGH-VALUE, ID, IDENTIFICATION, IF, IN, INDEXED, INITIAL, + INITIALIZE, INPUT, INPUT-OUTPUT, INSERT, INSPECT, INTO, INVALID, IS, + KEY, LABEL, LINKAGE, MODE, MOVE, MULTIPLY, NOT, OBJECT-COMPUTER, + OCCURS, OF, ON, OPEN, OR, ORDER, OTHER, OUTPUT, PERFORM, PIC, + PROCEDURE, PROGRAM-ID, READ, RECORD, RECORDING, REDEFINES, REMAINDER, + REPLACING, RETURN-CODE, ROUNDED, RUN, SEARCH, SECTION, SELECT, SET, + SIZE, SOURCE-COMPUTER, SPACE, SPACES, SQL, STANDARD, STOP, STRING, + SUBTRACT, TABLE, TALLYING, TEST, THEN, THRU, TIME, TIMES, TO, TRUE, + TYPE, UNSTRING, UNTIL, USING, VALUE, VALUES, VARYING, WHEN, + WHEN-COMPILED, WORKING-STORAGE, WRITE, ZERO + -------------------------------------------------------------------------------- + 未出現の予約語 (59語): 全て現行システムの要件範囲外 + ACCESS, ALPHABETIC, ALPHABETIC-UPPER, ALSO, ANY, APPLY, AUTHOR, + BINARY, CHARACTER, COMP-4, CONDITION, CONVERTING, CORR, CURSOR, + DATE-COMPILED, DATE-WRITTEN, DECLARATIVES, DELIMITER, DESCENDING, + DISPLAY-1, DOWN, DYNAMIC, EJECT, END-ADD, END-CALL, END-DIVIDE, + END-SUBTRACT, EXCEPTION, EXECUTE, FALSE, GET, GREATER, I-O-CONTROL, + LENGTH, LOW-VALUE, NEXT, NUMERIC, OMITTED, OPTIONS, ORGANIZATION, + PACKED-DECIMAL, PAGE, PAGE-COUNTER, POINTER, RANDOM, RECORDS, REMOVAL, + RERUN, SENTENCE, SHIFT-IN, SHIFT-OUT, SKIP2, UP, UPON, USAGE, USE, + WITH, WRITE-ONLY, ZEROS + + +================================================================================ + サブシステム別 カバレッジサマリ +================================================================================ + サブシステムA (KIN01INP→KIN02UPD→KIN03EXP→KIN04CHK→KIN05MAT→KIN06CLD): 6プログラム + - PGM実装パターン: 2,11,12,13,15,16,17,18,19 (9種/29種中) + KIN05MAT追加: パターン2(1:Nマッチング)をファイル照合で実装 + KIN06CLD追加: パターン12(レイアウト編集のみGETPUT)を新規実装 + - ステートメントカバレッジ: 使用33種/45種中 (新規追加無) + KIN04CHK: WRITE FROM, IF THEN句4段階ネスト + KIN05MAT: EVALUATE TRUE 3分岐マッチング制御, N:1ループ + KIN06CLD: ACCEPT FROM COMMAND-LINE, EXEC SQL + bridge混在, PERFORM VARYING線形探索 + - EXEC SQL: KIN02UPD(CONNECT+INSERT+DELETE+COMMIT+ROLLBACK) + KIN03EXP(CONNECT+SELECT+INCLUDE+FETCH) + KIN06CLD(SELECT EMP_MASTER + DIRECT BRIDGE holiday) + - KIN04CHK, KIN05MAT: EXEC SQLなし (ファイル入出力/マッチングのみ) + + サブシステムB (ZAN01CHK→…→ZAN06UPD): 6プログラム + - PGM実装パターン: 1,3,9,10,11,13,14,15,16,17,18,19 (12種/29種中) + - ステートメントカバレッジ: 使用30種/45種中 + MULTIPLY, SUBTRACT, PERFORM TEST AFTERはZAN06UPDのみ + PERFORM VARYING: ZAN06UPD + KIN06CLD (計2本、KIN06CLD追加) + - EXEC SQL: ZAN06UPDのみ (全6種のSQL動詞) + + サブシステムAプログラム (KIN01→KIN06): 6プログラム + - パイプライン: KIN01INP(CSV→FB)→KIN02UPD(DB更新)→KIN03EXP(日付展開DB出力) + →KIN04CHK(打刻チェック)→KIN05MAT(打刻休暇照合)→KIN06CLD(カレンダー生成) + - KIN05MAT: 1:Nマッチング, EVALUATE TRUE 3分岐, 優先順位選定(01>02>03>04) + - KIN06CLD: 休日判定+EMPLOYEE CURSOR LOOP, PERFORM VARYING線形探索, CALL br_open/br_query/br_get_col + - SUB02MSG(メッセージ), SUB03END(ABEND)を使用. DBアクセスはbridge直接+EXEC SQL混在. + + サブプログラム群 (SUB01-05): + - 各1〜2パターンに特化 (日付/メッセージ/ABEND/チェック/丸め) + - 全サブプログラムがGOBACK復帰 (EXIT PROGRAM不使用) + + 未カバーパターン (29種中16種): + 4-8(M:Nマッチング), 20(CSV+改行有), 21(オンライン), + 22-24(分割), 25-27(2段階マッチング), 28(SYSIN), 29(ASCII→EBCDIC) + → 全て現行要件の範囲外 + + 未カバーステートメント (45種中13種) + → 全てCOBOL機能上不要なもの(ALTER, MERGE, SORT等JCL委譲) + + TYPE定義カバレッジ: + - 全TYPE定義11件中、使用7件 (X,9,9V9,S9V9,S9V9 COMP-3,S9 COMP-3,S9 COMP) + - 特殊形式3件 (9(004).9(001), S9(m) DISPLAY, +9(009)) + - 未使用4件 (G,N,BINARY,ZZZ9) + + 予約語カバレッジ: + - COBOLの予約語一覧.txt 193語中、ソース出現134語 (69.4%) + - 未出現59語は全て現行システムの要件範囲外 + + ================================================================================ + 全カバレッジサマリ表 + +--------------------------+----------+----------+-----------+------------------+ + | カテゴリ | 全件 | 使用/実装| 未使用 | カバー率 | + +--------------------------+----------+----------+-----------+------------------+ + | PGM実装パターン | 29件 | 13件 | 16件 | 44.8% | + | ステートメント | 45ユニーク| 33件 | 12件 | 73.3% | + | 備考: KIN06CLD追加によりパターン12(GETPUT)を◎新規実装。 | + | 全使用ステートメントは既存◎。 | + | TYPE定義 | 11件 | 7件(+特殊3)| 4件 | 63.6%(+27.3%特殊)| + | COBOL予約語 | 193語 | 134語 | 59語 | 69.4% | + +--------------------------+----------+----------+-----------+------------------+ + ※PGMパターンの低カバー率は要件範囲外パターン(M:N,分割,SYSIN,etc.)が多いため。 + 実装対象パターン(1-3,9-20)に限定すれば 13/19 = 68.4%。(KIN06CLDで12→13) + ================================================================================ + 以上 diff --git a/list/プログラムタイプ・ステートメントカバレッジ状況_20260623-1500.txt b/list/プログラムタイプ・ステートメントカバレッジ状況_20260623-1500.txt new file mode 100644 index 0000000..f62d0c6 --- /dev/null +++ b/list/プログラムタイプ・ステートメントカバレッジ状況_20260623-1500.txt @@ -0,0 +1,459 @@ +================================================================================ + プログラムタイプ・ステートメント カバレッジ状況 + 確認日時: 2026-06-23 15:00 (KIN07DAI追記) + V2.4更新版: KIN07DAI追加(MULTIPLY/SUBTRACT/A追加、EVALUATE 4分岐パターン) + 対象: SRC12本 + SUB5本 + CPY12本 = 29ファイル実査 + ベース: PGM実装パターン一覧.txt (29件) + ステートメント一覧.txt (49表記→45ユニーク) + TYPE定義一覧.txt (11件) + COBOLの予約語一覧.txt (193語) +================================================================================ + +確認対象プログラム: + サブシステムA (勤怠休暇): KIN01INP, KIN02UPD, KIN03EXP, KIN04CHK, KIN05MAT, KIN06CLD, KIN07DAI + サブシステムB (残業統計): ZAN01CHK, ZAN02CHK, ZAN03CHK, ZAN04MAT, ZAN05CAL, ZAN06UPD + サブプログラム共通: SUB01DAT, SUB02MSG, SUB03END, SUB04CHK, SUB05TIM + +確認対象COPYファイル: + KIN系: KIN01REC, KIN02REC, KIN03REC, KIN04REC, KIN05REC, KIN06REC, KIN07REC + ZAN系: ZAN01REC, ZAN02REC, ZAN03REC, ZAN04REC, ZAN05REC + 共通連絡領域: ZANDATAC, ZANMSGAC, ZANENDAC, ZANCHKAC, ZANTIMAC + SQL埋込: SQLCA(EXEC SQL INCLUDE) +================================================================================ + + +[1] プログラムタイプ カバレッジ状況(PGM実装パターン一覧.txt 準拠) +-------------------------------------------------------------------------------- +凡例: ◎=完全実装 ○=一部実装 △=関連実装あり ×=未実装 空=対象外 + + No | パターン |状態 | 該当プログラム +----+-------------------------------------+------+--------------------------- + 1 | マッチング処理(1:1) | ◎ | ZAN04MAT (R01 vs R02, APPL-ID照合) + 2 | マッチング処理(1:N) | ◎ | KIN05MAT (R01 vs R02, 休暇種別優先順位) + | | | KIN03EXP (DB1行→日数分展開) + 3 | マッチング処理(N:1) | ◎ | ZAN03CHK (複数申請×同一打刻) + 4 | マッチング処理(M:N)→出力N件 | × | 未実装 + 5 | マッチング処理(M:N)→出力M件 | × | 未実装 + 6 | マッチング処理(M:N)→出力MxN件 | × | 未実装 + 7 | マッチング(1:N)+キーブレイク | × | 未実装 + 8 | マッチング(1:N)+キーブレイク | × | 未実装 + | (ブレイクキー>マッチングキー) | | + 9 | キーブレイク処理(集計) | ◎ | ZAN05CAL (APPL-ID単位累積集計) + 10 | キーブレイク処理(集約) | ○ | ZAN05CAL (先頭START-TIME保持) + 11 | キーブレイク処理(その他) | ◎ | ZAN02CHK (重複検出用), KIN03EXP (社員小計), KIN05MAT (N:1ループ) + 12 | レイアウト編集のみ(GETPUT) | ◎ | KIN06CLD (PARM年月の出勤日カレンダーをDB→FILE編集出力) + 13 | 項目チェック(重複チェック無) | ◎ | ZAN01CHK, ZAN03CHK, KIN01INP, SUB04CHK + 14 | 項目チェック(重複チェック有) | ◎ | ZAN02CHK (時間帯重複) + 15 | 振り分け(IF文) | ◎ | ZAN01CHK, ZAN02CHK, ZAN03CHK, ZAN05CAL, + | | | ZAN06UPD, KIN01INP, KIN02UPD, KIN03EXP, KIN05MAT + 16 | 振り分け(EVALUATE文) | ◎ | ZAN01CHK, ZAN03CHK, ZAN04MAT, ZAN05CAL, + | | | ZAN06UPD, KIN01INP, KIN02UPD, KIN05MAT, SUB04CHK, SUB05TIM + 17 | 内部テーブル検索 | ◎ | ZAN03CHK (SEARCH ALL休日), KIN01INP (SEARCH休暇種別), + | | | KIN03EXP (SEARCH ALL休日) + 18 | DB更新/参照 | ◎ | ZAN06UPD (INSERT, UPDATE, SELECT) + | | | KIN02UPD (INSERT, DELETE, SELECT) + | | | KIN03EXP (SELECT, FETCH) + 19 | CSV→FB変換(改行コード無) | ◎ | ZAN01CHK (UNSTRING), KIN01INP (UNSTRING) + 20 | CSV→FB変換(改行コード有) | × | 未実装 + 21 | オンラインPGM | × | バッチ処理のみ + 22 | 25分割 | × | 未実装 + 23 | 50分割 | × | 未実装 + 24 | 100分割 | × | 未実装 + 25 | 2段階マッチング(N:1→N:1) | × | 未実装 + 26 | 2段階マッチング(M:N→M:N) | × | 未実装 + 27 | 2段階マッチング(1:1→1:1) | × | 未実装 + 28 | SYSIN読込・チェック | × | 未実装 + 29 | ASCII→EBCDIC変換 | × | 未実装 +================================================================================ + カバー率: 29パターン中 実装13件 (◎12件 + ○1件) = 44.8% ※ + 凡例: ◎=完全実装, ○=一部実装, ×=未実装 + 備考1: 未実装パターン(4-8,12,20-29)は現行システムの要件範囲外 + 備考2: ※前版から低下したのは「DB参照」を正規29パターンに統合したため + (前版は正規リスト外のDB参照を19番に追加し30パターン表示していた) + + +ステートメント|KIN01|KIN02|KIN03|KIN04|KIN05|KIN06|ZAN01|ZAN02|ZAN03|ZAN04|ZAN05|ZAN06|SUB1|SUB2|SUB3|SUB4|SUB5|状態|使用例 + | INP | UPD | EXP | CHK | MAT | CLD | CHK | CHK | CHK | MAT | CAL | UPD |DAT |MSG |END |CHK |TIM | | +ACCEPT | - | - | - | - | - | ○ | - | - | - | - | - | - | - | - | - | - | - | ◎ | KIN06CLDのACCEPT COMMAND-LINE (ZAN05CALのACCEPT FROM DATEは削除済) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +ADD | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - | ◎ | 全メインプログラム (ADD 1 TO CUN-R01INN) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +ALTER | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +ALTEREDGOTO | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 (KIN07DAIで検討したがフォールスルー回避のためEVALUATE採用) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +CALL | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - | ◎ | 全メインプログラム (CALL SUB01DAT, SUB02MSG, SUB03END, SUB04CHK, SUB05TIM) + | | | | | | | | | | | | | | | | CALL 'SUB02MSG'... + | | | | | | | | | | | | | | | | CALL 'SUB04CHK'... + | | | | | | | | | | | | | | | | CALL 'SUB05TIM'... +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +CANCEL | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +CLOSE | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - | ◎ | ファイル有りの全PGM (CLOSE R01INNFIL, W01OUTFIL) + | | | | | | | | | | | | | | | | W01OUTFIL + | | | | | | | | | | | | | | | | (ファイル有りの全PGM) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +COMPUTE | - | - | ○ | - | - | ○ | ○ | - | ○ | - | ○ | - | - | - | - | - | ○ | ◎ | ZAN01CHK, ZAN03CHK, ZAN05CAL, KIN03EXP, KIN06CLD, SUB05TIM + | | | | | | | | | | | | | | | | COMPUTE ROUNDED + | | | | | | | | | | | | | | | | ON SIZE ERROR + | | | | | | | | | | | | | | | | (ZAN01, ZAN03, ZAN05, KIN03, KIN06, SUB05) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +CONTINUE | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | ○ | - | ○ | ○ | - | - | - | - | - | ◎ | SEARCH ALL AT END, EVALUATE WHEN OTHER, COMPUTE ON SIZE ERROR + | | | | | | | | | | | | | | | | EVALUATE WHEN OTHER CONTINUE + | | | | | | | | | | | | | | | | COMPUTE ON SIZE ERROR CONT. +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +DELETE | - | ○ | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | ○ | KIN02UPDのみ (EXEC SQL DELETE) + | | | | | | | | | | | | | | | | (KIN02UPDのみ) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +DISPLAY | - | - | - | - | - | - | - | - | - | - | - | - | - | ○ | ○ | - | - | △ | SUB02MSG, SUB03END + | | | | | | | | | | | | | | | | SUB03END: DISPLAY abend +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +DIVIDE | - | - | - | ○ | - | - | ○ | - | - | - | ○ | - | - | - | - | - | ○ | ◎ | ZAN01CHK, ZAN05CAL, SUB05TIM, KIN07DAI (DIVIDE...GIVING...REMAINDER) + | | | | | | | | | | | | | | | | GIVING B REMAINDER C + | | | | | | | | | | | | | | | | (ZAN01, ZAN05, SUB05, KIN07) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +ENTRY | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +EVALUATE | ○ | ○ | ○ | - | ○ | - | ○ | - | ○ | ○ | ○ | ○ | - | - | - | ○ | ○ | ◎ | KIN01INP, KIN02UPD, KIN03EXP, KIN05MAT, ZAN01-06, SUB04CHK, SUB05TIM (12本中) + | | | | | | | | | | | | | | | | EVALUATE C01CHKTYP + | | | | | | | | | | | | | | | | (KIN01-03, KIN05, ZAN01,03-06, SUB04,05) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +EXEC CICS | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 (全バッチ) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +EXEC SQL | - | ○ | ○ | - | - | ○ | - | - | - | - | - | ○ | - | - | - | - | - | ◎ | KIN02UPD, KIN03EXP, KIN06CLD, ZAN06UPD (CONNECT, SELECT, INSERT, UPDATE, DELETE, COMMIT, ROLLBACK) + | | | | | | | | | | | | | | | | UPDATE, DELETE, COMMIT, + | | | | | | | | | | | | | | | | ROLLBACK, INCLUDE + | | | | | | | | | | | | | | | | (ZAN06UPD, KIN02UPD, + | | | | | | | | | | | | | | | | KIN03EXP, KIN06CLD) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +EXIT | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ◎ | 全14プログラム (xxx-EXT. EXIT.) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +EXIT PROGRAM | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 (GOBACKで代用) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +GOBACK | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ◎ | 全14プログラム +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +GO TO | ○ | - | - | ○ | - | - | ○ | - | - | - | - | - | - | - | - | ○ | - | ◎ | ZAN01CHK, KIN01INP, KIN04CHK, SUB04CHK (GO TO xxx-EXT) + | | | | | | | | | | | | | | | | (ZAN01CHK, KIN01INP, + | | | | | | | | | | | | | | | | KIN04CHK, SUB04CHK) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +IF | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | ○ | ○ | ◎ | 全メインプログラム + SUB04CHK, SUB05TIM + | | | | | | | | | | | | | | | | IF cond ... ELSE ... END-IF + | | | | | | | | | | | | | | | | IF cond1 AND cond2 + | | | | | | | | | | | | | | | | IF SQLCODE NOT = 0 + | | | | | | | | | | | | | | | | (メイン全PGM+SUB04,05) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +INITIALIZE | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - | ◎ | 全メインプログラム + | | | | | | | | | | | | | | | | INITIALIZE W01OUTREC + | | | | | | | | | | | | | | | | (全メインプログラム) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +INSPECT | - | - | - | ○ | - | - | ○ | - | - | - | - | - | ○ | - | - | - | - | ◎ | ZAN01CHK, KIN04CHK, SUB04CHK (INSPECT TALLYING) + | | | | | | | | | | | | | | | | (ZAN01CHK, KIN04CHK, SUB04CHK) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +MERGE | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 (SORT/JCL委譲) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +MOVE | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ◎ | 全14プログラム +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +MULTIPLY | - | - | - | - | - | - | - | - | - | - | - | ○ | - | - | - | - | - | ◎ | ZAN06UPD, KIN07DAI (MULTIPLY A BY 60 GIVING B) + | | | | | | | | | | | | | | | | (ZAN06UPD, KIN07DAI) + | | | | | | | | | | | | | | | | KIN07DAI: 時間→分変換(6100PATAFN/6300PATCFN) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +OPEN | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - | ◎ | ファイル有りの全PGM + | | | | | | | | | | | | | | | | (ファイル有りの全PGM) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +PERFORM | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | ○ | ○ | ◎ | 全メインプログラム + SUB04CHK, SUB05TIM +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +PERFORM UNTIL | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - | ◎ | 全メインプログラム (PERFORM UNTIL END-PERFORM) + | | | | | | | | | | | | | | | | ... END-PERFORM (ZAN03CHK) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +PERFORM VARY | - | - | - | - | - | ○ | - | - | - | - | - | ○ | - | - | - | - | - | ◎ | ZAN06UPD, KIN06CLD (PERFORM VARYING線形探索) + | | | | | | | | | | | | | | | | (ZAN06UPD, KIN06CLD) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +PERM TEST AFT | - | - | - | - | - | - | - | - | - | - | - | ○ | - | - | - | - | - | ○ | ZAN06UPDのみ (PERFORM TEST AFTER VARYING) + | | | | | | | | | | | | | | | | VARYING ... (ZAN06UPD) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +READ | ○ | ○ | - | ○ | ○ | - | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - | ◎ | KIN03EXP以外の全メインPGM + | | | | | | | | | | | | | | | | AT END/NOT AT END/END-READ + | | | | | | | | | | | | | | | | (KIN03EXP,KIN06CLD以外の全メインPGM) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +RELEASE | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +RETURN | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +REWRITE | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +SEARCH | ○ | - | ○ | - | - | - | - | - | ○ | - | - | - | - | - | - | - | - | ◎ | KIN01INP (SEARCH), KIN03EXP (SEARCH ALL), ZAN03CHK (SEARCH ALL) + | | | | | | | | | | | | | | | | SEARCH (KIN01INP, 直線探索) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +SET | ○ | - | ○ | - | - | - | - | - | ○ | - | ○ | - | - | - | - | - | - | ◎ | KIN01INP, KIN03EXP, ZAN03CHK, ZAN05CAL + | | | | | | | | | | | | | | | | SET cond TO TRUE + | | | | | | | | | | | | | | | | (KIN01,03, ZAN03,05) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +SORT | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 使用禁止 (JCL PGM=SORT) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +START | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 (VSAM非対応) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +STOP RUN | - | - | - | - | - | - | - | - | - | - | - | - | - | - | ○ | - | - | ○ | SUB03ENDのみ (STOP RUN RETURN-CODE) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +STRING | ○ | ○ | - | ○ | - | ○ | ○ | ○ | ○ | ○ | - | ○ | - | ○ | - | - | - | ◎ | KIN01INP, KIN02UPD, KIN04CHK, KIN06CLD, ZAN01-ZAN04, ZAN06UPD, SUB02MSG + | | | | | | | | | | | | | | | | INTO X END-STRING + | | | | | | | | | | | | | | | | (KIN01,02,04,06, ZAN01-04,06, SUB02) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +SUBTRACT | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | ◎ | KIN07DAI (ZAN06UPDのSUBTRACTは削除済) + | | | | | | | | | | | | | | | | KIN07DAI: ランチ時間除外(6100PATAFN/6300PATCFN) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +UNSTRING | ○ | - | - | ○ | - | - | ○ | - | - | - | - | - | - | - | - | - | - | ◎ | KIN01INP, KIN04CHK, ZAN01CHK + | | | | | | | | | | | | | | | | INTO ... TALLYING IN CNT + | | | | | | | | | | | | | | | | (KIN01INP, KIN04CHK, ZAN01CHK) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +WRITE | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | - | - | - | - | - | ◎ | ファイル出力有りの全PGM + | | | | | | | | | | | | | | | | (ファイル出力有りのPGM) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +WRITE FROM/ | - | - | - | ○ | - | - | - | - | - | - | - | - | - | - | - | - | - | ○ | KIN04CHK (2050NORMSOR正常出力にWRITE FROM使用) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +WRITE AFTER | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | × | 未使用 (WRITE FROMはKIN04CHKで使用) +--------------+-----+-----+-----+-----+-----+-----+-----+-----+-----+----+----+----+----+----+----+-------------------------- +================================================================================ + ステートメントカバー率: 45ユニーク中 使用33件 (◎=27 + ○=0 + △=6) + カバー率 73.3% (33/45) + + NOTE: KIN07DAI追加に伴いMULTIPLY/SUBTRACTを◎に昇格(ZAN06UPD + KIN07DAIの2プログラム以上で使用)。新規構文の追加は無し(全構文既存◎)。 + 未使用12件: ALTER, ALTEREDGOTO, CANCEL, ENTRY, EXEC CICS, EXIT PROGRAM, + MERGE, RELEASE, RETURN, REWRITE, SORT, START, WRITE AFTER + + +[3] PERFORM文 バリエーション カバレッジ +-------------------------------------------------------------------------------- + No | 形式 | 状態 | 該当プログラム +----+--------------------------+------+------------------------------------------ + 1 | PERFORM 段落名 | ◎ | 全メインプログラム(ZAN01-06, KIN01-03) + | | | + SUB04CHK, SUB05TIM + 2 | PERFORM 段落名 UNTIL | ◎ | 全メインプログラム(ZAN01-06, KIN01-03) + | | | PERFORM 2000MAJSOR UNTIL cond + 3 | PERFORM UNTIL ... | ◎ | ZAN03CHK (1300HOLIDAYSOR: 休日ファイル) + | END-PERFORM | | KIN03EXP (2200-EXPAND-DATE: 日付展開) + 4 | PERFORM VARYING | ◎ | ZAN06UPD (2100SUMMARYSOR: 月バリデーション) + | | | KIN06CLD (休日線形探索) + 5 | PERFORM TEST AFTER | ○ | ZAN06UPD (2210MONTHLYSUBSOR: リトライ制御) + 6 | PERFORM THRU | ○ | KIN03EXP (2100-PROCESS-EMP THRU ...-EXIT, + | | | 2200-EXPAND-DATE THRU ...-EXIT) +================================================================================ + + +[4] IF文 バリエーション カバレッジ +-------------------------------------------------------------------------------- + No | 形式 | 状態 | 該当プログラム +----+-------------------------------+------+-------------------------------------- + 1 | IF 条件 ... END-IF | ◎ | ZAN01-06, KIN01-03, SUB04, SUB05 + 2 | IF 条件 ... ELSE ... END-IF | ◎ | ZAN01-03, KIN01-03, SUB04 (ほか) + 3 | IF 複合条件(AND) | ◎ | ZAN03CHK (時間範囲), ZAN06UPD (月判定) + | | | SUB04CHK (日付範囲) 等 + 4 | IF 複合条件(OR) | ◎ | KIN03EXP (週末判定: 0 OR 6) + 5 | IF ... THEN ... | ◎ | SUB04CHK, SUB05TIM + 6 | IF ... NOT = ... | ◎ | ZAN06UPD (SQLCODE判定), KIN02UPD +================================================================================ + + +[5] 未カバーステートメント 一覧 +-------------------------------------------------------------------------------- + No | ステートメント | 備考 +----+---------------------+----------------------------------------------- + 1 | ALTER | 非推奨、使用予定なし + 2 | ALTEREDGOTO | GO TO DEPENDING、非推奨 + 3 | CANCEL | サブプログラム動的削除は不要 + 4 | ENTRY | エントリポイント複数定義不要 + 5 | EXEC CICS | CICS非対応(全バッチ処理) + 6 | EXIT PROGRAM | GOBACKで代用 + 7 | MERGE | COBOL MERGEはJCL SORTに委譲 + 8 | RELEASE | SORT関連、JCL SORT委譲 + 9 | RETURN | SORT関連、JCL SORT委譲 + 10 | REWRITE | VSAM/INDEXED非対応 + 11 | SORT | COBOL SORT禁止(JCL PGM=SORT) + 12 | START | VSAM非対応 + 13 | WRITE AFTER | 未使用 (WRITE FROMはKIN04CHKで使用) +================================================================================ + + +[6] COPYファイル・SUBプログラム 参照状況 +-------------------------------------------------------------------------------- + COPY/SUB名 | 用途 | 使用プログラム +---------------+----------------------------+------------------------------- + KIN01REC | 休暇申請レコード(80B) | KIN01INP, KIN02UPD + KIN02REC | 休暇日別レコード(80B) | KIN03EXP, KIN05MAT + KIN03REC | 照合結果レコード(160B) | KIN05MAT + KIN04REC | 打刻編集レコード(80B) | KIN04CHK, KIN05MAT, KIN07DAI + KIN05REC | エラーログ(VB) | KIN01INP, KIN02UPD + KIN06REC | 出勤日カレンダー(80B) | KIN06CLD + KIN07REC | 日別計算結果(200B) | KIN07DAI + ZAN01REC | 申請レコード(80B) | ZAN01CHK, ZAN02CHK, ZAN03CHK, + | | ZAN04MAT (全4本) + ZAN02REC | マッチング結果(80B) | ZAN04MAT, ZAN05CAL + ZAN03REC | 集計結果レコード(80B) | ZAN05CAL, ZAN06UPD + ZAN04REC | DBCLEAN用レコード(80B) | ZAN04MAT, ZAN06UPD + ZAN05REC | エラーログ(VB) | ZAN01-04, ZAN06UPD (計5本) + ZANDATAC | SUB01DAT連絡領域 | ZAN01,02,04,05,06, KIN01, KIN03 + ZANMSGAC | SUB02MSG連絡領域 | ZAN01-06, KIN01-07, SUB03END + ZANENDAC | SUB03END連絡領域 | ZAN01-06, KIN01-07 + ZANCHKAC | SUB04CHK連絡領域 | ZAN01CHK, KIN01INP, KIN04CHK + ZANTIMAC | SUB05TIM連絡領域 | ZAN05CAL, KIN07DAI + SQLCA | SQLCA (EXEC SQL INCLUDE) | ZAN06UPD, KIN02UPD, KIN03EXP, KIN06CLD + | | + SUB01DAT | 運用日付取得 | ZAN01,02,04,05,06, KIN01, KIN03 + SUB02MSG | メッセージ編集出力 | ZAN01-06, KIN01-07, SUB03END + SUB03END | ABEND処理 | ZAN01-06, KIN01-07 + SUB04CHK | 項目チェック | ZAN01CHK, KIN01INP, KIN04CHK + SUB05TIM | 時刻丸め計算 | ZAN05CAL, KIN07DAI +================================================================================ + + +[7] TYPE定義 カバレッジ状況(TYPE定義一覧.txt 準拠) +-------------------------------------------------------------------------------- + No | TYPE定義 | 状態 | 使用例 +----+---------------------+------+------------------------------------------- + 1 | X(m) | ◎ | PIC X(001)〜X(198): STATUS, OVT-TYPE, + | | | APPL-ID, EMP-ID, ERR-DETAIL, + | | | FILLER, 各種MSG領域 (全COPY/全PGM) + 2 | G(m) | × | 未使用(DBCS文字列不要) + 3 | N(m) | × | 未使用(National文字列不要) + 4 | 9(m) | ◎ | PIC 9(001)〜9(009): CNS定数, 日付, 時刻, + | | | APPL-ID(KIN系), ERR-CATEGORY, + | | | PROC-SEQ, RRCコード, MSG-CODE + 5 | 9(m)V9(n) | ◎ | PIC 9(004)V9(001): OVT-HOURS, + | | | 加班時間(集計/丸め/残容量) + | | | (ZAN03REC, ZANTIMAC, ZAN05CAL, ZAN06UPD, SUB05TIM) + 6 | S9(m)V9(n) | ○ | PIC S9(005)V9(001): WRK-HOURS + | | | (SUB05TIM, DISPLAY形式, COMP無) + 7 | S9(m)V9(n) COMP-3 | ○ | PIC S9(007)V9(001) COMP-3: DB-OVT-HOURS + | | | (ZAN06UPDのみ) + 8 | S9(m) COMP-3 | ◎ | PIC S9(009) COMP-3: CUN-R01INN他 + | | | (全メインプログラム: カウンタ領域) + 9 | S9(m) COMP | ○ | PIC S9(004) COMP: D01FKICOD + | | | (ZANDATAC, SUB01DAT) + | | | PIC 9(002) COMP: WRK-COMMA-CNT + | | | (ZAN01CHK, KIN01INP) + | | | PIC 9(004) COMP: WRK-HOLIDAY-CNT + | | | (ZAN03CHK) + | | | PIC 9(004) COMP: WRK-HD-COUNT + | | | (KIN03EXP) + 10 | S9(m) BINARY | × | 未使用(COMP-5/BINARY不使用) + 11 | ZZZ9(編集文字) | × | 未使用 + | | | + | 補足1: 9(004).9(001) | △ | PIC 9(004).9(001) 編集数字(実小数点) + | | | WRK-OVT-HOURS-EDITED (ZAN06UPD) + | 補足2: S9(m) DISPLAY | △ | PIC S9(005): WRK-MINUTES, WRK-REMAINDER + | | | (SUB05TIM 符号付非COMP整数) + | | | PIC S9(004): WRK-SIGN (SUB04CHK) + | 補足3: +9(009) | △ | PIC +9(009): WRK-SQLCODE-DISP + | | | (ZAN06UPD, KIN02UPD 符号強制編集数字) + ================================================================================ + 凡例: ◎=複数プログラムで使用, ○=1プログラムのみ, △=特殊形式/補足, ×=未使用 + 備考: 全TYPE定義11件中、使用7件 (1,4,5,6,7,8,9) + 特殊形式3件 + 未使用4件 (2,3,10,11) + + [8] COBOLの予約語一覧.txt (193語) との対照 + -------------------------------------------------------------------------------- + 全予約語193語を全ソースファイル(src/*.cbl + sub/*.cbl + cpy/*.cpy)でgrep確認。 + 予約語出現判定は単語境界\bマッチ、大文字小文字不区別。 + -------------------------------------------------------------------------------- + 出現確認: 134語 (69.4%) + 未出現: 59語 (30.6%) + -------------------------------------------------------------------------------- + 出現確認した主な予約語 (134語): + ACCEPT, ADD, AFTER, ALL, AND, ASCENDING, ASSIGN, AT, BLOCK, BY, + CALL, CHARACTERS, CLOSE, COMP, COMP-3, COMPUTE, CONFIGURATION, + CONTAINS, CONTINUE, COPY, COUNT, DATA, DATE, DELETE, DELIMITED, + DEPENDING, DISPLAY, DIVIDE, DIVISION, ELSE, END, END-COMPUTE, + END-EVALUATE, END-EXEC, END-IF, END-PERFORM, END-READ, END-SEARCH, + END-STRING, END-UNSTRING, ENVIRONMENT, ERROR, EVALUATE, EXEC, EXIT, + FD, FILE, FILE-CONTROL, FILLER, FIRST, FOR, FROM, FUNCTION, GIVING, + GO, GOBACK, HIGH-VALUE, ID, IDENTIFICATION, IF, IN, INDEXED, INITIAL, + INITIALIZE, INPUT, INPUT-OUTPUT, INSERT, INSPECT, INTO, INVALID, IS, + KEY, LABEL, LINKAGE, MODE, MOVE, MULTIPLY, NOT, OBJECT-COMPUTER, + OCCURS, OF, ON, OPEN, OR, ORDER, OTHER, OUTPUT, PERFORM, PIC, + PROCEDURE, PROGRAM-ID, READ, RECORD, RECORDING, REDEFINES, REMAINDER, + REPLACING, RETURN-CODE, ROUNDED, RUN, SEARCH, SECTION, SELECT, SET, + SIZE, SOURCE-COMPUTER, SPACE, SPACES, SQL, STANDARD, STOP, STRING, + SUBTRACT, TABLE, TALLYING, TEST, THEN, THRU, TIME, TIMES, TO, TRUE, + TYPE, UNSTRING, UNTIL, USING, VALUE, VALUES, VARYING, WHEN, + WHEN-COMPILED, WORKING-STORAGE, WRITE, ZERO + -------------------------------------------------------------------------------- + 未出現の予約語 (59語): 全て現行システムの要件範囲外 + ACCESS, ALPHABETIC, ALPHABETIC-UPPER, ALSO, ANY, APPLY, AUTHOR, + BINARY, CHARACTER, COMP-4, CONDITION, CONVERTING, CORR, CURSOR, + DATE-COMPILED, DATE-WRITTEN, DECLARATIVES, DELIMITER, DESCENDING, + DISPLAY-1, DOWN, DYNAMIC, EJECT, END-ADD, END-CALL, END-DIVIDE, + END-SUBTRACT, EXCEPTION, EXECUTE, FALSE, GET, GREATER, I-O-CONTROL, + LENGTH, LOW-VALUE, NEXT, NUMERIC, OMITTED, OPTIONS, ORGANIZATION, + PACKED-DECIMAL, PAGE, PAGE-COUNTER, POINTER, RANDOM, RECORDS, REMOVAL, + RERUN, SENTENCE, SHIFT-IN, SHIFT-OUT, SKIP2, UP, UPON, USAGE, USE, + WITH, WRITE-ONLY, ZEROS + + +================================================================================ + サブシステム別 カバレッジサマリ +================================================================================ + サブシステムA (KIN01INP→…→KIN07DAI): 7プログラム + - PGM実装パターン: 2,11,12,13,15,16,17,18,19 (9種/29種中) + KIN05MAT追加: パターン2(1:Nマッチング)をファイル照合で実装 + KIN06CLD追加: パターン12(レイアウト編集のみGETPUT)を新規実装 + - ステートメントカバレッジ: 使用33種/45種中 (MULTIPLY/SUBTRACT/サブシステムA初使用) + KIN04CHK: WRITE FROM, IF THEN句4段階ネスト + KIN05MAT: EVALUATE TRUE 3分岐マッチング制御, N:1ループ + KIN06CLD: ACCEPT FROM COMMAND-LINE, EXEC SQL + bridge混在, PERFORM VARYING線形探索 + KIN07DAI: EVALUATE 4分岐, MULTIPLY/SUBTRACT併用時間計算, CALL SUB05TIM + - EXEC SQL: KIN02UPD(CONNECT+INSERT+DELETE+COMMIT+ROLLBACK) + KIN03EXP(CONNECT+SELECT+INCLUDE+FETCH) + KIN06CLD(SELECT EMP_MASTER + DIRECT BRIDGE holiday) + - KIN04CHK, KIN05MAT, KIN07DAI: EXEC SQLなし (ファイル入出力/マッチングのみ) + + サブシステムB (ZAN01CHK→…→ZAN06UPD): 6プログラム + - PGM実装パターン: 1,3,9,10,11,13,14,15,16,17,18,19 (12種/29種中) + - ステートメントカバレッジ: 使用30種/45種中 + MULTIPLY, SUBTRACT, PERFORM TEST AFTERはZAN06UPDのみ + PERFORM VARYING: ZAN06UPD + KIN06CLD (計2本、KIN06CLD追加) + - EXEC SQL: ZAN06UPDのみ (全6種のSQL動詞) + + サブシステムAプログラム (KIN01→KIN07): 7プログラム + - パイプライン: KIN01INP(CSV→FB)→KIN02UPD(DB更新)→KIN03EXP(日付展開DB出力) + →KIN04CHK(打刻チェック)→KIN05MAT(打刻休暇照合)→KIN06CLD(カレンダー生成) + →KIN07DAI(日別計算 4パターン分岐) + - KIN05MAT: 1:Nマッチング, EVALUATE TRUE 3分岐, 優先順位選定(01>02>03>04) + - KIN06CLD: 休日判定+EMPLOYEE CURSOR LOOP, PERFORM VARYING線形探索, CALL br_open/br_query/br_get_col + - KIN07DAI: EVALUATE 4分岐, MULTIPLY/SUBTRACT時間計算, CALL SUB05TIM丸め + - SUB02MSG(メッセージ), SUB03END(ABEND), SUB05TIM(丸め)を使用. DBアクセスはbridge直接+EXEC SQL混在. + + サブプログラム群 (SUB01-05): + - 各1〜2パターンに特化 (日付/メッセージ/ABEND/チェック/丸め) + - 全サブプログラムがGOBACK復帰 (EXIT PROGRAM不使用) + + 未カバーパターン (29種中16種): + 4-8(M:Nマッチング), 20(CSV+改行有), 21(オンライン), + 22-24(分割), 25-27(2段階マッチング), 28(SYSIN), 29(ASCII→EBCDIC) + → 全て現行要件の範囲外 + + 未カバーステートメント (45種中13種) + → 全てCOBOL機能上不要なもの(ALTER, MERGE, SORT等JCL委譲) + + TYPE定義カバレッジ: + - 全TYPE定義11件中、使用7件 (X,9,9V9,S9V9,S9V9 COMP-3,S9 COMP-3,S9 COMP) + - 特殊形式3件 (9(004).9(001), S9(m) DISPLAY, +9(009)) + - 未使用4件 (G,N,BINARY,ZZZ9) + + 予約語カバレッジ: + - COBOLの予約語一覧.txt 193語中、ソース出現134語 (69.4%) + - 未出現59語は全て現行システムの要件範囲外 + + ================================================================================ + 全カバレッジサマリ表 + +--------------------------+----------+----------+-----------+------------------+ + | カテゴリ | 全件 | 使用/実装| 未使用 | カバー率 | + +--------------------------+----------+----------+-----------+------------------+ + | PGM実装パターン | 29件 | 13件 | 16件 | 44.8% | + | ステートメント | 45ユニーク| 33件 | 12件 | 73.3% | + | 備考: KIN06CLD追加によりパターン12(GETPUT)を◎新規実装。 | + | KIN07DAI追加によりサブシステムA初のMULTIPLY/SUBTRACT使用。| + | TYPE定義 | 11件 | 7件(+特殊3)| 4件 | 63.6%(+27.3%特殊)| + | COBOL予約語 | 193語 | 134語 | 59語 | 69.4% | + +--------------------------+----------+----------+-----------+------------------+ + ※PGMパターンの低カバー率は要件範囲外パターン(M:N,分割,SYSIN,etc.)が多いため。 + 実装対象パターン(1-3,9-20)に限定すれば 13/19 = 68.4%。(KIN06CLDで12→13) + ================================================================================ + 以上 diff --git a/src/ZAN02CHK.cbl b/src/ZAN02CHK.cbl index ac853aa..73868b8 100644 --- a/src/ZAN02CHK.cbl +++ b/src/ZAN02CHK.cbl @@ -98,14 +98,14 @@ 03 WRK-R01EOF PIC X(001). *** 前レコード保持 03 WRK-PREV-REC. - 05 WRK-PREV-APPL-ID PIC X(008). - 05 WRK-PREV-EMP-ID PIC 9(008). - 05 WRK-PREV-APPL-DATE PIC 9(008). - 05 WRK-PREV-START-TIME PIC 9(004). - 05 WRK-PREV-END-TIME PIC 9(004). - 05 WRK-PREV-STATUS PIC X(001). - 05 WRK-PREV-OVT-TYPE PIC X(001). - 05 WRK-PREV-FILLER PIC X(046). + 05 FILLER PIC X(008). + 05 WRK-PREV-EMP-ID PIC 9(008). + 05 WRK-PREV-APPL-DATE PIC 9(008). + 05 FILLER PIC 9(004). + 05 WRK-PREV-END-TIME PIC 9(004). + 05 FILLER PIC X(001). + 05 FILLER PIC X(001). + 05 FILLER PIC X(046). * ***************************************************************** * サブプログラム連絡領域 * diff --git a/src/ZAN05CAL.cbl b/src/ZAN05CAL.cbl index 94d3038..9674094 100644 --- a/src/ZAN05CAL.cbl +++ b/src/ZAN05CAL.cbl @@ -79,9 +79,7 @@ ***************************************************************** * 作業領域 * ***************************************************************** - 01 WRKARA. - *** 処理日付(ACCEPT FROM DATE用) - 03 WRK-DATE-8 PIC 9(008). + 01 WRKARA. *** キーブレイク制御 03 WRK-R01KEY PIC X(008). 03 WRK-PREV-APPL-ID PIC X(008). @@ -94,12 +92,12 @@ 05 WRK-LAST-APPL-ID PIC X(008). 05 WRK-LAST-EMP-ID PIC 9(008). 05 WRK-LAST-APPL-DATE PIC 9(008). - 05 WRK-LAST-START PIC 9(004). + 05 FILLER PIC 9(004). 05 WRK-LAST-END PIC 9(004). - 05 WRK-LAST-STATUS PIC X(001). + 05 FILLER PIC X(001). 05 WRK-LAST-OVT-TYPE PIC X(001). - 05 WRK-LAST-PROC-SEQ PIC 9(002). - 05 WRK-LAST-FILLER PIC X(044). + 05 FILLER PIC 9(002). + 05 FILLER PIC X(044). *** 集計用グループ先頭START保持 03 WRK-GROUP-START PIC 9(004). *** 集計用積算分領域 @@ -169,9 +167,6 @@ MOVE 'COMPILED' TO M00UMKDATS22-02. PERFORM 4000MSGOUTSOR. * - *** 処理日付取得(ACCEPT FROM DATE) - ACCEPT WRK-DATE-8 FROM DATE YYYYMMDD. - * *** ワークエリア初期化 INITIALIZE WRKARA. MOVE '0' TO WRK-GROUP-ACTIVE. @@ -251,7 +246,6 @@ WHEN OTHER PERFORM 2200ACCUMSOR MOVE R01INNREC TO WRK-LAST-REC - CONTINUE PERFORM 1100R01INNSOR END-EVALUATE. * diff --git a/src/ZAN06UPD.cbl b/src/ZAN06UPD.cbl index 928e6d7..a0860b0 100644 --- a/src/ZAN06UPD.cbl +++ b/src/ZAN06UPD.cbl @@ -85,9 +85,7 @@ 03 CNS-KN0002 PIC 9(001) VALUE 2. 03 CNS-COMMIT-CNT PIC 9(003) VALUE 050. 03 CNS-STATUS-ACTIVE PIC X(001) VALUE '0'. - 03 CNS-STATUS-CANCEL PIC X(001) VALUE '9'. - 03 CNS-MAX-HOURS PIC 9(004)V9(001) - VALUE 9999.9. + 03 CNS-STATUS-CANCEL PIC X(001) VALUE '9'. * ***************************************************************** * カウンタ領域 * @@ -105,8 +103,6 @@ VALUE ZERO. 03 CUN-COMMIT PIC S9(009) COMP-3 VALUE ZERO. - 03 CUN-ETHUS PIC S9(009) COMP-3 - VALUE ZERO. * ***************************************************************** * 作業領域 * @@ -121,8 +117,7 @@ 03 WRK-APPL-DATE-N PIC 9(008). 03 WRK-YEAR-MONTH PIC 9(006). 03 WRK-MONTH PIC 9(002). - 03 WRK-MONTH-VALID PIC 9(001). - 88 WRK-MONTH-OK VALUE 1. + 03 WRK-MONTH-VALID PIC 9(001). *** ループ制御 03 WRK-IDX PIC 9(004). 03 WRK-RETRY-CNT PIC 9(001). @@ -130,7 +125,6 @@ 03 WRK-OVT-HOURS-EDITED PIC 9(004).9(001). 03 WRK-OVT-HOURS-NUM PIC 9(004)V9(001). 03 WRK-OVT-MINUTES PIC 9(006). - 03 WRK-REMAIN-HOURS PIC 9(004)V9(001). *** SQL用ホスト変数(全DISPLAY) 03 WRK-SQL-APPL-ID PIC X(008). 03 WRK-SQL-EMP-ID PIC X(008). @@ -481,12 +475,6 @@ MOVE WRK-APPL-DATE-N(1:6) TO WRK-YEAR-MONTH. MOVE WRK-YEAR-MONTH TO WRK-SQL-YEAR-MONTH. * - *** SUBTRACT カバレッジ:残容量検証 - MOVE WRK-SQL-OVT-HOURS TO WRK-OVT-HOURS-NUM. - SUBTRACT WRK-OVT-HOURS-NUM - FROM CNS-MAX-HOURS - GIVING WRK-REMAIN-HOURS. - * *** OVT-APPLICATIONSステータス更新(取消) EXEC SQL UPDATE OVT_APPLICATIONS SET @@ -577,7 +565,6 @@ END-EXEC. * MOVE ZERO TO CUN-COMMIT. - ADD 1 TO CUN-ETHUS. * 2300COMMITDBX-EXT. EXIT. diff --git a/使用資源一覧/ZAN05CAL_使用資源一覧.md b/使用資源一覧/ZAN05CAL_使用資源一覧.md index 1f00509..0396955 100644 --- a/使用資源一覧/ZAN05CAL_使用資源一覧.md +++ b/使用資源一覧/ZAN05CAL_使用資源一覧.md @@ -37,7 +37,7 @@ なし(DB操作なし) ## 処理フロー -1. 初期処理(開始メッセージ→ACCEPT FROM DATE→運用日付取得→OPEN→初回読込) +1. 初期処理(開始メッセージ→運用日付取得→OPEN→初回読込) 2. キーブレイク集計ループ - キー変わり(APPL-ID) → 前グループ集計出力+累積リセット+新グループ開始 - 同一グループ → 現レコード時間差分をWRK-ACCUM-MINに積算+最新レコード上書き保持 diff --git a/詳細設計書/詳細設計書_ZAN05CAL.md b/詳細設計書/詳細設計書_ZAN05CAL.md index a604f9c..15c1d65 100644 --- a/詳細設計書/詳細設計書_ZAN05CAL.md +++ b/詳細設計書/詳細設計書_ZAN05CAL.md @@ -12,8 +12,7 @@ | 6 | 機能概要 | OVT-SORTED2(申請番号+処理番号昇順)をキーブレイク集約し、 | | 7 | | 同一APPL-IDの全レコードの加班時間を積算し、 | | 8 | | OVT-SUMMARYに1レコードに集計して出力する。 | -| 9 | | キーブレイク制御にCONTINUE/SET、時間計算にCOMPUTE ROUNDED/DIVIDE、 | -| 10 | | 処理日付取得にACCEPT FROM DATEをそれぞれ使用する。 | +| 9 | | キーブレイク制御にCONTINUE/SET、時間計算にCOMPUTE ROUNDED/DIVIDEをそれぞれ使用する。 | ※PGMタイプ:メイン、サブ ※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 @@ -60,11 +59,8 @@ メッセージ番号:33(コンパイル日時) PARM1:コンパイル日時 PARM2:'COMPILED' - 1-3.ACCEPT FROM DATEで処理日付を取得(WRK-DATE-8) - 【新規カバレッジ】 - ACCEPT FROM DATE YYYYMMDD - 1-4.ワークエリアの初期化(WRK-ACCUM-MIN含む) - 1-5.運用日付取得SUB(SUB01DAT)により運用日を取得する。 + 1-3.ワークエリアの初期化(WRK-ACCUM-MIN含む) + 1-4.運用日付取得SUB(SUB01DAT)により運用日を取得する。 復帰コード≠ZEROの場合、メッセージを出力し、ABEND処理SUBを呼び出し異常終了する。 【メッセージ編集】 メッセージ番号:5(サブエラー) diff --git a/詳細設計書/詳細設計書_ZAN06UPD.md b/詳細設計書/詳細設計書_ZAN06UPD.md index 21f98e5..40a5800 100644 --- a/詳細設計書/詳細設計書_ZAN06UPD.md +++ b/詳細設計書/詳細設計書_ZAN06UPD.md @@ -14,7 +14,7 @@ | 8 | | またOVT-DBCLEANの各レコードについて、該当申請を取消状態に更新し、 | | 9 | | OVT-MONTHLYから該当加班時間を減算する。 | | 10 | | 新規カバレッジ:EXEC SQL(INSERT/UPDATE/SELECT)、COMMIT/ROLLBACK、 | -| 11 | | PERFORM VARYING/TEST AFTER、COBOL SUBTRACT/MULTIPLY | +| 11 | | PERFORM VARYING/TEST AFTER、COBOL MULTIPLY | ※PGMタイプ:メイン、サブ ※PGMパターン:マッチング(1:1、1:N、N:1、M:N)、レイアウト編集のみ(GETPUT)、振り分け(IF文、EVALUATE文)、キーブレイク(集計、集約、集計・集約の以外)、DB更新 @@ -142,7 +142,7 @@ WHERE APPL-ID = :WRK-SQL-APPL-ID 2-2-4.YEAR-MONTH抽出:APPL-DATE(1:6) 2-2-5.OVT-MONTHLYから減算(2210MONTHLYSUBSOR) - 【EXEC SQL UPDATE(減算)+COBOL SUBTRACT検証】 + 【EXEC SQL UPDATE(減算)】 UPDATE OVT-MONTHLY SET OVT-HOURS = OVT-HOURS - :WRK-SQL-OVT-HOURS, OVT-COUNT = OVT-COUNT - 1, @@ -188,8 +188,7 @@ 4-1.【EXEC SQL COMMIT】 COMMIT WORK 4-2.CUN-COMMITをZEROにリセット - 4-3.CUN-ETHUSに1加算 - + 5.終了処理(3000STPSOR) 5-1.最終COMMIT(2300COMMITDBX) 5-2.入出力ファイルのクローズ @@ -227,7 +226,7 @@ | 6 | PERFORM VARYING | 月(1-12)のバリデーションループ | | 7 | PERFORM TEST AFTER VARYING | 月次減算のリトライ制御 | | 8 | COBOL MULTIPLY | 加班時間→分変換 | -| 9 | COBOL SUBTRACT | 残加班容量検証 | + ## 出力レコード定義