Skip to content

Latest commit

 

History

History
70 lines (46 loc) · 4.09 KB

File metadata and controls

70 lines (46 loc) · 4.09 KB

Unit and Integration test for interconverting between "Code" and "Ruby"

Sorry, this is written in Japanese.

ブロックとRubyの相互変換の自動テストの実装方針

現在、ブロックとRubyの相互変換の自動テストは、次の2つのファイルに記載している。

  • test/unit/lib/ruby-to-blocks-converter/*.test.js
  • test/integration/ruby-tab/*.test.js

前者はいわゆる単体テストで、すべてがNode.js上で実行されて軽くて速いが、Rubyからブロックへの変換処理のみが対象なので、一部しかテストできない。

後者はいわゆるシステムテストで、テストコードはNode.jsだが、処理の実行はヘッダレスChrome上で行うため、重くて遅いが、ブロックとRubyとの相互変換処理が対象なので、全体をテストできる。

どちらの自動テストもメンテナンスし続けられればベストだが、作業時間が限られるため、現実的な方法で自動テストをメンテナンスしていきたい。

判断基準や制限

  • 十分にテストできること
    • デグレを検知できること
  • テストの実装が簡単であること
  • 実行時間が短いこと

選択肢

  • (現行) 単体テストとシステムテストの両方を実装する
  • 単体テストのみ実装する
  • システムテストのみ実装する
  • 単体テストはエラーケースのみ、システムテストはそれ以外

決定

採用: 単体テストはエラーケースのみ、システムテストはそれ以外

  • 「システムテストのみ実装する」と迷った
  • 有限時間でできるのはこれしかなかった
  • コーナーケースのチェックが甘くなってしまうため、手動テストで確認すべきところは文章などで残しておかないといけない
    • 単体テスト側のソースコードにコメントとして書いていくことにする (時間があれば単体テストとして実装する余地を残すため)

各選択肢の良い点と悪い点

単体テストとシステムテストの両方を実装する

  • + 単体テストでRubyからブロックへの変換処理のコーナーケースを高速にテストでき、システムテストで俯瞰的なテストができ、十分にテストできる
  • - ブロックの内部構造を把握する必要があり単体テストの実装が難しく、時間がかかる

単体テストのみ実装する

  • + 単体テストでRubyからブロックへの変換処理のコーナーケースを高速にテストできる
  • + システムテストを実装する必要がなく、作業時間が短縮できる
  • - ブロックの内部構造を把握する必要があり単体テストの実装が難しく、時間がかかる
  • - ブロックからRubyへの変換処理のテストを実装できず、デグレが発生する可能性が高いし、毎回、手作業でRubyへの変換処理のテストをする必要がある

システムテストのみ実装する

  • + 単体テストを実装する手間がかからない
  • + システムテストの実装そのものは簡単
  • - コーナーケースを実装する場合にテストの実行時間が長くなってしまう。結果として、コーナーケースは最低限の実装になったり、実装しなかったりする

単体テストはエラーケースのみ、システムテストはそれ以外

  • + エラーケースのみのRubyからブロックへの変換処理の単体テストは実装が簡単
  • + システムテストでは、最も煩雑なエラーケースを扱わないことで、すべてのケースを実装する場合に比べて、実行時間が短くできる。想定では50%くらい違う。
  • - Rubyからブロックへの変換処理の正常系のうち、コーナーケースのチェックが甘くなってしまい、細かい処理でデグレが発生する可能性がある