Slide 1

Slide 1 text

update Copyright © 2021 WingArc1st Inc. All Rights Reserved. October 26, 2021 開発エンジニアとQAエンジニアが語る夜(Dr.Sum編) ~見せてもらおうか、Dr.Sumの品質活動とやらを~

Slide 2

Slide 2 text

page No. 2 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 01 Dr.Sumの開発プロセス 02 Dr.Sumの自動テスト 03 Dr.SumのCI/CD 04 質問タイム INDEX

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

page No. Dr.Sum開発とQA体制 Dr.Sum開発部 部⾧ 兼プロダクトオーナー 笹原 Dr.Sum開発部 副部⾧ 橋田 兼務 Dr.Sum開発G GMG Dr.Sum開発リーダー 橋田 Datalizer開発G GMG Datalizer開発リーダー 増井 第1T 主にエンジンの 開発を担当 第2T チームリーダー 川代 主にエンジン以外の 開発を担当 DEQI GMG 坂口 Dr.Sum担当 Datalizer担当 Datalizer開発を 担当 SPQI部 部⾧ 伊藤 SPI T チームリーダー 荒川 プロダクト横断で プロセス改善を担当 Copyright © 2021 WingArc1st Inc. All Rights Reserved.

Slide 5

Slide 5 text

page No. 新バージョン開発プロセスの概要 Copyright © 2021 WingArc1st Inc. All Rights Reserved. システム テスト 要求 リリース 開発KickOff 資料 新製品 KickOff 仕様書 検証 実装 コンセプト ビジョン 目玉機能 ステークホルダーに 新製品の概要を レビュー 要求の積み上げを 繰り返す ×N

Slide 6

Slide 6 text

page No. 新バージョン開発プロセスの概要 Copyright © 2021 WingArc1st Inc. All Rights Reserved. システム テスト 要求 リリース 開発KickOff 資料 新製品 KickOff 仕様書 検証 実装 コンセプト ビジョン 目玉機能 ステークホルダーに 新製品の概要を レビュー 要求の積み上げを 繰り返す ×N

Slide 7

Slide 7 text

page No. 7 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 要求とチーム いわゆるチケットだったりプロ ジェクトだったりという単位を 『要求』という言葉でまとめて いる。 要求毎にチームが作られる。 そのチームが実装から 検証までを担当する。 要求の内容や規模に合わせて、 開発グループ、QAグループから 適切な人員を割り当てている。 チームA チームB チームC

Slide 8

Slide 8 text

page No. 8 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 開発フェーズと検証フェーズ 開発フェーズ 検証フェーズ 新製品 KickOff 要求A 要求B 要求C 受入検証 システムテスト 要求D 非機能検証(速度評価、ロングランテスト) 要求は個々に 並行して進められる 検証フェーズ中に 要求を進めることもある 非機能検証は随時行われる

Slide 9

Slide 9 text

page No. 要求に対する開発プロセス ・要求に対する実現方法検討 ・設計、仕様の考案 ・テスト自動化可否の確認 ・自動化のための機能追加 ・ステークホルダーに 設計・仕様案を共有 ・検証方針を決める ・QE(SET)、QA担当を 決める Copyright © 2021 WingArc1st Inc. All Rights Reserved. R&D プロトタイピング 仕様検討 要求 KickOff 仕様作成 仕様レビュー 実装 検証観点 レビュー 開発 検証実施 検証結果 自動テスト資産 システム テスト実施 ・観点の優先度を設定 ・実施フェーズを決める ・仕様書作成時に実装者視点の 検証のキモを記載 ・開発、QA以外に マニュアル、保守チームも参加 ・「開発フェーズ で実施対象」 とした検証項目 ・「検証フェーズで 実施対象」 とした検証項目

Slide 10

Slide 10 text

page No. 要求に対する開発プロセス ・要求に対する実現方法検討 ・設計、仕様の考案 ・テスト自動化可否の確認 ・自動化のための機能追加 ・ステークホルダーに 設計・仕様案を共有 ・検証方針を決める ・QE(SET)、QA担当を 決める Copyright © 2021 WingArc1st Inc. All Rights Reserved. R&D プロトタイピング 仕様検討 要求 KickOff 仕様作成 仕様レビュー 実装 検証観点 レビュー 開発 検証実施 検証結果 自動テスト資産 システム テスト実施 ・観点の優先度を設定 ・実施フェーズを決める ・仕様書作成時に実装者視点の 検証のキモを記載 ・開発、QA以外に マニュアル、保守チームも参加 ・「開発フェーズ で実施対象」 とした検証項目 ・「検証フェーズで 実施対象」 とした検証項目 開発フェーズ 「実用レベルの機能性」まで検証

Slide 11

Slide 11 text

page No. 開発リーダー 開発、検証の役割 役割 開発 作業 設計・仕様決め 実装者 QE(SET) QA 組織図上の 所属 開発チーム QAチーム 開発チーム QAチーム 検証 作業 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 仕様レビュー 設計・仕様決め (設計・仕様決め) 仕様レビュー開催 仕様レビュー (設計・仕様決め) 仕様レビュー 仕様書作成 実装 検証観点レビュー 検証観点レビュー開催 検証観点作成 検証項目作成・実施 検証観点レビュー 検証結果確認 検証観点メモ作成 テストフレームワーク作成

Slide 12

Slide 12 text

