テスト自動化環境の実現において、JenkinsなどのCIツールとの組み合わせを考えると、制御するアプリケーションには、コマンドライン機能が必要となります。以前に「動的テストの自動化を考える」でご紹介した「動的テストツール DT10」のDTコマンドライン機能も、新製品「DT+Trace」向けにアップデートしています。今回はDT+Traceで新しくなったコマンドライン機能「DT+Cmd」の使い方をTipsとしてご紹介します。

 

「DTCmd」から「DT+Cmd」へ

DT10からご紹介しているコマンドライン機能ですが、後継に当たるDT+Traceにも当然引き継がれています。DT+ではコマンドライン機能の指定が「DT+Cmd」に変わっています。基本的なコマンドは「DTCmd」と同等ですが、「DTCmd」を「DT+Cmd」に変更してご使用ください。

オプション 機能
-newproj プロジェクトを新規作成します。
-newins 指定のソースファイルにテストポイントを新規挿入します。
-project 本アプリケーションを起動し、指定されたプロジェクトファイルを開きます。
-exit 本アプリケーションを終了します。※
-view 指定の関数を検索し、ソースコードを表示します。※
-trace レポートデータ収集を開始/停止します。※
-report 指定されたレポートデータを開きます。※
-analyze レポートを解析し、各種レポートを開きます。※
-ftransition 現在開いているレポートの関数遷移スコープを表示します。※
-export 表示中の各種レポートデータを指定のファイルへエクスポートします。※
-import ファイル書き出し接続で取得したレポートデータ、またはテストポイント有効無効状態をインポートします。
-deletetp 指定のソースファイルからテストポイントを削除します。
-help ヘルプを表示します。

(※はDT+Traceアプリが起動されている状態で使用するオプション)

今回は、主にDT+Cmdで変更になった点や、お問い合わせの多い内容のTipsを中心に紹介します。

 

プロジェクトの取り回し

新規にDT+Traceプロジェクトを作成する場合

DT10ではプロジェクトファイルの拡張子は「*.rprj」でしたが、DT+Traceでは「*.dtxprj」に変更されています。

@echo off
set DT_WORK=C:\ffftp_demo_jenkins
set DT_ROOT=%DT_WORK%\src
set DT_PROJ=%DT_WORK%\DT+\test.dtxprj
set CONNECTION_FILE="%DT_PROJECT%\connection_setting.txt"
set PROJECT_SETTING_FILE=%DT_PROJECT%\DTRCProjectDefaultSettings.prf
@echo on

@echo === DT+Traceプロジェクトの新規作成 =========
DT+Cmd -newproj %DT_PROJ% %DT_ROOT% %CONNECTION_FILE% 0x0010 %PROJECT_SETTING_FILE%

GPIOやEthernetなどのテスト実行前の接続設定は、[connection_settingfile] あるいは、以下のConnectionタグを直接指定します。
イベントID出力方式や自動挿入設定は、[project_settingfile]で指定します。

Connectionタグの一覧は以下の通りです。

パラメーター 説明
asyncbus 非同期バス接続
asyncbusfunctioncall 非同期バス接続(関数コール)
gpio4bit GPIO4bit
gpio2bit GPIO2bit
spi SPI
i2c I2C
ethernet Ethernet
uart UART
can CAN
datawriting ファイル書き出し

GPIO / Ethernet / UART / CANの場合、細かい接続設定を行う必要がありますので、[connection_settingfile]の作成が必要です。例えば、Ethernet接続の場合の[connection_settingfile]のサンプルは、以下になります。

;接続設定ファイル(*.txt)で詳細設定を指定できます。 
;タグとパラメーターはカンマ(,)を挟んで記述します。 
;行の1文字目に “;”を付けると、コメントとして扱われます。 
;*********

;接続方式:Ethernet
Connection, Ethernet
:接続モード:UDP/TCPIPClient/TCPIPServerから選択
EthernetConnection, TCPIPServer
;TCPIPサーバーアドレス:TCPIPClient時のみ)
;TCPIPServerIPAddress, 127.0.0.1
;ポート番号
PortNo, 5000
;経過時間をターゲットプログラムで取得する: 1(有効)/0
TimeFromTarget, 1
;1カウントあたりの時間: (1~1000000)nsec単位(下記は1usecの設定)
TimePerCount, 1000

拡張子は*.txtで保存してください。

[project_settingfile]を生成する場合は、事前にDT+Traceプロジェクトを作成し、ファイル>プロジェクトの設定画面から行います。
プロジェクトの設定が完了したら、DT+Traceの[プロジェクトの設定]ダイアログから「現在の設定内容を規定値として登録」ボタンを操作します。

