Slide 1

Slide 1 text

update update Copyright © 2022 WingArc1st Inc. All Rights Reserved. ウイングアーク1st 株式会社 ソフトウェアプロセス&品質改善部 坂口祐樹 November 4, 2022 純国産データベースエンジンの アジャイルな開発のお話

Slide 2

Slide 2 text

page No. page No. 2 ソフトウェアプロセス&品質改善部 DEQIグループ 坂口 祐樹 Yuki Sakaguchi • 札幌生まれ、札幌育ち、北広島在住 • Scrum Fest Sapporo 2022運営メンバー • 仕事 • Dr.Sum開発、検証一筋 • QAマネジメント • QAエンジニア • プライベート • 子供と野球練習、野球審判 • 家族とキャンプ、夜は焚き火 • 好きなもの • スープカレー

Slide 3

Slide 3 text

page No. page No. 3 Copyright © 2022 WingArc1st Inc. All Rights Reserved. 01 本発表について 02 純国産データベースの開発プロセス 04 CI/CD 05 まとめ INDEX 03 自動テスト

Slide 4

Slide 4 text

Copyright © 2022 WingArc1st Inc. All Rights Reserved. この発表について

Slide 5

Slide 5 text

page No. page No. 5 Copyright © 2022 WingArc1st Inc. All Rights Reserved. 本発表について • データベース開発ってこんなやり方をしているんだ • 協力しながら開発するのは大事 • 自動テスト無いと開発できないよね お話しする内容 お話ししない内容 ゴール • データベース開発ってどうやっているの? • 開発期間が⾧い製品を開発するための工夫 • スクラム関連 本発表 • 質問は随時Discordでお願いします 発表後に回答させていただきます

Slide 6

Slide 6 text

Copyright © 2022 WingArc1st Inc. All Rights Reserved. 純国産データベースの開発プロセス

Slide 7

Slide 7 text

page No. page No. 純国産データベースとは Copyright © 2022 WingArc1st Inc. All Rights Reserved.

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

page No. page No. 9 Copyright © 2022 WingArc1st Inc. All Rights Reserved. 要求とチーム チケットやプロジェクトなどの 単位を『要求』という言葉で まとめている。 要求毎にチームが作られる。 そのチームが実装から 検証までを担当する。 1回のリリースで50前後の要求が 実装される。 要求1 要求2 要求3

Slide 10

Slide 10 text

page No. page No. チーム体制 Copyright © 2022 WingArc1st Inc. All Rights Reserved. Dr.Sum開発グループ 14名* QAグループ 6名 要求Xチーム (仮想チーム) 要求の内容や規模に合わせて、 開発グループ、QAグループから 適切な人員を割り当てている * 2022/04時点

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

Copyright © 2022 WingArc1st Inc. All Rights Reserved. 自動テスト

Slide 15

Slide 15 text

page No. page No. 製品の構成 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 © 2022 WingArc1st Inc. All Rights Reserved. HTTP(S) HTTP over TLS Secure Transport Agent クライアント端末 Enterprise Manager Web Browser

Slide 16

Slide 16 text

page No. page No. 16 Copyright © 2022 WingArc1st Inc. All Rights Reserved. 管理 ツール Java, .NET JDBC, ODBC 共通内部 API UI API Server Dr.Sum Serverの構成 バッチ コマンド Dr.Sum Server データベースエンジン SQL DS Script ユーザー管理・システム管理 インポート・エクスポート In-Memory Server 高速集計 Python連携 Dr.Sum Server DS Script - データ投入 - データ加工 SQL - データ取得 - データ更新 全体 - ユーザー管理 - サーバー管理 In-Memory Server Python連携 - AIや機械学習 インメモリ永続 - データの永続化 管理ツール - EnterpriseManager - ScriptEditor

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

