Upgrade to Pro — share decks privately, control downloads, hide ads and more …

開発エンジニアとQAエンジニアが語る夜(Datalizer編)〜僕がいちばんDatalizerをうまく使えるんだ!〜

 開発エンジニアとQAエンジニアが語る夜(Datalizer編)〜僕がいちばんDatalizerをうまく使えるんだ!〜

Yuki Sakaguchi

December 17, 2021
Tweet

More Decks by Yuki Sakaguchi

Other Decks in Technology

Transcript

  1. update Copyright © 2021 WingArc1st Inc. All Rights Reserved. December

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

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

  4. 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
  5. page No. 5 Copyright © 2021 WingArc1st Inc. All Rights

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

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

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

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

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

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

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

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

  15. 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
  16. 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
  17. page No. パラメータテスト 集計実行時に指定された パラメータのファイル 集計結果を比較 パラメータテストツール たくさんのケースを高速に!

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

  19. page No. パラメータテスト実施方法 ①テスト対象バージョンを 指定してジョブ実行 ②指定されたバージョンの バイナリとテストをPULL ③パラメータテストを実行 ④パラメータテスト実行結果を Teamsに通知

    ケース数 3,835 Jenkinsのノード数 1 並列数 8 実行時間 15分
  20. 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
  21. page No. JMeter(素性能測定、多重性能測定、ロングランテスト) 共通事項 • HTTP Requestを使って、集計リクエストを実行 • DBの処理を極小化するためにDB側はキャッシュを利用している 素性能測定

    • 集計表サイズ、定義種類、集計方法毎の速度評価を実行 多重性能測定 • 素性能測定から一部の集計を抜粋して、並列数を1, 5, 10, 25, 50で実行 ロングランテスト • 多重性能測定の並列数50を無限ループで1週間連続実行 • GCログの設定を行い、ヒープのリークがないことを確認している
  22. 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
  23. page No. このようなスクリプトで

  24. page No. 24 Copyright © 2021 WingArc1st Inc. All Rights

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

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

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

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

    Reserved. ネイティブUIとWebUI
  29. page No. TestRunnerGrid hub browser nodes DB テスト対象 ①テストスクリプト取得 ②テスト実行指示

    ③分散実行指示 アプリ更新 ④それぞれでテスト実行
  30. page No. 30 Copyright © 2021 WingArc1st Inc. All Rights

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

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

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

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

  35. page No. 35 Copyright © 2021 WingArc1st Inc. All Rights

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

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

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

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

    Reserved. 結果表調整の修正をしたとき 開発チームとQAチームで全力
  40. 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
  41. 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
  42. page No. Datalizer for Excel のユニットテストの経緯① ▪課題 ・10年以上も機能が継ぎ足しされてきた製品のため、ソースが複雑化し保守性 に問題があった。 ・Excel用ロジック、画面用ロジック、ビジネスロジックが3密になっており、

    ユニットテスト化が難しかった。 ▪状況 機能追加や修正による影響が読みにくく、テストは手動だった。 また、影響が読みにくい分、テスト範囲も広くなりがちだった。 このため、開発・検証コストが増えていく状態だった。
  43. page No. Datalizer for Excel のユニットテストの経緯② 課題を解決するために Datalizer for Excel

    5.0 のゴールは リコーディング・ユニットテスト・自動テストをセットで 行い「品質の担保」と「保守性の向上」を実現する と定めた。 ※これを達成して、積極的な機能追加を可能にしたかった。 結果として、リコーディング以降さまざまな機能追加ができた。 ・Datalizer 5.1 のExcelグラフ連携、Excelレポート機能 ・Datalizer 5.5 のTableEditor、MBデータソース連携 ・MBC と MBSF の Excelインターフェースオプション
  44. page No. Datalizer for Excel のユニットテストのゴール QAと開発で協議して、ユニットテストのゴールは 画面のリコーディングによ る品質の担保として、以下の内容とした。 ・各操作をユニットテスト化して修正による影響を検知できること

    ・定義ファイルを読込・反映後、定義ファイルが変わっていないこと 定義ファイル 読込 定義ファイル 反映 差異 チェック
  45. page No. 画面のリコーディングで保守性を担保するために 過去のソースにとらわれず、各画面の役割を意識して、Viewとビジネスロジッ クを分けるようにリコーディングを進めた。 ・MVVM( Model + View +

    ViewModel )のフレームワークを使用して、 Viewとビジネスロジックを分けて実装した。 →役割ごとにビジネスロジックが分けられ、各ロジックに対して ユニットテストができるようになった。 ・枯れていたUIフレームワークを使用 →複数の言語に依存しない画面開発ができるようになった。 →画面の役割が明確になり、各画面の部品化と再利用が進んだ。
  46. page No. 特に苦労した点 QAの方々と協力し、さまざまな定義ファイルを集めた。 ・検証で使用しきた定義ファイル ・過去の不具合確認で使用した定義ファイル ・過去バージョンから移行テスト用の定義ファイル →定義ファイルの総数:3621個 これらの定義ファイルで、リコーディングした画面が従来と同じように定義 ファイルへ反映できるように確認・調整を進めた。

    大変だったが、これがあったので過去のソースにとらわれず、リコーディング ができた。 定義ファイル 読込 定義ファイル 反映 差異 チェック 2000個以上の定義ファイル で差異が出たときは、つら かったです。
  47. 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
  48. page No. Excel.exeを操作したい リボン部 アプリ部 シート部

  49. page No. 49 Copyright © 2021 WingArc1st Inc. All Rights

    Reserved. Excel.exeを操作したい • Accessibility Idは自由につけれないものの名前である程度操作できる リボン部 • 通常のWindowsアプリ同様にAccessibility Idを付けてもらえば楽に操作可能 アプリ部 • 行・列番号でのアクセスがかろうじて可能 シート部 行・列番号で書かれたテストなんて後で読めない
  50. page No. Excel.exeを操作したい 開発者にテストインターフェースを作ってもらった すごく高機能! 高まる安定性!

  51. page No. Excel.exeを操作したい 自動テストFW(有償) を推されて プロト作成 シート操作は無理 ExcelOperatorの発明 Excel本体の操作はすべてOperatorで できることに

    自動テストFW(有償) が解約される .NET+UIAutomationで 操作するFWを作成 安定しなかった 開発、保守チームと連携 Java+WinAppDriverで再作成 シート操作などどうしても非効率な 部分は製品にテストIFを実装 現在に至る変遷
  52. 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
  53. page No. Excel比較ツール 初期 中期 現在 セルの値だけ比較 値以外のセルやシートの 設定も比較 グラフの設定も比較

    Datalizer for Excelのリコーディング Excel比較ツールを作成
  54. page No. Excel比較 比較元のExcel セルの値が格納されているファイル 初期:Excelファイルを解凍して、セルの値が格納されているファイルを比較

  55. 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個
  56. page No. Excel比較処理のフロー ①指定フォルダ配下の Excelファイル比較 ②ファイル毎に並列で 比較処理実行 ③比較結果と差異検出した 内容をファイル出力 ④差異検出の有無を返す

    VBAで比較ロジックを実装 Excel比較実行ツール
  57. Copyright © 2021 WingArc1st Inc. All Rights Reserved. 開発プロセス

  58. page No. 58 Copyright © 2021 WingArc1st Inc. All Rights

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

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

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

  62. page No. 62 Copyright © 2021 WingArc1st Inc. All Rights

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