ボタンを操作すると、”C:\Users\[ユーザー名]\AppData\Roaming\hldc\DT+Trace”に[DTRCProjectDefaultSettings.prf]というファイルが生成されます。
これを引数として指定します。

既存のDT+Traceプロジェクトを利用する場合

既存プロジェクトをそのまま利用する場合や自動テストの過去の結果を引き継いでいく場合は、都度プロジェクトを作成するのではなく、既存プロジェクトを使いまわす運用が適しています。しかし、プロジェクトに登録されているソースコードが更新されている場合、プロジェクト側のソースファイルの状態と不一致があるため、DT+Cmdから利用できません。このような場合、下記の[-updated]オプションを使用します。

-updatedを用いたテストポイントの更新

既存プロジェクトをそのまま流用する場合、ソースコードの更新に対して以下のコマンドを先に実行します。

@echo off
set DT_WORK=C:\ffftp_demo_jenkins
set DT_ROOT=%DT_WORK%\src
set DT_PROJ=%DT_WORK%\DT+\test.dtxprj
@echo on

@echo === Insert Test Point =========
@-newins系のコマンドはプロジェクトファイルを開く前に実施する
DT+Cmd -newins -updated %DT_PROJ%

@echo === Execution DT+ ===================
DT+Cmd -project %DT_PROJ%

[ -updated]オプションはプロジェクトに登録されたソースコードの内、[更新されたものに対してのみ新規挿入する]オプションです。プロジェクトのみを指定して挿入する場合は[-updated]は必須のオプションになります。
注意点として、[-updated]オプションを指定した場合でも、更新されたソースファイル内の各テストポイントは、設定を含めて削除された上でテストポイントが新たに挿入されます。そのため、プロパティ設定や二点間実行時間設定は削除されますので注意してください。

 

テストポイントの挿入設定

DT+Traceで自動挿入をする際、テストポイントは関数の入口・出口や分岐・ループの先頭といった経路に関わる箇所に挿入されます。デフォルトのままでも使用できますが、目的に応じた挿入設定を行う事で、より精度の高いデータを取得できます。

パフォーマンス計測目的のテストポイントの挿入

パフォーマンス測定を実施する場合、テストポイントのオーバヘッドの影響を減らすため、挿入箇所を最低限にした方がより実機の動作時間に近い計測ができます。たとえば関数のパフォーマンス計測の場合、計測したい関数のFuncIn/Outのテストポイントが挿入できれば計測が可能です。プロジェクトを新規で作成する場合は、下記の設定をすることで挿入箇所を制御します。

テストポイントの種別指定

自動挿入時に種別を指定して挿入する場合、[DT+Cmd -newins]の[-TPKind TPType]オプションを指定します。

・-TPKindから指定する場合

@echo off
set DT_WORK=C:\ffftp_demo_jenkins
set DT_PROJ=%DT_WORK%\DT+\test.dtxprj
set DT_ROOT=%DT_WORK%\src
set DT_FILELIST=%DT_TESTTOOL%\filelist.txt
set DT_SRCFILE=%DT_ROOT%\test.c
@echo on

@echo === Insert Test Point =========
@echo -newins系のコマンドはプロジェクトファイルを開く前に実施する
@echo -TPKindの後のTPTypeはFuncIn, FuncOut, if, for, while, do, switch, try, throwから指定
@echo 複数指定する場合は+で区切り、下記はFuncIn/Outを指定した場合

@echo ソースファイルを指定して挿入する場合
DT+Cmd -newins %DT_PROJ% %DT_SRCFILE% -TPKind FuncIn+FuncOut

@echo フォルダ指定で挿入する場合(※-recursiveはサブフォルダ以下も含めるオプション)
DT+Cmd -newins -recursive %DT_PROJ% %DT_ROOT% -TPKind FuncIn+FuncOut

@echo プロジェクト指定で挿入する場合
DT+Cmd -newins -updated %DT_PROJ% -TPKind FuncIn+FuncOut

@echo ソースファイルリスト形式で挿入する場合
DT+Cmd -newins %DT_PROJ% %DT_FILELIST%

・ソースファイルリスト(*.txt)指定の場合の種別指定方法

;ソースファイルリスト形式の場合、"-TPKind"の代わりに"/"を使用
;TPTypeはFuncIn, FuncOut, if, for, while, do, switch, try, throwから指定