page No. page No. 18 Copyright © 2022 WingArc1st Inc. All Rights Reserved. Dr.Sum Serverの自動テスト 管理 ツール Java, .NET JDBC, ODBC 共通内部 API UI API Server バッチ コマンド Dr.Sum Server データベースエンジン SQL DS Script ユーザー管理・システム管理 インポート・エクスポート In-Memory 高速集計 インメモリ永続 Python連携 E2Eテスト:1,300ケース(TestComplete) 画面からの権限制御の妥当性確認を主眼に置いたテスト リグレッションテスト(コマンドバッチ) インポートなどのコマンドバッチに対するテスト API Test(Java、.NET):3,400ケース(xUnit) 集計リクエスト結合テスト:100,000ケース(自作ツール) GUIツールからの集計リクエストを想定したテスト リグレッションテスト(SQL):80,000ケース(自作ツール) ・SQLの実行結果の妥当性確認 ・データ加工やバッチ処理をかけるスクリプト機能の 動作確認 Dr.Sum Server開発に欠かせない命綱のような存在 Unit Test:10,000ケース(Google Test) ※In-Memory Serverとの合算 Dr.Sumを構成するクラスやライブラリに 対する単体+αレベルのテスト

Slide 19

Slide 19 text

page No. page No. 19 Copyright © 2022 WingArc1st Inc. All Rights Reserved. 命綱の作り方 検証観点 Dr.Sum テスト スクリプト 他RDB 結果比較 実行結果 検証観点 テンプレート 類似機能の 不具合 特異な 振る舞いの機能 設計、実装の考慮 (内部閾値や ロジック分岐) 密接な機能の 組み合わせ 過去のイタイ 不具合 秘伝のタレ これがすべて 検証データ

Slide 20

Slide 20 text

Copyright © 2022 WingArc1st Inc. All Rights Reserved. CI/CD

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

page No. page No. 22 Copyright © 2022 WingArc1st Inc. All Rights Reserved. 自動テストの実行 Dr.Sum Server リグレッションテスト 命綱の80,000ケース

Slide 23

Slide 23 text

page No. page No. 23 Copyright © 2022 WingArc1st Inc. All Rights Reserved. 自動テストの実行 Dr.Sum Server API Test In-Memory Server リグレッションテスト Jenkinsを自動テストのエントリーポイントにすることで、 いつでも、誰でも実行できる

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

page No. page No. 25 Copyright © 2022 WingArc1st Inc. All Rights Reserved. develop/作業ブランチのビルド ①ブランチをpush ②ビルドジョブ実行 ③ソースコード取得 ④ビルド/BVT ⑤ビルド/BVT結果通知 BVT(Build Verification Test: ビルド検証テスト) 新たに作成した各ビルドに対して、完全性を確認し、主要な機能性、安定性、 および試験性を検証する自動化テストのセット。 Dr.Sum開発は命綱(80,000ケース)をBVTとして実施。 ISTQB Glossary(https://glossary.istqb.org/jp/term/build-verification-test-2)

Slide 26

Slide 26 text

page No. page No. 26 Copyright © 2022 WingArc1st Inc. All Rights Reserved. develop/作業ブランチのビルド(ビルドジョブのパラメータ) ビルド対象のソースコード 実行するBVTのテストケース

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

page No. page No. 28 Copyright © 2022 WingArc1st Inc. All Rights Reserved. 命綱を全部回すのに240時間かかる?!よろしい、分散実行だ! ・ ・ ・ 50ノード マルチ構成プロジェクトで実行ジョブを作成 各ノードにはラベルを付与

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Copyright © 2022 WingArc1st Inc. All Rights Reserved. まとめ

Slide 31

Slide 31 text

page No. page No. 31 Copyright © 2022 WingArc1st Inc. All Rights Reserved. まとめ 開発は要求単位で開発している • 要求毎にチームを作って、開発から検証まで担当 • チームは開発グループとQAグループから少なくとも1名はそれぞれ所属 • 要求は同時進行する 自動テスト • 開発の命綱 • いくつものデグレードを発見する実績 CI/CD(Jenkins) • 重要な開発インフラ これなくして開発成り立たず • ビルドだけではなく、自動テストのエントリーポイント、分散実行インフラ

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

Copyright © 2022 WingArc1st Inc. All Rights Reserved.