SWET
SWETグループの属するIT本部品質管理部は、ゲーム・ソーシャルライブ・ヘルスケア・スポーツなど様々な事業を展開し続けるDeNAグループ全体の様々な品質にコミットしている部署です。その中で、SWET(SoftWare Engineer in Test の略)グループは、ソフトウェアテストを起点とした、「DeNA サービス全般の品質向上」と「DeNA エンジニアの開発生産性向上」の両方により、価値あるものを素早く提供できるようにすることをミッションとしています。
近年、アプリケーションには高機能さが求められるようになり、かつ開発サイクルは徐々に短くなってきています。それに伴い、ソフトウェアの品質を担保するための「テスト自動化」の重要性が高まっています。テスト自動化をすることで、バグを早期に発見して取り除き高い開発生産性を実現できます。
そのため、開発現場の中に入り込んでいき、開発者と共に早期にバグを検出できる自動テストを整備していくことや、それらの開発サイクルを素早く回すための、横断的な CI 基盤やプロジェクトの健康状態の可視化手段を提供していくことが必要になります。
チームカルチャー
SWET は、高度・先進的なソフトウェアテスト技術を強みとする専門家集団です。テスト技術のアーリーアダプターとして、世界の最先端のテスト技術を素早くキャッチアップし、DeNA の最先端の事業のドメインに適用させていくことで、テストに対する知見を蓄積していきます。そして、DeNA のエンジニアに対して開発やテストを効率化していくためのツールや、テスト技術に対する教育プログラムを提供することで、DeNA のエンジニアが品質の高いプロダクトを素早く届けられるような仕組みを作っていきます。
このような技術蓄積サイクルを実現するために、SWET では良質なインプットとそれと対になるアウトプットを重視しています。それを実現するため、20%ルール制度・外部発表の奨励・テスト勉強会の主催といった制度や活動を整えています。
20%ルール制度とは、業務時間の最大 20%まで、現在の業務の優先順位では手がつけられないがこのアイディアを実現することにより将来的に大きな効果が得られるかもしれないようなプロダクト・サービス・技術の研究開発にあてることができる制度です。このように、良質なインプットとそこからの技術の活用に向き合う時間を重視することで、他社に先行した取り組みができています。例えば、SWET の現在の重点テーマの 1 つである、「仕様チェック技術の高度化と仕様を活用した開発の効率化」も、もともとは 20%ルールから出発したものです。
また、継続的なアウトプットを SWET メンバーは常に意識しています。これは、SWET のバリューでもある「ソフトウェアテストのスケーラビリティ」、すなわち、誰もが SWET のもつ知見を活用できる状態を目指すという行動指針が浸透しているため、インプットを自らの学びだけに留めることなくみんなが活用できる状態を目指しているからです。常日頃から質の高いアウトプットを心がけており、 DeNA Testing Blog の運営や、DeNA TechCon を始めとした大規模カンファレンスへの SWET メンバーの登壇が継続できています。
さらに、SWET は iOS・Android・CI/CD Test Night と Test Online というテストや CI/CD に関係することについて語り合う勉強会を主催しています。最近では Lint について語り合う Lint Night にも力を入れていこうとしています。勉強会は自らのアウトプットとフィードバックの機会を得るだけでなく、テストに興味のある他社のエンジニアの良質な話題を聞くことができ、勉強会を運営することで良質なインプットと継続的なアウトプットが同時に実現できています。
SWET は様々な分野でのスペシャリストが集まった技術者集団です。高いレベルの中で切磋琢磨することで、ソフトウェアテストを中心とした幅広い技術領域で高い専門性を確立したいと考えている方におすすめです。
事例紹介
「DeNA サービス全般の品質向上」と「DeNA エンジニアの開発生産性向上」のために、これまで SWET で事業部と取り組んできた事例を紹介します。
開発者テストのボトルネックの解決
プロダクトの開発において、責務分割が不十分なアーキテクチャで開発を進めてしまった・時間や経験がなくテストが書けなかったというように、プロダクトを安定してリリースしていくのに必要なものが不足しているという状態になることがあります。
自動テストがない・自動テストを効率的にかけないアーキテクチャになっているサービスに対して、テストを導入していくことには熟練の経験が必要です。SWET チームは、様々なプロジェクトで、プロダクトのコードのアーキテクチャを改善し、安心して素早く機能追加ができるような自動テストを書けるようにしていきます。
一例ですが、新しい内製ゲームフレームワークを初めて採用したゲームタイトルおよびそのゲームフレームワークにおいて、まずはじめに外部から見える挙動が変わらないことを保証するテストを書き、リファクタリングできる状態にしました。その後、内部のアーキテクチャを改善していくことで、テスタビリティを向上し、テストを量産できるようにしてきました。
さらに、ゲーム特有の様々なデータが複雑に絡み合って動作するというゲーム特有の事情に対して、テストデータ生成ツールやシナリオテストの作成自動化ツールを開発し、エンジニアが開発のスピードを最大化するような環境を整備しています。
自動テストの適用範囲の拡大
開発者によるユニットテストが充実してきても、大規模サービスではそれだけでは安定したリリースをし続けることは困難です。SWET はあらゆる自動テストに精通しており、プロダクトの問題点を市場障害や開発・検証時のバグチケット等から見つけ出し、プロダクトごとに最適な自動テストを提案できます。
例えば、見た目に関する開発中の問題が多いようなプロダクトに対して、見た目に対するテストを導入していきました。見た目に対するテストを効率的に実施するためのアーキテクチャ改善やテストライブラリの整備を行い、安定して見た目のテストを量産できるようにしました。さらには、開発チーム以外が抱える課題であっても、必要に応じてそれらのテスト結果を活用するよう提案しています。その結果、翻訳チェックにおけるスクリーンショットの活用など、より広い用途で使われるようになりました。
その他にも、ライブコミュニケーションアプリ Pococha のスマートフォンアプリの負荷の問題に対して、継続的にパフォーマンステストを行う仕組みを構築しました。そして、QA 時に必ずパフォーマンスに関する KPI を測定し、リグレッションが発生しないようにしていく開発体制を事業部と構築しています。
Unityを用いたゲーム開発においては、社内フレームワークなど低レイヤのユニットテスト、マスターデータとアセット(グラフィックスやサウンド)との結合テスト、キャプチャ&リプレイによるシナリオテストとモンキーテストを組み合わせられるテストフレームワーク、また、Roslynアナライザーによる静的解析の導入などを進めています。
形式仕様記述を使用して仕様の欠陥を早く見つける挑戦
プロジェクトの運用を続けていくと不具合のうち仕様起因の欠陥の占める割合が大きくなります。たとえばアプリゲームでは、新キャラクターの追加や新技の追加等、短期的継続的に仕様が追加されていきます。そのため運用を続けていくと、過去の仕様との不整合といった仕様の不備が起きやすくなります。また、混入された不備は後の工程で見つかるほど、それを解決するための労力が大きいということが知られています。SWET では形式仕様記述を応用して仕様の不備をなるべく早く見つけるための取り組みをしています。
具体的には、形式化された仕様を書くことで仕様の曖昧な点や矛盾等を見つけたり、自動的な探索をすることで仕様が意図しない状態になっていないか検査したりして、仕様作成フェーズの段階で仕様の問題点を発見します。さらには形式化された仕様をもとに、プログラムを生成したり、仕様と実装の間のリファインメント検証をしたりと、技術の開発にも取り組み問題解決の可能性を探るチャレンジをしています。
-
仕様記述テクニック「Promotion」の紹介
(ブログ記事)
- 形式仕様記述のPromotionというテクニックについて解説しています。
-
時間を加味したモデリング
(ブログ記事)
- ドメインに出てくる要素をモデリングすることは、仕様に潜む欠陥を開発の早い段階でみつけるための有効な手段のひとつです。この記事では時間経過とともに状態が変わるような振る舞いをどうモデリングしたかを紹介しています。
プロジェクトの健康状態の可視化と予防の推進
これまで紹介してきたような事業部との取り組みを通じて、次の課題があることが分かりました。
- 品質やテストにおける課題が大きくなってからサポートに入ることが多く、課題解決が難しく時間がかかってしまうケースが多い
- あるプロジェクトで発生している課題が別のプロジェクトでも発生していることがあるが、SWETが密にサポートできるプロジェクトは限られている
そこで、プロジェクトの健康状態とも言える各種メトリクスを可視化・分析することで品質状況やプロジェクトの状態を判断する取り組みを始めました。 メトリクスとなるデータは様々ですが現状ではGithubやJIRA、CI/CDサービスのデータなどが有力だと考えています。プロジェクトの状態を定量的に横並びに判断可能にすることで、課題が大きくなる前に有効なアクションを行うことが可能になることを目指します。
技術スタック
SWET では事業部のプロダクトに対してテストを導入していくので、SWET で重視している技術は DeNA で利用している技術になります。
現在、iOS・Android・Unity およびそれらの CI/CD に関する高い専門性を有したメンバーが多く在籍しております。
また、技術領域もテストだけではなく、静的解析やスキーマからのコード生成機といったプロダクトの周辺ツールの開発も行っています。
チーム構成
SWET チームは、事業部に深く入り込んでサービスの品質や生産性の改善するような働き方をしているメンバーと、全社横断的な施策としてテスト文化の醸成や品質改善のための仕組みを作るような働き方をしているメンバーがいます。 事業部とプロジェクトを進める場合には、必要に応じて事業部の兼務をつけ、SWET としての成果に加え、サービスの成長への貢献に関してもしっかり評価できるような体制を構築しています。
また、メンバーが関わるプロジェクトは全社の様々な領域に分かれていますが、できる限り縦割りやサイロ化されないようにグループとして様々な工夫をしています。 例えば、グループの定例では、他のメンバーが関わっているプロダクトのテスト戦略や方針に関し、それぞれの立場からいろいろなインプットをし合えるような関係が築けています。
このように、SWET には幅広い専門領域それぞれに、品質や生産性を向上させるための技術を深く極めたい・それによりプロダクトやサービスを良くしていきたいスペシャリストが多く在籍しており、グループ一丸となって全社の品質に関する課題に立ち向かっています。