タケモ塾

  • 2023.01.05
  • VBA

【ExcelVBA】画像サイズを変更できないバグをバイパス対応した事例

B1009_ExcelVBAバグ対応

先日「画像サイズ変更」に伴うバグが発生しました。
不具合対応の中で学ぶべき事項がたくさんありましたので、ブログ記事で紹介します。

困った!画像Size変更のバグ発生!

まず今回発生したバグ対応の概要についてご説明します。

【概要】
縦横比率が縮小されている画像(JPG)が複数ある。
これらの画像を「指定サイズ」に一括変換する。
→正しく変換されない事象が発生・・・。


お客様からの不具合の一報を受け、すぐにセルネッツ開発メンバーでバグ対応をしました。
セルネッツが行った対応について順を追って解説します。

どう対応した?

どんな事象が起こっているのか確認する

まず、下記パターンで画像処理が行われるかテストした結果、すべての画像が正しく処理できませんでした。

テスト結果1

これは解決まで時間がかかりそうだと、投入人数を増員。メンバー3人がかりで解決にあたりました。

画像処理の基本的な特性を確認する

次に、「プログラムの処理スピードに、画像処理が物理的に追い付いていない」という可能性を疑いました。
そこで、画像サイズ変換処理の直前に「sleep 1000(1秒間のウエイト)」記述を入れました。

その結果、後ろ3つの画像は正しく表示できましたが、先頭の画像のみ表示ができませんでした。

テスト結果2

少し前進しました。
今回、画像の処理速度の特性から「Sleep」という方法に着眼できたことが、早期解決につながる最初のポイントでした。

いっぽう、別の開発メンバーより「つねに先頭の画像表示がNGというわけではない。画像処理NGの場所は、その時によって変わる。」という報告を受けました。

規則性を見出す

規則性を見出さない限り、不具合を再現することはできません。試行錯誤の結果、ある規則性を見出しました。

下記のように、「同じ画像での1番目の画像処理はNG、2番目以降はすべて成功する」ということに気が付いたのです。

テスト結果3

【規則性】連続する同一画像において、先頭が正しく処理できない。

問題解決のための「バイパス対応」をする

規則性がわかった後のアクションですが、急ぎの不具合案件の場合「なぜ変換できないのか」という、原因究明に時間を費やすことはしません。

大事なのは、「問題解決」だと考えるからです。業務が止まってしまい「今」困っているお客様は、原因究明よりも目の前にある問題解決を望んでいます。

セルネッツでは「バイパス対応」と呼んでいますが、根本的な原因究明は一旦あきらめて、それとは別の方法で解決できる道を探します。まずは問題が解決されることを最優先します。

バイパス対応

【バイパス対応】根本的な原因究明よりも、問題が解決されることを優先する

今回の場合は、「1回目の画像処理が失敗する」という規則性がわかったので、どの画像も2回処理をすることにしました。1回目の処理は捨て、2回目の処理を採用することで、正しい結果を得ることができました。

不具合対応から得た教訓

今回の不具合は、そもそもどうすればよかったのでしょうか?

答えはたったひとつです。エクセルの画像処理はリスクが高いということを留意した「シンプル設計」にする必要がありました。

画像を扱う時は、解像度、ファイル形式、拡張子などの知識が必要です。プロとして、お客様から質問されて、あいまいな回答はできません。

充分な画像処理の知識がないなら、安易にプログラムでの一括処理はせず、元の画像をローカルドライブに集約後、個別にサイズ変換するなど「シンプル設計」にすれば、不具合は防げたのです。

まとめ

今回の案件に関わらず、「不具合が出た時にどう解決していくか」というのは、すべてのシステム開発の現場で直面することです。

セルネッツでは、不具合対応に必要なスキルを次の3つだと考えます。

【不具合対応に必要な3つのスキル】
1.再現するチカラ
2.規則性を見い出すチカラ
3.問題解決するチカラ

何よりも優先すべきことは、原因究明よりも、「今」困っているお客様が速やかに業務の再開ができることです。

今回の教訓がみなさまのお役に立てましたら嬉しいです。