Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ANDPAD TechLive #2 SETチームでの品質向上の取り組み
Search
ANDPAD inc
February 25, 2021
Programming
0
2.1k
ANDPAD TechLive #2 SETチームでの品質向上の取り組み
2021/02/24 ANDPAD TechLive #2 Flutterって実際どうなの?設計からテストまで
ANDPAD inc
February 25, 2021
Tweet
Share
More Decks by ANDPAD inc
See All by ANDPAD inc
本編では話さない Zig の話
andpad
2
160
"noncopyable types" の使いどころについて考えてみた
andpad
0
260
ANDPAD黒板のオフラインモード機能 リリースまでの軌跡
andpad
0
120
アンドパッドのマルチプロダクト戦略を支える SRE
andpad
1
140
Introduction of Cybersecurity with OSS (RDRC2024)
andpad
1
33
開発チームとともに進めるインフラセキュリティの継続的な改善
andpad
2
68
ANDPAD and Ruby
andpad
1
560
Modular semantic actions
andpad
0
120
about #67401 //go:linkname
andpad
3
22k
Other Decks in Programming
See All in Programming
Make Impossible States Impossibleを 意識してReactのPropsを設計しよう
ikumatadokoro
0
210
Snowflake x dbtで作るセキュアでアジャイルなデータ基盤
tsoshiro
2
520
どうして僕の作ったクラスが手続き型と言われなきゃいけないんですか
akikogoto
1
120
距離関数を極める! / SESSIONS 2024
gam0022
0
280
A Journey of Contribution and Collaboration in Open Source
ivargrimstad
0
950
Amazon Qを使ってIaCを触ろう!
maruto
0
410
レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy
suzukihoge
14
2.2k
ふかぼれ!CSSセレクターモジュール / Fukabore! CSS Selectors Module
petamoriken
0
150
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
100
ペアーズにおけるAmazon Bedrockを⽤いた障害対応⽀援 ⽣成AIツールの導⼊事例 @ 20241115配信AWSウェビナー登壇
fukubaka0825
6
2k
初めてDefinitelyTypedにPRを出した話
syumai
0
420
Ethereum_.pdf
nekomatu
0
460
Featured
See All Featured
Bash Introduction
62gerente
608
210k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
How to Ace a Technical Interview
jacobian
276
23k
Become a Pro
speakerdeck
PRO
25
5k
Designing the Hi-DPI Web
ddemaree
280
34k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.3k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Transcript
SET チームでの品質向上の取り組み ANDPAD TechLive #2 test
⾃⼰紹介 伊藤 智⾏ (@tmyk110) 組み込みエンジニア → モバイルアプリエンジニア 会社員 → フリーランス
→ 会社員 静岡県浜松市出⾝、CDO ⼭下と故郷が近かった事もあり親近感が⼊社の後押しに test
アンドバッドでのお仕事 アプリチーム ↓↑ 検査チーム ↓ SET アプリチーム(イマココ ) test
お詫び 今回のテーマがFlutter ということで、過去にも発表しています。 React Native 経験者がFlutter をさわってみた Flutter アプリをテストして、カバレッジを⾒える化する ネイティブとクロスプラットフォームが混在するアンドパッド
のアプリ開発 。。。が今回は「SET 」の話しになります。 (ご了承のほどよろしくお願いします ) test
アジェンダ SET アプリチームができるまで SET アプリチームの紹介 テストカバレッジ向上の取り組み 品質の⾒える化の取り組み SET チームで学んだこと、これから test
アジェンダ SET アプリチームができるまで SET アプリチームの紹介 テストカバレッジ向上の取り組み 品質の⾒える化の取り組み SET チームで学んだこと、これから test
SET アプリチームができるまで なぜ SET アプリチームを作ることになったか テストがないことに不安の声があった 機能開発以外の改善活動をする余⼒がなかった QA コストを抑えたい思いがあった test
SET アプリチームができるまで これまで⾏っていた品質に対する活動 定期的な社内勉強会 社内でテスト勉強会を始めてみた テスト勉強会第2弾「テストを知ろう」 テスト勉強会第5 弾「⾃動テストの基礎」 ユニットテスト作成のハンズオン 業務としてE2E
テストの⾃動化 test
SET アプリチームができるまで 継続が難しい プロダクト開発と兼務のため忙しくいときにできない メンバーによって品質意識の差 テストを書く書かないの判断 リファクタリング優先したい 対策に対する改善効果の理解 → 改めて専任チーム作ることに
test
アジェンダ SET アプリチームができるまで SET アプリチームの紹介 テストカバレッジ向上の取り組み 品質の⾒える化の取り組み SET チームで学んだこと、これから test
SET アプリチームの紹介 SET のおさらい Software Engineer in Test の略 Google
が提唱 https://testing.googleblog.com/2011/02/how-google-tests-software-part-two.html 最近ではSET エンジニアとしての求⼈もよく⽬にします test
SET アプリチームの紹介 ANDPAD の SET SET Rails SET アプリ ミッション
テクノロジーの⼒で品質にコミットし、全てのエンジニアが挑戦的な施策を安⼼して リリースできる仕組みを作る。 test
SET アプリチームの紹介 メンバー紹介 主にiOS エンジニア 1 名 ( 私) →
テストコードはあまり書いてきてない 主にAndroid エンジニア 1 名 → テストコードは結構書いてきた test
SET アプリチームの紹介 顧問の紹介 平⽥ 敏之さん(@tarappo) DeNA SWET グループ iOS テスト全書
Android テスト全書 定期的に相談会を開いてアドバイスをもらっています test
SET アプリチームの紹介 チーム運営 スクラム(2 ⼈だけれど) 1 週間スプリント プランニング、リファインメント、レトロスペクティブ Jira で課題を管理
Jamboard で振り返り test
アジェンダ SET アプリチームができるまで SET アプリチームの紹介 テストカバレッジ向上の取り組み 品質の⾒える化の取り組み SET チームで学んだこと、これから test
テストカバレッジ向上の取り組み ユニットテストのカバレッジ 30% を⽬指す ⾃分達のテスト技術を⾼める テスト追加のみであればプロダクトへの影響を与えない → 独⽴してできる 既存のテストがあることで、機能追加時のテスト作成の負担を減らす 30%
という数値が出るとテストへの意識も変わるのではという期待感 test
テストカバレッジ向上の取り組み テスト作成の進め⽅ ANDPAD の5 種類のアプリからユーザーが多いのが本体、チャット 開始時点でカバレッジが⾼かったのがチャットiOS アプリ フロー効率を重視し、規模の⼩さいところから 確実に⽬標達成して⼿応えが欲しい ViewModel
やロジックが実装されているコード( ⾮UI) を中⼼に test
テストカバレッジ向上の取り組み テストコードの書き⽅:パターン AAA(Act 、Arrange 、Assert) 、Four Phase Test 、Given-When-Then func
testAdd() { // Arrange let calculator = Calculator() // Act result = calculator.add(2,3) // Assert XCTAssertEqual(result, 5) } test
テストカバレッジ向上の取り組み テストコードの書き⽅:モック化 iOS → Cuckoo 、Mockolo 、Android → Mockito 、MockK
func testFetch() { let mockRepository = MockUserRepository() stub(mockRepository) { when($0.getUser() .thenReturn(User(name: "taro")) } let userViewmodel = UserViewModel(mockRepository) let user = userViewmodel.fetch() // この中でrepostitory がgetUser を⾏う } test
テストカバレッジ向上の取り組み テストコードの書き⽅: Rx や LiveData の対応 iOS の場合 // RxTest
let scheduler = TestScheduler(initialClock: 0) scheduler.scheduleAt(10) { self.viewModel.hoge() } scheduler.start() // RxBlocking let data = try! self.viewModel.hoge().toBlocking().first() test
テストカバレッジ向上の取り組み テストコードの書き⽅: Rx や LiveData の対応 Android の場合 class FetchProfileTest
{ // Rx を使っている場合 @get:Rule val rxTestRule = RxTestRule() // LiveData を使っている場合 @get:Rule var instantTaskExecutorRule = InstantTaskExecutorRule() } test
テストカバレッジ向上の取り組み 現在の実績 App ProductLines TestLines Coverage TestFiles チャットiOS 16k 12k
30% (9%) 31 チャットAndroid 26k 4k 9% (2%) 29 ※ cloc によるコード⾏数の計測 ※ Coverage の() 内は取り組み前の数字 test
テストカバレッジ向上の取り組み 作成したテストのカバレッジの確認 実⾏時にIDE 上で、PR のコメントで、Codecov のサイト上で test
テストカバレッジ向上の取り組み カバレッジの変化によるモチベーションアップ Codecov の折れ線、サンバーストグラフ、1 週間の実績 test
テストカバレッジ向上の取り組み 苦労した点 RxTest → TestScheduler クラスの使い⽅を平⽥さんに教わったり Firebase Emulator → 複雑な処理をすると動作不安定になったり
test
アジェンダ SET アプリチームができるまで SET アプリチームの紹介 テストカバレッジ向上の取り組み 品質の⾒える化の取り組み SET チームで学んだこと、これから test
品質の⾒える化の取り組み できることを広げるために 平⽥さんに相談 何が課題になっているか⾒えないと適切な対策を打てない SWET チームでの取り組みを参考に → 不具合分析 (Jira など
) 、 CI や Github の分析、コードの静的解析などをやってみる test
品質の⾒える化の取り組み システム構成例 定期的にCI の実⾏結果の分析を⾏い、グラフや通知で確認する test
品質の⾒える化の取り組み 成果物:グラフ 未使⽤コードの件数、CI ビルド時間 test
品質の⾒える化の取り組み 成果物:通知 カバレッジ向上率、未使⽤コードの件数、CI ビルド時間 test
品質の⾒える化の取り組み 取り組みは続く 不具合分析 → ポストモーテム、Jira のバグチケットなど CodeClimate → コードの複雑さを可視化、改善による効果の共有 test
アジェンダ SET アプリチームができるまで SET アプリチームの紹介 テストカバレッジ向上の取り組み 品質の⾒える化の取り組み SET チームで学んだこと、これから test
SET チームで学んだこと、これから SET は QA 、プロダクト開発と共に テスト計画のプロ(QA エンジニア) のもとでテスト⾃動化に貢献する E2E
テストでやるか単体テストでやるか、⼿動でやるか、⾃動でやるか ⾃動化する部分に対して技術⼒を発揮していく test
SET チームで学んだこと、これから SET は QA 、プロダクト開発と共に 機能開発に忙しいプロダクト開発エンジニアの、⼿の届かない課題を解決する 更新されないライブラリ、消えないビルドワーニング、実⾏されないコード 定期的に負債を返却する仕組み作り、時にはマンパワーの提供 test
SET チームで学んだこと、これから 今後について 今ままでできていなかったプロダクト開発との関わりを積極的にしていく さらなる品質の⾒える化の推進に挑戦 (CodeClimate 、SwiftInfo 、etc) 負債の返却、クリーンコードの実現、保持する仕組みの構築 パフォーマンス計測、エラー検知の仕組み作り
E2E テスト⾃動化の推進 XCUITest 、Espresso or MagicPod 、Autify test
ありがとうございました! SET アプリチームでは、コード品質や⽣産性の向上を ⼀緒に取り組んでくれる仲間を募集しています。 是⾮ともご応募ください https://hrmos.co/pages/andpad/jobs/0000098 test