Chrono Mock
言語日本語

テストする価値のある日付

ソフトウェアは、ごく普通の火曜日には壊れません。四半期の最終日、2 月 29 日、年が変わる瞬間、そしてライセンスが切れた 1 秒後に壊れます。そうしたバグを見つけるのがこれらの日付で、そのうち 14 件が名前付きシナリオとして同梱されています。

期間の境界

期間を締める処理、書類に年で番号を振る処理、締め日まで計上する処理は、まずここで間違えます。

  • 月末日 - 月次の締め処理と期間計上は、月の最終日に正しく動くか。
  • 四半期の最終日 - 四半期の締め処理とレポートは、四半期の最終日に正しく動くか。
  • 会計年度の最終日 - アプリは会計年度を正しい日、つまり次の会計年度が始まる前日に締めるか。
  • 年越しの瞬間 - 書類番号、名前に含まれる年、年次レポートは、年が変わるその最中に正しく処理されるか。あとから再起動されるのではなく。

最後のものは、多くの人がまったくテストできないものです。アプリが動いている間に時計が 12 月 31 日の午前 0 時をまたぐ必要があるからです。加速した時計を使えば、10 秒の作業です。

暦と表現の端

  • 2 月 29 日 - 4 年に 1 度しかないうるう日で、驚くほど多くの検証コードが頭から拒否します。
  • Unix エポックのゼロ - アプリは 1970 年 1 月 1 日を実在する日付として扱うか、それとも保存を拒否すべき空の値として扱うか。
  • 2038 年の境界 - 符号付き 32 ビットの time_t が尽きる瞬間、2038-01-19T03:14:07Z。その 1 秒後にカウンターは桁あふれして 1901 年に戻ります。

ライセンス、試用期間、インストール

これらは自社のライセンス機構をテストするためのもので、そのために書かれました。

  • 試用期間の最終日 - 試用期間のまさに最後の瞬間でも、アプリは動くか。
  • 試用期間終了後の初日 - 試用期間が終わった瞬間にアクセスを拒否するか。その場合どのように拒否するか。分かりやすいメッセージか、それともスタックトレースか。
  • 1 年前に期限切れになったライセンス - 昨日だけでなく、ずっと前に期限切れになったライセンスを正しく扱えるか。
  • インストール前の日付 - 時計が自身のインストール日より前に設定されたとき、正しく動作するか。これは対象自身のファイルの日付を読むので、パラメーターは不要です。

業務ルールと時計の挙動

  • 支払期日、+N 営業日 - N 営業日後が期日の支払いは、週末とその国の祝日を飛ばして正しい日に着地するか。カレンダーを必要とする唯一のシナリオで、答えは市場によって異なります。
  • 成年年齢の境界 - ちょうど境界にいる人を受け入れ、1 日足りない人を断れるか。
  • 時計のずれ、+90 秒 - アプリの時計が実時間より 90 秒進んでいても対処できるか。時刻ベースのワンタイムパスワードやトークン検証が壊れるのは、このケースです。

使い方

シナリオとは、名前付きの日付式です。電卓がその意味を計算し、置き換えがその日付でアプリを実行します。どちらでも同じ名前を使います。

# その日付はいつで、その日付は何をテストするのか
chrono calc --preset month-end

# その日付でアプリを実行する
chrono run "C:\apps\test.exe" --preset year-rollover --report session.txt

# 試用期間のシナリオは、開始日を対象自身のファイルの日付から取る
chrono run "C:\apps\test.exe" --preset trial-first-day-after

ウィンドウでは、日付欄の上にチップとして並んでいて、ワンクリックで入力されます。それぞれが「何を捕まえるのか」を説明する一文を持っています。オンラインの日付電卓では得られない部分です。

Chrono Mock の設定画面で、Scenarios セクションが開いています。一覧の上に検索欄があり、その下に既成の各日付が答える問いとともに並んでいます - 2038 年の境界、2 月 29 日、90 秒進んだ時計、月末日 - 一覧の下には、あと 3 つは選んだ値が必要だという行があります。フッターは、Start ボタンの上で時点を平易な言葉で読み上げています。
各シナリオは、日付だけでなく、答える問いも持っています。選んだ値が必要な 3 つは、隠されずに一覧の下に明記されています。

ここに含まれないもの

夏時間の切り替え。アプリを夏時間の開始・終了の境界で動かすことは本当に役立つテストですが、意図的に含めていません。セッションのタイムゾーンは夏時間のない固定オフセットなので、再現できる切り替えがまだ存在しないためです。黙って何もしないシナリオを出荷するくらいなら、出荷しないほうがましです。

タイムゾーン規則のモデルとともに戻ってきます。タイムゾーンができることとできないこと →

試してみる