Piwik は、信頼性の高い分析プラットフォームをコミュニティへ提供するために Travis CI をどのように活用しているか
この記事では、Piwik のプロジェクトが、世界中の何千人ものユーザーに質の高いソフトウェアプラットフォームを継続的に提供しているインテグレーション方法を解説します。Piwik のプロジェクト、また品質保証やテストの自動化に興味がある方はこの記事をご覧ください。
なぜ私たちはテストを重視するのでしょうか?
継続的なインテグレーションは私たちに敏速な体制維持と信頼をもたらします。Piwik はプロジェクト開始当初から自動化されたテスト環境を用意し維持することが、成功するオープンソースソフトウェア・プラットフォームの開発環境に重要であると考えています。
また私たちは、年間に数多くのテストスイートを作成し、そのメンテナンスに多くの時間を費やしています。今までにこの作業は多くの手法や手段で解決してきました。Piwik のプラットフォームはその性質上、小さなバグと回帰性を抱えており、私たちも頻繁に新しいマイナーとメジャーバージョンのリリースをすることがあります。
Piwik の一部のソフトウェアは自動的にテストされているの?
- Piwik のバックエンド PHP5 : PHP のテストを実行するためには、PHPUnit を使用しています。: ユニットテスト、統合テスト、そしてプラグインテスト
- piwik.js トラッカー : JSトラッカーは、Piwikを使用しているすべてのウェブサイトに含まれています。このため、piwik.js JavaScriptトラッカーは、常に問題や回帰も起こさずに動作することが重要です。私たちの Javascriptトラッカーテストは、ユニットとインテグレーションテストの両方を含んでいます。
- Piwik のフロントエンド : 最近は部分的に AngularJS を使用し、ユーザーインターフェイス用の JavaScript テストを開始しました。
- Piwik の画面出力テスト : Piwik の変更を実施した後、150 以上のスクリーンショットが自動的に採取されます。例えば、8 段階のインストールプロセスのスクリーンショットや、パスワードのリセットワークフローなど多くのスクリーンショットを取得します。これらは予想されたスクリーンショットとなり、1ピクセル毎に比較され、最終のソースコード改版が画面表示や視覚効果に望ましくない影響を与えていないか自動的に検出することができます。Piwik のスクリーンショットのテストについては、こちらもご覧ください。
どのくらいの頻度でテストを実行していますか?
私たちは Piwik のソースコードを変更するたびに Travis CI を使用してテストをおこなっています。すべてのテストは 1 日平均 20 回は実行します。Piwik の開発者が GitHub にソースコードをプッシュしたり、またコミュニティのメンバーがプルリクエストを発行すると、Travis CI は、自動テストを開始します。自動テストの一例では、ソースコードの変更直後に障害が発生すると、変更を行っている開発者に電子メールでその旨を通知します。
Travis CI を使用する必要がありますか?
私たちはここ6年間で、Bamboo, Hudson, Jenkins…など、様々な継続的インテグレーションサーバーを使用してきましたが、Travis CI は GitHub 上でホストされているオープンソースプロジェクトのための理想的な環境であると考えています。Travis CI はオープンソースプロジェクトなので無料で利用できます。また Travis CI チームは非常にフレンドリーで協力的です!もしあなたが商業クローズドソースのソフトウェアで作業をおこなう場合、Travis CI Pro にサインアップすることによって Travis を使用できます。
まとめ
テストとは、より優れた Piwik のプラットフォームを創ります。また書き込みテストは、Piwik のコントリビューターをより優れた開発者にします。そして、私たち開発チームは多くの時間と労力を節約できます。もう私たちはソースコードの変更を恐れません(笑)
現在のビルドステータスはこちら:
メインビルド:
スクリーンショット テストビルド:
追伸
チャレンジを求めている開発者のみなさん!Piwik は、ニュージーランドやポーランドの当社開発チームに参画できるソフトウェアエンジニアを募集しています。 興味のある方は是非ご応募ください!
Piwikコアチーム
Piwikは、世界中で100万人以上のウェブサイトで使用され、53の言語に翻訳されています。
Marketplaceでは、ウェブ解析の世界でイノベーションを創出するためのコミュニティを可能にします。