Flying Cat Penguin

ゆるゆる仕事、ソフトウェアテスティング関連のことについて綴ります。

「Systems Engineering Demystified」(2021年)

2021年の読書 :25冊目/目標30冊

前回読んでいたシステムズエンジニアリングの書籍の巻末で紹介されている本だったので手に取ってみました。

内容は主に、各工程でのメタモデルを示して、解説をする…というような構成でした。

個人的に、テストセットがシーケンス図やアクティビティ図で実行順序定義されているのが新鮮でした。
某テストコンテストでは、テストセット…いわゆるテストコンテナはパッケージ図のような扱いが多かったので…。

個人的には、紹介元の書籍の方が学びが多かった気がします。
車システムの例示なので、車業界の方には参考になるかもしれません。

参考
ACM Learning Center

「AIソフトウェアのテスト 答のない答え合わせ[4つの手法]」(2021年)

2021年の読書 :24冊目/目標30冊

流し読みレベルですが、読んでみました。
本書はPythonでの簡単なサンプルを元に理論について解説してくれています。

読むだけだと数式のイメージがつきにくいので、
サンプルを動かしながら理解を深めるものかなと思います。

過去のスマートエスイーでの機械学習に関する講義で、
同様のことを学びましたが、
個人的な感想ととしては、上質なデータをどう集めるかにかかっている気がするなと思う今日この頃。

「ソフトウェア品質知識体系ガイド(第3版)」(2020年)


2021年の読書 :23冊目/目標30冊

そういえば、読んでない…ということで、流し読みしました。

やはり、情報としては原本をたどるのが一番いいですが、
こういった書籍で俯瞰的に見るのもたまにはいいですね。

メモ:時期に応じて出てくるバナーを回避したい

直接的ではないですが、E2Eテストでテストケースを考えるにあたって、ちょっと悩んだことがあったのでこちらにメモ。

問題

  • 時期に応じてバナーが出てくるため、E2Eテストのアクションとして、バナーを閉じる動作があるときとないときがある。


f:id:dandan_611:20210520001233j:plain

解決策

  • バナーの要素の有り無しを判定して、残りの手順を実行するようにする。

sample code

        if(await this.bannerCloseButton.exists) {
            await t.click(this.bannerCloseButton);
        } 

※Selecter関連は割愛

補足
ちなみに、このバナーはでかすぎるので、実行をウィンドウ最大かヘッドレスにしないと失敗する。
E2Eテスト関連はいつもウィンドウサイズで悩むな…。

参考
https://stackoverflow.com/questions/47359687/testcafe-how-to-check-if-a-web-element-exists-or-does-not-exist-without-failin

「Agile Model-Based Systems Engineering Cookbook」(2021年)

2021年の読書 :22冊目/目標30冊

現状最新の書籍なのとタイトルにひかれて手に取ってみました。

本書ではMBSEをアジャイル開発の文脈でどのように適用するのかをプロセスを通して説明してくれている書籍です。
例えば…ユースケースをユーザーストーリーに分解するなどのやり方は非常に参考になりました。
モデルベースで開発する際にこの書籍を読み返したいなと思う書籍でした。

また、この書籍の五章では、モデルベースドテストについての話も触れられていていい感じです。
そして、その中で「テスト駆動モデリング(TDM)」という考え方が示されていました。

書籍としては、まずテストケースを考えてモデルを作っていくという話をしているのですが、
考え方としては今のテスト設計コンテストにおけるテスト開発プロセスに通じる内容だなと思いました。

例えば、こんな感じのサンプルとアクティビティはこんな感じでした。

f:id:dandan_611:20210509115932p:plain

①テストケースの定義
自然言語
 ex.単一の光は、右のタイミングで正しい順序で色を経るべきである:RED TIME⇒B⇒YELLOW TIME。

②小さなモデル化
・状態遷移図(省略)
・内部ブロック図(省略)

③テストケースの適用(実行含む)
・シーケンス図(省略)

④欠陥修正

上記で書かれているテストケースは、テストケースよりはテスト要件もしくはテスト観点という感じでした。
何となく、ISTQBでいわれているMBTのテストモデル作成に似ている感じです。
このやり方は意外とテストクラスタ向けに話してもいい無いような気がします。
モデルを使ってテストしたいと考えている人にはお勧めの書籍です。

参考
ACM Learning Center

「End-to-End Web Testing with Cypress」(2021年)

