ラベル Coverity の投稿を表示しています。 すべての投稿を表示
ラベル Coverity の投稿を表示しています。 すべての投稿を表示

2019年11月27日水曜日

[Coverity][TravisCI] 設定の備忘録

TravisCI で Coverity Scan を使っているのですが、他のリポジトリでも使おうと思ったときに設定どうだっけ?と調べ直したので備忘録として残しておく。


さいしょに
Coverity Scan 側でプロジェクト作成したりとかは省きます。
そして、セットアップ方法も公式のドキュメントがあるので、そちらを見れば ok
https://scan.coverity.com/travis_ci

ただ、travis コマンドの使い方どうだっけなーとなるのでそこだけメモします。

COVERITY_SCAN_TOKEN を .travis.yml の env にセットする
トークンをセットします。そのまんま書いても動きますが、そんなことをしてはいけません。
セキュア変数にします。

travis コマンドのインストール
https://github.com/travis-ci/travis.rb#installation
こちらの手順に従ってインストールしましょう

トークンの設定
https://docs.travis-ci.com/user/environment-variables/#defining-encrypted-variables-in-travisyml
セキュア変数の作り方はこちらを参考にしてください。

travis encrypt COVERITY_SCAN_TOKEN= --add env.global

これで env global に COVERITY_SCAN_TOKEN 環境変数が追加されます。

今回は以上です。
では。

2015年10月27日火曜日

[Coverity] CEDEC 2015 で出題されたバグクイズ

バグクイズです!(CEDEC 2015 の問題) « Coverity Blog

CEDEC 2015 で出題されたバグクイズ。
私も実際に CEDEC に行って見てきたわけですが、
3日目の問題が直ぐに解けず、なんだか悔しかったのでこの記事を書いてる次第です。
(あーだこーだしているうちに2ヶ月も経ってしまいましたが…)

ちなみに、答えはこちらです。
CEDEC 2015 Tokyo でのバグクイズの正解を発表! « Coverity Blog

Coverity 以外では検出できないのか?

検証の際に実際に使用したソースコードはこちら。
https://github.com/srz-zumix/coverity_test/tree/master/cedec_coverity

Cppcheck v1.70
まずは、フリーで使える C++ 静的解析の定番となっている Cppcheck です。
使用したのは現時点での最新バージョンである 1.7.0 です。

残念ながら、どちらの問題も検出されませんでした。

Visual Studio コード分析
次に Visual Studio です。
Visual Studio にはコード分析機能が付いています。プロジェクトプロパティのコード分析で有効にできます。

これもかなり優秀なんですが…


残念ながら、どちらの問題も検出されませんでした。

gcc/clang
最後はコンパイラーです。
Visual Studio はコード分析のときにビルドしましたが、検出できなかったので既に脱落しております。

それぞれの結果です。


どちらも delete (void*)p の問題は検出されました。

scan-build
おまけです。
scan-build は clang の静的解析ツールです。
cygwin パッケージに入ってたので使ってみました。


結果としては clang コンパイラーと一緒で delete (void*)p の検出だけでした。

まとめ
Coverity すごい!!


2014年12月10日水曜日

iutest 開発で利用している無料ツールやサービス

今回は iutest の開発で利用しているツールやサービスを紹介したいと思います。
iutest の開発は「できるだけ無料の範囲でやる」というのもテーマの1つでもありますので、
紹介するものも基本的に無料で使えます。

コードホスティングサービス
SourceForge.JP
SourceForge.JP
iutest は主に SourceForge.JP で開発しています。
バージョン管理には Subversion を使用。
また、マイルストーンごとのリリースもこちらでしています。

追記: OSDN に名称が変わりました

Github

github にもコードをアップしています。
やはり、コミュニティの強みがあるのかなと思います。

基本的には、github の方は SourceForge.JP の svn での変更を半自動的に push しているだけです。
コミットメッセージがアレなのはすみません、手抜きです。

コンパイラー・IDE
gcc/clang

このへんは当然でしょう。

