エラーハンドリングモデル考察

9,823 views

Published on

エラーハンドリングモデルに関する考察。

エラーハンドリング勉強会 ( http://partake.in/events/9874b92a-4cf0-4a20-a3fe-951239da5612 )にて発表。

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,823
On SlideShare
0
From Embeds
0
Number of Embeds
3,797
Actions
Shares
0
Downloads
27
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

エラーハンドリングモデル考察

  1. 1. エラーハンドリングモデル考察<br />エラーハンドリング勉強会 ( 2011-09-04 )<br />
  2. 2. 導入<br />自分なりにエラーハンドリングまわりについていろいろ考察した内容をまとめてみました。<br />エラーハンドリングを制することは間違いなくプログラミングを制するのに必要不可欠な要素ですので、エラーハンドリングそのものについての理解を深めていきましょう!<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />2<br />
  3. 3. 前回の発表<br />以前、「Boost.勉強会 #3 関西」でも「エラーハンドリング」というタイトルで発表しました。主張が変わってるところなどがありますが、よろしかったらそちらもご参照ください。<br />PPTX版:http://www.trickpalace.net/paper/error.handling.pptx<br />PDF版:http://www.trickpalace.net/paper/error.handling.pdf<br />slidesharehttp://www.slideshare.net/wraith13/ss-7987895<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />3<br />
  4. 4. トピック<br />エラーとは?<br />エラー情報モデル<br />人間系エラーハンドリング<br />未検知エラー<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />4<br />
  5. 5. この発表で「エラー」について<br />全般的に抽象的な話なので、抽象的且つ広義な意味でのエラーをさします。<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />5<br />
  6. 6. エラーとは?<br />エラーハンドリングモデル考察<br />
  7. 7. そもそもエラーとは?<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />7<br />
  8. 8. そもそもエラーとは?<br />「なんらかの不整合」<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />8<br />
  9. 9. エラーハンドリングの目的<br />エラーが「なんらかの不整合」であるとするとエラーハンドリングの目的は次のようなものだと言える。<br />不整合を正す、あるいは正された状態に近づける。<br />不整合を記録あるいは通知する。<br />人間系をシステムの一部と見なす場合、これは目的ではなく前項を果たす為の手段と言える。<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />9<br />
  10. 10. エラー情報モデル<br />エラーハンドリングモデル考察<br />
  11. 11. エラー情報モデル<br />どのようにエラー情報を扱うかはエラーハンドリングの肝の一つです。<br />さまざまなエラー情報モデルについて考えてみましょう。<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />11<br />
  12. 12. エラー情報モデル<br />voidエラーモデル<br />unitエラーモデル<br />singleエラーモデル<br />stackエラーモデル/nestエラーモデル<br />listエラーモデル<br />treeエラーモデル<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />12<br />
  13. 13. エラー情報モデル<br />voidエラーモデル<br />エラーをそもそも検知すらしないモデル。<br />結果として問題が発生した場合には暴走などといった事態を招きやすい。<br />実例:Z80アセンブラ<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />13<br />
  14. 14. エラー情報モデル<br />unitエラーモデル<br />エラーを検知はするがその情報を扱わないモデル。<br />検知により処理を中断するのみ。<br />実例:Icon言語<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />14<br />
  15. 15. エラー情報モデル<br />singleエラーモデル<br />エラーを検知しその情報を同時にひとつのエラーについてのみ扱うモデル。<br />現状、もっとも一般的だと思われるモデル。<br />実例:86系アセンブラ、Win32API<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />15<br />
  16. 16. エラー情報モデル<br />stackエラーモデル/nestエラーモデル<br />エラーを検知しその情報を必要に応じて入れ子にして扱うモデル。<br />singleエラーモデルを拡張したものと言え、一般的に言語/システムの機能ではなくライブラリで実現される。<br />実例:Java,C#,C++11<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />16<br />
  17. 17. エラー情報モデル<br />listエラーモデル<br />エラーを検知し必要に応じてその情報をリストで扱う。<br />エラーが発生したままの状態でも処理の継続が可能なモデル。<br />実例:各種コンパイラ<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />17<br />
  18. 18. エラー情報モデル<br />treeエラーモデル<br />エラーを検知しその情報を必要に応じてtreeで扱うモデル。<br />stackエラーモデル/nestエラーモデルとlistエラーモデルのハイブリッド。<br />実例:trickerr.h ( C++ )<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />18<br />
  19. 19. 人間系エラーハンドリング<br />エラーハンドリングモデル考察<br />
  20. 20. 人間系エラーハンドリング<br />仮に人間系もシステムの一部と見なした場合、それはどのようなものであるべきか考えてみましょう?<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />20<br />
  21. 21. 人間系エラーハンドリング<br />システム的な視点での人間の意味は次のようなものとなります。<br />大本の呼び出し元関数。<br />割り込みイベントの発生元のひとつ。<br />末端の呼び出し先関数。<br />->関数およびイベントと見なせる。<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />21<br />
  22. 22. 人間系エラーハンドリング<br />人間系の関数の特徴<br />非常に動作が重い。<br />グローバル変数(リソース)にアクセスしまくり。<br />失敗がすることがある。( 誤操作、誤認、誤判断 )<br />->関数としては最悪ですね。<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />22<br />
  23. 23. 人間系エラーハンドリング<br />人間系が呼び出し元関数であるならばエラー情報を受け付けるべき。<br />プログラム全体もひとつの関数であるという視点に立って、内部の関数がそうであるようにエラーをありのまま返すべき。<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />23<br />
  24. 24. 人間系エラーハンドリング<br />人間系が末端の呼び出し先関数であるならばエラー情報を返せるべき。<br />人間系もひとつの関数であるという視点に立って、プログラム内の関数がそうであるようにエラーを返し得るという前提に立つべき。<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />24<br />
  25. 25. 人間系エラーハンドリング<br />実際に人間系関数はどのようなエラーを返すのか?<br />例:<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />25<br />キャンセル<br />タイムアウト<br />一時停止<br />サスペンド<br />終了<br />ヘルプ<br />バグレポート<br />サポートリクエスト<br />
  26. 26. 人間系エラーハンドリング<br />これらのエラーは常に人間が返せるようになっているべき。<br />特にバグレポートやサポートリクエストはシステムとして用意しておくことで、より詳細な情報取得が可能になり、デバッグやサポートの役に立つことでしょう。<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />26<br />
  27. 27. 未検知エラー<br />エラーハンドリングモデル考察<br />
  28. 28. 未検知エラー<br />システム的にエラーはエラーとして検知されて初めてエラーとなります。<br />これは言い換えると本来エラーであるべき状態であってもエラーを検知するコードが不十分な為にエラーとして認識されない状態があることになります。<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />28<br />
  29. 29. 未検知エラー<br />実害があるとは限らないですが、未検知エラーは全てバグと言えます。<br />「疑わしきはエラー」とする視点に立つとプログラムは常にエラー状態にあるとも言えます。<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />29<br />
  30. 30. 未検知エラー<br />未検知エラーへの対処として人間系関数がエラーを返すことで問題を軽減できる可能性がある。<br />->未検知エラーへの対処の一環として、本来、システム系しか返すことの無いハズのエラーも人間系関数から返せるようにするのも面白いかも?<br />エラーハンドリングモデル考察 エラーハンドリング勉強会<br />30<br />
  31. 31. 質疑応答<br />エラーハンドリングモデル考察<br />
  32. 32. ご清聴ありがとうございました。<br />エラーハンドリングモデル考察<br />

×