ジョブ定義スクリプトを実行し,カバレージ情報を表示するまでの流れを次の図に示します。
図3-4 カバレージ情報の表示の流れ
なお,開発環境のエディタでもカバレージ情報を表示できます。エディタを使用してカバレージ情報を表示する方法の詳細については,「4.4.7 カバレージ情報を表示する」を参照してください。
(1) 表示方法とコマンドの形式
カバレージ情報は,カバレージ情報を表示するコマンド(adshcvshowコマンド)で表示します。コマンドに指定したascファイルの内容を表示します。-lオプションのオプション値としてジョブ定義スクリプトの範囲を指定することで,指定した範囲内のカバレージ情報を表示できます。
-sオプションを指定した場合,バックアップされているジョブ定義スクリプトの内容だけを表示します。-sオプションはascファイルのバックアップされているジョブ定義スクリプトの内容の確認やジョブ定義スクリプトとの差分を確認したいときに使用します。-sオプションを指定した場合,-lオプションによる範囲指定はできません。
カバレージ情報表示コマンドの形式を次に示します。
adshcvshow {[-l n1[-[n2]][,n3[-[n4]]]...]|-s} ascファイルのパス名 |
行指定の形式は,","で複数指定し"-"で範囲を指定します。例えば,1行目~10行目と15行目と21行目~30行目を指定したい場合,次のように指定します。
adshcvshow -l 1-10,15,21-30 ascファイルのパス名 |
"-"の後ろに数字を指定しなければ,前の値から最終行までの範囲を意味します。例えば,21行目から最終行まで指定したい場合,次のように指定します。
adshcvshow -l 21- ascファイルのパス名 |
(2) カバレージ情報の表示形式
カバレージ情報の表示形式の説明を,次の表に示します。
表3-8 カバレージ情報の表示形式の説明
項目 | 説明 |
---|---|
JP1/Advanced Shell カバレージ情報(JP1/Advanced Shell Coverage Information) | JP1/Advanced Shellで取得したカバレージ情報を示します。 |
日時(右上の部分) | adshcvshowコマンドを実行した日時をyyyy-mm-dd hh:mm:ssの形式で表示します。月,日,時,分,秒が1桁の場合は,先頭に0を付加します。 |
見出し情報(Header Information) | 見出しを示します。 |
ジョブ定義スクリプト名(Shellscript Name) | ジョブ定義スクリプトの絶対パス名を表示します。 |
ascファイルのバージョン(Asc version) | ascファイルのバージョン番号を表示します。 |
カバレージ情報の採取開始時刻(Coverage Start Time) | カバレージ情報の採取開始時刻を表示します。形式は,日時と同じです。 |
カバレージ情報の採取終了時刻(Coverage End Time) | カバレージ情報の採取終了時刻を表示します。形式は,日時と同じです。 |
カバレージ情報の採取回数(Test Count) | カバレージ情報を採取した回数を表示します。 カバレージ情報の採取回数が9999を超えた場合,「9999+」と表示します。 バッチジョブを実行するコマンド(adshexecコマンド)のオプションの指定によって採取回数の数え方が変わります。 adshexecコマンド(-tと-dを指定)
adshexecコマンドの終了時にカバレージ情報の採取回数を1増やします。 adshexecコマンド(-dを指定)
|
メイン情報(Main Information) | カバレージ情報(C0,C1情報)を表示します。 |
行番号(Line) | 1から始まります。 行番号が9999を超えた場合,「9999+」と表示します。 |
付加情報(Info) | C0,C1情報の見出しです。カバレージ情報は,行単位に表示します。コマンドラインが複数行にまたがっている場合,コマンドが存在する行にC0,C1情報を表示します。 C0,C1情報のどちらも32個以内ならカバレージ情報を記録でき,この項目はスペースとなります。記録できない場合に表示される文字と意味を次に示します。 overC0:C0情報が32を超えています。 overC1:C1情報が32を超えています。 over:C0情報とC1情報の両方が32を超えています。 |
C0情報(C0) | C0情報を表示します。 @:コマンドが実行されました。 -:コマンドは実行されていません。 行に複数のコマンドが存在する場合,行の先頭から最大4個のコマンドまでのC0情報を4文字で表示します。 |
C1情報(C1) | C1情報を表示します。 @:実行パスが実行されました。 -:実行パスは実行されていません。 行に複数の実行パスが存在する場合,行の先頭から最大4個の実行パスまでのC1情報を4文字で表示します。 |
ジョブ定義スクリプト(<Shellscript Image>) | ジョブ定義スクリプトの内容を,行単位に表示します。範囲指定した場合,指定された範囲の行だけを表示します。 |
合計の情報(Total Information) | C0,C1情報の合計を表示します。範囲指定した場合,合計の情報以降は,表示されません。個数が99999999を超えた場合,「99999999+」と表示します。 |
C0,C1対象の総数(Target Total) | <C0>に対象コマンドの総数,<C1>に実行パスの総数を表示します。 |
<C0> | ジョブ定義スクリプト内のすべてのC0対象コマンドの個数を含みます。C0対象のコマンド数が32個を超える行が存在する場合でもすべての個数がカウントされます。 |
<C1> | ジョブ定義スクリプト内のすべてのC1対象実行パスの個数を含みます。C1対象の実行パス数が32個を超える行が存在する場合でもすべての個数がカウントされます。 |
C0,C1対象の実行した総数(Executed Total) | <C0>に実行したコマンドの総数,<C1>に実行した実行パスの総数を表示します。 |
<C0> | カバレージ情報として,実行を記録するのは,各行内で先頭からC0対象である32個のコマンドまでです。この32個のコマンド内の実行したコマンドが,カウントされます。 |
<C1> | カバレージ情報として,実行を記録するのは,各行内で先頭からC1対象である32個の実行パスまでです。この32個の実行パス内の実行した実行パスが,カウントされます。 |
C0,C1対象の未実行の総数(Unexecuted Total) | <C0>に未実行のコマンドの総数,<C1>に未実行の実行パスの総数を表示します。 |
<C0> | 「C0対象の総数(Target Total)-C0対象の実行した総数(Executed Total)」になります。 |
<C1> | 「C1対象の総数(Target Total)-C1対象の実行した総数(Executed Total)」になります。 |
実行比率(Coverage Rate) | C0とC1の実行比率(%)を表示します。小数点第2位以下を切り捨てて小数点第1位までを表示します。 |
<C0> | 「C0対象の実行した総数(Executed Total)/C0対象の総数(Target Total)」になります。 C0対象のコマンド数が32個を超える行が存在した場合,すべてのコマンドを実行しても100%より小さくなります。 |
<C1> | 「C1対象の実行した総数(Executed Total)/C1対象の総数(Target Total)」になります。 C1対象の実行パス数が32個を超える行が存在した場合,すべての実行パスを実行しても100%より小さくなります。 |
カバレージ情報を表示するコマンドの表示例を,C0,C1に情報を行ごとに1個まで表示した場合と4個まで表示した場合とに分けて示します。
(a) カバレージ情報を表示するコマンドの表示例(C0,C1に情報を行ごとに1個まで表示した場合)
この例では,C0とC1が取得されたことが,Main Informationのところに1個の「@」と「-」で表示されています。
* JP1/Advanced Shell Coverage Information * |
(b) カバレージ情報を表示するコマンドの表示例(C0,C1に情報を行ごとに4個まで表示した場合)
この例では,C0とC1が複数回取得されたことが,Main Informationの13行目と37行目に表示されています。
* JP1/Advanced Shell Coverage Information * |
68 |
(3) C0情報とC1情報の表示方法
ジョブ定義スクリプトのスクリプト制御文の実行の仕方でカバレージ情報を採取する個所が変わります。カバレージ情報を表示した場合に実行された個所に「@」が表示されます。実行されなかった個所には,「-」が表示されます。
(a) if文の場合
C0 C1 ジョブ定義スクリプト
@ if ← C1を取得
@ true ← C0を取得
then
@ cmd2 ← C0を取得
@ cmd3 ← C0を取得
- fi ← C1を取得しない
C0 C1 ジョブ定義スクリプト
- if ← C1を取得しない
@ false ← C0を取得
then
- cmd2 ← C0を取得しない
- cmd3 ← C0を取得しない
@ fi ← C1を取得
C0 C1 ジョブ定義スクリプト
@ if ← C1を取得
@ false ← C0を取得
then
@ cmd2 ← C0を取得
@ cmd3 ← C0を取得
@ fi ← C1を取得
C0 C1 ジョブ定義スクリプト
@ if ← C1を取得
@ true ← C0を取得
then
@ cmd2 ← C0を取得
- else ← C1を取得しない
- cmd3 ← C0を取得しない
fi ← なし
C0 C1 ジョブ定義スクリプト
- if ← C1を取得しない
@ false ← C0を取得
then
- cmd2 ← C0を取得しない
@ else ← C1を取得
@ cmd3 ← C0を取得
fi ← なし
C0 C1 ジョブ定義スクリプト
@ if ← C1を取得
@ false ← C0を取得
then
@ cmd2 ← C0を取得
@ else ← C1を取得
@ cmd3 ← C0を取得
fi ← なし
(b) for文の場合
C0 C1 ジョブ定義スクリプト
@ for ← C1を取得
do
@ cmd1 ← C0を取得
- done ← C1を取得しない
C0 C1 ジョブ定義スクリプト
- for ← C1を取得しない
do
- cmd1 ← C0を取得しない
@ done ← C1を取得
C0 C1 ジョブ定義スクリプト
@ for ← C1を取得
do
@ cmd1 ← C0を取得
@ done ← C1を取得
(c) while文およびuntil文の場合
while文の表示方法を示します。until文も同じ表示になります。
C0 C1 ジョブ定義スクリプト
@ while ← C1を取得
do
@ cmd1 ← C0を取得
- done ← C1を取得しない
C0 C1 ジョブ定義スクリプト
- while ← C1を取得しない
do
- cmd1 ← C0を取得しない
@ done ← C1を取得
C0 C1 ジョブ定義スクリプト
@ while ← C1を取得
do
@ cmd1 ← C0を取得
@ done ← C1を取得
(d) case文の場合
*パターンの有無で,C1情報の表示方法が異なります。*パターンとは,case文でどのパターンにも一致しなかった場合のパターンです。
C0 C1 ジョブ定義スクリプト
case $A in
@ 1) ← C1を取得
@ echo "abc" ← C0を取得
;;
- *) ← C1を取得しない
- echo "efg" ← C0を取得しない
;;
esac ← なし
C0 C1 ジョブ定義スクリプト
case $A in
- 1) ← C1を取得しない
echo "abc"
;;
@ *) ← C1を取得
@ echo "efg" ← C0を取得
;;
esac ← なし
C0 C1 ジョブ定義スクリプト
case $A in
@ 1) ← C1を取得
@ echo "abc" ← C0を取得
;;
- *) ← C1を取得しない
- echo "efg" ← C0を取得しない
;;
esac ← なし
C0 C1 ジョブ定義スクリプト
case $A in
@ 1) ← C1を取得
@ echo "abc" ← C0を取得
;;
- 2) ← C1を取得しない
- echo "efg" ← C0を取得しない
;;
- esac ← C1を取得しない
C0 C1 ジョブ定義スクリプト
case $A in
- 1) ← C1を取得しない
- echo "abc" ← C0を取得しない
;;
@ 2) ← C1を取得
@ echo "efg" ← C0を取得
;;
- esac ← C1を取得しない
C0 C1 ジョブ定義スクリプト
@ case $A in ← C0を取得
- 1) ← C1を取得しない
- echo "abc" ← C0を取得しない
;;
- 2) ← C1を取得しない
- echo "efg" ← C0を取得しない
;;
@ esac ← C1を取得
(e) #-adsh_step_startコマンドの場合
#-adsh_step_startコマンドの次の引数を指定した場合,先行のジョブステップやジョブ定義スクリプト中のスクリプト拡張コマンドの状態によって,そのジョブステップを実行するかどうかが変わります。
[-run {normal|abnormal|always}]
ジョブステップを実行したかどうかを判断できるように,C1情報に次の情報を表示します。
(f) #-adsh_step_errorコマンドの場合
ジョブステップ内でエラーが発生した場合,#-adsh_step_errorコマンドに続くジョブ定義スクリプトを実行します。このエラー処理を実行したかどうかを判断できるように,C1情報に次の情報を表示します。
(g) 関数の場合
関数の実行例を次に示します。
C0 C1 ジョブ定義スクリプト
funcAAA(){ →1.
@ echo "start funcAAA" →2.
@ if true →2.
then →2.
@ echo true →2.
- else →2.
- echo false →2.
fi →2.
}
:
@ funcAAA →3.
(h) ( cmd1; cmd 2 )の場合
括弧で囲ったコマンドを別プロセスで実行します。この場合,コマンドグループ全体,コマンドグループ内の各コマンドに対して,カバレージ情報は採取しません。
(i) { cmd1; cmd2 }の場合
中括弧で囲んだコマンドを,adshexecコマンドと同一プロセスで実行します。この場合,コマンドグループ内の各コマンドに対して,カバレージ情報を採取します。
(j) cmd1 &の場合
adshexecコマンドによるジョブ定義スクリプトの実行と並行して,バックグラウンドで別プロセスを生成してコマンドを実行します。バックグラウンドで実行されるジョブ定義スクリプトでは,カバレージ情報は採取しません。
(k) trapのアクションの場合
trapのアクションでは,カバレージ情報を採取しません。
trap "date; echo xxx" INT
(l) コマンド置換の場合
コマンド置換で実行するコマンド,スクリプト制御文のカバレージ情報は採取しません。
ls `which adshexec`
(m) timeコマンドの引数の場合
timeコマンドの引数として実行するコマンドは,カバレージ情報を採取しません。
time adshexec script1
(n) evalコマンドの引数の場合
evalコマンドの引数として実行するコマンドは,カバレージ情報を採取しません。
eval ls dir1
(o) パイプ機能の場合
パイプ機能を使用して実行しているコマンドのカバレージ情報は採取しません。
ls | cat
(p) 外部スクリプトの場合
外部スクリプトの呼び出し先では,カバレージ情報を採取しません。外部スクリプトの呼び出し元では,カバレージ情報を採取します。なお,外部スクリプトの呼び出しは,C0の対象ですが,C1については,対象外です。
(4) メモリ上に採取しているカバレージ情報の表示【UNIX限定】
デバッグ用のinfo coverageコマンドを使用した場合,メモリ上に採取している,カバレージ情報を表示できます。
表示するカバレージ情報は,初回蓄積か継続蓄積かどうかで変化します。初回蓄積の場合は,中断点までのカバレージ情報を表示します。継続蓄積の場合は,蓄積されたカバレージ情報に中断点までのカバレージ情報を合わせた結果を表示します。蓄積を指定しなかった場合は,初回蓄積の場合と同様に中断点までのカバレージ情報を表示します。
表示する情報の種類と形式は,カバレージ情報を表示するコマンド(adshcvshowコマンド)の場合と同じです。
(5) C1実行比率100%とならないケース
次の条件に該当する#-adsh_step_startがあると,すべての実行パスを実行してもC1実行比率が100%となりません。
#-adsh_step_start は,次の両方の場合をC1情報として取得します。
しかし,#-adsh_step_startのジョブステップに先行するジョブステップ,またはコマンドがない場合,上記の2.のケースを実行できません。