エラーログの文面は、作文ではなく設計でした

カードの並び替えを作りました。
失敗しうる箇所が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)を一緒に出しておくと、探す作業そのものが消えます。

文面は、書き終わったあとに整える飾りだと思っていました。
実際は、失敗したときに何をするかを決める設計の一部でした。

目次