2021年の読書 :22冊目/目標30冊

Testcafeの書籍を読んでいましたが、他にどんなE2Eテストのツールがあるかなと探してみると、「Cypress」が検索に引っかかることがありました。
なので、今回は「Cypress」の書籍を手に取り…TestCafeやSeleniumとはどう違うのかを頭に置きながら読んでみました。

テスト駆動開発(TDD)についても少しだけですが、解説がありました。

  • TDD プロセス
  1. 実装する必要のある機能の定義
  2. 新しいテストを書く
  3. テストを実行して、テストが失敗するかどうかを確認します
  4. 合格するテストケースのコードを書く
  5. 追加された機能に対してテストを実行して、テストに合格することを確認します
  6. コードのリファクタリング
  7. このプロセスを繰り返す

また、TDDを実践するにあたって本書では、「開発が始まる前に終わりを視覚化すること」と書かれているのは簡潔で分かりやすかったです。
サンプルでは、下記の機能要件についてのシナリオを作成して実装していました。

機能要件
 - 新しいtodoアイテムの追加
 - ToDoアイテムの削除
 - 追加されたToDoアイテムの表示
 - 追加されたToDoアイテムの数を表示する

E2Eテストを構築する場合、基本はこのシナリオをWebアプリケーションと対応付けて実装していくわけですが、
読み解くにあたっては、実際の操作とコード上の振る舞いを一致させるには、通常手間をかけないといけないなという印象です。
ユースケース記述やアクティビティ図にしても一度コード上のUIに対応付けないといけないので、自然言語スクリプトやモデルを書いたらそのまま解決するかというと、なかなか悩みどころです。

また、そういった操作を実装するにあたっては、要素(=セレクタ)を取得する必要があります。
この書籍でもセレクタで取得するための方法としてはいくつかあるということで下記が紹介されていました。

- data-cy
- data-test
- data-testid
- id
- class
- tag
- attributes
- nth-child

Cypressの書籍だからWebマニュアルにも書いてある記述がそのまま推奨になっているのは納得なのですが、どうやら上記のうち、カスタムのdata-*属性を使うと良いらしいです。
それ以外の要素だとどうしても画面設計としてみたときに別の使われ方が意図されたり、他の変更の影響が受けやすいからなのだと思います。

また、Cypressは、少し前に触っていたTestCafeよりもデバッグがしやすく、UIも充実している良いテストフレームワークだなという印象でした。
もしクロスブラウザにもっと対応できていたら個人的にはこちらの方が使いやすい印象です。

少し残念だったところは、本書ではページオブジェクトパターンの実装が紹介されていなかったことでした。
最近のE2Eテストであれば基本は乗っていそうなイメージだったので…。

ですが、基本的な機能についてはSeleniumの書籍などと同様に網羅しているので、ひとまずシナリオテストを作成するには困らない内容だと思います。

メモ

  • テストファイルの基本構造
// Module declarations

import {module} from 'module-package';

// test body

context('テスト目的', () => {
  beforeEach(() => {
    cy.visit('http://todomvc.com/examples/react/#/')
  });

  describe('テストグループ', () => {

     it('runs sample test テスト名', () => {

        expect(2).to.eq(2);

     })
   })
})

参考
ACM Learning Center
GitHub - PacktPublishing/End-to-End-Web-Testing-with-Cypress: End-to-End Web Testing with Cypress, published by Packt
React • TodoMVC
HTML5のカスタムデータ属性(data-*)を使ってリアルタイムにバリデーションする。 - Qiita

「Mastering TypeScript」(2021年)

2021年の読書 :21冊目/目標30冊

ひとつ前で読んだ「Programming TypeScript」が中級者以上の対象だったのでこちらを手に取ってみました。
こちら書籍の方が、小さいサンプルコードで解説してくれており、実行しながら確認できるのでいい感じです。
初学者の方は手に取ってもいい書籍だと思います。

まだまだぼんやりなので復習が必要なところ

  • ジェネリック
  • 非同期言語機能
  • デコレータ
  • Jestを用いたテスト駆動開発
  • Angulerについて
  • Reactについて(仕事先はこちらを利用しているっぽい)
  • Vueについて

ここは、Java Goldの勉強と並行して確認していこうかと思います。

今度のTypeScript関連の書籍としては、E2EテストかJestの書籍を探して読んでみようと思います。

参考
ACM Learning Center