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

More Related Content

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

受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIGHayashi Yuichi
 
Sl勉強会 ソフトレイヤー活用ガイド紹介
Sl勉強会 ソフトレイヤー活用ガイド紹介Sl勉強会 ソフトレイヤー活用ガイド紹介
Sl勉強会 ソフトレイヤー活用ガイド紹介Maho Takara
 
AgileShimane始動!! in OSC2011Shimane
AgileShimane始動!! in OSC2011ShimaneAgileShimane始動!! in OSC2011Shimane
AgileShimane始動!! in OSC2011ShimaneRyuichi Tsuruhara
 
Mercari scraping
Mercari scrapingMercari scraping
Mercari scrapingOgataAyaka
 
案件で使えるプラグイン特集
案件で使えるプラグイン特集案件で使えるプラグイン特集
案件で使えるプラグイン特集優也 田島
 
業務システムで使うSpring Dynamic Modules
業務システムで使うSpring Dynamic Modules業務システムで使うSpring Dynamic Modules
業務システムで使うSpring Dynamic ModulesHiroki Kondo
 
ここからはじめるAction Script 3.0 入門前
ここからはじめるAction Script 3.0 入門前ここからはじめるAction Script 3.0 入門前
ここからはじめるAction Script 3.0 入門前Yusuke Kamo
 
HTML5を活用した効果の高いリッチアプリ開発体制構築とコンサルティングの実現方法
HTML5を活用した効果の高いリッチアプリ開発体制構築とコンサルティングの実現方法HTML5を活用した効果の高いリッチアプリ開発体制構築とコンサルティングの実現方法
HTML5を活用した効果の高いリッチアプリ開発体制構築とコンサルティングの実現方法Kazuhiro Kotsutsumi
 
フレームワークビギナー勉強会
フレームワークビギナー勉強会フレームワークビギナー勉強会
フレームワークビギナー勉強会サトウハルミ
 
HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話suno88
 
nomlab_okayamaruby_subslide
nomlab_okayamaruby_subslidenomlab_okayamaruby_subslide
nomlab_okayamaruby_subslidenomlab
 

Similar to エラーハンドリングモデル考察 (13)

HTML5の話
HTML5の話HTML5の話
HTML5の話
 
Running Lean Cp04
Running Lean Cp04Running Lean Cp04
Running Lean Cp04
 
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
受託開発でのAngularJS - 第1回AngularJS 勉強会 at LIG
 
Sl勉強会 ソフトレイヤー活用ガイド紹介
Sl勉強会 ソフトレイヤー活用ガイド紹介Sl勉強会 ソフトレイヤー活用ガイド紹介
Sl勉強会 ソフトレイヤー活用ガイド紹介
 
AgileShimane始動!! in OSC2011Shimane
AgileShimane始動!! in OSC2011ShimaneAgileShimane始動!! in OSC2011Shimane
AgileShimane始動!! in OSC2011Shimane
 
Mercari scraping
Mercari scrapingMercari scraping
Mercari scraping
 
案件で使えるプラグイン特集
案件で使えるプラグイン特集案件で使えるプラグイン特集
案件で使えるプラグイン特集
 
業務システムで使うSpring Dynamic Modules
業務システムで使うSpring Dynamic Modules業務システムで使うSpring Dynamic Modules
業務システムで使うSpring Dynamic Modules
 
ここからはじめるAction Script 3.0 入門前
ここからはじめるAction Script 3.0 入門前ここからはじめるAction Script 3.0 入門前
ここからはじめるAction Script 3.0 入門前
 
HTML5を活用した効果の高いリッチアプリ開発体制構築とコンサルティングの実現方法
HTML5を活用した効果の高いリッチアプリ開発体制構築とコンサルティングの実現方法HTML5を活用した効果の高いリッチアプリ開発体制構築とコンサルティングの実現方法
HTML5を活用した効果の高いリッチアプリ開発体制構築とコンサルティングの実現方法
 
フレームワークビギナー勉強会
フレームワークビギナー勉強会フレームワークビギナー勉強会
フレームワークビギナー勉強会
 
HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話
 
nomlab_okayamaruby_subslide
nomlab_okayamaruby_subslidenomlab_okayamaruby_subslide
nomlab_okayamaruby_subslide
 

More from 道化師 堂華

Reflection with xamarin.forms
Reflection with xamarin.formsReflection with xamarin.forms
Reflection with xamarin.forms道化師 堂華
 
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編道化師 堂華
 
C++ tips2 インクリメント編
C++ tips2 インクリメント編C++ tips2 インクリメント編
C++ tips2 インクリメント編道化師 堂華
 
C++プログラマの為のセキュリティ入門
C++プログラマの為のセキュリティ入門C++プログラマの為のセキュリティ入門
C++プログラマの為のセキュリティ入門道化師 堂華
 
エラーハンドリング
エラーハンドリングエラーハンドリング
エラーハンドリング道化師 堂華
 
マスタリング バベル
マスタリング バベルマスタリング バベル
マスタリング バベル道化師 堂華
 
並列プログラミング 入門!&おさらい!
並列プログラミング入門!&おさらい!並列プログラミング入門!&おさらい!
並列プログラミング 入門!&おさらい!道化師 堂華
 

More from 道化師 堂華 (9)

Reflection with xamarin.forms
Reflection with xamarin.formsReflection with xamarin.forms
Reflection with xamarin.forms
 
C++ tips4 cv修飾編
C++ tips4 cv修飾編C++ tips4 cv修飾編
C++ tips4 cv修飾編
 
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編
 
C++ tips2 インクリメント編
C++ tips2 インクリメント編C++ tips2 インクリメント編
C++ tips2 インクリメント編
 
C++ tips1 #include編
C++ tips1 #include編C++ tips1 #include編
C++ tips1 #include編
 
C++プログラマの為のセキュリティ入門
C++プログラマの為のセキュリティ入門C++プログラマの為のセキュリティ入門
C++プログラマの為のセキュリティ入門
 
エラーハンドリング
エラーハンドリングエラーハンドリング
エラーハンドリング
 
マスタリング バベル
マスタリング バベルマスタリング バベル
マスタリング バベル
 
並列プログラミング 入門!&おさらい!
並列プログラミング入門!&おさらい!並列プログラミング入門!&おさらい!
並列プログラミング 入門!&おさらい!
 

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