第5回は、JenkinsのJobがテーマです。動的テストをJenkinsから行うためには、動的テストに関する一連の作業内容をJobとして登録しておく必要があります。具体的には、DTシリーズ製品特有のテストポイント挿入から、動的テストの結果の集計までの一連の作業を行うためのコマンドをJob内に記述していくことになります。そこで、このJenkinsのJobを設計する上で押さえておくべきポイントについて考えて行きたいと思います。

 

基本的な流れ

第2回で紹介しました「テストポイント挿入のための4W2H」も併せて考えたいところですが、今回は図1のような基本的な流れのJobを設計してみたいと思います。

図1: 動的テスト用Jobの基本フロー

図1のフローは、構成管理ツールからコードを取得してから、テストポイントの挿入、ビルド、ディプロイ、テスト実行、解析、結果のアウトプットまでの基本フローを表したものです。それぞれの項目についてもう少し詳しく説明いたします。

 
コードの取得

Jenkinsはユーザーに代わりSubversionやGitなどの構成管理ツールからコードを取得します。このとき、ユーザ用ワークスペースとは分けて環境を作ったほうが都合がよいので、Jenkins用として独自のワークスペースを作っておくことをおすすめします。

 
プロジェクト作成

今回のフローでは常に新規にプロジェクトを作ることを想定しています。当然ながら、毎回プロジェクトを新規に作らずに、同じものを使用することも可能ですが、今回は最初の設計ということもあり、あえて常に新規にプロジェクトを作るようにしています。尚、プロジェクトの作成には次のコマンドを使用します。

DTCmd -newproj ProjectFile RootFolder Connection BaseAddress DefaultSettingFile
 
テストポイント挿入

テストポイントの挿入は、テストポイントの挿入の対象となるファイルのリストを予め作っておき、そのリストを指定してテストポイントの挿入を行います。

DTCmd -newins ProjectFile SourceFile
 
ビルド

テストポイントが挿入されたファイルのビルドを行います。最近の統合開発環境は、ビルドの実行もCUIでできるようになっていますので、ビルドのためのコマンドを指定します。

 
ディプロイ

組込み機器の場合、ファームウェアの焼き込みやロードを行う必要がありますので、このタイミングで指定します。

 
テスト実行

DT10を起動して、テスト実行を行います。このフェーズでは、データ収集を開始後、対象ソフトを自動でテストするためのテストスクリプトを流していくことになります。

 
テストレポートの解析

収集したデータを解析します。

 
結果のアウトプット

テストレポートを解析した結果をCSVファイルで出力し、成果物として残します。

 

Jobの記述例

基本、Job内で実行するコマンドはバッチファイルを実行するのと同様ですので、前述の基本フローをコマンドに起こすと次のような記述になります。最初の方の環境変数の設定は、バッチファイル内での記述内容をできるだけ簡略化するために使用しています。

@echo off
set RESULT_FOLDER=%JENKINS_HOME%\jobs\%JOB_NAME%\Builds\%BUILD_NUMBER%\DT10
set DT_ROOT=%WORKSPACE%\trunk\AnalogBoxDemo1
set DT_PROJ="%RESULT_FOLDER%\AnalogBoxDemo.rprj"
set DT_CSV=%DT_TESTTOOL%\csv
set TI_HOME=%ProgramFiles%\Texas Instruments
set TI_CCS=%TI_HOME%\ccsv4
set TI_JAVA="%TI_CCS%\eclipse\jre\bin\java"
set TI_JAR="%TI_CCS%\eclipse\startup.jar"
set TI_FLASH="%TI_HOME%\Stellaris\LM Flash Programmer\LMFlash"
set TI_WORKSPACE="%WORKSPACE%\trunk"
set TI_IMAGE="%DT_ROOT%\Debug\AnalogBoxDemo.bin"
set TI_FLASH_OPT=--debug-port=JTAG --interface=ICDI --speed=300000 --frequency=6
set TI_FLASH_RESET=--hreset
set TEST_COMMAND=%DT_TESTTOOL%\bin\TestCommand.exe
@echo on

@echo === プロジェクトの新規作成 =========
mkdir %RESULT_FOLDER%
DTCmd -newproj %DT_PROJ% %DT_ROOT% gpio4bit 0x00010
rem %DT_SETTINGS%
@echo.
@echo.

@echo === テストポイントの挿入 =========
DTCmd -newins %DT_PROJ% %DT_FILELIST%
@echo.
@echo.

@echo === ビルド =====
%TI_JAVA% -jar %TI_JAR% -data %TI_WORKSPACE% -application com.ti.ccstudio.apps.projectBuild -ccs.workspace

@echo === ディプロイ ===================
%TI_FLASH% %TI_FLASH_OPT% %TI_IMAGE%

@echo === DT10起動 ===================
DTCmd -project %DT_PROJ%

@echo === データ収集開始 ===================
DTCmd -trace start

@echo === リセットスタート ===================
%TI_FLASH% %TI_FLASH_RESET%

@echo === テスト自動実行 ===================
%TEST_COMMAND% COM4 "test up"
%TEST_COMMAND% COM4 "test down"
%TEST_COMMAND% COM4 "test rand"
%TEST_COMMAND% COM4 "test screen"

@echo === データ収集停止 ===================
DTCmd -trace stop

@echo === レポート解析 ===================
DTCmd -analyze all

@echo === レポート出力 ===================
mkdir %DT_CSV%
DTCmd -export coverage %DT_CSV%\coverage.csv
DTCmd -export exectime %DT_CSV%\exectime.csv
DTCmd -export period %DT_CSV%\period.csv

@echo === DT10終了 ===================
DTCmd -exit save
 

最後に

いかがでしたでしょうか?
今回はJenkinsのJobの設計を行いました。一連の作業内容をコマンドに起こしてみると、「意外とあっさりしているな」といった感覚を持っていただけたのではないでしょうか?まずは欲張らず、少しずつトライしてみることをおすすめいたします。
次回は、今回設計したJobをJenkins上で作成し、実際に動かしてJenkins上で動的テストを行っている様子もご紹介したいと思います。

【ホワイトペーパー】CI環境における動的テストの適応

 - Jenkinsを使った動的テスト自動化の施策例 -