Money Forward Developers Blog

株式会社マネーフォワード公式開発者向けブログです。技術や開発手法、イベント登壇などを発信します。サービスに関するご質問は、各サービス窓口までご連絡ください。

20230215130734

マネーフォワード SDETインターンの魅力とは?

この記事はMoney Forward Engineering Advent Calendar 2023 15日目の投稿です。

こんにちは!マネーフォワードでQAエンジニアをしているSammyです。 2023年の9月に、初めてSDET(Software Development Engineer in Test)インターンを実施しました。

「SDETってどんな職種?」 「マネーフォワードでの品質系のインターンってどんなことをするの?」 マネーフォワードのエンジニアインターンシップに興味がある方向けに、インターンに応募し実際に参加していただいた方のお話をします。

背景、前提

SDETとは?

マネーフォワードにSDETが誕生したのは2023年の5月で、まだ出来立てほやほやのロールです。

マネーフォワードのSDETは、プロダクト品質の向上のために何でもする、そんなロールの人を指します。コーディングスキルの加えて、ソフトウェア品質のスキルも求められます。 同じくプロダクト品質に貢献するロールとして、QAエンジニアがあります。SDETはソースコード品質や自動テストを主に推進、QAエンジニアはテストケース品質やプロダクト全体の品質向上を推進します。 コード品質に強いSDETと広い視野を持ったQAエンジニアが、タッグを組んで品質改善を進めていきます。

また、SDETと似ている言葉でSET(Software Engineer in Test)がありますが、SETはテスト自動化のスペシャリストとして語られる傾向が多いように感じます。 SDETはテスト自動化だけでなく、プロダクトのコード品質にも関与していくという点でSETと異なります。

解決していきたい品質課題

SDETが誕生した背景には、大きく2つの課題があります。

ユニットテストへのフィードバック、改善スピードを上げたい

ユニットテストとは、クラス内のメソッドが正常に動作することを確認するテストでもあり、コードの網羅率を計測するテストです。開発担当のエンジニアがプロダクトコードと一緒にテストコードも実装します。 ユニットテストはソースコードと同じ言語で、そして同じ環境で走らせるため、テスト実行時間が短くなります。また、テストが失敗した時にすぐに原因を突き止めることができるというメリットもあります。

不具合を検出した際に、プルリクエストを見て、ユニットテストのこういうケースが足りない、というフィードバックと改善のサイクルをどんどん回していきたいです。 ユニットテスト以外にもE2Eテストでのアプローチも考えられますが、E2E自動テストは実行時間が長く、メンテナンスコストが指数関数的に多くなってしまうデメリットがあります。 なので、テストコードの量はユニットテスト>APIテスト>E2Eテストにしていく必要があります。

品質を上げながらリリーススピードも上げる

一般的に、プロジェクトのコストの約半分がテスト活動にかかると言われています。なので、テスト活動がボトルネックとなってリリースが遅れてしまうということがしばしばあります。しかし、品質を上げながらリリースのスピードを上げることは可能です。 テスト活動がボトルネックになる理由の1つに、テストをリリース直前にまとめて実行することが挙げられます。 ここには2つの問題が潜んでいます。1つは、まとめて実行すると、テストの範囲が広くなるので、バグが検出された際に原因の特定に時間がかかります。もう1つは、実装してから時間が経っているので、実装内容を思い出すのに時間がかかります。2日前に実装したコードの不具合と2ヶ月前に実装したコードの不具合、どちらの方が素早く修正に取り掛かれるかは一目瞭然です。

テストをまとめて実行しないために、実装できた小さな範囲のテストを短期間で回していきます。これによって、素早くコードの問題を検出することが可能になります。 そして、小さく素早くテストをするには、テスト自動化は必須です。

テストの自動化率が低いと、機能追加をしたときにリグレッションテストを手動でやらないといけなくなります。当然テスト実行時間はかかりますし、件数によっては何度も繰り返し実行するのが現実的でなくなります。 クラス内のメソッドの動作確認(ユニットテスト)や、データのinput / outputが仕様通りに動作することの確認(APIテスト)の自動テストを拡充していくことによって、品質を上げながらリリーススピードを上げていくことが可能と考えています。

マネーフォワード全体の品質戦略については、弊社CQO(Chief Quality officer)のインタビュー記事をご覧ください。

moneyforward-dev.jp

なぜインターンなのか

ユニットテストへのフィードバック、改善スピードを上げるためには、コードを読める・書けるだけでなく、テストを書ける・レビューできる人が必要です。 よくあるケースとしては、QAがテストケースを書き、SETが自動テストスクリプトを実装する方法があります。 SDETはテストケースの作成もテストスクリプトの実装もできるため、よりスピードが速くなるはずです。

しかし、コーディングスキルを持ち、かつ、品質保証のスキルを持っている人はあまりいないのが現状です。 なので、SDETの数を増やしていくには、コーディングスキルを持つ方に品質保証のエッセンスを注入するか、品質保証のスキルを持つ方にコーディングのエッセンスを注入していく必要があると考えました。

また、中途採用だけでは難しいと考え、新卒採用も検討しました。 日本の大学ではまだまだソフトウェア品質に関する授業は少なく、マネーフォワードでは前者の「コーディングスキルを持つ方に品質保証のエッセンスを注入」するほうが現実的だと考えました。 なので、コーディングスキルを持つ学生向けにソフトウェア品質の業務を体験していただくことで、ソフトウェア品質に興味を持っていただきたいと考え、インターンを実施することにしました。