;ソースファイルすべてに適用する場合
C:\ffftp_demo_jenkins\src\main.c /FuncIN+FuncOut

;ソースファイルの特定の関数だけに適用する場合
;同ソースファイルの複数の関数を指定する場合は列挙
C:\ffftp_demo_jenkins\src\connect.c DoConnect /FuncIN+FuncOut
C:\ffftp_demo_jenkins\src\connect.c CheckOneTimePassword /FuncIN+FuncOut
 

トレースデータの取得

DBOX+Traceから取得

DT+では複数のDT+Traceアプリの起動、ならびにDBOX+Traceの接続が可能になりました。そのため、DTCmdからDT+Cmdでオプション設定が増えております。
ファイル書き出し以外の接続の場合、以下のようにトレース開始、停止を指定します。

@echo off
set DT_WORK=C:\ffftp_demo_jenkins
set DT_PROJ=%DT_WORK%\DT+\test.dtxprj
set %SIRIAL_NO%=1
@echo on

@echo === Start Trace =========
@echo 起動しているDT+Trace全てでトレース開始
DT+Cmd -trace start all

@echo 特定のDT+Traceでトレース開始
DT+Cmd -trace start -proj:%DT_PROJ% -dbox:%SIRIAL_NO%

@echo DBOX+Traceが1台しか接続していない場合は-dbox:は省略可
DT+Cmd -trace start -proj:%DT_PROJ%

@echo DT+Traceが一つしか起動してない場合は以下でもよい
DT+Cmd -trace start

@echo === END Trace =========
@echo 起動しているDT+Trace全てをトレース終了
DT+Cmd -trace stop all

@echo 特定のDT+Traceのトレース終了
DT+Cmd -trace stop -proj:%DT_PROJ%

@echo DT+Traceが一つしか起動してない場合は以下でもよい
DT+Cmd -trace stop
ファイル書き出しのimport

ファイル書き出しの場合、-importコマンドで出力されたファイルを取り込みます。

@echo off
set DT_WORK=C:\ffftp_demo_jenkins
set DT_ROOT=%DT_WORK%\src
set DT_PROJ="%DT_PROJECT%\test.dtxprj"
set DAT_FILE="%DT_ROOT%\Convert.DAT"
set DAT_FOLDER="%DT_ROOT%\DAT"
set DAT_LIST="%DT_ROOT%\DATfilelist.txt"
@echo on

@echo === Import Test Report ===================
@echo -Format keywordはファイルフォーマットの指定
@echo 4byte/8byte/16byte1/16byte2/18byteからデータフォーマットを指定

@echo -AbsTimeは時間情報を絶対時間(UNIX時間)として解析
@echo 16byte1/16byte2/18byteの時指定可能

@echo 1ファイルの読み込み
DT+Cmd -import %DT_PROJ% %DAT_FILE% -Format 16byte1 -AbsTime

@echo DATファイルをリスト化(Winコマンドラインの場合)
Dir /b /s %DAT_FOLDER% > %DAT_LIST%

@echo リストで指定の場合
DT+Cmd -import %DT_PROJ% %DAT_LIST% -Format 16byte1

DATファイルリスト拡張子(*.txt)になります。
各DATファイルはフルパスで記載します。リストで指定できるDATファイルの最大数は50までとなります。

C:\ffftp_demo_jenkins\DAT\ConvertData0.DAT
C:\ffftp_demo_jenkins\DAT\ConvertData1.DAT
C:\ffftp_demo_jenkins\DAT\ConvertData2.DAT
 

まとめ

今回は新しくなったDT+Cmdの機能をご紹介しましたが、DT+Traceではカバレッジ計測だけではなくテストポイントの挿入箇所や設定を工夫する事で、パフォーマンス計測などさまざまなシーンでご活用いただけます。新たな検証環境の構築にお役立てください。今後も、活用シーンに応じて機能拡充も予定しておりますので、ぜひご注目いただければと思います。
とはいえ、テスト自動化の環境構築において、DT+の活用方法だけでなく、その他にもさまざまな課題があります。何から手を付ければ良いかわからないという方も多いかと思います。弊社ではテスト自動化環境構築のご相談も承っておりますので、お悩み中の方や課題解決したい方はお気軽にご相談ください。

組込みソフトのバグを解析する「動的テストツールDT+」


「DT+(ディーティープラス)」は、組込みソフトウェアのリアルな実行経路を見える化できるデバッグツールです。 経路情報を取得するためのテストポイントを、ソースコードに自動で挿入して、いつも通り実行するだけ。

詳細はこちら