page No. 開発リーダー 開発、検証の役割 役割 開発 作業 設計・仕様決め 実装者 QE(SET) QA 開発チーム QAチーム 開発チーム QAチーム 検証 作業 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 仕様レビュー 設計・仕様決め (設計・仕様決め) 仕様レビュー開催 仕様レビュー (設計・仕様決め) 仕様レビュー 仕様書作成 実装 検証観点レビュー 検証観点レビュー開催 検証観点作成 検証項目作成・実施 検証観点レビュー 検証結果確認 検証観点メモ作成 組織図上の 所属 テストフレームワーク作成

Slide 13

Slide 13 text

page No. 観点メモを開発者が作成 Copyright © 2021 WingArc1st Inc. All Rights Reserved.

Slide 14

Slide 14 text

page No. テスト観点(ここからテストケースに展開する) Copyright © 2021 WingArc1st Inc. All Rights Reserved.

Slide 15

Slide 15 text

page No. 上流工程から品質にコミットするということ Copyright © 2021 WingArc1st Inc. All Rights Reserved. プロトタイピング 仕様検討 要求 KickOff 仕様レビュー 実装 検証観点 レビュー 開発 検証実施 検証結果 自動テスト資産 より上流工程から、実装者・QE・QAがともに開発作業を行 うことにより、高い品質に作り込むということをコンセプト にしている システム テスト実施 実装者 QE(SET) QA 三位一体論 作りながら検証観点を残せる ⇔ 作りながら品質を担保できる 具体的な検証観点、テストケース作成、テストフレーム作成、実装へのフィードバック 俯瞰的に品質を作りこむための適切な工程かを確認。非機能や利用シナリオを踏まえた上で優先付け

Slide 16

Slide 16 text

page No. 品質の作り込み(QI視点) Copyright © 2021 WingArc1st Inc. All Rights Reserved. プロトタイピング 仕様検討 要求 KickOff 仕様レビュー 実装 検証観点 レビュー 開発 検証実施 検証結果 自動テスト資産 QAグループメンバー 開発支援 ・開発進捗を押し上げる ・QAとしてのナレッジ共有 システム テスト実施 開発グループメンバー 検証支援

Slide 17

Slide 17 text

page No. 品質の作り込み Copyright © 2021 WingArc1st Inc. All Rights Reserved. プロトタイピング 仕様検討 要求 KickOff 仕様レビュー 実装 検証観点 レビュー 開発 検証実施 検証結果 自動テスト資産 品質は開発時に作り込む QAグループメンバー 品質が作り込まれていることを検証で確認 開発支援 ・開発進捗を押し上げる ・QAとしてのナレッジ共有 システム テスト実施 開発グループメンバー 検証支援

Slide 18

Slide 18 text

Copyright © 2021 WingArc1st Inc. All Rights Reserved. 機能テストと非機能テスト Dr.Sumの自動テスト

Slide 19

Slide 19 text

page No. Dr.Sumの自動テスト(機能テスト) Intranet / Cloud Dr.Sum Data Funnel Dr.Sum Cloud Hub Dr.Sum Server Message Broker Funnel Server 全体 - IoT機器からのデータ取得、データ加工 - 他プロダクトへのPublish HTTP Agent Web Console Secure Transport Server Secure Transport Bridge Server モニタリング DS Script - データ投入 - データ加工 SQL - データ取得 - データ更新 全体 - ユーザー管理 - サーバー管理 In-Memory Server Python連携 - AIや機械学習 インメモリ永続 - データの永続化 ダッシュボード アラート IoT Device CSV/JSON HTTP(S) MQTT(S) MQTT(S) MQTT Publish Command 管理ツール - EnterpriseManager - ScriptEditor Copyright © 2021 WingArc1st Inc. All Rights Reserved. HTTP(S) HTTP over TLS Secure Transport Agent クライアント端末 Enterprise Manager Web Browser

Slide 20

Slide 20 text

page No. Dr.Sumの自動テスト(機能テスト) Intranet / Cloud Dr.Sum Data Funnel Dr.Sum Cloud Hub Dr.Sum Server Message Broker Funnel Server 全体 - IoT機器からのデータ取得、データ加工 - 他プロダクトへのPublish HTTP Agent Web Console Secure Transport Server Secure Transport Bridge Server モニタリング DS Script - データ投入 - データ加工 SQL - データ取得 - データ更新 全体 - ユーザー管理 - サーバー管理 In-Memory Server Python連携 - AIや機械学習 インメモリ永続 - データの永続化 ダッシュボード アラート IoT Device CSV/JSON HTTP(S) MQTT(S) MQTT(S) MQTT Publish Command 管理ツール - EnterpriseManager - ScriptEditor RegressR2(SQL、DS Script、コマンドバッチ、Python連携):80,000ケース API Test(Java、.NET):3,500ケース OLAP自動テスト:100,000ケース Copyright © 2021 WingArc1st Inc. All Rights Reserved. HTTP(S) HTTP over TLS Secure Transport Agent クライアント端末 Enterprise Manager Web Browser

Slide 21

Slide 21 text

