2014年5月28日水曜日

Visual Studio Online を使ってみた

Visual Studio Online とは「Team Foundation Serverのクラウドサービス」だそうです。
TFS 使ったことないのでよくわかりません

「Visual Studio Online」は元々は「Team Foundation Service」という名前だったそうで、それが2013年11月に改名。また、Monaco という開発環境のクラウドサービスも公開されました。

チーム開発環境がメインなサービスですので、その辺はぼっち開発をしている私にはあんまり関係のないものと思っていましたが、無料で使える CI ツールとして試しに使ってみました。

使ってみた動機
使ってみようとした1番の理由がオンライン上でビルドできるという点です。
他の CI ツールとして Travis CIJenkins の PaaS(OpenShift,CloudBees) を使っていますが、Visual Studio でのビルドができないため自分のノートPC上で Jenkins を動かしてテストしていました。
これが git push するだけで、あとは勝手にビルド・テストしてくれるとなると大助かりです。

CI ツールとしてみる Visual Studio Online
バージョン管理システム
プロジェクトを作成するとバージョン管理システムを選択する必要があります。
Visual Studio Online で使えるバージョン管理システムは 「Team Foundation Version Control」と「git」です。

私は github を利用しているので今回は git を選択。
ビルド定義を新規作成して、「ソース設定」の「Team Foundation の Git リポジトリからソースを取得します」のチェックを外します。リポジトリURL に github のリポジトリURLを入力、既定の分岐にブランチのパスを入力します。

トリガー
トリガーは外部のリポジトリを使用する場合は、以下の3つが使えません。
継続的インテグレーションチェックインのたびにビルドする
ビルドのロール前のビルドの完了までチェックインを蓄積する
ゲートチェックイン送信された変更が正常にマージされ、ビルドされる場合のみチェックインを受け入れる
仕方がないので「スケジュール」を選択し、定期ビルドするようにしました。(※ スケジュールも「前回のビルドから何も変更されていなくてもビルドを実行する」のチェックが外せなくなっています。)

無料アカウントの場合ビルドが 60分/月 なのでこれを超えないように注意して設定しましょう。

ビルド・テスト
最後に、ビルドとテストについてです。
プロセス設定でビルドやテストなどのアクションを定義します。
今回は既定テンプレートを使用しました。

まず、ビルドに関しては「2.Build」-「1. Solution to build」にビルド対象のソリューションを指定、Configuration と Platform も指定すれば OK です。
テストに関しては VSTest なら使えるようですが、私はそれを使っていません。今回は Makefile にビルドとテストを記述し、メイクファイルプロジェクトからそれを実行するようにしました。これならメイクファイルプロジェクトのソリューションパスを設定するだけで OK なので、楽にできました。
(ビルド プロセス テンプレートをカスタマイズすれば色々できると思うが、今回は未使用)

以上で、定期的に Visual Studio でのビルドとテストができる環境を手に入れられました。

制限はあるものの、無料で Visual Studio を使った CI が十分にできました。

2014年5月21日水曜日

iutest_c v1.4.0 をリリースしました

iutest_c v1.4.0 をリリースしました。
約9ヶ月ぶりの更新です。
iutest (C++ testing framework)の方にかかりきりで更新できていませんでしたが、C11 の _Generic が gcc 4.9 で使えるようになったらしいので、対応作業に移る前にリリースすることにしました。

変更点は以下のとおりです。

  • 追加
    • IUTEST_SKIP 追加
    • iuBoolean パラメータジェネレータを追加
    • セクション指定に対応
    • 機能削減用コンフィグマクロを追加
  • 修正
    • コードサイズ削減

v1.5.0 では _Generic に対応したいなぁーと思っていますが・・・
果たして、C言語のテスティングフレームワークって需要あるんですかね?

2014年5月19日月曜日

iutest v1.9.0 をリリースしました

iutest v1.9.0 をリリースしました。

変更点は以下のとおりです。

  • 追加
    • IUTEST_*_THAT 追加
    • 式アサーション追加(IUTEST_ASSERT, IUTEST_EXPECT, IUTEST_INFORM, IUTEST_ASSUME)
    • 式アサーション追加(IUTEST_*_NOT)
    • IUTEST_USE_MAIN 追加(main 関数定義 config)
  • 変更
    • IUTEST_ASSERT を IUTEST_ASSERT_EXIT に変更