Visual Studio

Visual Studio ExpressVisual Studio Community を使用しています。

Wandbox

Wandbox はオンラインコンパイラーです。gcc や clang の様々なバージョンでコンパイルできます。
このへんは C++ Advent Calendar 2014 でも書いたのでそちらをご覧ください。
ブログズミ: Shippable + Wandbox で C++ の CI 環境構築


CI
Jenkins

Jenkins は CI ツールの定番ですね。
ローカルマシーンで稼働中です。
ただ、こちらは常時起動しているわけではなく、github に push するときとか、テストを実行するときに起動しています。

以前は、Cloudbees の Jenkins の無料プランを使っていたのですが、今は使っていません。
理由としては無料プラン内で収まらなくなったことと、メンテナンスがめんどくさくなったからです。
Jenkins は設定とかのメンテナンスが面倒だなー思うことが多々あります…そのへんはなんとかしたいですが…
(会社だとビルド処理はすべて外部ファイルに書いて git で管理してます)
最終的には、サービス体系が変わったのを機に使わなくなりました。

とはいえ、Jenkins は便利なので OpenShift 上で動かしています。(あまり使ってないけど)

Travis-CI

Travis-CI では、gcc/clang でのテスト、fused-src を使ってのテスト、カバレッジ計測、Coverity Scan のためのテストが走っています。
iutest のテストの主だった部分がこちらで行われています。

Travis-CI

Drone.io

Drone.io は C++ がサポートされた CI サービスの1つです。
特徴としては、他の CI サービスが yml ファイルに処理を記述するのに対し、Drone.io では Jenkins のように Web ページ上で管理します。
設定が公開されないのがメリットになると思います。

iutest では、コンパイル速度の計測を行っています。
(あまり意味があるのか微妙だが、)コンパイル速度を意識して修正する場合に、こちらの数値を基準にしています。



Shippalbe

Shippable も CI サービスの1つです。
こちらは C++ がサポート言語にありませんが、Wandbox を利用してコンパイルと実行テストをしています。
詳しいことは C++ Advent Calendar 2014 で書いたので、そちらを参考にしてください。
ブログズミ: Shippable + Wandbox で C++ の CI 環境構築

特徴としては、無料プランでプライベートリポジトリが使えるのと、github の他 bitbucket にも対応しています。
有料プランとの比較はこちらを参考にしてください。
https://www.shippable.com/pricing.html

Shippable

wercker

wercker も CI サービスの1つです。
こちらはβ期間中ですが、無料で github/bitbucket のプライベートリポジトリが扱えます。

ただ、こちらも C++ がサポート言語にありません。
iutest では Shippable と同じように Wandbox を使ったコンパイルと実行テストをしています。

Wercker status

Visual Studio Online

上記 CI サービスでは、Visual Studio が使えませんので、Visual Studio でのコンパイル・実行テストとしてVisual Studio Onlineを利用しています。

無料プランの場合、60分/月の制限があります。
iutest では制限を超えないように、1週間に1回、実行されるように設定しています。

静的解析・カバレッジ
Coveralls

Coveralls は計測したカバレッジの集計をし、推移や差分が見れるサービスです。
Travis などで gcov または lcov などで計測した結果を cpp-coveralls などのレポートツールを使って Coveralls と連携します。

Coverage Status

Cppcheck

無料の C++ 静的解析ツールといえば Cppcheck でしょう。
ローカルの Jenkins で実行しています。
導入当初はお世話になりましたが、現在はお世話になることがほぼなくなりました。

Coverity Scan

Cppcheck よりも高度な静的解析ツールとして Coverity Scan を利用しています。
Coverity 自体は有償ツールなのですが、Coverity Scan はオープンソースであれば無料で使えます。

iutest でもリリース前にチェックするようにしています。

その他
OpenShift

OpenShift は Red Hat が提供する PaaS です。
簡単操作で Jenkins や Redmine などが使えます。

Jenkins でのテスト環境は作ってありますが、今はそんなに使ってません。