page No. Dr.Sumの自動テスト(機能テスト) Intranet / Cloud Dr.Sum Data Funnel Dr.Sum Cloud Hub Dr.Sum Server Message Broker Funnel Server 全体 - IoT機器からのデータ取得、データ加工 - 他プロダクトへのPublish HTTP Agent Web Console Secure Transport Server Secure Transport Bridge Server モニタリング DS Script - データ投入 - データ加工 SQL - データ取得 - データ更新 全体 - ユーザー管理 - サーバー管理 In-Memory Server Python連携 - AIや機械学習 インメモリ永続 - データの永続化 ダッシュボード アラート IoT Device CSV/JSON HTTP(S) MQTT(S) MQTT(S) MQTT Publish Command 管理ツール - EnterpriseManager - ScriptEditor RegressR2(SQL、DS Script、コマンドバッチ、Python連携):80,000ケース API Test(Java、.NET):3,500ケース OLAP自動テスト:100,000ケース Copyright © 2021 WingArc1st Inc. All Rights Reserved. HTTP(S) HTTP over TLS Secure Transport Agent クライアント端末 Enterprise Manager Web Browser In-Memory QueryTest 30,000ケース

Slide 22

Slide 22 text

page No. Dr.Sumの自動テスト(機能テスト) Intranet / Cloud Dr.Sum Data Funnel Dr.Sum Cloud Hub Dr.Sum Server Message Broker Funnel Server 全体 - IoT機器からのデータ取得、データ加工 - 他プロダクトへのPublish HTTP Agent Web Console Secure Transport Server Secure Transport Bridge Server モニタリング DS Script - データ投入 - データ加工 SQL - データ取得 - データ更新 全体 - ユーザー管理 - サーバー管理 In-Memory Server Python連携 - AIや機械学習 インメモリ永続 - データの永続化 ダッシュボード アラート IoT Device CSV/JSON HTTP(S) MQTT(S) MQTT(S) MQTT Publish Command 管理ツール - EnterpriseManager - ScriptEditor RegressR2(SQL、DS Script、コマンドバッチ、Python連携):80,000ケース API Test(Java、.NET):3,500ケース OLAP自動テスト:100,000ケース Copyright © 2021 WingArc1st Inc. All Rights Reserved. HTTP(S) HTTP over TLS Secure Transport Agent クライアント端末 Enterprise Manager Web Browser In-Memory QueryTest 30,000ケース TestComplete 1,300ケース

Slide 23

Slide 23 text

page No. Dr.Sumの自動テスト(機能テスト) Intranet / Cloud Dr.Sum Data Funnel Dr.Sum Cloud Hub Dr.Sum Server Message Broker Funnel Server 全体 - IoT機器からのデータ取得、データ加工 - 他プロダクトへのPublish HTTP Agent Web Console Secure Transport Server Secure Transport Bridge Server モニタリング DS Script - データ投入 - データ加工 SQL - データ取得 - データ更新 全体 - ユーザー管理 - サーバー管理 In-Memory Server Python連携 - AIや機械学習 インメモリ永続 - データの永続化 ダッシュボード アラート IoT Device CSV/JSON HTTP(S) MQTT(S) MQTT(S) MQTT Publish Command 管理ツール - EnterpriseManager - ScriptEditor RegressR2(SQL、DS Script、コマンドバッチ、Python連携):80,000ケース API Test(Java、.NET):3,500ケース OLAP自動テスト:100,000ケース Copyright © 2021 WingArc1st Inc. All Rights Reserved. HTTP(S) HTTP over TLS Secure Transport Agent クライアント端末 Enterprise Manager Web Browser In-Memory QueryTest 30,000ケース TestComplete 1,300ケース WebConsole E2Eテスト

Slide 24

Slide 24 text

page No. Dr.Sumの自動テスト(機能テスト) Intranet / Cloud Dr.Sum Data Funnel Dr.Sum Cloud Hub Dr.Sum Server Message Broker Funnel Server 全体 - IoT機器からのデータ取得、データ加工 - 他プロダクトへのPublish HTTP Agent Web Console Secure Transport Server Secure Transport Bridge Server モニタリング DS Script - データ投入 - データ加工 SQL - データ取得 - データ更新 全体 - ユーザー管理 - サーバー管理 In-Memory Server Python連携 - AIや機械学習 インメモリ永続 - データの永続化 ダッシュボード アラート IoT Device CSV/JSON HTTP(S) MQTT(S) MQTT(S) MQTT Publish Command 管理ツール - EnterpriseManager - ScriptEditor RegressR2(SQL、DS Script、コマンドバッチ、Python連携):80,000ケース API Test(Java、.NET):3,500ケース OLAP自動テスト:100,000ケース Copyright © 2021 WingArc1st Inc. All Rights Reserved. HTTP(S) HTTP over TLS Secure Transport Agent クライアント端末 Enterprise Manager Web Browser 作る君と、 流す君 81ケース In-Memory QueryTest 30,000ケース TestComplete 1,300ケース WebConsole E2Eテスト

Slide 25

Slide 25 text

page No. 25 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Cloud Hub ファイル操作 タスクスケジューラ モニタリング機能 管理 ツール 管理 ツール Java, .NET JDBC, ODBC 共通内部 API 共通内部 API 管理画面 tomcat UI API Server Dr.Sumの構成 バッチ コマンド Dr.Sum SQL DS Script ユーザー管理・システム管理 インポート・エクスポート In-Memory 高速集計 インメモリ永続 Python連携 Windows OS Data Funnel リアルタイムデータ処理 データ加工 tomcat 内部 Web API Thrift

