Allegro!

JavaやIT系小ネタ、趣味の話まで。

【例外処理設計】あなたがエラーを見つめている時、エラーもまたあなたを見つめているのだ。

「どないやねん」とつっこみが聞こえてきそうです。皆さんこんにちは。管理人のPaZooです。

ALH Advent Calender 2日目 です!ALH Advent Calendar 2020 2度目の参戦。
(ちなみに、去年も2日目に書いてました。)


これもどこからかコピペしたような文章ですが、うちの会社の人(@supreme0110) が思い立ったが吉日のごとく「今年もやるぉーーーい!!!」という物凄い熱量で呼びかけていたので、またまた流れに身を任せて参加してみました。
今年はお声かけいただいてから翌日に記事を書きました。えらい。

去年は仕事に追われており、『明日やろーっと』が続いていたようですが今年はきちんと計画立ててやることができてます。えらいぞ。


さて、今回はシステムに携わる人なら避けては通れぬ道『エラー・例外処理設計』についてつれづれなるままに書いていこうかと思います。

本題:エラー処理・例外処理設計、これ大事。

エラー処理・例外処理設計とは

システムに携わる方なら耳にしたことがあるかもしれませんね。
個人的な理解として、エラー処理設計は想定内のエラーが発生したときに要件に沿った内容でエラー対応の処理を行うもの、例外処理は、想定外のエラーが発生したときに要件に沿った内容でエラー対応の処理を行うものだと考えています。


Javaをはじめとするオブジェクト指向言語では、「例外」という考えがあります。
例外が発生するパターンとして、正常な処理を妨げることが起こると「例外」を発生させるという処理を行います。

ちなみに皆さんは「エラー」と「例外」は同じように扱っていますか?
ソフトウェアの現場における「例外」に対する利用ケースはどうでしょうか。想定されているケースについても「例外処理」が使われているように感じます。

業務内容によっては、例外処理が実行された時点で処理を止めるものもありますし処理を継続させる必要があるものもあります。
この機会に、皆さんの現場では「例外」がどのような定義なのか、どのような処理を行うのかを見てみてはいかがでしょうか。


さて、話が逸れてしまったのでいったん本題に戻ります。
どうして例外処理設計が大事なのか。答えはいたってシンプル。

エラー処理・例外処理設計がされていないと、プログラム実行中にエラーが発生すると意図しないデータが保存されたり異常終了してしまう事態を招いてしまいます。
さらに、エラー処理・例外処理設計を行っていなければプログラムに適切な処理を実装していない場合、エラーが発生したり障害が起こったりするとエラーの原因を迅速に究明できず時間がかかってしまいます。

エラー処理・例外処理設計を行っていればデータの整合性を取ることができますし、エラー調査もしやすいという良いことずくめなのです!
特にアプリケーション開発を行っている場合は、適切なエラー処理・例外処理設計をすることは非常に重要なポイントとなってきますので必ずチェックしておきましょう。

例外(エラー) 処理設計の基本手順

ここでは、基本構造を設計する順番をご紹介していきます。
「エラー設計・例外処理設計ってどうやって考えたらいいの?」と思われるかと思います。以前の私もそう思っていました。。


まずは「システム基本構造」でエラーが発生しない場合を考えましょう。
いわゆる「正常系」のフローですね。そしてその次に、代表的なエラーを洗い出し、エラー別の大まかな対処方法を検討していきます。もちろん内容によってはシステム基本構造を変更せざるを得ないかもしれません。

両者を洗い出した段階で、矛盾する点が表れてくるかと思うのでそこから妥協点を見つけていくような検討方法があります。
システム全体で検討する必要がありますので、できるだけ早い段階でエラー処理設計を行うことが重要です。

エラー処理・例外処理基本設計 順序
  1. 考えられるエラーを洗い出す
  2. 洗い出したエラーを分類する
  3. 分類したエラーごとに重要度を評価する
  4. 分類したエラーごとに対処レベルを決める
  5. システム側で対処するエラーの処理方法を定める
  6. 必要に応じて、エラー対処に共通のクラスや処理を設計する
  7. 定めた処理方法に合わせて、個別のエラー処理を設計する

エラーを分類し、タイプごとに対処方法を検討しますので統一された対処が可能となります。
また、エラー処理に関しては共通のクラスや処理を使用できる場合もあるため無駄のないシステムを構成しやすいです。

例外(エラー) の種類

例外処理と一言で表していますが、立場・視点により意味合いは異なってきます。その中でも大きく分けて3つの分類のエラーを見ていきましょう。

f:id:PaZoo:20201201220018p:plain

軽く列挙するだけでも、これだけの数が挙がるんです。
もしもエラー処理設計を検討していない場合はどうなってしまうか…考えただけでも恐ろしいですね。エラー処理設計が如何に大切かお分かりいただけるかと思います。

例外(エラー) の種類ごとに対処を検討する

エラーの種類によっては、業務に多大な影響を与えてしまうかもしれません。ですので、分類したエラーは分類ごとに対処方法や重要度を検討しましょう。

どんな分類に分けるかといいますと、下記の内容を参考にしながら業務要件レベルで立てつけたほうがよいかと思います。

エラーの種類ごとに明らかにすべき項目
・発生時の損害の大きさ(業務停止や復旧時間など)
・エラーの発生頻度
・エラー処理の大まかな内容

業務要件レベルでシステムを理解したうえで、エラー設計・例外処理設計を行うことが良いシステムに近づけるのではないでしょうか。

おわりに

今回はエラー設計・例外処理設計について紹介してみましたが、いかがでしたか?
ここで最後にひとつだけ。

システムを構成するうえで必ずぶち当たる「エラー処理・例外処理設計」は、誰のためにあるのでしょうか。
個人的な考えですが、私は「システムを使うユーザへの情報伝達・再操作」こそエラー処理・例外処理設計の目的だと思っています。

一言で「エラー」と言っても、その起因を考え、処理を止めずにユーザへ情報を届けること。それが「エラー処理・例外処理」では大事なのではないでしょうか。

この辺のお話は、人それぞれ考え方がありますし、エラー・例外の定義をどのように扱っているかにもよるので一概には言えません。あくまでも管理人個人の意見だとあらかじめご了承ください。

それでは、また次回お会いしましょう!