次: , 前: Trace Buffer, 上: Edebug


17.2.13 カバレッジテスト

edebugでは、初歩的なカバレッジテストや実行頻度を表示できます。

カバレッジテストでは、各式の結果を以前の結果と比較します。 現在のEmacsセッションでカバレッジテストを始めて以降、 プログラムの各フォームが異なる2つの値を返せば、 当該フォームを『カバーした』とみなします。 したがって、読者のプログラムについてカバレッジテストを行うには、 さまざまな条件でそれを実行して正しく動作しているか注意します。 読者が各フォームが異なる2つの値を返すように試行し終れば、 edebugはそのように通知します。

カバレッジテストは実行速度を遅くするので、 edebug-test-coveragenil以外の場合にのみテストします。 すべての処置済み関数の実行に関する頻度数計測は、 非停止実行モードであってもカバレッジテストのオン/オフに関わらず行います。

ある定義に関するカバレッジテストと頻度数計測を表示するには M-x edebug-display-freq-countを使います。

— コマンド: edebug-display-freq-count

このコマンドは、現在の定義の各行について頻度数データを表示する。

頻度数は、コードの各行のあとにコメント行として表示され、 コマンドundoでそれらのコメント行の挿入をアンドゥできる。 頻度数は、式のまえの`('や式のうしろの`)'の直下、 あるいは、変数の最後の文字に表示される。 表示を簡素にするために、頻度数が同じ行のまえのほうの式の頻度数と同じであると 表示しない。

式の頻度数に続く文字`='は、 その式を評価するたびに同じ値を返したことを意味する。 いいかえれば、カバレッジテストとしては、 その式はまだ『カバーして』いないことになる。

ある定義に関する頻度数計測とカバレッジデータをクリアするには、 eval-defunで単に再処置すればよい。

たとえば、edebug-test-coveragetとし、 ソース上のブレークポイントを設定して(fac 5)を評価すると、 ブレークポイントに達したときの頻度数データはつぎのようになります。

     (defun fac (n)
       (if (= n 0) (edebug))
     ;#6           1      0 =5
       (if (< 0 n)
     ;#5         =
           (* n (fac (1- n)))
     ;#    5               0
         1))
     ;#   0

コメント行は、facが6回呼ばれたことを表します。 最初のif文は、5回とも同じ結果を返したのです。 2番目のifについても同じです。 facの再帰呼び出しは1度も戻っていません。