Slide 26

Slide 26 text

page No. 26 Copyright © 2021 WingArc1st Inc. All Rights Reserved. In-Memoryの自動テスト(機能テスト) 管理 ツール Java, .NET JDBC, ODBC 共通内部 API UI API Server バッチ コマンド In-Memory QueryTest(30,000ケース) 直接In-Memoryのライブラリを通して、 SQL実行し、結合レベルのテスト UnitTest In-Memoryを構成するクラスやライブラリに 対する単体+αレベルのテスト Python連携のエミュレータに対するテスト Dr.Sum SQL DS Script ユーザー管理・システム管理 インポート・エクスポート In-Memory 高速集計 インメモリ永続 Python連携

Slide 27

Slide 27 text

page No. 27 Dr.Sumの自動テスト(機能テスト) 管理 ツール (Delphi) Java, .NET JDBC, ODBC UI API Server バッチ コマンド(C++) 共通内部 API (C++) TestComplete: 画面からの権限制御に主眼を置いたテスト RegressR2(コマンドバッチ) インポートなどのコマンドバッチに対するテスト API Test(Java、.NET):3,400ケース 各APIのUnitTest OLAP自動テスト(JavaAPI):100,000ケース Datalizerからの集計を想定したテスト RegressR2 :合計80,000ケース (SQL) ODBC/.NET API経由でSQLを実行して、 実行結果の妥当性を確認するテスト In-Memoryに対するテストも多数存在 (DS Script) .NET API経由でDS Scriptを実行して、 各実行ステップ結果(変数の値など)の 妥当性を確認するテスト (Python連携) ODBC経由でSQLを実行して、Python連携 処理の実行結果の妥当性を確認するテスト UnitTest Dr.Sumを構成するクラスやライブラリに 対する単体+αレベルのテスト Dr.Sum (C++) SQL DS Script ユーザー管理・システム管理 インポート・エクスポート In-Memory 高速集計 インメモリ永続 Python連携 Copyright © 2021 WingArc1st Inc. All Rights Reserved.

Slide 28

Slide 28 text

page No. 28 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Data Funnel (Tomcat) リアルタイムデータ処理 データ加工 管理 ツール 共通内部 Web API UI API Server Data Funnelの自動テスト(機能テスト) 作る君 パイプライン定義を外部ファイルから指定して、生成する 流す君 生成したパイプライン定義にテストデータを流し込んで、 パイプライン処理を実行する この2つのツールを組み合わせることで任意のデータを使って、 任意の設定を行ったパイプライン定義の処理結果を確認 UnitTest 設定やデータのバリエーションを実装している Data Funnelを構成するクラスやライブラリに 対する単体+αレベルのテスト

Slide 29

Slide 29 text

page No. 29 Copyright © 2021 WingArc1st Inc. All Rights Reserved. UI API Server Cloud Hubの自動テスト(機能テスト) Cloud Hub (Tomcat) ファイル操作 タスクスケジューラ モニタリング機能 管理画面 React, Redux WebConsole E2Eテスト Playwrightによる画面操作テスト Dockerとの組み合わせを行い、 任意の環境で実行できる仕組みとなっている UnitTest Cloud Hubを構成するクラスやライブラリに 対する単体+αレベルのテスト プロトコルテスト Secure Transportのプロトコルに対するテスト モックオブジェクトを利用して実装 内部 Web API Thrift

Slide 30

Slide 30 text

page No. Dr.Sumの自動テスト(非機能テスト) Intranet / Cloud Dr.Sum Data Funnel Dr.Sum Cloud Hub Dr.Sum Server Message Broker Funnel Server 全体 - IoT機器からのデータ取得、データ加工 - 他プロダクトへのPublish HTTP Agent Web Console Secure Transport Server Secure Transport Bridge Server モニタリング DS Script - データ投入 - データ加工 SQL - データ取得 - データ更新 全体 - ユーザー管理 - サーバー管理 In-Memory Server Python連携 - AIや機械学習 インメモリ永続 - データの永続化 ダッシュボード アラート IoT Device CSV/JSON HTTP(S) MQTT(S) MQTT(S) MQTT Publish Command 管理ツール - EnterpriseManager - ScriptEditor Funnel ロングランテスト 性能テスト WebConsoleロングランテスト 性能テスト:5,000ケース Dr.Sumロングランテスト Copyright © 2021 WingArc1st Inc. All Rights Reserved.

Slide 31

Slide 31 text

page No. 31 Dr.Sum、In-Memoryの自動テスト(性能テスト) Copyright © 2021 WingArc1st Inc. All Rights Reserved. スクリプト ファイル RegressR2 GUI CUI 測定結果 測定対象スクリプト ファイルを選択 測定対象の処理を実行 測定結果を Dr.Sumに投入 測定結果を Datalizerから分析 ここまで自動化

Slide 32

Slide 32 text

page No. 32 Dr.Sum、In-Memoryの自動テスト(性能テスト) Copyright © 2021 WingArc1st Inc. All Rights Reserved. Datalizer測定結果分析画面 様々な軸で分析可能

Slide 33

Slide 33 text

page No. 33 Dr.Sumの自動テスト(ロングランテスト) Copyright © 2021 WingArc1st Inc. All Rights Reserved. Dr.Sum Data Funnel Cloud Hub ツール 検証対象 処理結果 1週間以上連続実行 実行内容 JavaAPIから 集計やインポートなどを 並列実行 画面操作の HTTPリクエストを 並列実行 20並列でデータを常時投入し、 リアルタイムデータ加工処理を実行 リソース消費状況

