【エンジニアブログ】テストの自動化で開発品質改善に寄与するエンジニア「SET(Software Engineer in Test)」を紹介!

本記事は、当社オウンドメディア「Doors」に移転しました。

約5秒後に自動的にリダイレクトします。


自社開発プロダクト「Rtoaster(アールトースター)」をはじめとするブレインパッドの製品群を扱うプロダクトビジネス本部(PB本部)の社員によるエンジニア技術ブログです。今回は、「SET」についてご紹介します!

はじめに

こんにちは、私はPB本部 サービスオペレーション部 中村といいます。

私は今社内でSETというポジションで働いてますが、本ブログではこの SET の紹介を通じてブレインパッドのプロダクト開発の風景を少しお見せしたいと思います!

SET の紹介

私は製品開発部門に所属していますが、この開発工程において製品のQA作業(リリース前品質保証)は欠かせないものです。この品質保証に関して作業の種類によっては技術を持った作業者が必要な場合があり、この技術支援を SET( Software Engineer in Test )が行います。

具体的な例としては、自動テストの構築やテストデータの準備があります。自動テストにおいてQA作業における手動のQA確認項目を自動化し、 QA作業リソース配分の改善を行いたい状況があると思います。また、テストデータに関して製品に対してテストデータを構築する際これらの技術情報の整理やデータの準備をすることもあると思います。これら技術にかかるタスクを SET は支援・実施します。

テスト自動化

このような SET業務の中で、まずここではプロダクトに関する自動テストを取り上げたいと思います。

自動テストについて、弊社では TestCafe を利用しています。
https://testcafe.io/

TestCafe は JavaScript などでテストケースを構築できますが、広くテスト自動化の開発作業が安定して行えるように、内部向けの TestCafe のラッパーを開発し共通化したテストケースの管理機構を整備しています。

ここでどのようなソースコードを実装しているか一例を見てみましょう。下記のコードは製品における設定項目の承認フローを TestCafe で進めるコードとなっています。このようなコードを構成し、テスト自動化を進めています。

/* 設定承認処理を進める(例) */

// テスト用途に起動しているブラウザ上で、ボタンの状態を取得
const buttonEnabled = ClientFunction(() => { /* 取得処理は割愛 */ });

// ボタンが有効である場合、設定の反映処理を進める
if (await buttonEnabled()) {

  // 設定の反映機能についてボタンをクリックして呼び出す
  await t
    .click(Selector('button').withText('設定の反映'))

    // 設定の反映確認ダイアログが表示されるので、実施のボタンをクリックする
    .click(Selector('button').withText('設定反映を実施する'))

    // 反映結果通知ダイアログが表示されるので、OK ボタンをクリックし確認を終了する
    .click(Selector('button').withText('OK'));
}


自動テストで利用しているコードについて、私が開発に参画した時点で構築済のコードがある程度存在していましたが、コードの密結合性が高く保守性に難がありました。SETとしてこの改善のため、ファイルの分割を行ったり、他製品で広く使いやすくなるようにコアの部分のコードの分離などを行いました。これは、現在ラッパーとして利用しているものになります。

このラッパーは実態としてはキーワード駆動となるように構成されたファイル群とそれをパースする JavaScript 処理となるのですが、この JavaScript の処理の保守性向上のため SETとして静的解析ツール(Linter)やコードフォーマッターの導入を行いました。具体的には ESLint や Prettier を導入したのですが、これは他製品でもフロントエンド開発をしている状況のため、他製品のエンジニアに教わりつつ導入することができました。

このテスト自動化は、最終的には自動リリースに紐づくことができるため、とても重要タスクとなります。弊社では CI/CDのため CircleCI を契約していますが、これら自動テストと組み合わせて将来的に良いプロダクト開発が継続できるように環境整備をしていければと思います。

プロセスの改善

SET として品質に関わる技術支援も行っていますが、技術支援とともに開発などのプロセス改善支援も行っています。

開発からリリースまでの流れは ISMS で定義されたフローに準じており、 Atlassian 製品群( Confluence / Jira / Bitbucket ) とCircleCIを主に利用して進めています。コミュニケーションツールとしては Slack を活用しています。

これらツール群について、タスクやバグなどを課題管理ツールであるJiraで管理していますが、QAチームで起票されたバグの理解を促進したいといった要望に応えるため、このJiraにて起票されたバグ票を Slack に通知されるような支援を行いました。

また、ツール活用のためにツール利用の KPI をとり時系列で把握することは定量的に私たち自身の開発を理解する上での良きデータとなりますが、これら KPI を月次で取るよう運用整理を行いました。

将来的には、各プロダクトの品質管理状況の聞き取りと評価(アセスメント)を実施し、品質改善の支援ができればと思います。

Android / iOS 関連製品の技術支援

製品として Rtoaster SDK があり、 Android / iOS のアプリに Rtoaster を組み込む際に利用されています。この QA 技術支援のため AWS macOS の技術検証などを行いました。こういったものの開発についてある程度最新の OS が必要となってくることがあり、最新の OS を利用できる AWS macOS 環境の利用を念頭に置き利用の検討を行いました。まずは社内で用いられている開発リポジトリがきちんと AWS macOS 上でもビルドできるか、シミュレーターが起動できるかどうかなど技術検証を行いました。検証の内容としては初等的ですが、今後 QA 支援が進むことによって支援の中身や体制が拡充できればと思います。

今後の展望

SET として今後は次のような作業を想定しています。

  • テスト自動化の対象製品を広げていくこと。
  • CircleCI をより活用した自動テスト環境が整備されること。
  • Android/iOS QA 作業の支援や QA 改善を行うこと。
  • 社内の品質に関わる情報の整理やプロセス改善を通じ品質強化に寄与すること。

これらタスクについて、社内の「SRE」や「QA」、「開発」と連携して質の高いプロダクト開発・プロダクト運用に寄与できればと思います。


ブレインパッドは、自社プロダクトの開発エンジニアを積極的に採用しています。ご興味がある方はお気軽にご連絡ください。

■ ブレインパッドの自社プロダクト開発エンジニアの紹介資料
ブレインパッドPB本部紹介資料(キャリア採用向けweb公開版 ) - Speaker Deck speakerdeck.com

■ ブレインパッドの求人一覧
www.brainpad.co.jp