カードの並び替えを作りました。
失敗しうる箇所が3つあって、最初は3つとも同じログの文面にしていました。
動作としては正しくて、指摘がなければそのまま通っていました。
3箇所のうち、1箇所だけ「中途半端に成功する」
並び替えは「自分と隣の順番を入れ替える」処理なので、データを2行書き換えます。
それまで作ってきた追加・編集・削除・表示切替は、全部1行でした。ここだけ2行です。
失敗しうる箇所を並べると、こうなります。
| 場所 | 落ちたときデータは | 次にやること |
|---|---|---|
| 一覧の取得 | 何も変わっていない | もう一度押す |
| 1回目の書き換え | 何も変わっていない | もう一度押す |
| 2回目の書き換え | 1行だけ変わり、2行が同じ順番になっている | 手当てが要る |
上2つは、失敗しても何も起きていません。もう一度押せば済みます。
3つ目だけが違います。1行目の書き換えは成功しているので、
失敗したというより、中途半端に成功した状態です。
文面が同じだと、次の行動が決められない
最初に書いていたログは、3箇所とも同じ1行でした。
別の処理からコピーしてきた文面です。
これで困るのは、あとでログを読むときでした。読むのは未来の自分です。
文面が同じだと、データを見に行く必要があるのかどうかが分かりません。
上2つなら見に行く必要はありません。3つ目なら見に行く必要があります。
その差がログから読み取れないと、毎回データを開いて確かめることになります。
あるいは、開かずに放置します。
直したのは、文面と情報
直したのは2つです。
1つは、3つ目の文面を「失敗した」ではなく「途中で止まった」と分かる形にしたこと。
もう1つは、3つ目にだけ、対象になった2枚のIDを出すようにしたことです。
IDが出ていれば、その2枚だけ見れば済みます。
出ていなければ、全部の行を目で見て、同じ順番になっている組を探すことになります。
書いた時点では1行の差ですが、読むときの手間が変わります。
動くかどうかでは見つからない
この粗さは、動作を確認しても見つかりません。
3箇所とも、正常系では通りません。失敗したときにしか出てこない文字列です。
テストを書いても、文面の適切さは判定できません。
ログに書くのは「何が失敗したか」より「いま何が起きている状態か」なんだと分かりました。
そして、復旧に必要な情報(今回はID)を一緒に出しておくと、探す作業そのものが消えます。
文面は、書き終わったあとに整える飾りだと思っていました。
実際は、失敗したときに何をするかを決める設計の一部でした。
