DeNAの「人」と「働き方」の"今"を届ける。

PEOPLE

17.10.30

テストのスペシャリスト集団!SWETが、DeNAの品質・生産性を支えられる理由

近年、アプリケーションには高機能さが求められるようになり、かつ開発サイクルは徐々に短くなってきています。それに伴い、ソフトウェアの品質を担保するための「テスト自動化」の重要性が高まってきました。

 

DeNA社内には、テスト自動化を専門とするグループが存在しています。それは、SWET(Software Engineer in Test)。彼らは「DeNAサービス全般の品質向上」と「DeNAエンジニアの開発生産性向上」のミッションのもと、テストの自動化やエンジニアの生産性向上のためのツールの開発・導入などを行うソフトウェア・エンジニアの集団です。

 

SWETはこれまでどのようにしてDeNAの“縁の下の力持ち”を務めてきたのかを、グループマネージャーの沖田邦夫とメンバーの平田敏之に聞きました。DeNAの開発体制をフルスイングさせる、SWETの取り組みに迫ります!

 

テストを形式知化・効率化する

――SWETグループは、どのような経緯で結成されたんですか?

 

沖田:SWETグループの前身であるMobageのオープンプラットフォームの開発をしていた部署のQAチームが立ちあがったのが、約6年前です。それ以前は、DeNAのQAテストはほとんどが人の手によって実施されていました。

システム&デザイン本部 SWETグループ グループマネージャー 沖田邦夫
精密機器メーカーにて新規事業開発のAPI・インフラ・システムアーキテクチャの設計・開発・テストを一通り経験後にDeNAに入社。現在はテストエンジニアリングを担う部署であるSWET(Software Engineer in Test)グループのリーダー。「Selenium実践入門」の共同執筆、雑誌「Web+DB PRESS」への寄稿も行っている。

 

しかし、その方法だとテストの精度やスピードがテスターに属人化します。それに、機能が増えれば増えるほど、テストにかかる工数も増大してしまいます。そこで、自動化によってテストを形式知化し、かつテスト実施のスピードも向上させることを目指して作られたのがQAチームです。そのチームが徐々に発展する形で、SWETグループが結成されました。

 

――平田さんは、SWETチームにおいてどのような業務を担当していますか?

システム&デザイン本部 SWETグループ 平田敏之
大手電機メーカーでのグループウェア開発、ベンチャーでの女性向けCGM、iOSアプリの企画・開発・運用・宣伝の経験を経て、DeNAに入社。主に、モバイルアプリに関することを担当し、複数のチームを兼任。プロダクトのテスト戦略を考え、自動テストの開発やCI/CDの整備、改良、運用をおこなっている。また、雑誌「Web+DB PRESS」への寄稿や、iOS Test Nightや Andorid Test Nightといった勉強会の主催などもおこなっている。

 

平田:私は主に、モバイルテストの自動化を担当しています。

 

――モバイルテストは、ブラウザテストと比較するとどういった難しさがありますか?

 

平田:モバイルの場合、OSなどのプラットフォームの仕様に従う必要があるので、どうしても自分たちがコントロールできない部分が出てきてしまうんです。例えば、iOSやAndroidは両方とも年に1回メジャーアップデートが実施されるので、その際には必ず何かの機能の挙動が変わります。

 

そうすると、旧バージョンの挙動では問題なく動いていたアプリやテストコードが、新バージョンの挙動だと動作しない、ということが発生するんです。また、メジャーアップデートのみならず、マイナーアップデートの場合も動作しなくなることはままあります。

 

――アップデートによる挙動の変化に、どうやって対応しているのでしょうか?

 

平田:昔は、iOSやAndroidがバージョンアップされたら、エンジニア自身が変更内容をチェックし、「どんな内容のアップデートがされたのか」「アプリやテストコードをどう変更すべきなのか」を調査していました。けれど、その方法ではバージョンアップ後の対応がどうしても遅くなってしまいますし、エンジニアの工数も奪われてしまいます。

 

その課題を解消するため、「OSや依存ライブラリがバージョンアップしたことをシステムで検知したら、テストを自動的に動かして新環境でアプリを動作させ、問題がなければ新しいバージョンを使う」という基盤を構築しています。調査にかかる工数は馬鹿にならないですから、そのコストが削減できたことでずいぶん楽になりました。

 

大切なのは、自動化する箇所の優先順位をつけること

――他に、開発効率化のために取り組んでいることはありますか?

 

平田:テストコードを書く機能とそうでない機能の優先順位づけをしています。例えば、iOSやAndroidといったプラットフォームが提供する機能をアプリ内でたくさん使用する場合、テストを自動化してもそれほど効率化につながらないケースも多いんです。

 

――というと、具体的にはどういうことですか?

 

平田:例えば、アプリの課金機能などをイメージしてもらえるとわかりやすいと思います。課金の際の「お金を払いますか?」といったダイアログって、アプリが出しているわけではなくてプラットフォームが出しているんです。だから、プラットフォームの仕様が変わればダイアログの仕様も変わったりするんですよ。

 

