$30 off During Our Annual Pro Sale. View Details »

[OutSystems] Testing Framework がいい。とてもいい。

[OutSystems] Testing Framework がいい。とてもいい。

BDD Framework のやりづらさを黒魔術で解決しよう!

kata_junn

July 20, 2022
Tweet

More Decks by kata_junn

Other Decks in Programming

Transcript

  1. 片野 潤一
    アジャイル営業推進部
    伊藤忠テクノソリューションズ株式会社
    Testing Framework がいい。
    とてもいい。

    View Slide

  2. 片野 潤一 [email protected]
    Java
    Struts/Spring/MyBATIS
    2005 2014
    OutSystems
    Developer@3人(6か月)
    Developer && TL@約10人(24か月)
    OutSystems 推進
    2019 2020
    Scrum on AWS
    Role:Developer
    TypeScript
    Serverless
    Dynamo, Lambda, S3, SQS, Kinesis,
    Athena
    Angular
    認定スクラムマスター(CSM)
    AWS Certified DevOps Engineer - Professional
    OutSystems 資格 8 個(Expert Traditional Web Developer 含む)
    好き:リアル脱出ゲーム、低温調理、肉、ゴルフ、スパイス、オクトラ
    OutSystems
    OutSystems 推進
    Expert Service
    now!!
    2

    View Slide

  3. BDD Framework

    View Slide

  4. View Slide

  5. BDD Framework

    View Slide

  6. BDD Framework Testing Framework

    View Slide

  7. BDD Framework の
    Developer Experience
    はどうでしたか?

    View Slide

  8. 先端開発者にとっての働きやすい環境と高速な開発を実現するための文化・組織・シ
    ステムが実現されているかを意味する開発者体験(Developer eXperience)です。
    https://cto-a.github.io/dxcriteria/about.html

    Developer eXperience?
    ある特定のシステムを開発・保守する開発者をユーザーと捉え、彼ら・彼女らの開発
    に伴う体験 https://buildersbox.corp-sansan.com/entry/2019/03/11/121417

    View Slide

  9. テスト対象を Public にせざるを得ない問題
    テスト用
    eSpace
    eSpace
    テスト用
    アプリケーション
    w/ BDD Framework
    業務用
    アプリケーション
    参照
    業務ロジック
    アサーション
    前処理/後処理
    さぁ
    実装だ!

    View Slide

  10. テスト用
    eSpace
    eSpace
    業務用
    アプリケーション
    参照
    業務ロジック
    アサーション
    前処理/後処理
    業務ロジックを実装する
    Pub った!
    1
    テスト対象を Public にせざるを得ない問題
    テスト用
    アプリケーション
    w/ BDD Framework

    View Slide

  11. よしテスト
    するぞ
    テスト用アプリケーションから業務ロジックを探す
    2
    テスト対象を Public にせざるを得ない問題
    テスト用
    eSpace
    eSpace
    業務用
    アプリケーション
    参照
    業務ロジック
    アサーション
    前処理/後処理
    Pub った!
    テスト用
    アプリケーション
    w/ BDD Framework
    業務ロジックを実装する
    1

    View Slide

  12. あれ?
    ないぞ?
    テスト対象を Public にせざるを得ない問題
    テスト用アプリケーションから業務ロジックを探す
    2
    テスト用
    eSpace
    eSpace
    業務用
    アプリケーション
    参照
    業務ロジック
    アサーション
    前処理/後処理
    Pub った!
    テスト用
    アプリケーション
    w/ BDD Framework
    業務ロジックを実装する
    1
    気付く
    3

    View Slide

  13. ああ!
    Public か!
    テスト対象を Public にせざるを得ない問題
    テスト用アプリケーションから業務ロジックを探す
    2
    テスト用
    eSpace
    eSpace
    業務用
    アプリケーション
    参照
    業務ロジック
    アサーション
    前処理/後処理
    Pub った!
    テスト用
    アプリケーション
    w/ BDD Framework
    業務ロジックを実装する
    1
    気付く
    3

    View Slide

  14. テスト対象を Public にせざるを得ない問題
    テスト用アプリケーションから業務ロジックを探す
    2
    テスト用
    eSpace
    eSpace
    業務用
    アプリケーション
    参照
    業務ロジック
    アサーション
    前処理/後処理
    Pub った!
    テスト用
    アプリケーション
    w/ BDD Framework
    業務ロジックを実装する
    1
    気付く
    3
    悩む
    4
    え、でもそれってテストのた
    めにプロダクションコードの
    実装に手を加えるってこと?
    そもそも可視性が2通りしか
    ないし公開したい Producer
    を指定するような仕組みがな
    いときついっていうかテスト
    対象 Public にしていったら
    関係ないのに使われる可能性
    を否定できないし Public で
    あるべきでない Action も
    Public にしないとテストが
    できないの?まじかーそっか
    ー(超早口)

    View Slide

  15. テスト対象を Public にせざるを得ない問題まとめ
    BDD は OutSystems の仕組みに則った正規の手段で Action を実行する想定
    OutSystems の可視性バリエーションは Private / Public の2種類のみ
    よって以下のような Private Action をテストしたい場合 Public にせざるを得ない
    - 1か所でしか使われていない完全 Private な Action
    - eSpace 内 Public な Action
    Public プロパティは実装の意図を伝えるための側面が強い(個人差があります)
    そのため、テスティングフレームワークの影響で強制されるのは違和感がある

    View Slide

  16. Testing Framework

    View Slide

  17. テスト対象を Public にせざるを得ない問題
    テスト用
    eSpace
    eSpace
    テスト用
    アプリケーション
    w/ Testing Framework
    業務用
    アプリケーション
    参照
    業務ロジック
    アサーション
    前処理/後処理
    さぁ
    実装だ!

    View Slide

  18. テスト用
    eSpace
    eSpace
    業務用
    アプリケーション
    参照
    業務ロジック
    アサーション
    前処理/後処理
    業務ロジックを実装する
    Pub った!
    1
    テスト対象を Public にせざるを得ない問題
    テスト用
    アプリケーション
    w/ Testing Framework

    View Slide

  19. よしテスト
    するぞ
    テスト用アプリケーションの何か一つを参照する
    2
    テスト対象を Public にせざるを得ない問題
    テスト用
    eSpace
    eSpace
    業務用
    アプリケーション
    参照
    業務ロジック
    アサーション
    前処理/後処理
    Pub った!
    業務ロジックを実装する
    1
    テスト用
    アプリケーション
    w/ Testing Framework

    View Slide

  20. 楽だなー
    テスト対象を Public にせざるを得ない問題
    テスト用アプリケーションの何か一つを参照する
    2
    テスト用
    eSpace
    eSpace
    業務用
    アプリケーション
    参照
    業務ロジック
    アサーション
    前処理/後処理
    Pub った!
    業務ロジックを実装する
    1
    Private だろうが Public だろうが呼び出し放題!!
    3
    テスト用
    アプリケーション
    w/ Testing Framework

    View Slide

  21. Testing Framework でのテスト実装
    テスト対象:GetNextProductNumber
    Public:No
    処理:Aggregate の結果 に +1 して返す

    View Slide

  22. Testing Framework でのテスト実装
    テスト対象:GetNextProductNumber
    Public:No
    処理:Aggregate の結果 に +1 して返す
    まずは Public にする!
    そして SetUp で GetLastProduct がデ
    ータを取得できるデータを作成して、あ、
    あとは意図しないデータがあったらエラ
    ーにするなり削除するなりしないとなー
    副作用に注意しなくちゃな!

    View Slide

  23. Testing Framework でのテスト実装
    Public 化
    不要!

    View Slide

  24. Testing Framework でのテスト実装
    (今回は)
    データセットアップ
    不要!
    Public 化
    不要!
    簡単に Mocking 化
    !!!

    View Slide

  25. Testing Framework でのテスト実装
    テスト開始を宣言
    1
    テスト対象の Proxy を宣言
    2
    Mock クエリの結果を宣言
    3
    Mock クエリの結果をセット
    4
    Proxy 経由で Private Action を実行
    5
    アサーション
    6

    View Slide

  26. Testing Framework でのテスト実装
    テスト開始を宣言
    1
    テスト対象の Proxy を宣言
    2
    Mock クエリの結果を宣言
    3
    Mock クエリの結果をセット
    4
    Proxy 経由で Private Action を実行
    5
    アサーション
    6

    View Slide

  27. OutSystems のテスティングフレームワーク特徴ざっくり
    Testing Framework
    テスト対象強制 Public やるしかない 黒魔術で解決
    プロダクションコードに
    入り混じる
    黒魔術で解決
    Mocking 実装
    プロダクトバージョン
    アップへの追従性
    原理的に心配なし 破綻するかも
    Client Action 対応 あり なし
    BDD Framework

    View Slide

  28. 今日のまとめ
    BDD Framework は盤石な OutSystems 公式のテスティングフレームワーク
    公式がサポートし、OutSystems でのテスティングの中心的存在であるが、
    仕組み上「できないこと」や「できるけれどもやりづらい」ことが多々ある
    そんな中 Testing Framework という選択肢が彗星のごとく現れた
    「BDD でやりづらいことを C# を駆使した黒魔術で解決」している
    公式サポートはゼロだが、ユニットテストの生産性向上に役に立つかも

    View Slide

  29. https://www.outsystems.com/forge/component-
    overview/12754/testing-framework
    Server Action にオススメ!
    皆さんも使ってみましょう!!

    View Slide

  30. ご清聴ありがとうございました

    View Slide