こんにちは。LINE Plus Platform Engineering, Software Engineer in Test(SET) チームのMoses Kimです。
2018年10月18日から19日まで、LINEの新宿ミライナタワーオフィスでTest Automation Workshop 2018を開催しました。LINEグループ内のテスト自動化を担当するメンバーが集まり、さまざまな事例やアイディアを共有するこのイベントについて簡単にお伝えします。
LINEグループのテスト自動化チームは、「Closing the distance between development and test」というミッションを掲げて活動しています。さまざまなテストを自動化し開発環境を改善することで、LINEグループがユーザーに提供するサービスの品質を向上させ、開発者がより良い価値を作り出すことに集中できるようにしています。Test Automation Workshop(以下TAW)は、こうした事例やアイディアを共有するために2017年6月からLINEグループの各国のオフィスで開催しています。
- 2017年6月 - LINE Taiwan office
- 2018年1月 - LINE Fukuoka office
- 2018年10月 - LINE Tokyo office
Grow with Test Automation
LINEでは、LINEメッセンジャーを中心に、さまざまな国でビジネスを展開しています。そのため、開発手法はもちろんテスト手法も非常に多様化しています。LINEのテスト自動化チームが集まった今回のTAWでは、各国のオフィスにあるテストチームや自動化チームだけでなく開発チームまで一緒に成長できる知識を得ることができました。
3回目を迎える今回のTAWでは、「Grow with Test Automation」というスローガンのもとに以下のような行動規範を定めました。
- 私たちは、テスト自動化を行うことで自ら成長します。
- 私たちは、経験と知識を適切な方法で共有することで、お互いを理解し、励ましあいながら、共に困難に挑戦します。
- 私たちは、技術の面だけでなくプロセスの面でも、視野を広げます。
Here are some numbers regarding the workshop.
- 日付: 2018/10/18(木曜日)~2018/10/19(金曜日)
- セッション数: 10
- 参加人数: 42名
- 韓国:10名
- 台湾:10名
- 日本(福岡):7名
- 日本(東京):7名
- タイ:3名
- ベトナム(ハノイ):5名
Sessions
今回のTAWは、下記のようなセッションが用意されました。計10のセッションが2日間にかけて行われましたが、すべてのセッションの内容が充実しており、本当に多くの知識を共有できました。
DAY | タイトル | 発表者 | オフィス |
---|---|---|---|
1 | Ayaperf: New Performance Testing Framework for Microservices | Ryo Ikeda | 日本(東京) |
How QA Improves Development Velocity | Krittidech Pomuang, Auttaporn Tantipichainkun | タイ | |
Introduction of Test Automation Sessions at STAREAST | Akari Ikenoue | 日本(東京) | |
Test Automation using Cypress | Pei-Yun Lee, Miki Liao | 台湾 | |
QA in Agile with Android and iOS Native Test Frameworks | Kuan-Wei Lin | 台湾 | |
Effective Code Review & Metrics | Po-Feng Liu | 台湾 | |
The Growth of Test Automation in LINE Tech Vietnam | Mai Hanh, Huong Trang | ベトナム (ハノイ) | |
2 | Saving Release Master: Deployment Process Automation | Moses Kim | 韓国 |
Database Testing | Pham Thi Mai, Le Thi Thoa | ベトナム (ハノイ) | |
Test Multiple Devices with JUnit 5 | Yuhao Chang | 日本(福岡) |
Day 1
初日は、計7つのセッションが行われました。すべてのセッションは英語で発表されました。準備した内容を発表するだけでなく、さまざまな質疑応答も行われました。ちょうどいい規模のワークショップで楽しい時間を過ごしました。また、あまり知らなかった各国のオフィスでの活動について知ることができました。
Ayaperf: New performance testing framework for microservices
発表者のRyotaro Ikedaさん(GitHub, twitter)は、LINEのテストTF(Task Force)でソフトウェアエンジニアをしています。Ikedaさんは、Ayaperfを紹介しました。Ayaperfは、マイクロサービスの効果的な負荷・性能テスト(load/performance testing)を行える社内向け独自開発フレームワークです。JUnitに似た負荷テストフレームワークと、Kubernetesの分散フレームワークを組み合わせて開発されました。負荷テストのシナリオは、JUnitテストと同様の形で作成でき、ローカル環境はもちろんリモート環境でも実行できます。テストシナリオを含むテストクライアントは、Kubernetesクラスターで配布されています。テスト対象サービスに対して、クライアント数に制限なく、必要な負荷を簡単にかけることができます。テストの結果は、Prometheus Podに収集されGrafanaに表示されます。
How QA improves development velocity
発表者のKrittidech PomuangさんとAutuaporn Tantipichainkunさんは、LINE ThailandのQuality Managementチームに所属しています。PomuangさんとTantipichainkunさんは、開発プロセスのスピードを向上させたQAプロセスについて紹介しました。開発プロセスを遅延させる4つの要素「リソース不足」、「非効率なリリースプロセス」、「コミュニケーション問題」、「技術負債」を改善しました。テストの実行に必要なデータを効率よく確保するためにfaker.jsを採用しました。さらに、UIテストを効果的に利用できるように、コードやテストスクリプトの構造を変更しました。このような改善を重ねることで、テストの実行にかかる時間を25%以上短縮できました。テストを以前より早く実行できるようになったために、スプリント内で時間を確保でき、その時間を使って、開発者とQAメンバーの間で充実したミーティングを行えるようになりました。
Introduction of Test Automation Sessions at STAREAST
Ikenoueさんは、2018年4月に開催されたSTAREASTに参加して得られた見識をセッションで紹介しました。今回のSTAREASTでは、AI(Artificial Intelligence、人工知能)に関するセッションが、全体の12.7%を占めるほど、AIについて関心が高まっていました(STARTEAST 2017では0%)。テスト業務におけるAIの活用方法、特にテストの自動化におけるAIの影響について、さまざまな視点を得ることができたそうです。とりわけ、SeleniumやAppiumなどのテスト自動化フレームワークが、AIのひとつである機械学習(Machine Learning、ML)を活用することで、大きな問題点をある程度解決できたことが印象深かったと話しました。ここでいう大きな問題点とは、テスト自動化フレームワークが持っていた以下の4つです。
- テストコードを作成する必要がある
- UI要素を識別する必要がある
- テスト手順を指定する必要がある
- 再利用が難しい
Test Automation using Cypress
Pei-Yun LeeさんとMiki Liaoさんは、Cypressを活用したテスト自動化の事例を紹介しました。従来のテスト自動化で困っていた、開発初期の設定、実行時間の増加、テストスクリプトの作成、およびメンテナンスの困難さを、Cypressを活用することで解決しました。限られた時間とリソースを活用できる効果的なテストハーネス(test harness)を、Cypressによって構成できました。Cypressは、Web UIのEnd to End(E2E)テストフレームワークで、テストをJavaScriptで記述します。Cypressの特徴は、Seleniumに頼らず、MochaやChaiなどを利用して、assertionをより簡潔に作成できることです。Cypressを活用して、ネットワークトラフィックをコントロールしたり、APIテストをより効果的に行ったりしています。
QA in Agile with Android and iOS Native Test Frameworks
発表者のKuan-Wei Linさん(GitHub, twitter)は、LINE TaiwanのQAチームに所属しています。
Kuan-Wei Linさんは、モバイル向けのネイティブテストフレームワーク(AndroidはEspresso、iOSはXCTest)を活用して、テストの効率および信頼性を改善した事例を紹介しました。GoogleやAppleが提供するモバイル向けのネイティブテストフレームワークは、サードパーティが提供するテストフレームワークに比べ、大きなメリットがあります。そのメリットとは、テストの実行スピードが非常に速く、開発フレームワークと完璧に統合されているため信頼性が高いことです。発表者は、これらのフレームワークを活用してテストの効率や信頼性を高め、それにより確保できたリソースを活用し探索的テスト(exploratory testing)を実行することでサービスの品質を向上させました。また、テストの実行結果から入手できるコードカバレッジ情報を活用して、より多くの回帰(regression)テストの対象を発見できました。
Effective code review & metrics
Po-Feng Liuさんは、公開ダッシュボード(public dashboard)やプルリクエスト(pull request)を活用して、コードの品質に関する情報を誰が見ても分かるようにすることで、品質を向上させた事例を紹介しました。
「測定できないものは改善できない(you can not measure it, you can not improve it)」という名言は、今も広く知られています。開発の成果物または開発過程で何かを向上させる必要があるとき、頭に浮かぶ言葉の1つは「コード品質」になるでしょう。しかし、「コード品質」が向上したことを、どのような基準で判断するかについては、首をかしげることが多くなります。発表者は、静的分析プラットフォームのソナーキューブ(SonarQube)を活用し、あらかじめ決定した指標を、公開ダッシュボードやプルリクエストに表示することで、継続的かつ即時的にコードの品質に関する情報を誰が見てもわかるようにしました。また、コードのコミットメッセージ用のテンプレートを提供することで、コードレビュアーがより簡単にコードを理解し、レビューできるようになりました。
The growth of test automation in LINE Tech Vietnam
Mai HanhさんとHuong Trangさんは、テストフレームワークを改善するために、Creativeフレームワークを開発した事例を紹介しました。テスト自動化の初期段階で使っていたテストフレームワークのデメリットを克服するために、新しくCreativeフレームワークを開発しました。そして、次のようなメリットを得ました。
- Excelなどのプラグインを利用することで、入力データと出力データを、テストスクリプトと別々に記述できる
- QAメンバーは、テストケースを作成することに集中できる
- TestClassからSeleniumやAppiumドライバに直接アクセスできる
- Androidのネイティブアプリはもちろん、PCで動作するWebブラウザや、AndroidのWebViewもテストできる
特に、テストデータを、テストスクリプトと別々に記述できるようになったことで、より効率的にテストケースを作成できました。この新しいテストフレームワークは、LINEから提供するさまざまなボット(bot)テストに適用する予定です。
Day 2
2日目の午前中は、以下の計3つのセッションが行われました。
- Saving Release Master: Deployment Process Automation - Moses Kim | 韓国
- Database Testing - Pham Thi Mai & Le Thi Thoa | ベトナム(ハノイ)
- Test Multiple Devices with JUnit 5 - Chang Yuhao | 日本(福岡)
Saving Release Master: Deployment Process Automation
私(Moses Kim)は、LINE PlusのSETチームに所属しています。
私は、Androidアプリのビルド後のリリースプロセスを改善した事例を紹介しました。Software Engineer in Testチームは、テスト自動化業務とともに開発インフラの改善業務も行っています。Androidアプリのベータ版やリリース版をビルドする際、apkファイルに加えて、シンボリケーション(symbolication)ファイルおよびデオブファスケーション(deobfuscation)ファイルを、エラー分析システムやGoogle Playストアに自動的にリリースするようプロセスを改善しました。それにより、シンボリケーション、デオブファスケーション情報の抜け漏れを防止し、アプリをリリースする際の制約を減らすことができました。NAVERとLINEグループで使用しているエラー分析システムのnelo2が提供しているNelo2 Open API、Google Playストアが提供しているGoogle Play Developer Publishing API、Mavenリポジトリを活用しました。
Database Testing
Pham Thi MaiさんとLe Thi Thoaさんは、データベーステストの事例を紹介しました。
データの完全性などを検証するためにデータベース外部からテストを実行するのではなく、データベースデザインのレビュー、データベースクエリのレビューなどの観点からテストを実行することが印象的な事例です。データベースの設計の際、見逃しやすい制約事項をDatabase Administrator(DBA)やQAピアレビューで補い、CRUDに使うSQLクエリをより効率よく改善できるように開発者とQAメンバーが協業する形で業務を進めました。開発初期からデザインやクエリのレビューを行うことで、データ性能の低下を早期に防ぎ、開発後期のバグ発生やそれによる無駄な費用を減らすことを期待しました。また、この過程で得た結果は、ルールとして確立し、その後の開発過程でも活用しました。
Test multiple devices with JUnit 5
Yuhao Changさんは、LINE FukuokaのTest Automationチームに所属しています。
Yuhao Changさんは、JUnit 5を活用したテストドライバ・マネージャーの改善事例を共有しました。JUnit 4、Appium、Seleniumを組み合わせて構成していた従来のテストドライバ・マネージャーを、JUnit 5ベースに変更しました。VintageとJupiter APIを利用することでJUnit 4ベースのテストケースを再利用できただけでなく、JUnit 5ベースのテストケースのメリットをすべて得られるようになりました。さまざまなデバイスを対象にした場合は、JUnit 5から新たに提供されたextension model、parameter resolver、custom tagなどを活用してテストの自由度を確保する方法も紹介されました。
おわりに
LINEグループの各オフィスの多くの事例を十分に共有するには、2日間という時間は少し短い感じがしました。それでも各国のオフィスからメンバーが集まり、楽しい雰囲気の中でお互いの興味や悩み、アイディアを分かち合える貴重な時間だったと思います。テスト自動化は依然として未知の世界で、「完璧に成功した」と自信を持って言える事例はなかなか見つかりません。さらに、LINEグループ内に限ったとしても各国のオフィスで開発し提供するサービスの性格が異なるため、同じ方法をお互いの業務にそのまま適用することは容易ではありません。テスト自動化は、開発プロセス、開発文化の中に当たり前のように導入されるべきで、そうなってこそtestableな製品やサービスを作り上げることができると思います。
Grow with Test Automation & Closing Distance between Development and Test.
私たちは道を見つけます。いつもそうしてきたように。