仕様変更が原因でテストが動かなくなれば、その度にテストコードを修正する必要が出てきます。そうなってしまうと、自動化したことでかえって工数が取られてしまう。そうならないように、「どの機能をテスト自動化して、どこは切り捨てるか」の線引きが重要になってくるんです。

 

――テスト自動化の“コスパが良い機能”を選別することが大事なんですね。

 

沖田:そうですね。さすがに、全ての機能にテストを書いて、ずっとそれをメンテナンスし続けていくのは厳しいので。SWETが大事にしている価値観として、「テスト対象をきちんと理解することで、テストの濃淡をつける」というものがあります。

 

テスト対象への知識がない状態でテストを書こうとすると、それほど重要でない機能や自動化してもメリットのない機能に工数をかけてしまう可能性が高くなり、無駄が多くなってしまうんです。

 

テスト効率化のため、プラグインを自分たちで自作・改良する

沖田:実はSWETグループでは、効果的に自動テストを実施するためJenkinsプラグインも自分たちで自作・改良しているんです。例を挙げると、Application Detector Plugin(https://github.com/jenkinsci/app-detector-plugin)というJenkinsプラグインを自作しました。

 

これは、テスト対象となるアプリが使用する「プラットフォームのバージョン」を簡単に制御できるものです。例えば、「XCodeのバージョン○○○とUnityのバージョン△△△」といった組み合わせを指定して、Jenkins上でビルドを実行できます。

 

平田:このプラグインにはセットになるものがあって、それはSWETのinternalで使用しているJenkinsをセットアップするためのAnsibleなんです。これを使うと、さまざまなバージョンのXcodeやUnityを簡単に入れられます。

 

つまり、Application Detector PluginとAnsibleを用いることで、環境のセットアップから利用まで一括で用意できます。環境構築のコストがほとんどかからなくなるので、どういったプロジェクトでもこの基盤を流用しやすくなるんです。

▲SWETグループの一画に置かれている書籍。

 

テスト専門家になるために、身につけておくべきこと

――「これからSWETのエンジニアになってみたい」という方には、どういった知識やスキルを身につけるのをおすすめしますか?

 

沖田:SWETに必要な技術って山のようにあって、テスト設計・テスト技法といった一般のQAテスターが学ぶ知識はもちろん、開発プロセスやQAプロセスを改善していくためのプロセス管理のスキルも求められます。それから、自動テストを効率的かつメンテナブルに書いていくためにどうすればいいかや、効率よく開発するためのコードの書き方だって学ぶ必要がある。

 

でも、1人のエンジニアがその全てを学ぶことはちょっと無理があるので、「何かしら強い(スキルの)軸を複数持ってほしい」と僕はよくメンバーに言っています。

 

例えば、もともと開発をやっていてコーディングが強いエンジニアがQAテストの技法を身につければ、単体テストをQA的な観点で書けるようになる。つまり、複数のスキルの組みあわせによって価値が生まれるんです。

 

平田:それから、自動テストの知識だけではなくて、アプリをリリースするまでのサイクル(ビルド、デプロイなど)の知識も深めてほしいです。また、モバイルアプリってどうしてもiOSやAndroidといったプラットフォームの仕様に依存するので、その内容を理解しておくことも重要です。

 

Make Testing Fun, Smart, and Delighting End-Users

――最後になりますが、SWETで働くことの“やりがい”とは何だと思いますか?

 

平田:SWETは、部署横断でさまざまなプロジェクトに携われますし、担当できる業務領域も広いグループです。それに、新しい技術をどんどん習得していけるので、エンジニアにとってはすごく挑戦しがいがある環境だと思います。

 

それに、各部署のメンバーと接する機会もたくさんあるので、それで刺激を受けてスキルアップのきっかけになることも多いです。

 

沖田:SWETは"Make Testing Fun, Smart, and Delighting End-Users"(テストをもっと楽しく賢く、そしてエンドユーザーのデライトにつながるように)というビジョンを掲げていて、これを実現できるようにメンバー全員が一丸となって業務に取り組んでいます。

 

テストって一般的に、「やらなければいけないもの」という、少しマイナスのイメージがあると思うんです。でも本当は、プロダクトの品質やチームの開発スピードを向上させられる、すごくクリエイティブな作業。だからこそ、それを実現するための技術基盤や手法を自分たちの力で作り上げていけることに、大きなやりがいを感じています。

 

願わくば、僕たちと同じようにテストに魅力を感じてくれるエンジニアが、もっと増えてくれたら嬉しいです。

DeNA Testing Blog

http://swet.dena.com/

Wantedly

https://www.wantedly.com/projects/103642

 

  • このエントリーをはてなブックマークに追加
  • このエントリーをはてなブックマークに追加

Tag

タグをすべて表示する