うるう年、月末、年度またぎ、改元日、2038年。
今日の日付では絶対に出ないバグを、狙って踏みにいく。
日付のバグは、開発中には絶対に顔を出しません。作っている最中に使うのはいつも「今日」で、今日はたいてい月の途中だからです。事故が起きるのは決まって2月29日・月末・年度末・改元日。このツールは基準日を1つ決めるだけで、その周辺の意地悪な日付をまとめて並べます。クリックでコピーして、そのまま入力欄に流し込んでください。すべてブラウザ内で計算しています。
「月末に1ヶ月足す」は、正解が1つに決まりません。仕様で決めていない場合、どちらの答えが返っても文句が言えない状態になります。基準日を変えると、以下の計算結果も追従します。
日付は「連続した数字」に見えて、実際にはそうではありません。月の長さは28〜31日でばらつき、4年に1度は2月が伸び、100年に1度はその例外が起き、400年に1度は例外の例外が起きます。年度は年と一致せず、元号は予告なく変わり、同じ瞬間でもタイムゾーンをまたげば日付が変わります。
それでも開発中は何も起きません。今日の日付は、そのどれにも当たらない安全な日だからです。バグは本番稼働から数ヶ月後、たまたま月末に処理を回した日にはじめて姿を現します。
だから日付は「意地悪な値を狙って入れる」以外に見つけようがありません。境界値分析の考え方そのままで、月末・年度末・うるう日という切り替わりの直前と直後を並べて試すのが確実です。技法としての整理は テスト技法カタログ に、入力欄そのものを壊しにいく値は 意地悪テストデータ生成器 にまとめています。
入力欄そのものを壊しにいく値は 意地悪テストデータ生成器、境界値分析の考え方は テスト技法カタログ、日付の入力チェックに使う正規表現は 正規表現テスター をどうぞ。