3

オープンソースのC++プロジェクトの継続的インテグレーションとテストフレームワークをセットアップしたいと思います。必要な機能は次のとおりです。

1. check out the source code
2. run all the unit and other tests
3. run performance tests (these measure the software quality - for example how long does it take the system to complete the test)
4. produce a report based on 3. and 4. daily
5. archive the reports for future reference

これを実装するには、どのテストフレームワークとどの継続的インテグレーションプロセスをお勧めしますか?現在、私はテストのためにGoogle Test Framework(他の質問で説明されているユニットテストフレームワークの比較のいくつかを知っています)と継続的インテグレーションのためのCruisecontrolに傾倒しています。しかし、Cruisecontrolがパフォーマンスメトリックの簡単な統合を可能にするかどうかはわかりません。

編集:Wilhelmtellに答えるには、コードはWindowsとLinuxの両方で機能する必要があります。

4

7 に答える 7

5

参考になりそうな記事を書きました。コード カバレッジ メトリクスに gcov を使用し、googletest と hudson を使用して C++ コードを継続的に統合する方法について説明します。 http://meekrosoft.wordpress.com/2010/06/02/continuous-code-coverage-with-gcc-googletest-and-hudson/

于 2011-06-14T08:50:08.857 に答える
2

あなたの質問は2つあります。ご自身で指摘されたように、単体テスト ライブラリの選択は 1 つの問題です。はい、GoogleTest で問題ないと思います。使用感も軽いので気に入っています。UnitTest++ はなおさらです。どちらを選んでも構いません。

私は CruiseControl の経験がありませんが、一連の要件を見て、仕事をするためのスクリプトを書くと思います。各要件は、少なくとも 1 つのツールで簡単に実行できるため、ツールを接着するだけです。

レポートを HTML、XML、LaTeX、またはその他の派手な形式にする必要がない限り、私は Bash を使用します。time次に、コマンド、sedunittest バイナリからの出力などを行うことができます。それでも、Bash が本当に好きで使い慣れている場合は、より複雑な形式の Bash を選択することもできます。たとえば、プレースホルダーを使用してレポートの HTML テンプレートを作成し、プレースホルダーをデータに置き換えることができます。

たとえば、スクリプトを他のプラットフォームでも実行したいなど、タスクがより複雑な場合は、おそらく Ruby または Python を使用します。たとえば、Ruby では、Markabyを使用して HTML を出力できます。いずれにせよ、Bash、Ruby、または Python のいずれかが、テキスト処理またはこのタスク全般に優れています。すぐに作業を行う小さなスクリプトをモックアップできると思います。

スクリプトを使用すると、ほとんどすべての最新のバージョン管理システムにフックとしてアタッチすることもできます。たとえば、コミット時にスクリプトが実行されるように Subversion または Git フックを設定できます。

于 2008-12-21T03:38:06.323 に答える
2

私は今日、まさにこのタスクのために CruiseControl と UnitTest++ を使用しています。

UnitTest++ は本当に素晴らしいですが、角を曲がったところに制限を感じることもあります。少なくとも cppunit よりも 10 倍優れています。Google のテスト フレームワークはまだ試していません。次のプロジェクトに使用します。

CruiseControl には非常に失望しました。いくつかのバグがあり、メーリング リストに寄せられた質問には答えられませんでした。プログラムの実行とロギングを管理するためのデフォルトの「機能」の多くは、満足できるものではありませんでした。独自のレポート生成、独自の stdout および stderr キャプチャ、独自のステータス メーラーを作成する必要がありました。定期的にテストを実行し、中央の Web サーバーにテストを収集することを除いて、CruiseControl に残された作業はほとんどありません。

于 2008-12-21T13:51:20.143 に答える
2

NAntCruise Control.NETbjam、およびCppUnitを組み合わせて使用​​していますが、すべてうまく機能しています。

ただし、Windows から WindowsおよびLinuxに移行したのはごく最近のことです。現在、両方のプラットフォームで使用されているのは bjam と CppUnit だけです。

私たちの NAnt スクリプトは移植に問題はありません。NAnt はmonoの下でうまく動作します。CC.NET はそれほどではないかもしれません - 私たちはその道をたどっていませんが、mono/Apache で実行するためのドキュメントはあまりありません...

CC.NET をHudsonに置き換えることを検討しています。それは非常に有望なシステムです。 クルーズコントロールもとても良いです。

CppUnit から別のテスト フレームワークへの移行も検討しましたが、今のところ問題なく機能しています。 GoogleTest (特に新しいモック ライブラリ)、UnitTest++Boost Testはすべて調査中です。

だから、それが決定的な答えではないかもしれないことはわかっていますが、うまくいけばあなたにとって何か役に立つものがあるでしょう!

于 2008-12-21T14:15:37.613 に答える
1

私は cppUnit を使用した CruiseControl.Net を好みますが、Google テスト フレームワークの経験や知識はありません。ただし、簡単で無料の継続的な統合については、CruiseControl.NET に勝るものはありません。特に、すべてのテスト フレームワーク、ビルド システム、およびそれがサポートするその他のアドドンを備えています。

于 2008-12-21T04:08:15.857 に答える
1

他の人が同じことをしているかどうかを確認するために、CruiseControlユーザー メーリング リストでこの質問をすることもできます。

ただし、Cruisecontrol でパフォーマンス メトリックを簡単に統合できるかどうかはわかりません。

CruiseControl でパフォーマンス メトリクスを処理するには、次の 2 つの方法があります。

  1. xml データがある場合は、それをログ ファイルにマージしてから、.xsl を使用して電子メールや Web ページに統合できます。
  2. HTML レポートがある場合は、アーティファクト パブリッシャーを使用して、アーティファクト パブリッシャーを使用して Web インターフェースから使用できるようにすることができます

私は CruiseControl プロジェクトに取り組んでいるので、この件に関しては少し偏見がありますが、他にも同様に機能する CI ツールがいくつかあります。

于 2008-12-21T22:31:16.007 に答える
0

UnitTest++ と Hudson を使用します。

Hudson は非常に使いやすく、設定も簡単で、プラグインも豊富です。

于 2009-03-05T08:37:35.603 に答える