開発者とテスト担当者がわかれていないようなチームがテスト仕様書を作成できて、共有、レポート作成と
簡単に管理できるツールが作れないかと考えTESTBASE(https://www.test-base.tech/)というテスト管理ツールを個人開発しました。
現状はベータ版としてパイロット運用をして、本番稼働に移行していけたらなと考えています。
対象読者
次のような方の参考になるような内容をまとめています。
- 個人開発を始めようとしている方
- テスト管理ツールを探している方
なぜ作ろうとおもったか
理由は次の3点があります。
- 無料で使えるテスト管理ツールがなかった
- 海外製品はIEEEなどの基準に準拠しているのか日本のExcelっぽいGUIではなかった。
- 海外製品は単純に機能が多すぎて、使いづらかった。
オープンソースのテスト管理ツールだとTestLinkというものがありますが、UIがかなり古く、実際に使用するには難しい印象を受けます。その他では、基本的には有償のツールでした。代表的なものを上げると国産だとqangaroo(https://qangaroo.jp/)、海外製品だとTestRail(https://www.gurock.com/testrail)などがあります。
海外製品はIEEEが作成した標準的なテストテンプレートに準拠しているのか、日本で多くのエンジニアが作成していると思われるExcelベースの表形式のテストテンプレートではありませんでした。テスト管理の点から考えるとIEEEのようなテンプレートのほうが認識間違いなどが少なくなるようですが、実務上は運用は厳しいという印象を受けます。(特に小規模な開発チームでは)
また、海外製品はテストシートをテストスイートという単位で管理するようで(詳細には調べていません)これもまた高機能ですが、使いこなせないなと印象を受けました。
そこで開発者がマニュアルテストを簡単に作成できて、管理できる。さらにテスト結果の集計を簡単にできるようなツールを作成しようと考えました。
構成技術
- bootstrap
- jQuery
- handsontable
- Chart.js
- Ruby On Rails
- PostgreSQL
- heroku
SPAのようなうな要件はなく、単純に入力項目を埋めていくような画面構成が多いため、フロントサイドはオーソドックスな技術を使用しています。テストシートのスプレッドシート部分はスプレッドシートのライブラリで無料で使用できて動きの安定しているhandsontableを利用しました。(一定の過去バージョンのみOSSで、それ以降は有償となっています。)
サーバーサイドは実務経験のあるSpringBoot(Java),Laravel(PHP)、RubyOnRails(Ruby)と検討しました。
実務経験があるのでSpringBootは学習工数がなく、開発作業に移れましたが、Ruby on Railsと比較すると作成しなければならないクラス数が多いのと(例:Form、Modelなど)、Ruby on Railsは優れたマイグレーション機能があるので、Ruby on Railsを採用しました。
結果として、体感ですが、SpringBootとと比較して4割減くらいの工数で開発できたと思います。
実行環境については、VPSやAWS当のIaaSも検討しましたが、一人で開発とサーバー構築するのは不可能だったのでHeorkuを採用しました。SaaSということでマルチテナントを実現する必要がありましたが、Heorkuで対応ができました。
アプリケーション構成
TESTBASEはSaaSのためマルチテナント構成にする必要がありました。複数のテナントにたいして、テナント事にサブドメインを分割して、それによりアプリケーションにアクセス可能となっています。
次のような実現方法をとっています。
- テナント単位にサブドメインを分割
- サブドメイン部分によりテナントを特定
- データアクセス時にそのテナントによりデータアクセスし、テナントごとのデータ分離を実現
重要なデータ分離についてはテナントIDにて管理しており、Apartmentなどのマルチテナント用のGemは使用せず、モデルのdefault scopeとCurrentにより実現しています。defaultscopeを利用することで、CRUD操作すべてでテナントIDが条件に付与され、処理ごとにテナントIDを付与しなくてもいいようにして、保守性を実現しています。
マルチテナントはスキーマ分離方式もありますが,Heroku自体が使用を非推奨にしており、テナント数の増大によりテーブル定義等の変更が大きな負荷となってしまうため、採用しませんでした。