*

単体テストの効率化を考える(5)-スタブの自動生成への入力

公開日: : 最終更新日:2020/05/10 徒然, 開発

どもです。

「単体テストの効率化について考える」の5回目です。
1回目から4回目はコチラ:
単体テストの効率化を考える(1)-はじめに
単体テストの効率化を考える(2)-スタブの戻り値
単体テストの効率化を考える(3)-スタブの引数
単体テストの効率化を考える(4)-スタブの引数(ダブルポインタ)

1.振り返り

前回(4回目)までで、スタブを自動生成して単体テストを効率化するために、スタブで行うべき処理は明確にできたかと思います。
それらを(ざっくりですが)まとめてみると、以下のようになります。

  • 呼び出し回数のカウント
  • 関数(スタブ)に戻り値がある場合には、戻り値用バッファから値を取得し、返す。
  • 引数は、引数保持用バッファに値を格納する。
  • 引数がポインタかつ出力の場合には、ポインタの実体に設定する値用のバッファから値を取得して設定する。
  • 引数がダブルポインタの場合には、ダブルポインタの実体用に用意した2次元配列の特定の領域のアドレスを、ダブルポインタの実体に設定する。

それぞれの詳細については、それぞれ1回目から4回目のエントリを確認してください。
これらの「行うべき処理」を実装したスタブの自動生成について考えます。

2.ツールの概要

まず、ツールの本当の基本的な概要です。
ツールの入力と出力を、下図に示します。
think_about_unit_test_005_01
この図のうち、「生成されるスタブのコード」については、(ほぼほぼ)内容が決定してします。
そこで次に、「対象の関数一覧」、特に「作成するツール」が「処理のしやすいフォーマット」、かつ「ユーザが入力しやすいフォーマット」となるように決定します。

3.対象関数一覧

前項より、対象関数の一覧に求められる要件は、下記の通りです。

  • ユーザが入力しやすいフォーマット
  • ツールが処理しやすいフォーマット

です。

3.1.ユーザが入力しやすいフォーマット

ユーザが入力しやすいフォーマットですが、一番最初に考え付くのは、「エクセル」です。
エクセル上に、入力用の「表のフォーマット」を決定して、そこに必要な情報を入力するのがよいかと考えます。

3.2.処理のしやすいフォーマット

「ユーザが入力し易いフォーマット」として、「エクセルの表」を挙げましたが、これはツールが「処理のしやすいフォーマット」か否かを考えます。
結論からいうと、「Yes!」です。
ずいぶん前ですが、Microsoft Office OpenXMLの内容を解析するためのSDKが公開されています。
また、さらにエクセルの解析に特化したSDK?ライブラリ?としてClosedXMLというライブラリも公開されています。
これらのことから、「エクセルの表」は、「処理のしやすいフォーマット」になり得ると言えます。

3.3.表のフォーマット

以下のように決めます(決めました)。
think_about_unit_test_005_02
実際の入力は、下記のようにします。
think_about_unit_test_005_03
入力している関数の定義は、下記の通りです。

3.4.表の解説

この表の各セルに入力する場合には、

列名 内容
Name スタブを生成する関数の名前
Data type 関数の戻り値のデータ型
戻り値がポインタの場合は、このセルに「*」を入力する。
Prefix 関数の戻り値の(前置)修飾子
constなど
Postfix 関数の戻り値の(後置)修飾子
constなど
Argument Name 関数の引数名
Data type 関数の引数のデータ型
データ型がポインタの場合には、このセルに「*」を入力する。
Prefix 関数の引数の前置修飾子
constなど
Postfix 関数の引数の後置修飾子
constなど
Mode
(in/
out/
both)
関数の引数の入出力情報
入力:in
出力:out
both:入力かつ出力

関数が引数を複数持つ場合、2番目以降の引数は、各行の関数の情報(関数名や戻り値)には何も入力せず、引数情報を入力します。

4.まとめ

今回は、スタブの自動生成ツールに入力するデータのフォーマットについて考えてみました。
結論としては、エクセルの表に入力していくのが、よいと考えています。
具体的なフォーマットは、前出の画像を確認して下さい。

今回のエントリで、スタブの自動化のための入力と出力が(ほとんど)決定できました。
次回は、いよいよ自動生成のツールについて書きます。

ではっ!

続きはコチラ

単体テストの効率化を考える(6)-スタブの自動生成ツール

関連記事

eclipse_cdt_top_100

C言語でEV3開発(3)

どもです。 今回のエントリーの内容は、前回まででセットアップした環境で、実際にEV3上で動く実行フ

記事を読む

no image

C言語でEV3開発(15)-TOPPERS/HRP2 EV3 で PID制御

どもです。 今回のエントリーは、コレまでのエントリーから内容を変えて、モーターの動作の制御をします

記事を読む

MY_MFC_LOGO

MFCプログラミング(2):コピー機能の実装

どもです。 前回に引き続き、今回もMFCネタです。 内容は、MFCでの「クリップボードへのデータ

記事を読む

MY_MFC_LOGO

MFCプログラミング(3):クリップボードへのデータ形式の登録

どもです。 今回も、クリップボードネタです。 1.背景(簡単に) アプリケーションにコピー

記事を読む

no image

QtでRaspberryPi/GUI開発(3):ためしに時計を作ってみた(其の参)-StyleSheetの適用

どもです。 前回のエントリーでは、グループ化されたボタンに対するイベントハンドラについて書きました

記事を読む

MY_MFC_LOGO

MFCプログラミング(4):Enter(ESC)キーでダイアログが閉じないようにする

どもです。 今回は、キーボード入力の処理、特にEnterキー/ESCキーでダイアログが閉じられるこ

記事を読む

RasPi_Qt

QtでRaspberryPi/GUI開発(8):pigpioを使用したチャタリング対策の問題の対策

どもです。 だいぶ、間が空いてしまいました。 久しぶりの更新です。 前回のエントリーで、「

記事を読む

iot_raspberrypi_gateway_001_eye_catch

IoT開発(12)
RaspberryPiをIoTゲートウェイにする(V)
nginxとuWSGIの連携

どもです。このエントリは、以下のエントリの続きです。 IoT開発(6) RaspberryPiをI

記事を読む

toppers

C言語でEV3開発(19)-コマンド通信処理でEchoBackしてみた

どもです。 前回は、Bluetoothの接続状態の変化に伴う、状態遷移について書きました。 今回

記事を読む

toppers

C言語でEV3開発(25)-Q_Learningを実装してみた…が!?

どもです。 今回の内容は、「失敗しました」という内容です。 最近、流行になっている深層学習/

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

c_sharp_eye_catch
セルに「取り消し線」が設定されているかを判定してみた

どもです。 前回、前々回と、エクセルのセル内の文字列から、「取り

c_sharp_eye_catch
セル内の「取り消し線で消された文字列」の削除を簡単にしてみた

どもです。 前回、C#/OpenXmlを用いて、エクセルのセル内

c_sharp_eye_catch
セル内の「取り消し線で消された文字列」を削除してみた

どもです。 今回は、C#/OpenXmlの組み合わせで、エクセル

c_sharp_eye_catch
C#でバッファの内容を表示する処理を実装してみた-
データ型に従って動的に書式を設定する

どもです。 最近、C#でバッファ/配列の値をコンソールに表示した

arduino_relay_switch_003_self_preservation_circuit_eye_catch
Arduinoでリレースイッチ(3)-自己保存回路

どもです。 前回の記事で、リレースイッチ「AE-G5V-DRV」

→もっと見る

PAGE TOP ↑