人に使ってもらうツールで例外発生を避けるべき理由

C#

こんにちは、働くC#プログラマーのさんさめです。

「例外」はプログラムを書く上で、
決して切り離せない言葉です。

プログラマーはユーザーの手元に
アプリケーションを届けるとき、
可能な限り未処理例外を発生しないように
しておく必要があります。

では、なぜ例外を発生してはいけないのでしょうか?

本記事では、さんさめ個人の心構えを記しておきます。
決して万人に押し付けるようなものではないですが、
1つの意見として参考になれば幸いです。

スポンサーリンク

例外発生を避ける理由その1:作業内容が飛ぶ

ユーザーの手元で例外が発生してしまうと、
そのアプリケーションは強制終了してしまいます。

それが例えばデータ編集ツールだった場合、
保存していない作業内容は失われてしまいます。

「Wordが全く応答しなくなり、
書き途中のレポートが消えた」
こんな経験をしたことが
ある方もいるのではないでしょうか。

さんさめ
さんさめ

つらい…

プログラマーが頑張っていれば、
その人の時間を奪わなくて済んだかもしれない。

使う人の気持ちに立つことで、
「修正しないといけない」と自分を戒めることができます。

他人のため、と言えるかもしれません。

例外発生を避ける理由その2:信頼性が下がる

ユーザーのもとで起きる例外を放置していると、
そのアプリケーションの信頼性は、
見る見るうちに下がっていきます。

ひいては、開発者の信頼性にも影響してきます。

すぐに連絡・対応できる環境であれば
多少は信頼性低下に歯止めをかけられますが、
やはり作る人と使う人には距離があるものです。

不具合が直されないものと認知されてしまうと
「この操作はしないように気を付ける」といった
いわば裏マニュアルのようなものができ始め、
「運用でカバー」が前提となり、
想定と異なる使い方をされはじめます。

さんさめ
さんさめ

その前に報告してくれ~~~

そうなると、アプリケーションが持っていた
本来のパフォーマンスを発揮できないことも多いです。

せっかく作ったアプリケーションが、
不信感を持たれながら使われるのは
やるせない気持ちになりますね。

自分や自分の成果物の評価を無駄に下げないよう、
例外はなるべく避けたいところです。

自分のため、ということですね。

例外発生を避ける理由その3:プログラムとして正しくない

プログラムが例外になる、
ということは、そのプログラムが
何かしら間違っていることを示しています。

  • 意図しない入力に対する想定が抜けていた
    • 数値を求めるところに文字が入ってきた
    • nullが来るとは思ってなかった
  • 同時に行ってはいけない操作があった
    • コレクション列挙中に要素を増減させた
  • データが大量になって初めて顕在化した
    • メモリ溢れ
    • (例外にならなくとも)極端な動作速度低下

大抵はプログラマーの想定漏れが原因ですが、
単なるテスト不足のこともあります。

いずれにしても共通しているのは、
例外が発生するということは、
APIの使い方が間違っているかもしれないということです。

(※何かあるとすぐ例外を飛ばしまくる
ライブラリなどもありますが)

例外発生時、ものによってはきちんと
どうすべきかをメッセージに出しています。

「インスタンスを作ったスレッドからのみアクセスしてね」ということ

安易にtry~catchで握りつぶしたりせず、
正しいプログラムを書くことはできないか、
色々検討してみましょう。

さんさめ
さんさめ

try~catchは処理自体も重いので、
事前にif文でチェックするように
変えるだけで、何倍も高速になることも

正しいプログラムを書こうとすれば、
おのずと正しい知識を身に着けることができます。

プログラマーとしての能力のため
というと調子よすぎでしょうか。

それでも例外は発生する。どう対応するかも重要

どんなに心構えを立派にしても、
プログラムを書くのはまだまだ人間の仕事です。

どうしてもミスは発生してしまいます。

その時には、
「いかに気づけるか?」
「いかに早く直せるか?」
といったことが重要になってきます。

【例外】WPFアプリでエラーを報告してもらうための実装
を使えば、そういう事態への準備ができます。

なるべく、
ユーザーの元で起きた例外に
すぐに気づける環境にしておくことが大事です。

スタックトレース1つでも、
開発者が見ればすぐに直せることがほとんどですね。

まとめ

まとめです。

  • ユーザーの手元での例外発生がダメな理由を考察
  • その1:作業内容が飛ぶ(他人のため
  • その2:信頼性が下がる(自分のため
  • その3:正しいプログラムではない(プログラマーとしての能力のため
  • 例外が発生してしまったときの準備も重要

最後までお読みいただきありがとうございました。

コメント

タイトルとURLをコピーしました