お題
日付欄の入力チェック処理で「正しい日付を入力してるのにエラーになるときがある」というバグが潜んでいるとしたら 1. どのようなことが起きていると思いますか? 2. (ソースコードは見れないとして)どんなテストをしてみますか?
2021-09-07 17:21:36ソフトウェア開発で「日付」を扱うときに気にすべき知見が続々と集まる
@miwa719 1について ・元号の切れ目の仕様誤認 (どちらかの元号にしか対応していない) ・タイムゾーン設定ミス ・日付のフォーマットが違う(2021/09/07と9/7/2021など) ・遠い未来の日付 2について ・再現条件を明確にする
2021-09-07 18:58:26@miwa719 @bufferings 「日付欄のところにはバグがない」と言われとしたら の方が面白そう。
2021-09-07 21:37:51@m_seki @miwa719 んー。他の項目のエラーがそこにでてきてるとか。別の画面の選択が影響してるとか。いちど戻るボタン押すと進めなくなるとか、別タブ操作とか、他のユーザーの処理で裏でなんか変な感じになるとか、かなぁ。コード読みたいw
2021-09-07 21:46:27タイムゾーン怪しいなって思うと、9時前にテストしてみたり。年末だと、暦週チェックしてみたり。コピペで変な空白文字入ってないかなとか。マシンの時間とかロケールとか。んー、あとは、Seleniumとかで日付を適当にぶん回して見てみる。
2021-09-07 21:38:56@miwa719 自分には「正しい」を疑いたいシチュエーションなので、 1は、 ・受入可能なフォーマットの仕様確認(apr/Apr/4/04...) └ 自由入力式ならパーサの誤認を疑う ・実行しているコンピュータの時刻がおかしい 2はまず再現方法を確認し、そこから探索ですね、、、
2021-09-07 23:53:40@miwa719 あきやまさんと、被りますが、 1.は、タイムゾーン、サマータイム、閏年。定番だけど。 組込みでRTCを内蔵する様な場合は、電池の残量。 2.は境界値テスト。電池の場合は、残量ギリギリのを確保しておく。
2021-09-13 07:27:11@miwa719 真っ先に疑うのは入力値の正規化とバリデーションですね。 ・2021/9 → 2021/09 が正かも? ・201002 → 2010年02月とされるかも?2020年10月02日とされるかも?
2021-09-16 14:26:581 バリデーションの誤り - 比較する値の誤り - 比較演算子の誤り - 比較対象の誤り(data型とstring型など) フォームの誤り - htmlであればid, nameなど誤り - jsでsubmitしている場合呼び出す関数の誤り - htmlタグの構造上の誤り(で送信されない) - 受け取った際のデータ型の誤り (つづく) twitter.com/miwa719/status…
2021-09-07 18:06:32(1 の続き) 仕様の誤り 入力した日付以外の入力値/処理の誤り テスト環境の誤り 入力した「正しい日付」という認識の誤り 2 入力した日付をもう一度 次にその前後一日ずつ テスト実施日 当日 月初や月末、年末 存在しない日付 パッと思いつくのはこれくらいかな...🤔
2021-09-07 18:06:33私くらいひねくれてるとエラーの原因が日付とは限らないんじゃないかと疑ったりしますね。 例えば配達日時を指定するとして、日時に問題は無いけどそもそも配達エリア外だったりしてるのに不親切なエラーが出てるだけだったりとか。 twitter.com/miwa719/status…
2021-09-07 18:22:55例えば、チェックはサーバーで行われてるとするなら、サーバー側がUTC+9になってなかった…みたいだとテストする時間帯で当日日付は通らないなんてあるかも。 テストはちょっと休憩して同じ日付、±1日、月末月初、年末年始、閏年、存在しない日付かなぁ twitter.com/miwa719/status…
2021-09-07 18:46:33それはもう、膨大な数の可能性があると思う。何なら『日付のところでエラーが出てるけど実は名前のところでバグってる』みたいなことすらある。 ソースが見られないのならどれだけ考えても『推測』でしかないので、箱を開けてみるまで答えは出ないと思う twitter.com/miwa719/status…
2021-09-07 18:50:48浮かぶのは閏年に関わるバグ 2/28以前とと3/1以降でバグが出るか出ないかチェックしてみる…かな twitter.com/miwa719/status…
2021-09-07 19:09:15「正しい日付」の定義は何だろう。 今日、なのか、実在する日付、なのか、それとも? あと、なるときとならないときの違いがあるのか考える。 違いがあるなら問題は日付じゃないかもだし。 って考えながら手順を細かく調整しつついぢくりまわすんだろあなあ。自分なら。 twitter.com/miwa719/status…
2021-09-07 19:21:03大抵はタイムゾーン周りの考慮漏れなので、報告のあった環境のタイムゾーンを確認してもらったり、いくつかのタイムゾーンや時間帯で確認したりします。あとはテスト対象次第かな…… twitter.com/miwa719/status…
2021-09-07 21:15:23