ソフトウェアテストを起点とした、「DeNAサービス全般の品質向上」と「DeNAエンジニアの開発生産性向上」により、価値あるものを素早く提供することをミッションとするチーム「SWET」。
「SWET」とはSoftware Engineer in Testの略で、ゲームからソーシャルライブ、ヘルスケアやスポーツなど多岐にわたる開発現場に入り込み、開発者と共にバグ検出のため「自動テスト」の仕組みを整備、あるいは並走して、そのノウハウを各部署のエンジニアに浸透させるのが、彼らの仕事です。
立ち上げから5年以上の歴史を持ち、日本でも有数のエンジニアチームとなったDeNAの「SWET」が、ここ最近、さらに進化を遂げて、極めてユニークなとりくみを実現させつつあるとか。
品質本部品質管理部SWET第二グループの2人に聞きました。
バグの侵入を防ぎ、低コストで早く見つける集団
――「SWET」は3つのミッションを持っていると聞きました。
国分 佑樹(以下、国分):ええ。ソフトウェアは実装までの間に、どうしてもバグが埋め込まれます。
そのバグを「入らないようにし」「なるべく低コストで見つけ」「なるべく早く見つける」のが、我々、「SWET」のミッションです。
かつてこうしたバグは、エンジニアが自らの手を動かして見つけ、消す努力をしました。しかし手間ばかりかかり、属人化もします。そこで「自動テスト」を導入してバグを見つけ、なくすことで、3つのミッションを実現させているのです。
立ち上げから5年以上、日本国内でここまで知見と歴史を持つテストに特化したスペシャリスト集団はないと自負しています。
――2つのグループに分かれているそうですね。
国分:はい。ソフトウェアは、「仕様」を決めて、「開発・実装」して、「検証」をして、リリースされるのが王道の流れです。
この流れの「仕様」の部分を担当するのが第一グループ。私たち第二グループは「開発・実装」の部分を担っています。
現状、私は第二グループのGL(グループリーダー)を務めています。
外山:私は第二グループの中でAndroidを担当。Androidのアプリケーションのテストの自動化や品質向上を手掛けています。
他にiOSチームとゲーム専門のゲームチームといった具合に、プログラミング言語ごとにグループ内でチーム分けがなされています。
それに加えて、CI/CDチームがあります。自動化したテストプログラムを動かすのは、CI/CDサービスというプラットフォームを使います。その選定、管理をするチームですね。このメンバーで社内横断的に自動テストを浸透させ、啓蒙しています。
国分:ほとんどのメンバーが、AndroidのDroidKaigiをはじめ、国内の大規模カンファレンスでテストの自動化に関して登壇経験があります。また執筆経験があるメンバーも多く、優秀な人材がそろっているのは自慢です。
ーーお二人は、どのようなキャリアを経て「SWET」に?
外山:私はDeNA入社が2018年で、それ以前はガラケーの仕様を検討したり、Androidアプリケーション開発をしていました。
Androidを手がけるようになった当初、PCと違い、テストの自動化がまだまだ浸透していませんでした。現場の開発エンジニアが手でやらざるを得なくて、とても手間でした。
「この領域はこれからもっと必要になる」と強く感じていたとき、DeNAがすでに「SWET」という組織を持っているのを知りました。とても新しく新鮮で、先見性にも驚き、気がつけば飛び込んでいましたね。
国分:私も2018年入社です。その前はiOSのアプリを開発していました。
当時から私のライフワークというか、仕事の流儀は「胸を張れる開発をする」ことだったんですね。自分の手を離れたソフトに「バグが多くて……」と差し戻されるのが、とてもイヤだったんです。
そこで開発をしながら、自動テストを書くスタイルをずっととっていて、自分が開発したソフトは「クラッシュがほぼない」状態まで持っていくことはできていたんですね。
ーーすごいですね。
国分:ただどうしてもバグはどこかで出てくるものなんですね。解決するには、自動テストをいかに組み込むかになる。
そして自動テストにフォーカスした組織って、当時の日本ではDeNAしかありませんでした。
だから「バグをどうやって減らせるのか……」という自分のライフワークを満たすために、「SWET」にジョインしました。
ーーなるほど。そんな「SWET」の第二グループは、具体的にどのようにして「自動テスト」を実装させているのでしょう?
国分:まず強く言いたいことがひとつあります。我々、「SWET」が自動テストのプログラムを書く組織ではないということです。
寄り添って、各部署が自走できるようにする
――「SWET」は自動テストを書かない?
国分:はい。私たちは自動テストそのものを書くのではなく、「開発者が自動テストを書くお手伝いをする」のが役割です。
というのも、ソフトウェアの自動テストを書くときは、テスト対象の実装がとても大事なんですね。ただ、その実装がテストしづらい状態の場合が多い。私たち「SWET」が自動テストを書くとなると、開発中の当該プロジェクトのコードにどうしても触らざるを得なくなるわけです。
ーー開発側のエンジニアから「ちょっとまってくれ」と抵抗がありそうです。
国分:そうなんです。開発者だったのでわかりますが、「いや。今このプロジェクト、動いているから」と確実になります(笑)。
つまり、テストを自動化するには、開発者がテストしやすい状況にソースコードを書きながら、自ら書いていくのが、まずベターなんです。
だから、私たちは自動テストを書くために寄り添って、助ける。
具体的な業務はふたつあって、自動テストを書くための部品としてのコードの提供がひとつ。もうひとつはテストし易い状況をつくるためのノウハウの提供です。これらを2人で同じプログラムを触りながら書くペア・プログラミングで実施していきます。
ーーなるほど。伴走してコーチングする感じですね。
外山:近いですね。そのため我々「SWET」のメンバーはテストに関する知見を持つのはもちろん、ソフトウェア開発の手法も当然知っている必要があります。また、年々進化していく両方の知識を常にキャッチアップしていく必要もあるわけです。
ーーソフトがユーザーのみなさんにどう使われるのかも理解する必要がありますね。
外山:はい。たとえば直近、ライブコミュニケーションアプリ『Pococha』を支援していたんですね。日本語版と共に英語版を開発中で、英語版の画面を表示したときにレイアウトが崩れていないか、英訳が適切かチェックするのが大変だったという話を聞きました。
「スクリーンショットを撮れるようにしておくと、今後新しい言語に対応するときにこれだけチェックする工数が減らせそうです」と開発メンバーに伝えたところ、すぐに自動テストのコードを実装してくれました。
国分:ヒアリングを含めたコミュニケーション能力は必要ですよね。先程言った技術的な面とはまた別に。
外山:そうですね。抽象的に「自動テストをいっぱい入れるとバグが少なくなりますよ」「いつか品質があがりますよ」では、やっぱり動いてもらえません。頭では理解していても「来週までにあの機能とこの機能をつくらなきゃいけないのに……自動テストのために工数をあけられないよ!」と思ってしまう。
より具体的にあえて自動テストの工数をいれるメリットを伝えるように意識して伝えています。だからこそ、プログラムと共にプロダクトのこともより深く理解しておく必要があるんですよ。
ーー横断的に自動テストを提案しているとおっしゃいましたが、どのように「SWET」の仕事はスタートするのでしょう?
国分:常に窓口は開いていて、Slackなどを通して各事業部の開発メンバーの方から依頼を受けてスタートします。
たまに「あのプロダクトが苦戦している」といった情報を受け取ると、こちらからSlackを通して声をかけることもありますね。
外山:もっともっとすべてのプロダクトで「SWET」を使っていただきたいのですが、認知度がまだまだな面と、スケジュール的に二の足を踏む方もいる。
国分:ただ一度でも活用いただくと、開発工数が多少伸びても、目に見えてバグが少なくなる。なので「またお願いしたい」「相談にのってほしい」とリピートしていただく機会はとても多いですね。
――「SWET」は「自動テストのお手伝い」をするのが役割。介入すればするほど、ノウハウが「SWET」を利用したチームに積み上がるわけですよね。
外山:はい。だから介入が続くと徐々に質問や悩みがなくなっていくんです。開発メンバー自ら「こういう問題が出そうだな」「ここは自動テストを書いたほうがいいな」と開発時に見え、勝手に手が動くようになりますからね。
国分:そうやって自動テストに明るいエンジニアが増えていくのが、私たちがもっとも目指す世界。DeNAのサービスとエンジニアの質があがることに直結しますからね。
――なるほど。しかもDeNAはゲームからヘルスケア、スポーツに至るまで幅広いソフトウェアを開発しています。自動テストを通して、それらソフトの開発とサービス向上に携われるのは「SWET」の醍醐味ですね。
国分:そうですね。加えていうなら、想像以上にとがった技術的な挑戦ができる。それはDeNAの「SWET」ならではでしょうね。
AIでバグの生じそうな箇所を、99%解析
――とがった技術的な挑戦というのは?
国分:僕らの部署には「20%ルール制度」という、業務時間の最大 20%まで、現在の業務の優先順位では手がつけられないけれど、将来的に大きな効果が得られるかもしれないプロダクトや技術の研究開発にあてる制度があります。
これを利用して、自動テストにまつわる新しい技術の研究をすすめるのがカルチャーとしても根付いているんです。
たとえば、私はAIの機械学習を活用して、ゲームエンジンの構文解析器をつくりました。
――それは自動テストのために?
国分:ええ。ゲームにおいてバグがありそうな場所を、AIで解析するのが狙いでした。AIに学習させるためには、食べさせるデータを取得する必要がある。複雑なゲームエンジンとソースコードの中で、どこらへんを通るかのデータを得られたのですが、そのデータの文法規則がわからなかったんです。文法規則を見つけ出して、解析する必要がありました。
それをゼロから、謎のIDとIDを突き合わせて、探り出していきました。作業しながら、「こんなこと世界で誰もやったことないだろうな」と思いながら、地道な作業を進めていました(笑)。
――結果として、文法規則を見つけ出せたのですか?
国分:はい。なんとか文法規則を見つけ出せました。またここがDeNAのいいところで、社内にトップレベルのAIとデータ解析の専門部隊がいる。彼らに声をかけると、意欲的に一緒にAIを活用した自動テストまわりのプログラム開発をすすめています。
結果として、データの99%くらいは解析できるようになり、この領域で特許もとれました。
――すばらしい。「ライフワーク」がまた一歩進んだようですね。外山さんは今の仕事の醍醐味をどこに感じていますか?
外山:技術の幅が自然と広がるところですね。先述したように自然と幅広い業務に携われるのはもちろん、Androidの自動テストの業務をすすめるなかで、ソースコードを自動生成するようなプログラムを書いたこともあるし、iOSのプログラムを書くこともある。周りが積極的に新しい技術に挑戦するので、自然とそれに感化される面がありますね。
また、頻繁にチームのオンラインMTGのときは雑談が盛り上がり、そこで互いの知見を交換しあえるのもとっても貴重なんですよ。
――登壇するようなトップレベルのテストエンジニア同士の雑談。相当に“濃い“んでしょうね。
外山:本当にそうです(笑)。Androidチームが抱えている課題などをさらっと話すと、iOSやCI/CDチームが「それならこうするといいんじゃない」と的を得た解決法を示してくれたり。
積み上がったナレッジを、常に共有しあって、磨き上げているので、幅を広げたうえで、自分のエンジニアとしてのレベルも積み上がっていくのが実感できる。実作業同等に貴重な場と感じています。
――SWET第二グループとしては、どんな方にジョインして欲しいですか?
国分:プログラミング経験は必須です。さらに「バグが多くて大変だった」「手戻り作業をなんとか減らしたい」と課題感を抱いた経験がある人かなと思います。
そうした経験があるからこそ、「では、どうすればいいか」と現場の開発者の気持ちに“共感”できる。自動テストの提案やコミュニケーション、部品づくりにおける熱量も変わってくると思うんです。
外山:僕らもそうですが、「過去、バグに悩まされていた自分たちをなんとかしてあげたい」と思っているような人。また、根性や気合いではなく、「仕組み」でなんとかしたいと考えているエンジニアらしいエンジニアの方が向いていると思います。自動テストの実装経験などは無くても、なんとかなる。
国分:そうですね。いずれにしても、「いいものをかけるエンジニアがたくさん揃った組織をつくる」のが僕らのビジョン。DeNAのエンジニアリングを押しあげて、ひいてはサービスのレベルを押し上げるのが理想。そのための仲間にぜひなっていただきたいですね。
※本記事掲載の情報は、公開日時点のものです。
※本インタビュー・撮影は、政府公表のガイドラインに基づいた新型コロナウイルス感染予防対策ガイドラインに沿って実施しています。
執筆:箱田 高樹 編集:フルスイング編集部 撮影:小堀 将生