2012年6月29日金曜日

CCCC + Jenkins

CCCC とは
CCCC は、「C and C++ Code Counter」の略称で、C や C++ のコードメトリクスツールです。
こちらからダウンロードできます。

今回は、CCCC と Jenkins の連携について書きたいと思うので、
コードメトリクスや CCCC の使い方に関しては省かせて頂きます。

Jenkins との連携 - CCCC Plugin
CCCC Plugin というプラグインが既にあるので、それを使います。

設定としては、「Publish CCCC report」にチェックを入れて cccc が吐き出した xml のパスを入力するだけです。

試しに収集した結果がこちらです。



プロジェクト全体のコード行数や複雑度を見ることができます。

ただ、残念なことにプロジェクト全体やクラス単位でのメトリクス値を見ることはできているのですが、関数単位など細かい情報を見ることができません。
(※知らないだけで方法があるのかもしれませんが。)

CCCC の出力XMLをテスト
一番確認したい関数ごとの行数や複雑度を閲覧する方法が見つからなかったので、
CCCC の出力XMLを調べて Jenkins の「JUnitテスト結果の集計」で利用できる XML を出力するツールを作りました。

c4ju

試しに出力してみた結果がこちらです。






複雑な関数や長い関数を見つけやすくなりました。これで CCCC の恩恵が受けられます。

2012年6月17日日曜日

iutest v1.0 RC リリース

本日 iutest v1.0 RC をリリースしました。
ダウンロードはこちらから
iutest とは
iutest は include するだけで使えることを目的とした C++ のテスティングフレームワークです。
Google Test と同等の記述方式を取っているので、Google Test 使ってみようかなぁと思っている方にはオススメです。

逆に Google Test をガッツリ使ってるよ!という方にはオススメできないです。
なぜなら、iutest にはできないことがいくつかあるからです。

iutest にできないこと
  • マルチスレッド非対応
  • Death テスト
大きな項目としては少なく感じますが、
細かい部分で Google Test と異なる部分があるのでご注意ください。

iutest にしかできないこと
  • 記法の異なるパラメタライズテスト(IUTEST_PMZ)
  • INFORM アサーション(警告)
  • 追加アサーション(IUTEST_*_NULL, IUTEST_*_NOTNULL etc...)
  • イベントリスナーで RecordProperty 時に呼ばれる OnTestRecordProperty が利用可能
  • Variadic Templates などの C++11 対応
  • private メンバーへのアクセス機能(IUTEST_PEEP)
  • return ではなく例外を使った ASSERT マクロ(-DIUTEST_THROW_ON_ASSERT_FAILURE=1)
などなど。細かくなりすぎるのでこれぐらいにしておきます。
iutest には Google Test の実装を利用する機能もあります。(-DIUTEST_USE_GTEST)
また、逆に iutest の機能を Google Test でも使えるようにするヘッダーも用意しています。
(ただし、一部互換性なし)

バグ報告お待ちしてます
実際に使用して頂ける方、大募集中です。
気になった方はダウンロードして試していただけると大変ありがたいです。
そして、不具合等があれば twitter などで気軽に連絡して頂けると嬉しいです。

2012年6月14日木曜日

iutest にパラメタライズテストの記法を追加

iutest に Google Test とは異なる記法のパラメタライズテストを追加しました。

サンプルコード
void TestFunction(int x, int y)
{
    IUTEST_ASSERT_EQ(x, y);
}
IUTEST_PMZ(ParamMethodTest, EQ, TestFunction, 0, 0);
IUTEST_PMZ(ParamMethodTest, EQ, TestFunction, 1, 2);
IUTEST_PMZ(ParamMethodTest, EQ, TestFunction, 2, 2);

typedef TestFixed ParamMethodTestFixed;

IUTEST_PMZ_F(ParamMethodTestFixed, EQ, TestFunction, 0, 0);
IUTEST_PMZ_F(ParamMethodTestFixed, EQ, TestFunction, 1, 2);
IUTEST_PMZ_F(ParamMethodTestFixed, EQ, TestFunction, 2, 2);

実行結果


"GetParam() = " と出力されますが、既存の仕組みを再利用しているのでそうなってます。
あと、良い名前が思い浮かばなかったのでイイ名前を募集中です。