Slide 34

Slide 34 text

page No. 34 Copyright © 2021 WingArc1st Inc. All Rights Reserved. テスト内容 並列 実行数 実行回 数 インメモリテーブル、ビューへの集計集約、検索、ソートを行うクエリ実 行 20 45,923 インメモリテーブルのロードを実行 10 2,761 インメモリテーブルへのインポートを実行 1 3,751 インメモリテーブルで様々なJOINを実行 10 2,276 NULLを含むデータや、境界値をまたぐ件数のインポートとクエリを実行 1 1,079 ハイブリッドモードのテーブルにインポート、データ削除、 コンパクションを実行後、ロードして、クエリを実行 1 229 高速エクスポートを1億件になるまで繰り返し実行 5 61 コピーモードのROTATE TABLEを1億件になるまで繰り返し実行した後、 クリアモードで実行 1 2,546 Dr.Sum、In-Memoryの自動テスト(ロングランテスト) ロングランテスト実行内容

Slide 35

Slide 35 text

page No. 35 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Dr.Sum、In-Memoryの自動テスト(ロングランテスト) 各処理プロセスのメモリ使用量を確認 ※横軸は3分ごとに取得したデータのID DWLogProxyW DWLogSvrW DWMemServer DWODSW DWSyncW 70 75 80 85 90 95 1 169 337 505 673 841 1009 1177 1345 1513 1681 1849 2017 2185 2353 2521 2689 2857 3025 Process Private Bytes[MBytes] 400 450 500 550 600 1 160 319 478 637 796 955 1114 1273 1432 1591 1750 1909 2068 2227 2386 2545 2704 2863 3022 Process Private Bytes[MBytes] 0 100 200 300 400 500 1 140 279 418 557 696 835 974 1113 1252 1391 1530 1669 1808 1947 2086 2225 2364 2503 2642 2781 2920 3059 Process Private Bytes[MBytes] 0 500 1000 1500 1 169 337 505 673 841 1009 1177 1345 1513 1681 1849 2017 2185 2353 2521 2689 2857 3025 Process Private Bytes[MBytes] 0 20 40 60 80 1 160 319 478 637 796 955 1114 1273 1432 1591 1750 1909 2068 2227 2386 2545 2704 2863 3022 Process Private Bytes[MBytes]

Slide 36

Slide 36 text

page No. 要求に対する開発プロセス (再掲) ・要求に対する実現方法検討 ・設計、仕様の考案 ・テスト自動化可否の確認 ・自動化のための機能追加 (テストフレームワークの作成) ・ステークホルダーに 設計・仕様案を共有 ・検証方針を決める ・QE(SET)、QA担当を 決める Copyright © 2021 WingArc1st Inc. All Rights Reserved. プロトタイピング 仕様検討 要求 KickOff 仕様レビュー 実装 検証観点 レビュー 開発 検証実施 検証結果 自動テスト資産 システム テスト実施 ・観点の優先度を設定 ・実施フェーズを決める ・実装者視点の検証のキモを記載 ・開発、QA以外に マニュアル、保守チームも参加 ・開発フェーズで 実施対象とした 検証項目 ・検証フェーズで 実施対象とした 検証項目 『要求』に対する開発内容が具体化されてきた早い段階で「どのレイヤからのテストが有効か」を議論して、製品側にテスト インターフェースを用意したり、ログやデバッグの機能を相手したり、テストフレームワークを開発していくことが鍵になる。

Slide 37

Slide 37 text

Copyright © 2021 WingArc1st Inc. All Rights Reserved. Dr.SumのCI/CD

Slide 38

Slide 38 text

page No. 38 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 自動テストの実行 • 各自動テストの実行 • RegressR2(BVT)の分散実行 develop/作業ブランチのビルド • ユニットテスト、静的解析 • コンパイル、リンク • パッケージング • インストーラーイメージ作成 Bitbucketとの連携 • ビルド、自動テスト結果をBitbucketに通知 • Pull requestマージ時にWebhookを受け取って、自動でビルド Dr.SumにおけるJenkinsの役割

Slide 39

Slide 39 text

page No. 39 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 自動テストの実行 RegressR2

Slide 40

Slide 40 text

page No. 40 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 自動テストの実行 In-Memory QueryTest API Test

Slide 41

Slide 41 text

page No. 41 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 自動テストの実行 In-Memory QueryTest API Test Jenkinsを自動テストのエントリーポイントにすることで、 いつでも、誰でも実行できる

Slide 42

Slide 42 text

page No. 42 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 自動テスト実行ジョブのビルドパラメータ テスト対象のビルド テストケースのブランチ

Slide 43

Slide 43 text

page No. 43 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 自動テスト実行ジョブのビルドパラメータ 開発、QA問わず、 任意のビルドに対して、任意のテストケースブランチで 自動テストを実行できる テスト対象のビルド テストケースのブランチ

Slide 44

Slide 44 text

page No. 44 Copyright © 2021 WingArc1st Inc. All Rights Reserved. develop/作業ブランチのビルド

Slide 45

Slide 45 text