ソフトウェア品質の業務を体験できるインターンも珍しいので、希少価値という側面でもウリになるのではとも考えました。

SDETインターンの概要

マネーフォワードは、向上心の強い方がどんどん成長していくことができる環境であると自負しています。 特にSDETは、以下のキーワードに魅力を感じる方に参加していただけると嬉しいです。

  • 周りのメンバーを巻き込みながら一緒に進めていく
  • スピード感のある意思決定とアクションしていく
  • 土壌が整っていないところを開拓できる
  • 他の人がやってない、新しいことにチャレンジできる
  • コードが書けてテストの知見を持ってる人は希少

また、コーディングの経験はWebエンジニアと同様必要ですが、テストの知識や経験は不問です。興味を持っていて、これからキャッチアップしていくぞという想いを持つ方を歓迎します。

SDETインターンの詳細

少しでも興味を持ってくださった方が参加しやすいように、今回は2週間の短期インターンとしました。 CQO直下の部署に配属され、マネーフォワードの実際のサービスの品質保証業務を行います。

すでに25新卒向けの募集は締め切っておりますが、応募条件や選考フローが気になる方は、SDETインターンの募集要項をご覧ください。

moneyforward-recruit.snar.jp

インターンに参加してくださった方

西川さん@kaniyama_404

応募のきっかけ 元々DevSecOpsに興味があり、エンジニアインターンを探していたそうです。SDETインターンは、マネーフォワードのエンジニアインターンの選考プロセスの中で知りました。 ソフトウェアテストは授業で教えられない分野で、個人では勉強しづらいため、SDETインターンに興味を持ち、参加していただくことになりました。

西川さんは柔らかい物腰で気遣いができる優しい方です。遠方からの参加ということで、最初の2日は東京に出張していただき、残りは自宅からリモートで参加していただきました。 初日の夜は、歓迎会で親睦を深めていただきました。

(向かって右から、CQOの高橋さん、インターン生の西川さん、SDETの神谷さん、SDETでメンターの衣笠さん)

インターンでの仕事内容

所属していただいたCQO室は、会社全体の様々なサービスに携わっています。西川さんのインターンでは、とあるHR(人事労務領域)プロダクトのE2E(End to End)テストの自動化を進めていただきました。

E2Eテストとは、「本番相当の環境で、ビジネスプロセスを最初から最後まで実行するテストの一種」です。(ISTQB Glossary)

使用した技術

  • Python
  • Cucumber BDD
  • Selenium WebDriver

今回は、ユーザーの業務の流れに沿って、ログイン、申請、帳票表示、帳票ダウンロード、ログアウトの一連の流れのテストスクリプトを実装していただきました。

工夫していただいたこと

ページオブジェクトモデルで要素を一括管理することによって、仕様変更に強いテストとなりました。 ページオブジェクトモデルは自動テストの設計パターンの1つで、テストケースと、テスト対象であるページの要素や操作を分離します。

例えば、ログインの場合、ログインページに、メールアドレス入力欄、パスワード入力欄、ログインボタンの3つの要素があるとします。 この場合、ログインページのページオブジェクトを作成し、メールアドレスの入力、パスワードの入力、ログインボタンのクリックといったページ内で可能な操作をメソッドとして定義します。 これによりコードの再利用性や可読性が向上するほか、ページに変更があった際はページオブジェクトのみを修正すればよいので、テストのメンテナンスが楽になるというメリットがあります。

これまで使ったことがない言語やフレームワークにチャレンジできたり、実務を行なっている社員からフィードバックをもらえるのも、インターンシップの醍醐味ですね。

インターンをやってみて

リグレッションテスト・スモークテスト・テストレベル・テストピラミッドといったテスト関係の知識は、最初に時間を取って説明する必要がありました。 この時間はインターン生にとっては、テストについて学ぶ良い良い時間になったのではと思いますし、メンターにとっても、今後テスト未経験のエンジニアに対して、どういう話をしたら良いのかの経験値を得ることができました。

また、ソフトウェアエンジニアリングの素養がある方は手を動かすのが速くて、作り始めてから動くものが出てくるまでが早いこともわかりました。 当初の仮説の通りの結果となり、SDETインターンの可能性を改めて実感した側面となりました。今後もSEDインターンを継続していくメリットはありそうと考えております。

西川さん(インターン生)の感想

インターン最終日には、成果発表会の場で、インターンで行ったことや学んだことを発表していただきました。

マネーフォワードで働くことに対する解像度が上がりました。一方で、まだまだ修練を積む必要性も感じています。 インターン参加前は働くことに対してネガティブな印象でしたが、働くのって辛いばかりではないと、ポジティブに変わったのも良かった点です。

今後の展望

今回は初めてのSDETインターンだったということもあり、準備、進め方、インターン生とのコミュニケーションなど、手探りで進めたところが多かったです。 もう少し経験値を積みながら、費用対効果はありそうなのか、SDETを知っていただく投資として続けていくのかを判断できると良いなと考えています。

おわりに

ブログ執筆時点で来年のSDETインターン実施は決まっておりませんが、これからも多くの方にSDETについて知っていただけるように活動していきます!