ソフトウェアテスト観点-CRUD編~「消えたように見える」は「消えた」じゃなかった~
「削除ボタン押したら、一覧から消えた。はい、削除テストOK」
新人のころ、僕はデータの削除テストをそんなふうに思ってました。
消す。一覧から消える。詳細を開いたら「データがありません」。
完璧じゃん、と。
……これがもう、見事に甘かった。
ある現場で、一覧から消えたはずのデータが、別の検索画面から条件を指定すると、しれっと出てきたんです。
月次の集計には、その「消えたはずの数字」がちゃんと足されてる。
一覧では消えてる。集計では生きてる。
「消えたように見える」は、「消えた」とは限らなかったんですよ。
CRUDは、データの"一生"を見るテスト
そもそもCRUD(クラッド)って何か、から。
これは Create(登録)・Read(参照)・Update(編集)・Delete(削除) の頭文字をとった言葉で、ざっくり言うと「データの一生でやる操作のまとまり」のことです。
城でたとえると——住人(データ)が城に住み着き(登録)、日々暮らし(参照)、引っ越しや改名をして(編集)、いずれ出ていく(削除)。
この一生のどこかで、城の台帳(記録)と実際の住人がズレると、城の管理は静かに崩れていきます。
さっきの「消えたのに集計に残ってる」も、台帳の一部だけ更新が漏れた状態です。
入力フォーム編(②の部屋)では「入力できた≠正しく保存された」をやりました。
今日はその一個奥——登録した後のデータが、どう生きて、どう消えるかの部屋です。
観点は全部で39個。8つのカテゴリに分けて、「ここを見落とす」というポイント付きで置いていきます。
※今回も「管理系のWebシステム」をイメージして書いてます。
一般的なデータ管理画面でもほぼそのまま使えます。
この部屋の地図(目次)
① 登録(Create)の基本:「登録できた風」を疑う(観点1〜5)
② 重複・一意制約:同じものを2つ作れてしまわないか(観点6〜9)
③ 参照・一覧への反映(Read):操作の結果が、ちゃんと見える場所に出るか(観点10〜14)
④ 編集(Update)の基本:変えたところ"だけ"変わるか(観点15〜19)
⑤ 同時編集・競合:2人が同時に触ったとき(観点20〜23)
⑥ 削除(Delete)の基本:本当に、全部の出口から消えたか(観点24〜29)
⑦ 関連データ・整合性(波及):消したものに、繋がってたもの(観点30〜34)
⑧ 操作の権限・状態・UX:誰が、どう操作できるか(観点35〜39)
部屋①は無料で公開しますので、気軽にどうぞ!
① 登録(Create)の基本:「登録できた風」を疑う
データの一生の出発点。
ここでの合言葉は、「登録できた」と「登録ボタンを押せた」は違う、です。
1. 正しい内容で新規登録できる
基本中の基本。
でも見るのは、完了メッセージが出て終わり、じゃなくて、一覧や詳細に実際に反映されるまでセット。
"登録できた風"の画面が出てるのに、裏では保存されてない、が地味にあります。
2. 登録した値が、保存後そのまま表示されるか
登録した直後に、詳細/編集画面を開いて値を照合する。
トリム・全半角変換・改行除去で化けてないか。
これは入力フォーム編の「往復確認」とまったく同じ動きで、CRUDでも最初にやる癖をつけると強い。
3. 登録直後、一覧の正しい位置に現れるか
新着データが、一覧のソート順や絞り込み条件の関係で、末尾や別ページに飛んで「登録できてないじゃん」と誤認するパターン。
実は登録されてて、ただ見えてないだけ、はよくある。
4. 連続で複数件を登録する
続けて2〜3件登録してみる。前の入力値やIDが残ってないか。
そして採番が重複・歯抜けにならないか。
1件だけのテストだと絶対に見つからないやつです。
5. 登録をキャンセル/戻るで離脱する
入力途中でキャンセル、あるいはブラウザの「戻る」で抜ける。
キャンセルなのに下書きが作られてる、二重で残ってる、が起きないか。
ここまでで①。
「完了メッセージ=保存成功じゃない」「1件テストでは出ない採番の罠」みたいな、リスト名だけじゃ伝わらない着眼点が混ざってるのが分かると思います。
CRUDの本番は、ここから先の②〜⑧——特に削除と同時編集です。
ここから先では、
残り7つの部屋(②重複 〜 ⑧権限・状態UX)を、各カテゴリの「ここを見落とす」ポイント付きで
冒頭の「消えたはずが集計に残ってた」の正体を含む、現場で実際に事故った"やらかし事例"を2本
そして、39観点ぜんぶをコピペで使えるExcel(チェック列・カテゴリ絞り込み付き・やらかし事例シート同梱)
を置いておきます。データの一生を追いかける地図を、丸ごと持ち歩けます。
ここから先は
¥ 500
この記事が気に入ったらチップで応援してみませんか?
