先日「画像サイズ変更」に伴うバグが発生しました。
不具合対応の中で学ぶべき事項がたくさんありましたので、ブログ記事で紹介します。
まず今回発生したバグ対応の概要についてご説明します。
【概要】
縦横比率が縮小されている画像(JPG)が複数ある。
これらの画像を「指定サイズ」に一括変換する。
→正しく変換されない事象が発生・・・。
お客様からの不具合の一報を受け、すぐにセルネッツ開発メンバーでバグ対応をしました。
セルネッツが行った対応について順を追って解説します。
まず、下記パターンで画像処理が行われるかテストした結果、すべての画像が正しく処理できませんでした。
これは解決まで時間がかかりそうだと、投入人数を増員。メンバー3人がかりで解決にあたりました。
次に、「プログラムの処理スピードに、画像処理が物理的に追い付いていない」という可能性を疑いました。
そこで、画像サイズ変換処理の直前に「sleep 1000(1秒間のウエイト)」記述を入れました。
その結果、後ろ3つの画像は正しく表示できましたが、先頭の画像のみ表示ができませんでした。
少し前進しました。
今回、画像の処理速度の特性から「Sleep」という方法に着眼できたことが、早期解決につながる最初のポイントでした。
いっぽう、別の開発メンバーより「つねに先頭の画像表示がNGというわけではない。画像処理NGの場所は、その時によって変わる。」という報告を受けました。
規則性を見出さない限り、不具合を再現することはできません。試行錯誤の結果、ある規則性を見出しました。
下記のように、「同じ画像での1番目の画像処理はNG、2番目以降はすべて成功する」ということに気が付いたのです。
【規則性】連続する同一画像において、先頭が正しく処理できない。
規則性がわかった後のアクションですが、急ぎの不具合案件の場合「なぜ変換できないのか」という、原因究明に時間を費やすことはしません。
大事なのは、「問題解決」だと考えるからです。業務が止まってしまい「今」困っているお客様は、原因究明よりも目の前にある問題解決を望んでいます。
セルネッツでは「バイパス対応」と呼んでいますが、根本的な原因究明は一旦あきらめて、それとは別の方法で解決できる道を探します。まずは問題が解決されることを最優先します。
【バイパス対応】根本的な原因究明よりも、問題が解決されることを優先する
今回の場合は、「1回目の画像処理が失敗する」という規則性がわかったので、どの画像も2回処理をすることにしました。1回目の処理は捨て、2回目の処理を採用することで、正しい結果を得ることができました。
今回の不具合は、そもそもどうすればよかったのでしょうか?
答えはたったひとつです。エクセルの画像処理はリスクが高いということを留意した「シンプル設計」にする必要がありました。
画像を扱う時は、解像度、ファイル形式、拡張子などの知識が必要です。プロとして、お客様から質問されて、あいまいな回答はできません。
充分な画像処理の知識がないなら、安易にプログラムでの一括処理はせず、元の画像をローカルドライブに集約後、個別にサイズ変換するなど「シンプル設計」にすれば、不具合は防げたのです。
今回の案件に関わらず、「不具合が出た時にどう解決していくか」というのは、すべてのシステム開発の現場で直面することです。
セルネッツでは、不具合対応に必要なスキルを次の3つだと考えます。
【不具合対応に必要な3つのスキル】
1.再現するチカラ
2.規則性を見い出すチカラ
3.問題解決するチカラ
何よりも優先すべきことは、原因究明よりも、「今」困っているお客様が速やかに業務の再開ができることです。
今回の教訓がみなさまのお役に立てましたら嬉しいです。