QAを巻き込んだテストの仕組み化でリリース頻度を落とさずに品質を向上させた話

こんにちは、くりメガネです。株式会社センシンロボティクスで業務自動化プラットフォームを担当しているシステムエンジニアです。

この記事では、プラットフォームチームにおいて、リリース頻度を下げることなく障害を半分にした秘訣についてご紹介します。


# 目次

- [センシンロボティクスにおけるシステム開発](#センシンロボティクスにおけるシステム開発)
- [エンジニアの立ち位置 シフトレフトテスト](#エンジニアの立ち位置-シフトレフトテスト)
- [機能テストと非機能テストは漏れなく検討できていますか](#機能テストと非機能テストは漏れなく検討できていますか)
- [不具合削減の仕組みの拡充](#不具合削減の仕組みの拡充)
  - [E2EテストツールAutifyの導入とテストケースの拡充](#e2eテストツールautifyの導入とテストケースの拡充)
  - [ユニットテストの拡充](#ユニットテストの拡充)
  - [エラー監視ツール Sentryの導入](#エラー監視ツール-sentryの導入)
- [活動の効果](#活動の効果)
- [今後の展望](#今後の展望)
- [参考](#参考)


# センシンロボティクスにおけるシステム開発
 

私たちセンシンロボティクスは、法人のお客様とビジネスをするBtoBが主体です。

電力会社様、石油精製会社様、建設会社様などをはじめとする社会インフラの分野におけるDXを幅広く支援させていただいております。

サービスには、「ドローンやロボットを主としたハードウェア」と「それらを制御するソフトウェア」に「AIの力」をかけ合わせ、データ取得部・データ分析部・業務への活用という流れで、設備の点検・保全業務などを支援しています。

私たちのチームでは、安全性の観点や点検対象の膨大さという観点で人が点検しにくい箇所の点検効率化を得意としています。
データ分析部の素材として最適な画像等を提供できるよう、ドローンやUGV(地上走行型ロボット)を課題解決の手段として、点検経路の作成ツールや自動でデータを取得するシステムを担当しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333737/c5c104e8-672b-6cf7-68da-210f71030e0e.png)

出展: [弊社テクノロジー解説ページ](https://www.sensyn-robotics.com/technology)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333737/9fd701ed-4ccb-8312-883a-65330b144a31.png)

出展: [弊社プロダクト紹介ページ](https://www.sensyn-robotics.com/product/sensyn-core)

チームにはさまざまな部門のメンバーがおり、プロダクトオーナー、プロジェクトマネージャー、システムエンジニア、QAエンジニアなどで構成されており、取り組みによっては営業、カスタマーサクセス、ドローンを飛行させるパイロット、デザイナーも加わります。

すべてのフェーズにおいてプロジェクトマネージャーがプロジェクト推進し、お客様に近い課題のヒアリングや評価などは営業やカスタマーサクセスのメンバーが、仮説検討や解決策の具現化はシステムエンジニア・QAなどが入ります。
システムエンジニアが直接お客様現場においてヒアリングしその場でプロトタイプを作る場合もあり、その様子は多種多様です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333737/0252752c-a0f4-74b3-0cb5-1628abf77511.png)


# エンジニアの立ち位置 シフトレフトテスト

弊社においてシステムエンジニアやQAエンジニアが活躍するのは主に仮説検討〜解決策の具現化のフェーズで、世に広く言われているウォーターフォールモデルのV字プロセスで進んでいくことが多いです。

以前は、以下のような役割のメンバーで進めることが大半でした。

- 要件記述: プロダクトオーナー、プロジェクトマネージャー
- 仕様検討: プロジェクトマネージャー、システムエンジニアのテックリード
- 設計: システムエンジニアのテックリード、システムエンジニア
- 実装: システムエンジニア

QAエンジニアは結合テストやシステムテストのフェーズになって呼ばれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333737/c80851b3-e8d1-e910-c3ac-4dc18fa2a319.png)

しかしながらこの構図では、画像右上の工程に進むほど手戻りが大きくなり、気づけば納期に間に合わないという事態に繋がります。

弊社では、昨年度よりQAエンジニアの積極的な介入を進め、W字モデルやシフトレフトテストと呼ばれる案件の開始時からの相談を進めています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333737/598846c0-a68d-5f2c-72a0-464d5eaf1b7c.png)

具体的には、お客様から要望が上がり、案件のゴールや目指したい姿を検討する段階からQAエンジニアやシステムエンジニアがプロジェクトマネージャーの検討に加わり、既存システムの実装などを踏まえた最適解を模索しています。

# 機能テストと非機能テストは漏れなく検討できていますか

シフトレフトテストを確実に実行していくために、朝会などとは別に、週1回30分のテスト定例というミーティングがあります。
このミーティングでは、これから実装しようとするプログラムの詳細な仕様をすり合わせたり、システムエンジニアが担保させる内容やテストケースの相談します。

システムエンジニアは1人であることが多く、QAエンジニアにレビューワーとして加わっていただき、どうしても漏れてしまう考慮すべき点に気づける場となっています。

よくあるものとして例えば、

- 忘れ去られがちな性能、可用性、セキュリティなどの非機能要件のテストケースの検討 何分以内に処理が終わるべきか等
- 境界値テストの検討 入力で受け付ける最大値と最小値はいくつですか等
- 案件単位ではなく他の開発物やシステム全体でリリース後に正しく動くかという整合性の担保 

などは私がよく忘れるものです。

また、ソースコードを確認できるシステムエンジニアでないとわからない詳細仕様をQAエンジニアから質問いただき、QAエンジニアが実施するテストケースの相談も行います。

例えば、

- 特定の権限が付与されたユーザーにのみ表示されるパーツの有無
- 外部からは見えないバックエンド側の詳細な仕様

などをすり合わせします。

時には、新規実装物だけではなく直近で発生したお客様問い合わせや不具合などを議題に取り上げ、既存仕様の改善についてもチーム全員の理解を深め、改善の案を蓄えておきます。

さらに、ドローンを扱うチームであるという制約上、

- ドローンメーカーによって決定される制約
- 実際にドローンを飛行させる検証を考慮しどの工程でどのような担保するか

なども大事な議題のひとつです。

テストケース作成の記事については、以下の記事もご参考にしてください。

https://qiita.com/shinichi-tsukamoto/items/882afd7503a58faa8d30


# 不具合削減の仕組みの拡充

ビジネスモデルが確立されていない段階においては、実証実験という形で、お客様の課題を満たせるかのプロトタイプ作成の期間は短かいことが多いと思いますが、センシンロボティクスもそのひとつでした。

このとき、ユニットテストやシステムテストがきれいに充足しているとは限らず、テストケースの資料が更新できなかったり、最重要ポイントのユニットテストがあれば良い方という状況でした。

そこで、いまは以下の3つの取り組みを進めています。

## E2EテストツールAutifyの導入とテストケースの拡充

Autifyは、シナリオテストの自動チェックができるツールで、不具合を取り除く要となっています。

例えば、

- ドローンのルート作成画面を開ける
- ドローンの飛行ルートが編集できる
- 入力値のバリデーション処理が適切である
- 作成したルートをドローンに送信できる

などの観点を定期的に自動で確認するようにしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333737/e74a5b29-bfcf-09eb-01ae-f1f0df75f6df.png)


↑私たちのチームで開発するドローンのルート作成画面

リリース前に不具合に気づくだけでなく、手でテストする工数の削減、テスト実行者によるテストのゆらぎの解消などに貢献しています。

めっちゃ助かってます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333737/09d75032-2400-b29f-0f14-265191941c0f.png)


## ユニットテストの拡充

テストフレームワークの導入ができていないシステムがあったり、テストが自動実行されていないシステムもあり、テスト基盤の整備やカバレッジを上げる取り組みをしています。

Github Actionsを使って、commitがpushされるごとにテストの自動実行をすることで、コードレビューで気付けなかった不具合についても検知できるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333737/da1d7a20-c091-99da-a711-21a192e676ec.png)


## エラー監視ツール Sentryの導入

既存コードのすべてで発生するエラーを一度に解消させることは難しいですが、リリースする前のチェック環境で不具合が気づけるようになりました。
またお客様からお問い合わせいただく前に状況を掴めるようエラーが発生したらすぐSlackに通知されることで、対応速度の向上もできています。

上記記載の仕組みをすり抜けてしまってもエラーの通知をきっかけに、詳細ページから発生条件や発生手順も掴むことができ「このエラーが起きるのは問題ないですか？」というやり取りを通じて、迅速な修正ができるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333737/8b50b249-fcc8-efee-438c-c19cb6c771ed.png)

↑ Sentryのエラー一覧画面


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333737/2925cc42-52bd-cb81-d757-f14683f5aae0.png)

↑ Slackにエラーが通知されている様子


# 活動の効果

2023年、2024年とも、おおむね2週間に1回の定期リリースを実施しました。

2024年は、前年に比べ、リリース後の切り戻しや修正リリースが半減し、本番環境障害発生件数を6割削減できました。

ユニットテストによるチェックや更新が行われているレポジトリは4割増え、全体の約半分のシステムでユニットテストの拡充を進めています。


# 今後の展望

2025年も引き続きユニットテストの拡充、Autifyテストの拡充、Sentryの導入を進めることで、本番環境障害発生件数や不具合発生件数を削減します。

また、ユニットテストのフレームワークを使って、Autifyテスト作成のコストが高い部分にシステム間連携のテストを導入していきたいです。

センシンロボティクスは今後もAI×Dataを利活用したソリューションで本質的な課題解決を実現します。

# 参考

https://qiita.com/NagaokaKenichi/items/70ccaa5ee963ebe8f1e5

https://webrage.jp/techblog/v_shaped_mode/

https://www.sensyn-robotics.com/product/sensyn-core