CloudBees

Jenkins の項でも書きましたが、以前は CloudBees の Jenkins を使っていました。
久しぶりにログインしたら Enterprise Trial というプランがあったので、また試してみようかなーと思ってます。

2014年3月31日月曜日

C++ が利用可能な CI ツールまとめ


最近まで CloudBees の Jenkins を使っていたのですが、Free プランの制限を超えてしまい、代わりの CI 環境をちょうど探していたので試してみました。

要件:
・C++ 対応
・無料プラン内でできることに限る
・ビルドマトリックスが組める

C++ 非対応
冒頭の記事を参考にいろいろ見てみましたが、言語サポートに C++ ないものがほとんどでした。。。


C++ 対応してないので今回は却下。
(※ といってもコンパイラさえあれば言語対応を謳ってなくても使える気がするが…)

Drone.io
Drone.io はリポジトリに設定ファイルが不要です。
設定はウェブページで行います。リポジトリにファイルを置かなくて良いのは1つのメリットですが、ビルドマトリックスが組めないため、今回は却下。

TravisCI
TravisCIは、オープンソースであれば無料で利用できます。
私も以前から利用していました。

私が思う TravisCI の利点は以下のとおりです。
gcc/clang が選べる
最新のコンパイラも使える(参考:Travis CI で最新の gcc を使って自動テスト - sorry, inumplemented:
マトリックスが組める
他サービスとの連携Coveralls, Coverity Scan, etc...)

CI ツールを探している目的の一つに「様々なコンフィグでの網羅的テストを走らせたい」というのがあり、TravisCI はそれを満たしています。ただ、今のところ TravisCI でのテストは「コンパイラごとのテスト」「他サービスとの連携」での利用が主な目的になってます。なるべく1回のビルドを短くしたいので、今回はマトリックスを組まないことにしました。

OpenShift
そこで最後に紹介するのが、OpenShift です。
OpenShift は Red Hat が提供する PaaS(Platform as a Service) で、無料プランでも Jenkins サーバーを作れます。
というわけで、ここでマトリックスを組むことにしました。
OpenShift については説明を省きます。ググってみてください。

さて、結局 Jenkins に戻ってきたわけですが、CloudBees と比べて見た感じ。
ビルドが遅い
時間制限はなし
並列ビルドが可能?

時間制限がない点は良いのですが、ビルドが非常に遅いです。
下の画像は、8x5 のマトリックスジョブの所要時間です。左が OpenShift 、右が CloudBees です。

小さくて見難いと思いますが(クリックで拡大されます)、OpenShift は 11時間、CloudBees は 12分です。
ものすごく差がありますが、実は CloudBees のはです。どういう計算でこの時間になっているのかわかりませんが、実際は数時間かかっています。(3分弱 x 8 x 5)(制限時間の消費が減るので嬉しいですが…)
しかし、それでも CloudBees のほうが速いのは変わりません。

あと、OpenShift では同時ビルド数を任意の数に設定できますが、私が試した感じだとうまくテストが回りませんでした。(リソース不足?)

OpenShift の Jenkins は「Jenkins 自体に特に制限はないが、動作環境が低スペックであるためできないこともある」という感じでした。CloudBees と比べると性能が劣りますが、私が使う分には問題ないのでこちらを使うことにしました。(テストがトータルで16時間かかるが、1日2回以上コミットすることはないので問題なし)

ちなみに、OpenShift の Jenkins ですがデフォルトだとプラグインの追加・更新ができないように見えますが、
「プラグインの管理」→「高度な設定」の「アップデートサイト」の URL を http:// から https:// に変更すると更新できるようになります。ハマりどころなので、これから使おうという方は覚えておくといいです。
参考:unable to install plugins on Jenkins instance in openshift - Stack Overflow

最後に
最終的には、TravisCI + OPENSHIFT に落ち着きましたが、これは私の利用目的から選んだ結果なので、これが一番イイというわけではありません。
利用目的にあったツールを選ぶのが一番だと思います。