ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris Studio 12.3 Discover および Uncover ユーザーズガイド Oracle Solaris Studio 12.3 Information Library (日本語) |
デフォルトでは、カバレージディレクトリ上の uncover コマンドを実行する場合、カバレージレポートが Oracle Solaris Studio パフォーマンスアナライザの実験として開かれます。アナライザは、「関数 (Functions)」、「ソース (Source)」、「逆アセンブリ (Disassembly)」、および「命令頻度 (Inst-Freq)」タブを使用して、カバレージデータを表示します。
アナライザでカバレージレポートを開くと、「関数 (Functions)」タブが選択されます。このタブには、関数ごとの「カバレージ外 (Uncoverage)」、「関数カウント (Function Count)」、「命令の実行 (Instr Exec)」、「カバーされているブロックの割合 (%) (Block Covered %)」、「カバーされている命令の割合 (%) (Instr Covered %)」カウンタを一覧表示した列が表示されます。列ヘッダーをクリックすると、どの列でもデータのソートキーとして指定できます。列ヘッダーの矢印をクリックすると、ソート順が逆になります。
「カバレージ外 (Uncoverage)」メトリックは、Uncover の非常に強力な機能です。この列を降順のソートキーとして使用する場合、最上部に表示される関数は、カバレージを増やす可能性が最も高い関数です。例では、main() 関数が「カバレージ外 (Uncoverage)」列で最大数を持つため、リストの最上部に表示されます。(sigprof() および sigprofh() 関数は同数を持つため、アルファベット順に一覧表示されます。)
main() 関数のカバレージ外の数は、関数が呼び出される原因となるスイートにテストが追加される場合に潜在的にカバーされる可能性のあるコードのバイト数です。カバレージが実際に増加する量は、関数の構造によって異なります。関数に分岐がなく、呼び出すすべての関数が直線関数でもある場合、カバレージは実際には定められたバイト数により増加します。ただし、一般的に、カバレージの増加は潜在的に想定されるよりおそらくずっと少ないです。
「カバレージ外 (Uncoverage)」列の 0 以外の値を持つカバーされていない関数は、カバーされていないルート関数と呼ばれ、カバーされている関数によってすべて呼び出されることを意味します。カバーされていない非ルート関数によってのみ呼び出される関数は、独自のカバレージ外の数を持ちません。テストスイートは、潜在性の高いカバーされていない関数をカバーするように改良されるにつれて、これらの関数は、後続の実行で、カバーされるか、またはカバーされないことが明らかにされると想定されます。
カバレージ数は排他的ではありません。
「関数カウント(Function Count)」は、カバーされている関数とカバーされていない関数を報告します。重要なことは数が 0 か 0 以外であるかということです。数が 0 の場合、関数はカバーされません。数が 0 以外の場合、関数はカバーされます。関数の命令が実行される場合、関数はカバーされるとみなされます。
この列で、トップレベル以外のカバーされていない関数を検出できます。ある関数の関数カウントが 0 で、カバレージ外の数も 0 である場合、関数はトップレベルのカバーされている関数ではありません。
「命令の実行 (Instr Exec)」カウンタは、カバーされている命令とカバーされていない命令を表示します。0 のカウントは命令が実行されないことを意味し、0 以外のカウントは命令が実行されることを意味します。
「関数 (Functions)」タブで、このカウンタは関数ごとに実行される命令の総数を表示します。このカウンタは、「ソース (Source)」タブ (「「ソース」タブ」を参照) および「逆アセンブリ (Disassembly) タブ (「「逆アセンブリ」タブ」を参照) にも表示されます。
関数ごとに、「カバーされているブロックの割合 (%) (Block Covered %)」カウンタに、カバーされている関数の基本的なブロックの割合が表示されます。この数により、関数がいかに適切にカバーされているかがわかります。<Total> 行のこの数は無視してください。これは列のパーセンテージの合計であり、意味がありません。
関数ごとに、「カバーされている命令の割合 (%) (Instr Covered %)」カウンタに、カバーされている関数の命令の割合が表示されます。この数によっても、関数がいかに適切にカバーされているかがわかります。<Total> 行のこの数は無視してください。これは列のパーセンテージの合計であり、意味がありません。
バイナリを -g オプションを使用してコンパイルした場合、「ソース (Souece)」タブにはプログラムのソースコードが表示されます。Uncover はバイナリレベルでプログラムを計測し、最適化してプログラムをコンパイルしているため、このタブのカバレージ情報は解釈するのが困難な可能性があります。
「ソース (Source)」タブの「命令の実行 (Instr Exec)」カウンタには、各ソース行に対して実行される命令の総数が表示され、これは基本的に文レベルのコードカバレージ情報です。0 以外の値は、文がカバーされていることを意味します。0 の値は、文がカバーされていないことを意味します。変数宣言およびコメントには命令の実行カウントがありません。
一部のソースコード行にカバレージ情報が関連付けられていない場合があります。このような場合、行は空で、どのフィールドにも数値が含まれていません。このような行は次の理由で発生します。
コメント、空行、宣言など、実行可能コードを含んでいない言語構造。
コンパイラの最適化により、行に対応するコードが次の理由で削除されている。
コードは実行されることがない (デッドコード)。
コードは実行可能であるが冗長。
詳細は、「Uncover 使用時の制限事項」を参照してください。
「ソース (Source)」タブのある行を選択し、次に「逆アセンブリ (Disassembly)」タブを選択する場合、アナライザは、バイナリで選択した行を検出し、その逆アセンブリを表示しようとします。
このタブの「命令の実行 (Instr Exec)」カウンタには、各命令が実行される回数が表示されます。
「命令頻度 (Inst-Freq)」タブにはカバレージの概要全体が表示されます。