「Around UT」を使用するためのコメントコーディング規約

「Around UT」では、ソース中のコメントから直接、単体試験項目表を作成します。
試験項目以外に記述されるコメントももちろんあるため、このツールを使用するためにはルール決めがあります。

しかし、そのルール決めは、非常にシンプルです。

  • 1.試験項目として出力する命令文は、その行または前行にブロックコメント(/* */)で記述します。
  • 2.IF文、CASE文、LOOP文は前行に、処理の内容を記述します。
  • 3.THEN句、WHEN句、LOOP句の後に処理の分岐や継続の条件をコメントで記述します。

PL/SQLのコメントの入力は以下の2通りがあります。

シングルラインコメント[--]

  • 2連続ハイフンは、その位置から行の終わりまでがコメントであることを示します。

ブロックコメント[/* */]

  • スラッシュ-アスタリスクとアスタリスク-スラッシュは、複数行にまたがるコメントを区切ります。

「Around UT」では、ブロックコメントを元に試験項目表を作成します。 つまり、試験項目として出力したくないコメントについては、シングルラインコメントで記述すればよいということです。

コメントのコーディング規約としてまとめます。

宣言と処理の記述のについて

  • 1.定数、変数の宣言は、はじめに処理の内容をブロックコメントで記述し、個々の宣言はシングルラインコメントで記述します。
  • 2.関数の引数は、1行に1項目を記述し、その後ろにシングルラインコメントで項目のコメントを記述します。
  • 3.関数等の処理のコメントは、ソースの前行または、ソース行にブロックコメントで記述します。
  • 4.コメントは常に説明するソースと同じレベルにインデントして記述します。

IF文の記述について

  • 5.IF文の前行に処理の内容をブロックコメントで記述します。
  • 6.THEN句、ELSE句の後に、条件判定の内容(〜の場合)をブロックコメントで記述します。

CASE文の記述について(Oracle 9i 以上)

  • 7.CASE文の前行に処理の内容をブロックコメントで記述します。
  • 8.各場合分けは、WHEN行で記述し、THEN句の後に条件の内容をブロックコメントで記述します。

LOOP文の記述について

  • 9.単純ループ

    LOOP文の前行にループ処理の内容をブロックコメントで記述します。

    LOOP句の後ろにループの条件をブロックコメントで記述します。

  • 10.WHILEループ

    WHILE文の前行にループ処理の内容をブロックコメントで記述します。

    LOOP句の後ろにループの条件をブロックコメントで記述します。

  • 11.FORループ(数値、カーソル)

    FOR文の前行にループ処理の内容をブロックコメントで記述します。

    LOOP句の後ろにループの条件をブロックコメントで記述します。

例外処理の記述について

  • 12.WHEN〜THEN句の後ろに例外処理の条件をブロックコメントで記述します。

これらのコーディング規約をサンプルを交えて説明します。

【サンプル IF文 】 処理モード(登録、更新、削除)ごとに各処理の関数を呼び出します。


/* 処理モード判定 */
IF in_process = CNS_MODE_INSERT
THEN                                    /* 処理モードが登録の場合             */

    /* 登録処理関数呼び出し */
    FUNC_INSERT(
        in_process,               -- [IN ] 処理モード
        out_retcd,                -- [OUT] 戻り値
        out_errcd                 -- [OUT] エラーコード
    );

ELSIF in_process = CNS_MODE_UPDATE THEN /* 処理モードが更新の場合             */

    /* 更新処理関数呼び出し */
    FUNC_UPDATE(
        in_process,               -- [IN ] 処理モード
        out_retcd,                -- [OUT] 戻り値
        out_errcd                 -- [OUT] エラーコード
    );

ELSE                                    /* 処理モードがその他の場合           */

    /* 例外処理に制御を移す */
    RAISE ERR_MODE;

END IF;


【サンプル CASE文 】 処理モード(登録、更新、削除)で各処理の関数を呼び出します。


/* 処理モードの条件判定 */
CASE
    WHEN in_process = CNS_MODE_INSERT THEN /* 登録モードの場合                   */

        /* 登録処理関数呼び出し */
        FUNC_INSERT(
            in_process,               -- [IN ] 処理モード
            out_retcd,                -- [OUT] 戻り値
            out_errcd                 -- [OUT] エラーコード
        );

    WHEN in_process = CNS_MODE_INSERT THEN /* 更新モードの場合                   */

        /* 更新処理関数呼び出し */
        FUNC_UPDATE(
            in_process,               -- [IN ] 処理モード
            out_retcd,                -- [OUT] 戻り値
            out_errcd                 -- [OUT] エラーコード
        );

    WHEN in_process = CNS_MODE_INSERT THEN /* 削除モードの場合                   */
      /* 例外処理に制御を移す */
      RISE ERR_MODE;

    ELSE                                   /* その他の場合                       */

      /* 例外処理に制御を移す */
      RISE ERR_MODE;

END CASE;


【サンプル LOOP文 】


    /* カウンタの初期化 */
    cnt := 0;

    /* カウンタを規定値までカウントアップ */
    LOOP                                   /* 規定値まで繰り返す。*/

        /* 規定値で処理を終了する。*/
        EXIT WHEN cnt >= 10;

        /* カウンタのインクリメント */
        cnt := cnt + 1;

    END LOOP;


【サンプル WHILE〜LOOP文 】


    /* 発注日判定 */
    WHILE in_orderdate(wk_cnt) <= sysdate
    LOOP                                /* 発注日がシステム日付まで繰り返す   */

        /* 発注データの登録 */
        INSERT INTO ORD_HED VALUES
        (
            in_orderno(wk_cnt),        -- 発注番号
            in_orderitem(wk_cnt),      -- 商品
            in_orderval(wk_cnt)        -- 発注数
        );

        /* カウンタのインクリメント */
        wk_cnt = wk_cnt + 1;

    END LOOP;


【サンプル FOR〜LOOP文 】


    /* 発注件数チェック */
    FOR wk_cnt IN 1..in_orderno.count
    LOOP                                /* 注文件数分処理を繰り返す           */

        /* 発注データの登録 */
        INSERT INTO ORD_HED VALUES
        (
            in_orderno(wk_cnt),        -- 発注番号
            in_orderitem(wk_cnt),      -- 商品
            in_orderval(wk_cnt)        -- 発注数
        );

    END LOOP;


【サンプル 例外処理 】 例外処理の記述


EXCEPTION                               /* 例外処理                           */
    WHEN ERR_NODATA THEN                /* 該当無しエラーの場合               */

        /* 異常情報の設定 */
        out_retcd := CNS_RET_ERROR;  -- 戻り値
        out_errcd := CNS_ECD_NODATA; -- エラーコード

    WHEN ERR_MODE THEN                  /* 処理モードエラーの場合             */

        /* 異常情報の設定 */
        out_retcd := CNS_RET_ERROR;  -- 戻り値
        out_errcd := CNS_ECD_MODE;   -- エラーコード

    WHEN OTHERS THEN                    /* Oracleエラーの場合                 */

        /* 異常情報の設定 */
        out_retcd := CNS_RET_ERROR;  -- 戻り値
        out_errcd := SQLCODE;        -- エラーコード

inserted by FC2 system