Slide 1

Slide 1 text

update Copyright © 2021 WingArc1st Inc. All Rights Reserved. December 17, 2021 開発エンジニアとQAエンジニアが語る夜(Datalizer編) ~僕がいちばんDatalizerをうまく使えるんだ!~

Slide 2

Slide 2 text

page No. 2 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 01 自動テスト構築までの道のり 02 Datalizerの自動テスト 03 開発プロセス 04 質問タイム INDEX

Slide 3

Slide 3 text

Copyright © 2021 WingArc1st Inc. All Rights Reserved. 自動テスト構築までの道のり

Slide 4

Slide 4 text

page No. 4 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Dr.Sum Datalizerの歩み 2001 2006 2012 2017 2021 Excel Addin Web版 Datalizer誕生 順調に売り上げを伸ばし 要望を取り込み、どんどん機能を増やしていく Ver.4.0 Ver.5.0 Cloudサービス for Excel for Web

Slide 5

Slide 5 text

page No. 5 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 開発の進捗が遅滞していき、プロセスが段々回らなくなる • 当初スピード感のあった開発も • ソースの肥大化などにより見晴らしが悪化 • 他の機能に影響しやすくなる • 機能を追加する度に組み合わせが増えていき複雑に Ver.4.0~ 2012年頃から (´・ω・`) デグレードリスク増大

Slide 6

Slide 6 text

page No. 6 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 開発スピードを下げずに、品質を担保する やりたいこと  テストを即座に実行できる  テスト・アセットの作成が容易である  大量かつ高速にテストが出来る  テストを即座に実行できる  テスト・アセットの作成が容易である  大量かつ高速にテストが出来る 集計表(レポート)のオブジェクトを比較すればいける? 保存した オブジェクト 保存した オブジェクト 実行した オブジェクト =

Slide 7

Slide 7 text

page No. 7 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 結果 無理でした

Slide 8

Slide 8 text

page No. 8 Copyright © 2021 WingArc1st Inc. All Rights Reserved. オブジェクトでは、集計表の色や配置など詳細な属性を持っている反面 ×少しの修正で直ぐにdiffが発生する ×テスト・アセットの妥当性の検証にコストがかかる(視認性の問題) ×diffが遅い。オブジェクトサイズやXMLの比較。 反省と再出発  1つの自動テストですべてをカバーするのは、そもそも無理がある  製品にとって一番大事なことは集計表の数値やレイアウト 集計表をCSV形式で出力しdiffする方式に変更

Slide 9

Slide 9 text

page No. 9 Copyright © 2021 WingArc1st Inc. All Rights Reserved. CSV比較の自動化テストの成功(パラメータテスト) 保存した (正しい結果) CSV 保存した (正しい結果) CSV 実行結果の CSV =  オブジェクトと違い基本diffはでない。diff出てたらテストNG。  可読性が高い。差異の箇所がdiffツールなどで簡単に分かる。  テスト・アセットのメンテナンスが容易。 機能追加などによりdiffが出た場合でも、保存したCSVを実行結果のCSVに置き換えるだけ。  テスト実行が早い。1実行で数百ミリ秒、多重化も容易。 開発、QA合同でテスト・アセットを作成していく

Slide 10

Slide 10 text

page No. 10 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 実感した最大の効果 リグレッションテストが、いつでも行えるという安心感 リファクタリングを積極的に行う意識改革

Slide 11

Slide 11 text

page No. 11 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 学んだこと • デメリットばかりに着目しない。目的を達成できるかを優先。 • 初めから100点を目指さない。小さく入れて大きく育てる。 • 失敗は当たり前、トライ&エラーで進めていく。

Slide 12

Slide 12 text

page No. 12 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 2017年 Ver.5.0~ 自動テストの拡充 QA部門と協同し、さらなる自動テストのエリアを拡大 Ver.5.0の2つのチャレンジ • Excel UIのリコーディング:過去の互換性を担保するためにテストの整備が急務 • Web UIの刷新: Ver.4.2より自動化を一部試行していたが新UI層からのテスト自動化を整備 パラメータテスト (随時拡張) Web 新UIでの テスト数の拡大 ExcelUIリコーディング Excel操作テスト Excel UIリコーディング Unitテスト Seleniumベース E2E Tests API Tests, Integration Test Unit Tests

Slide 13

Slide 13 text

page No. 13 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 開発もQAも開発しテストする プロダクトの品質確保・向上させる思いは、開発もQAも同じ。 お互いの得意分野で貢献する。 開発 •ユニットテスト作成 •Excel リボン操作開発 •パラメータテスト強化 •テスト・アセット作成 •手動テスト QA •Web UIテスト開発 •Excel 自動テスト開発 •テスト・アセット作成 •手動テスト

Slide 14

Slide 14 text

Copyright © 2021 WingArc1st Inc. All Rights Reserved. Datalizerの自動テスト

Slide 15

Slide 15 text

page No. 15 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Web Excel UI API Server Datalizerの構成と自動テスト Windows/Linux OS Datalizer 製品連携用 API Tablet PDF出力 tomcat Client アプリ Selenium :26,645ケース(4,280シナリオ) Excel速度評価 :46ケース ブラウザ描画 :138ケース Excel UnitTest :1,728ケース、3,621定義 パラメータテスト :3,835ケース 製品連携用APIテスト:1,033ケース JMeter非機能検証 :498ケース 構成 自動テスト 集計実行 API

Slide 16

Slide 16 text

Copyright © 2021 WingArc1st Inc. All Rights Reserved. 1. パラメータテスト Copyright © 2021 WingArc1st Inc. All Rights Reserved. Web Excel UI API Server Datalizer 製品連携用 API Tablet PDF出力 Client アプリ Selenium :26,645ケース(4,280シナリオ) Excel速度評価 :46ケース ブラウザ描画 :138ケース Excel UnitTest :1,728ケース、3,621定義 パラメータテスト :3,835ケース 製品連携用APIテスト:1,033ケース JMeter非機能検証 :498ケース 集計実行 API

Slide 17

Slide 17 text

page No. パラメータテスト 集計実行時に指定された パラメータのファイル 集計結果を比較 パラメータテストツール たくさんのケースを高速に!

Slide 18

Slide 18 text

page No. パラメータテストの比較対象 パラメータファイル 結果表の行列数 行列集計項目の値 アイコン、書式などの付加情報

Slide 19

Slide 19 text

page No. パラメータテスト実施方法 ①テスト対象バージョンを 指定してジョブ実行 ②指定されたバージョンの バイナリとテストをPULL ③パラメータテストを実行 ④パラメータテスト実行結果を Teamsに通知 ケース数 3,835 Jenkinsのノード数 1 並列数 8 実行時間 15分

Slide 20

Slide 20 text

Copyright © 2021 WingArc1st Inc. All Rights Reserved. 2. JMeter(素性能測定、多重性能測定、ロングランテスト) Copyright © 2021 WingArc1st Inc. All Rights Reserved. Web Excel UI API Server Datalizer 製品連携用 API Tablet PDF出力 Client アプリ Selenium :26,645ケース(4,280シナリオ) Excel速度評価 :46ケース ブラウザ描画 :138ケース Excel UnitTest :1,728ケース、3,621定義 パラメータテスト :3,835ケース 製品連携用APIテスト:1,033ケース JMeter非機能検証 :498ケース 集計実行 API

Slide 21

Slide 21 text

page No. JMeter(素性能測定、多重性能測定、ロングランテスト) 共通事項 • HTTP Requestを使って、集計リクエストを実行 • DBの処理を極小化するためにDB側はキャッシュを利用している 素性能測定 • 集計表サイズ、定義種類、集計方法毎の速度評価を実行 多重性能測定 • 素性能測定から一部の集計を抜粋して、並列数を1, 5, 10, 25, 50で実行 ロングランテスト • 多重性能測定の並列数50を無限ループで1週間連続実行 • GCログの設定を行い、ヒープのリークがないことを確認している

Slide 22

Slide 22 text

Copyright © 2021 WingArc1st Inc. All Rights Reserved. Datalizer for Web and Datalizer for Excel 3. E2E自動テスト Copyright © 2021 WingArc1st Inc. All Rights Reserved. Web Excel UI API Server Datalizer 製品連携用 API Tablet PDF出力 Client アプリ Selenium :26,645ケース(4,280シナリオ) Excel速度評価 :46ケース ブラウザ描画 :138ケース Excel UnitTest :1,728ケース、3,621定義 パラメータテスト :3,835ケース 製品連携用APIテスト:1,033ケース JMeter非機能検証 :498ケース 集計実行 API

Slide 23

Slide 23 text

page No. このようなスクリプトで

Slide 24

Slide 24 text

page No. 24 Copyright © 2021 WingArc1st Inc. All Rights Reserved. ExcelとWebを操作するテストツール

Slide 25

Slide 25 text

page No. 25 Copyright © 2021 WingArc1st Inc. All Rights Reserved. おもな技術要素 • ツールエンジン Java • ブラウザ操作 Selenium WebDriver • Excel操作 Appium +WinAppDriver

Slide 26

Slide 26 text

page No. 26 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 総テスト件数 ケースは全部で26,645件 10並列で実行して3日くらい 画面の操作は時間がかかる…

Slide 27

Slide 27 text

page No. 27 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 比較系 • Datalizer開発者が作った、必要なものだけ比較する高精度の比較 ツール Excelは オリジナル比較ツール • V4互換UIはスタイルの影響が大きいので数値とタグ主体の比較 • 標準UIは画面サイズでHTMLが変わるので範囲指定取得 HTMLは スクレイピング • 画像化して比較するツール PDFは SVFのツール

Slide 28

Slide 28 text

page No. 28 Copyright © 2021 WingArc1st Inc. All Rights Reserved. ネイティブUIとWebUI

Slide 29

Slide 29 text

page No. TestRunnerGrid hub browser nodes DB テスト対象 ①テストスクリプト取得 ②テスト実行指示 ③分散実行指示 アプリ更新 ④それぞれでテスト実行

Slide 30

Slide 30 text

page No. 30 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Grid前 Grid後

Slide 31

Slide 31 text

page No. 31 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 統合前 統合後

Slide 32

Slide 32 text

page No. 32 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 結果をDBにまとめたので多角的に分析できる 環境依存のあるスクリプトかもしれない? エラーになったスクリプトの実行履歴を 確認してエラーを起こしがちかどうかの 確認

Slide 33

Slide 33 text

page No. 33 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 仕組みを作ってから35708回のテスト実行がされていました

Slide 34

Slide 34 text

Copyright © 2021 WingArc1st Inc. All Rights Reserved. こまった集

Slide 35

Slide 35 text

page No. 35 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 集計表のスタイルが変わってた 荒れ狂う結果差異の嵐 Failed Failed Failed Failed Failed Failed Failed Failed Failed Failed

Slide 36

Slide 36 text

page No. 36 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 集計表のスタイルが変わってた 修正範囲をそこだけにしたビルドをもらって結果置き換えを行いました develop private/結果差異ブランチ

Slide 37

Slide 37 text

page No. 37 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 自動テストフレームワークの契約料金が高いから無料のに変えてほしい 遅くなった!アプリ落ちる!

Slide 38

Slide 38 text

page No. 38 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 自動テストフレームワークの契約料金が高いから無料のに変えてほしい 開発チーム&保守チームに協力してもらって直した 経験・知識の積み上げが全然違いました

Slide 39

Slide 39 text

page No. 39 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 結果表調整の修正をしたとき 開発チームとQAチームで全力

Slide 40

Slide 40 text

page No. 40 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 4. Excel自動テスト 4-1. Datalizer for Excelユニットテスト 4-2. ExcelPluginの自動テスト 4-3. Excel比較ツール Web Excel UI API Server Datalizer 製品連携用 API Tablet PDF出力 Client アプリ Selenium :26,645ケース(4,280シナリオ) Excel速度評価 :46ケース ブラウザ描画 :138ケース Excel UnitTest :1,728ケース、3,621定義 パラメータテスト :3,835ケース 製品連携用APIテスト:1,033ケース JMeter非機能検証 :498ケース 集計実行 API

Slide 41

Slide 41 text

Copyright © 2021 WingArc1st Inc. All Rights Reserved. 4-1. Datalizer for Excel ユニットテスト Copyright © 2021 WingArc1st Inc. All Rights Reserved. Web Excel UI API Server Datalizer 製品連携用 API Tablet PDF出力 Client アプリ Selenium :26,645ケース(シナリオ) Excel速度評価 :46ケース ブラウザ描画 :138ケース Excel UnitTest :1,728ケース、3,621定義 パラメータテスト :3,835ケース 製品連携用APIテスト:1,033ケース JMeter非機能検証 :498ケース 集計実行 API

Slide 42

Slide 42 text

page No. Datalizer for Excel のユニットテストの経緯① ■課題 ・10年以上も機能が継ぎ足しされてきた製品のため、ソースが複雑化し保守性 に問題があった。 ・Excel用ロジック、画面用ロジック、ビジネスロジックが3密になっており、 ユニットテスト化が難しかった。 ■状況 機能追加や修正による影響が読みにくく、テストは手動だった。 また、影響が読みにくい分、テスト範囲も広くなりがちだった。 このため、開発・検証コストが増えていく状態だった。

Slide 43

Slide 43 text

page No. Datalizer for Excel のユニットテストの経緯② 課題を解決するために Datalizer for Excel 5.0 のゴールは リコーディング・ユニットテスト・自動テストをセットで 行い「品質の担保」と「保守性の向上」を実現する と定めた。 ※これを達成して、積極的な機能追加を可能にしたかった。 結果として、リコーディング以降さまざまな機能追加ができた。 ・Datalizer 5.1 のExcelグラフ連携、Excelレポート機能 ・Datalizer 5.5 のTableEditor、MBデータソース連携 ・MBC と MBSF の Excelインターフェースオプション

Slide 44

Slide 44 text

page No. Datalizer for Excel のユニットテストのゴール QAと開発で協議して、ユニットテストのゴールは 画面のリコーディングによ る品質の担保として、以下の内容とした。 ・各操作をユニットテスト化して修正による影響を検知できること ・定義ファイルを読込・反映後、定義ファイルが変わっていないこと 定義ファイル 読込 定義ファイル 反映 差異 チェック

Slide 45

Slide 45 text

page No. 画面のリコーディングで保守性を担保するために 過去のソースにとらわれず、各画面の役割を意識して、Viewとビジネスロジッ クを分けるようにリコーディングを進めた。 ・MVVM( Model + View + ViewModel )のフレームワークを使用して、 Viewとビジネスロジックを分けて実装した。 →役割ごとにビジネスロジックが分けられ、各ロジックに対して ユニットテストができるようになった。 ・枯れていたUIフレームワークを使用 →複数の言語に依存しない画面開発ができるようになった。 →画面の役割が明確になり、各画面の部品化と再利用が進んだ。

Slide 46

Slide 46 text

page No. 特に苦労した点 QAの方々と協力し、さまざまな定義ファイルを集めた。 ・検証で使用しきた定義ファイル ・過去の不具合確認で使用した定義ファイル ・過去バージョンから移行テスト用の定義ファイル →定義ファイルの総数:3621個 これらの定義ファイルで、リコーディングした画面が従来と同じように定義 ファイルへ反映できるように確認・調整を進めた。 大変だったが、これがあったので過去のソースにとらわれず、リコーディング ができた。 定義ファイル 読込 定義ファイル 反映 差異 チェック 2000個以上の定義ファイル で差異が出たときは、つら かったです。

Slide 47

Slide 47 text

Copyright © 2021 WingArc1st Inc. All Rights Reserved. 4-2. ExcelPluginの自動テスト Web Excel UI API Server Datalizer 製品連携用 API Tablet PDF出力 Client アプリ Selenium :26,645ケース(4,280シナリオ) Excel速度評価 :46ケース ブラウザ描画 :138ケース Excel UnitTest :1,728ケース、3,621定義 パラメータテスト :3,835ケース 製品連携用APIテスト:1,033ケース JMeter非機能検証 :498ケース 集計実行 API

Slide 48

Slide 48 text

page No. Excel.exeを操作したい リボン部 アプリ部 シート部

Slide 49

Slide 49 text

page No. 49 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Excel.exeを操作したい • Accessibility Idは自由につけれないものの名前である程度操作できる リボン部 • 通常のWindowsアプリ同様にAccessibility Idを付けてもらえば楽に操作可能 アプリ部 • 行・列番号でのアクセスがかろうじて可能 シート部 行・列番号で書かれたテストなんて後で読めない

Slide 50

Slide 50 text

page No. Excel.exeを操作したい 開発者にテストインターフェースを作ってもらった すごく高機能! 高まる安定性!

Slide 51

Slide 51 text

page No. Excel.exeを操作したい 自動テストFW(有償) を推されて プロト作成 シート操作は無理 ExcelOperatorの発明 Excel本体の操作はすべてOperatorで できることに 自動テストFW(有償) が解約される .NET+UIAutomationで 操作するFWを作成 安定しなかった 開発、保守チームと連携 Java+WinAppDriverで再作成 シート操作などどうしても非効率な 部分は製品にテストIFを実装 現在に至る変遷

Slide 52

Slide 52 text

Copyright © 2021 WingArc1st Inc. All Rights Reserved. 4-3. Excel比較ツール Copyright © 2021 WingArc1st Inc. All Rights Reserved. Web Excel UI API Server Datalizer 製品連携用 API Tablet PDF出力 Client アプリ Selenium :26,645ケース(4,280ファイル) Excel速度評価 :46ケース ブラウザ描画 :138ケース Excel UnitTest :1,728ケース、3,621定義 パラメータテスト :3,835ケース 製品連携用APIテスト:1,033ケース JMeter非機能検証 :498ケース 集計実行 API

Slide 53

Slide 53 text

page No. Excel比較ツール 初期 中期 現在 セルの値だけ比較 値以外のセルやシートの 設定も比較 グラフの設定も比較 Datalizer for Excelのリコーディング Excel比較ツールを作成

Slide 54

Slide 54 text

page No. Excel比較 比較元のExcel セルの値が格納されているファイル 初期:Excelファイルを解凍して、セルの値が格納されているファイルを比較

Slide 55

Slide 55 text

page No. Excel比較 0 2,000 4,000 6,000 8,000 10,000 1 2 3 4 グラフ 3 系列1 系列2 系列3 現在:値以外のセルの設定やシート毎の設定、グラフの設定を比較 グラフの設定:21個 セルの設定:52 ワークブック、シートの設定:30個

Slide 56

Slide 56 text

page No. Excel比較処理のフロー ①指定フォルダ配下の Excelファイル比較 ②ファイル毎に並列で 比較処理実行 ③比較結果と差異検出した 内容をファイル出力 ④差異検出の有無を返す VBAで比較ロジックを実装 Excel比較実行ツール

Slide 57

Slide 57 text

Copyright © 2021 WingArc1st Inc. All Rights Reserved. 開発プロセス

Slide 58

Slide 58 text

page No. 58 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 変化したこと(1) 要件定義などの上流工程で、テストの検討(テスト自動化含む)を開始  テスト計画の段階で、テストまでの作業や分担なども決まっていく。  ついでに仕様検討や操作性なども併せて議論される。  各担当などの作業量などを見ながら、お互いの作業を案分できる。 要件定義 開発作業 テスト 開発 仕様策定 実装 ユニットテスト 不具合修正 QA テスト計画 テストケース作成 自動テスト準備 テスト・アセット作成 自動テスト実行 共通作業 テスト実施検討 自動テスト検討 仕様のレビュー 自動テストの実装構 築など テスト実施(手動含む) テストファーストに近づいている

Slide 59

Slide 59 text

page No. 59 Copyright © 2021 WingArc1st Inc. All Rights Reserved. ウォータフォールからの脱却 開発 テスト 変化したこと(2) 開発 テスト 開発 テスト 開発 テスト 開発 テスト 開発 テスト 開発 テスト 開発 テスト 昔 • デグレリスク回避のためすべての開発が完了したのちにテストフェイズに移行していた。 • 後半に重大な問題が発生した場合のリスク。テスト強化の工数増大、リリース日調整など • 機能追加などの要件変更について柔軟に対応できない。 現在  開発項目毎にプロセスでテストまで実施し完結。  デグレの発生は最小限におさえて、リスク分散。  要件変更、追加開発など柔軟に対応。 開発 テスト 開発 テスト

Slide 60

Slide 60 text

page No. 60 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 構成 ソース管理 テスト・アセット管理 開発/QA パラメータテスト (自作) チャット通知 テストケース etc Jenkins インストーラー生成 BVT テスト バッチ実行 Selenium

Slide 61

Slide 61 text

Copyright © 2021 WingArc1st Inc. All Rights Reserved. 質問タイム

Slide 62

Slide 62 text

page No. 62 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Discordより質問です タブレットのE2Eテストの場合、端末、OSの種類やOSバージョンの カバレッジはどの程度取られてますか? DatalizerのタブレットインターフェースはWebアプリのため、自動テストに おける機能の確認ではPCのブラウザにて代用しています 対応端末ごとの確認は手動で行っていて、サポートするOSのメジャーバー ジョンの単位で行っています