今回の目玉は式アサーションと THAT の追加です。
以下より、追加された機能の紹介をしていきます

IUTEST_*_THAT 追加
テスティングフレームワークでは多くみられる that アサーションに対応しました。
といっても、まだとりあえず対応した程度のものです。

現在使用できる matcher は、以下の6つです。
StartsWith前方一致
Contains部分一致
EndsWith後方一致
Equals完全一致
AllOfすべての matcher が真
AnyOf1つ以上の matcher が真
以前、紹介した Catch 相当の matcher は揃えましたが、Google Mock の matcher にはまだまだな状態です。
今後のバージョンアップで、matcher に matcher を適用できるようにするなど、より便利にしていく予定です。

式アサーション追加
もう1つアサーションを追加しました。
これまでのアサーションは、== なら EQ, <= なら LE など比較の仕方によってそれに対応するアサーションを使う必要がありました。

IUTEST_ASSERT_EQ(0, x);
IUTEST_ASSERT_LE(x, 1);

今回追加した式アサーションでは、式に対してアサーションとして機能するため、== や <= などの比較演算子の違いを意識せず、同じアサーションを使用できます。

int f() { return 42; }
IUTEST(Expression,Test)
{
    IUTEST_EXPECT(f() == 0);
    IUTEST_EXPECT(f() <= 1);
}
もちろん、失敗時の出力には f() の値が出力されます。

※C++03 の場合、算術演算子の展開に若干の制限があります。
詳細はコードを確認してみてください。(この辺なんとかしたいですが…)

|| や && を使用する場合は展開されませんので、IUTEST_EXPRESSION か IUTEST_OPERAND を使用してください。
IUTEST_EXPECT(f() == 0 IUTEST_OPERAND(||) f() == 1);
IUTEST_EXPECT(f() >= 0 && IUTEST_EXPRESSION(f() <= 1));

(展開前の式に内部実装が出力されてしまうのもなんとかしたい…)

IUTEST_USE_MAIN 追加
IUTEST_USE_MAIN マクロを定義することで、main 関数の記述を省略できます。 使用する場合は、プロジェクト1つに対して、1つのソースコードでこのマクロを定義してください。

今後の予定
matcher の強化や細かな部分の改善を予定しています。
C言語版の iutest_c の v1.4.0 を近日リリース予定です。

2014年5月13日火曜日

[Visual Studio] カスタムビルドツール

Visual Studio にはカスタムビルドツールというものがあります。
今回はこれを紹介したいと思います。

と、その前にカスタムビルドツールの使いドコロとして、私が利用した時の例を上げようと思います。
データ変換とビルド
とあるプロジェクトでは、とあるデータをコンバートしそれを使ってビルドをする仕組みでした。
(データ変換をするプロジェクトは割りとあるのではないでしょうか?)

とあるプロジェクトでは、その変換をビルド前イベントで全て行っていました。
そのため、一部のファイルにしか変更がなくても全てのデータ変換が行われ、さらにその出力ファイルが更新され依存関係にある部分が再ビルドされてしまう…そんな状態でした。

変更してないのに再ビルドとか嫌っ!ってことで、カスタムビルドツールの出番です。

カスタムビルドツールは各ファイルごとに設定できます。
そのファイルに変更があった場合にカスタムビルドが実行されます。また、出力ファイルが削除されたりした場合にも実行されます。

これにより、元データに変更がかかった場合にのみ再ビルドがされるように設定できます。

カスタムビルドツールの設定
MSDN - カスタム ビルド ツールの指定
カスタムビルドツールはファイルごとに設定します。
ファイルのプロパティを開き、「構成プロパティ」-「全般」-「項目の種類」から「カスタム ビルド ツール」を選択します。
ここで一度「適用」をクリックします。すると「構成プロパティ」に「カスタム ビルド ツール」の項目が表示されます。


「コマンド ライン」にビルド処理を記述します。
「出力ファイル」にはビルド処理で出力されるファイルを記述します。(複数ある場合は ";" で区切る)

最小設定は以上です。

まとめ
カスタムビルドツールは、ファイルそれぞれに対してプロジェクトの設定をする必要があるので、
若干、いや、量によってはスゴクめんどくさいですが・・・
こんな方法もあるというのだけでも、覚えておくといいと思います。
※ 簡単な方法があれば教えて下さい。

今回は以上です。