page No. 45 Copyright © 2021 WingArc1st Inc. All Rights Reserved. develop/作業ブランチのビルド ユニットテストの実行 カバレッジ、静的解析の実行

Slide 46

Slide 46 text

page No. 46 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Dr.Sumのビルド ①ブランチをpush ②ビルドジョブ実行 ③ソースコード取得 ④ビルド/BVT ⑤ビルド/BVT結果通知

Slide 47

Slide 47 text

page No. 47 Copyright © 2021 WingArc1st Inc. All Rights Reserved. BVT(Build Verification Test: ビルド検証テスト) 新たに作成した各ビルドに対して、完全性を確認し、 主要な機能性、安定性、および試験性を検証する 自動化テストのセット。 ISTQB Glossary(https://glossary.istqb.org/jp/term/build-verification-test-2)

Slide 48

Slide 48 text

page No. 48 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 新たに作成した各ビルドに対して、完全性を確認し、 主要な機能性、安定性、および試験性を検証する 自動化テストのセット。 ISTQB Glossary(https://glossary.istqb.org/jp/term/build-verification-test-2) Dr.Sumでは、RegressR2(計8万ケース)をBVTとして使用 ※実行するテストケースはサブセットでもOK BVT(Build Verification Test: ビルド検証テスト)

Slide 49

Slide 49 text

page No. 49 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Dr.Sumビルドジョブのビルドパラメータ ビルド対象のソースコード 実行するBVTのテストケース

Slide 50

Slide 50 text

page No. 50 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Bitbucketへのビルド/BVT結果通知

Slide 51

Slide 51 text

page No. 51 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Bitbucketへのビルド/BVT結果通知 BVT成功→PR推奨条件 ビルド成功→PR必須条件

Slide 52

Slide 52 text

page No. 52 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Bitbucketへのビルド/BVT結果通知 BVT成功→PR推奨条件 ビルド成功→PR必須条件 マージしたらビルドできない/テストが動かないを事前に防ぐ

Slide 53

Slide 53 text

page No. Copyright © 2021 WingArc1st Inc. All Rights Reserved. BVTを全部流すと、 240時間かかるってよ

Slide 54

Slide 54 text

page No. 54 Copyright © 2021 WingArc1st Inc. All Rights Reserved. テストに時間がかかる?よろしい、分散実行だ! ・ ・ ・ 50ノード マルチ構成プロジェクトで実行ジョブを作成 各ノードにはラベルを付与

Slide 55

Slide 55 text

page No. 55 Copyright © 2021 WingArc1st Inc. All Rights Reserved.

Slide 56

Slide 56 text

page No. 56 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 全部流しても240時間→6時間弱まで高速化

Slide 57

Slide 57 text

page No. 57 Copyright © 2021 WingArc1st Inc. All Rights Reserved. まとめ Jenkinsは重要な開発インフラ • 無いと開発が進まない Jenkinsはビルドだけではない • 自動テストのエントリーポイント • 分散実行インフラ 自動テストは使い倒す! • 使わないとすぐ「ガラクタ」になってしまう • 実行には人手はかからない

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

page No. 59 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Discordより質問です 「私の周りには品質に重きを置く開発エンジニアがいないんですが、御社の開発 チームがそういう考えに至った経緯などあれば教えてほしいです。」 開発が『作る』ものに『品質』も含まれるのは前提として考えています。開発、QA両者が「ユーザーに 価値ある製品を早く届ける」という同じゴールを向くことができれば自ずと見えてくるものと考えてい ます。 まずは開発がそういった意識を持つということは必要になってくるとは思いますが、「優先度を考えた 場合、今本当に必要なテストケースなのか」「時間を使って修正すべき不具合なのか」の判断がフレキ シブルにできる体制なのかという事が実務上は非常に重要です。 例えばカバレッジや通過率だけにとらわれず「ユーザーがストレスなく利用できるか」を前提に開発と QAでコミュニケーションをとりながら目指す品質レベルに向かっていけるような体制を構築できればう まく回り出すのかなと思います。 回答としては足りないかもしれないですが、「品質を確保する」という言葉が意味することが「テスト →バグチケットを起票→修正」を繰り返すことであり、バグはテストチームが出すものだという意識が なくなってくるといいですね。

Slide 60

Slide 60 text

page No. 60 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Discordより質問です 「QAの方、ここまで開発と一緒に仕事をするのは相応のスキルも必 要だと思いますが、大事にしているスキルセットやマインドセット を教えてほしいです。」 新たな技術や製品を担当するので、とても大変な面はありますが、 QAもQA「エンジニア」なので、「エンジニア」としての日々のス キルアップや学習は必要なことと考えています。 データベースやプログラミング言語などの資格取得や、製品知識を 向上させるための時間を定期的に設けて、スキルアップための時間 を確保するようにもしてます。

Slide 61

Slide 61 text

page No. 61 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Discordより質問です 「QAが上流でぐいぐい押し上げる。開発は結合でサポートする。 チーム一丸で品質を上流から作りこんでいくフェーズに入った時っ て、課題や関心はどういうものがありますか?」 QAの立場からすると、上流から作り込んでいくフェーズに入っていくことができては いますが、まだまだ上流工程における貢献はできると考えています。 プロトタイピングや仕様検討からQAが参加している要求もありますが、すべての要求 でできているわけではありません。 上流工程であるほど、「開発のエンジニア」か、「QAのエンジニア」かは関係なく、 「エンジニア」としてその要求にどのように貢献できるかが勝負なので、この点につ いてQAとしてはまだまだスキルアップして貢献していけると考えています。

Slide 62

Slide 62 text

page No. 62 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Discordより質問です 「上流にQAがグイグイ入っていこうとすると、他のプロダクトの QA業務に入っていく時間が無くて悩んだりしてますが、やはり、 複数のプロダクトにQAさんが入るってことはないのでしょうか?」 基本的には主軸となるプロダクトは決まっていますが、Dr.Sumと Datalizerは同時に開発をしているため、複数のプロダクトを担当す るメンバーもします。 複数のプロダクトを持つので時間としてはタイトではありますが、 少しずつ複数のプロダクトを担当するメンバーが増えている状況と なっています。

Slide 63

Slide 63 text

page No. 63 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Twitterより質問です 「 RegressR2は、すぐにNGになるということですが、どれくらい の頻度(CI)で実行していますか? 」 開発者がサーバーに関するPull requestを出す前に実行してもらって います。NGになった場合は実装の修正をしたり、テスト期待値の修 正も開発者が行います。実装途中でもBVTを実行して、早めに実装 状態を確認したりもしています。 Pull requestマージ後は、適当な間隔で実行します。 Pull requestを出す時点でしっかり確認しているので、マージ後に NGが発生することは激減しました。

Slide 64

Slide 64 text

page No. 64 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Discordより質問です 「開発とQAはそれぞれ何名くらいいるのでしょうか?」 Dr.Sum開発は14名。QAは5名となっています。 この中には開発のプロダクトオーナーや開発リーダーも含まれます。 参考までに、直近のバージョンであるDr.Sum 5.6で対応した 要求の数は50以上ありました。

Slide 65

Slide 65 text

page No. 65 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Discordより質問です 「要求のテストは開発中継続すると思うのですが、専属のQAがつく のですか?」 いずれの要求でも、ロールとして「開発リーダー」「実装者」 「QE」「QA」は存在します。 「実装者」が「QE」を担うこともありますし、「QA」が「QE」を 担うこともあります。 「実装者」「QE」が別の開発メンバーが担当することもあります。

Slide 66

Slide 66 text

page No. 66 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Discordより質問(感想)です 「要件が変わった時のテストケースの追加や修正で、設計のしなお しとか、何処に追加するかとか、全体で十分か判断しなきゃいけな かったりもありそう」 おっしゃる通りです。 要件や設計が変更となった場合、検証作業に影響を与えます。 そのような状況をできるだけ陥らないためにプロトタイピングや仕 様検討で多くの時間を割いています。 ここでどのような検証を行うべきかや、既存のテスト資産を鑑みて 追加すべき検証は何かを入念に議論して進めています。

Slide 67

Slide 67 text

page No. 67 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Discordより質問です 「開発リーダーさんは、仕様決めと仕様レビュー以外ってしないのですか?(後は管理作 業をされてたり?)」 開発というコンテキストでいくと、実際のコードを書く以外のほぼすべての作業に関与しま す。仕様作成、UXのデザイン、システム設計、場合によっては詳細設計、実装方式やアルゴ リズムの検討などです。もちろん主たる実装については各担当の凄腕エンジニアが行います ので、すべての要求に少しずつ絡んでいくことになるのですが、特に要求の実現が難しいと なったときに、こういう設計でこういう仕様なら要求を満たせるのではという、クリティカ ルポイントをなんとか解決できないか考える仕事です。 あとは、製品戦略の策定や利用する技術要素の検討、マーケット動向から要求を作成。そこ からチームのリソースを踏まえてベストな仕様や実装のアプローチを考えたりすることが主 な仕事です。 会社組織としての管理作業と、工程のプロマネ作業もありますがそこはできるだけ小さくな るようにメンバーに頼り切ることにしています!

Slide 68

Slide 68 text

page No. 68 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Discordより質問です 「全体のテストアーキテクチャどんな感じかで、どう分担されている のか気になります。非機能要件もQAの方も見ているのかどうか。」 各要件の機能検証に関してはテスト観点のテンプレートを使用して、 網羅するようにしています。このテンプレートはこれまで発見され たの不具合のナレッジや、プロダクト特有の実装を反映したものと なっており、可能な限りこれまで発生した不具合が再発していない ことを確認できる枠組みを用いています。 非機能要件に関しては主にQAで測定を行い、測定結果を開発チーム と考察し、プロダクトに反映する価値のある改善となっているかを 検討するような形となっています。

Slide 69

Slide 69 text

page No. 69 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Discordより質問です 「CIなどのパイプラインを担当するQAもいるのでしょうか。 SETが担当になるでしょうか。」 テスト系の既存パイプラインの修正は主にQE(SET)が行います。 ビルド関係のパイプラインは、開発者の担当です。 なるべくジョブはパイプラインで作成し、そのスクリプトファイル をBitbucketで管理するようにして、Pull requestで変更するように しています。

Slide 70

Slide 70 text

page No. 70 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Twitterより質問です 「非機能検証(performanceやlong run)は どのようなツールを使用していますか? 」 PerformanceはJavaAPIを使って測定して、測定結果をPowershellで CSVに加工後、Dr.SumにJavaAPIで取り込んでいます。 LongRunはJavaAPIで実行しますが、テストフレームワークとしては JUnitを使用しています。 リソース消費状態の取得に関しては、Powershellから Get-Counterコマンドを使っています。

Slide 71

Slide 71 text

page No. 71 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Twitterより質問です 「非機能の目標値は要求プロセスで設定していますか? 」 こちらはケースバイケースです。 コンセプチュアルに「10倍を目指す」という形で走り出すこともあれば、 実装上の理論値から目標値を定める場合もあります。 要件上速度向上が求められてスタートする場合もあり、その場合は効率化 できる処理を探してひたすら積み重ねたり、そもそものアルゴリズムに手 を入れられないか検討します。 プロセスとしては、開発上の目標値を要求プロセスである程度設定し、実 際の実装や検証の結果に対して、実際導入する価値があるものかどうかを 開発とQAで話しあって決定しているようなイメージとなります。

Slide 72

Slide 72 text

page No. 72 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Twitterより質問です 「DrSumを、オンプレからクラウドにしたことによる、ツラミはあ りますか?(例えば、負荷が強い処理をしてそうなので、AWSの auto scallingとの相性とか)」 まさにそこはこれからクラウドサービスとして伸ばしていく際にキーになっていく要 素となります。 Dr.Sumのエンジンのコア部分はハードウェアリソース意識した作りになっていますの で、EC2上では通常のハードウェアとは異なる挙動をしたり、解析が難しくなったり する場面もあります。 Dr.Sumのクラウドサービスはまだ開始したばかりであり、そもそも製品側がまずア ジャストしなければならない部分も多いので、絶賛開発中となります。 これからの主戦場になると思いますので頑張っていきたいです!

Slide 73

Slide 73 text

page No. 73 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Discordより質問です 「本当にメンテナンスとかどうやってしているのだろうか? 自動テストの結果管理やメンテナンスとかすごい時間かかりそう。 (多分、その仕組もかなり考えられてるとは思いますが)」 BVT(RegressR2)に関しては、Pull request出す時点でOKになってい ることが条件なので、その時点までに開発者とQEが協力して既存テ ストケースの修正も行います。最後にまとめて行うのではなく、Pull request(≒要求)毎に自動テストのメンテナンスを行うことで、ここ の作業コストを抑えるようにしています。

Slide 74

Slide 74 text

page No. 74 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Discordより質問です 「テスト環境のフレーキネスはどのように管理してますか?」 Confluence上にページを作って、そこでフレーキーなNGを管理し ています。BVTがNGになった場合、その一覧に含まれているもので あればその旨がわかるようにして、Pull requestを出しても良いとい う運用にしています。 NGになる原因としては、後片付けが不十分といったテスト実装自体 の問題が多いので、分かり次第修正します。 また、同じミスをなるべく繰り返さないように、テスト実行時の チェックポイントを共有しています。

Slide 75

Slide 75 text

page No. 75 Copyright © 2021 WingArc1st Inc. All Rights Reserved. Twitterより質問です 「CIで、RagressR2を分割、並列実行しているとのことですが、 並列実行させるために、テストコードを実装時に気を付けているこ とはありますか?」 テスト粒度、具体的には各テストの実行時間を最大でも15分程度に収めるよ うに気をつけています。 紹介したJenkinsでの分散実行方法では、テストの実行順番をコントロール できません。1時間かかるテストがあったとして、それが最後の方で実行開 始されてしまうと、1ノードだけで1時間処理が行われてしまうので、結果的 にテスト完了が遅くなってしまいます。 暇になるノードを最後までなるべく作らないようにするのがポイントです。

Slide 76

Slide 76 text

page No. 76 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 質問コーナここまで !ありがとうございました!

Slide 77

Slide 77 text

page No. 77 Copyright © 2021 WingArc1st Inc. All Rights Reserved. DEQIグループの使命感

Slide 78

Slide 78 text

page No. 78 Copyright © 2021 WingArc1st Inc. All Rights Reserved. 開催日時:12月開催予定 タイトル:開発エンジニアとQAエンジニアが語る夜(Datalizer編) ~僕がいちばんDatalizerをうまく使えるんだ~ 出演予定:笹原、増井、石黒、伊藤、荒川、及川、坂口 connpass URL:TBD

Slide 79

Slide 79 text

page No. 79 Copyright © 2021 WingArc1st Inc. All Rights Reserved. https://ninno-tech-fest.connpass.com/event/226029/

Slide 80

Slide 80 text

page No. 80 Copyright © 2021 WingArc1st Inc. All Rights Reserved. https://www.scrumfestniigata.org/

Slide 81

Slide 81 text

page No. 81 Copyright © 2021 WingArc1st Inc. All Rights Reserved. http://jasst.jp/index.html

Slide 82

Slide 82 text

page No. 82 Copyright © 2021 WingArc1st Inc. All Rights Reserved. https://medium.com/wingarc https://medium.com/wingarc

Slide 83

Slide 83 text

WE ARE HIRING! 検証技術やValueを提供できる テストエンジニア テストの自動化(SET)や継続的テストのデジタル化(SRE)を提供できる パイプラインエンジニア 開発プロセスの促進(SPI)や品質文化を組織全体に推進できる QAエンジニア Software Process & Quality Improvement Department まずはカジュアル面談から。 TwitterにDMください。

Slide 84

Slide 84 text

Copyright © 2021 WingArc1st Inc. All Rights Reserved.