Togetter/min.tを安心してお使い頂くためのガイドラインを公開しました。
2010年7月7日

エラー処理は誰が、どこまで考えるべき?

あるライブラリを使おうとしたときに、そのエラー処理を「使う側」が「どこまで」受け持つかで疑問を持ち、Twitterで質問しました。 何でもかんでも使う側でエラーをハンドリングする、というのは生産性や理屈から考えると不可能ですし、かといって何もしないのもあり得ません。ではその中間はどこだろうという質問に対する、皆さんの貴重なご意見です。 ありがとうございました。
7
Hirohito Kato ⌘ @hkato193

【質問】ソフトウェア開発で、あるライブラリが「Xを返す」という仕様であるときに、使う側は「もしXを返さない場合」をエラー処理として組み込むべきか、その責任の線引きはどこにあるのでしょう?

2010-07-07 14:09:18
Hiroyuki Inoue @inohiro

これはよく悩む... RT @hkato193: 【質問】ソフトウェア開発で、あるライブラリが「Xを返す」という仕様であるときに、使う側は「もしXを返さない場合」をエラー処理として組み込むべきか、その責任の線引きはどこにあるのでしょう?

2010-07-07 14:10:54
はお @haoyayoi

@hkato193 ライブラリのテストがなされているかどうか、ですかね。普通はmake testなりすると思うので。

2010-07-07 14:15:37
Hiroyuki-Fujikawa.XE @cqa02303

@hkato193 出切れば組み込む。ライブラリ作った相手を信頼出来ないなら絶対組み込む。Javaなら信頼以前に絶対組み込む。

2010-07-07 14:14:24
Hirohito Kato ⌘ @hkato193

@cqa02303 尻を叩いていただきありがとうございますw。ちなみに「Javaなら問答無用」と仰ったのはなぜなのでしょう?

2010-07-07 14:16:47
Hiroyuki-Fujikawa.XE @cqa02303

@hkato193 標準ライブラリですら、リファレンスに載っていないExceptionが返ってくるくらい信用なら無い言語だからです。

2010-07-07 14:20:00
Hirohito Kato ⌘ @hkato193

ありがとうございます。契約による設計を調べていて疑問に思った次第です。 RT @haoyayoi: @hkato193 ライブラリのテストがなされているかどうか、ですかね。普通はmake testなりすると思うので。

2010-07-07 14:21:07
Hiroyuki-Fujikawa.XE @cqa02303

@hkato193 細かすぎるチェックは生産性と品質を落すから、できれば異常動作を抽象化して始末しますけどね。

2010-07-07 14:21:33
Hirohito Kato ⌘ @hkato193

@cqa02303 なんと。Javaは堅くできる言語だと思っていたのですが、実際はそうではないのですね。

2010-07-07 14:21:57
Hiroyuki-Fujikawa.XE @cqa02303

@hkato193 Javaなんて大嫌いです。10年前から言い続けています。15年前はあんまり好きじゃ有りませんでした。

2010-07-07 14:27:20
Hirohito Kato ⌘ @hkato193

@cqa02303 15年前〜10年前の間に苦労があったのですね。お察しします。

2010-07-07 14:29:28
GNUE(鵺) @gnue

@hkato193 そのライブラリはエラーの場合の仕様はもりこまれていないんですか?

2010-07-07 14:22:07
Hirohito Kato ⌘ @hkato193

@gnue あ、それは盛り込まれていますです。こういうのは状況次第だと思うのですが、多人数で開発する場合などは「誰のものか」を定めておかないと「誰のものでもない」が発生して問題が出るわけで、それに対する一般論はあるのかなあと思った次第です。

2010-07-07 14:28:43
GNUE(鵺) @gnue

@hkato193 ライブラリって内部でエラーが発生したらとりあえずエラーコードを返すので、定義されていないエラーコードでも switch 〜 default: で対応するべきかと。戻り値のデータそのものが間違ってる場合はどうしようもないけど(^^;(^^;(^^;

2010-07-07 14:32:24
Hirohito Kato ⌘ @hkato193

@gnue なるほどです。ありがとうございます!

2010-07-07 14:38:06
GNUE(鵺) @gnue

@hkato193 個人的にはシステムコールのエラーをそのままライブラリの戻り値として返しちゃうことをよくやります(^^;

2010-07-07 14:40:18
Hirohito Kato ⌘ @hkato193

@gnue あ、それはエラーを解消することの責任を転嫁できる場合は私もやることがあります。

2010-07-07 14:44:45
@natsutan

@hkato193 エラーとして組み込むべきだと思います。責任の所在はライブラリの仕様次第ですね。例えば、加算のオーバーフローは、加算前に確認するより、加算後に確認した方が楽な場合があります。

2010-07-07 14:37:54
Hirohito Kato ⌘ @hkato193

@natsutan ありがとうございます!皆さんのご意見を聞いていると、やはり基本は組み込みつつも、それ以上はライブラリ次第ということになりそうですね。

2010-07-07 14:40:19
もっさりさん @TeamMOSA2

@hkato193 線引きもなにも以後の処理で泣きをみたくなかったら入れるしかないでしょう。

2010-07-07 14:30:42
Hirohito Kato ⌘ @hkato193

@TeamMOSA2 はい。基本はそれだと思います(泣きたくないのでちゃんとやってますよー)。「重複して面倒を見る」という点をどこまでやるか、その一般解なり皆さんのポリシーなどが知りたかったのです。何でもかんでも入れ込むのは無理ですので。

2010-07-07 14:37:01
もっさりさん @TeamMOSA2

@hkato193 大原則として「ライブラリは信用しない」を掲げています。

2010-07-07 14:38:33
Hirohito Kato ⌘ @hkato193

@TeamMOSA2 さんらしいですねw。ご姿勢を学ばせてもらいます。

2010-07-07 14:41:53
もっさりさん @TeamMOSA2

@hkato193 結局のところエンドユーザーから突き上げを食らうのはアプリケーションプログラマなのでそこは絶対に譲ってはいけないと思います。ミドルウェア作る連中はそこらへんの魂が入っていないというか。

2010-07-07 14:46:02
Hirohito Kato ⌘ @hkato193

ありがとうございます! RT @TeamMOSA2: @hkato193 結局のところエンドユーザーから突き上げを食らうのはアプリケーションプログラマなのでそこは絶対に譲ってはいけないと思います。ミドルウェア作る連中はそこらへんの魂が入っていないというか。

2010-07-07 14:52:15
残りを読む(3)

コメント

Hirohito Kato ⌘ @hkato193 2010年7月7日
重複した投稿があったので削除したのと、アカウントごとの話のまとまりが見やすくなるよう並べ替えを実施しました。
0
ooooo @ooooo 2010年7月7日
普通はライブラリ内でエラー起きたら例外投げて、呼び出し側が例外を処理するとかじゃないの?例外が無い言語での話し?
0
kagehiens @kagehiens 2010年7月24日
エラーコードを返してくれるんならそれは分岐で対応するべきだし、例外を出すようになってるならそれはそれで拾うべき。例外がない言語で不測のエラーに対応するのはキツいけど、それでも盲信するのはありえないと思う。
0
potix2 @potix2 2010年7月29日
Exceptional C++に例外中立と例外安全に関する記述があるのでそのあたりを読むと参考になると思います。自分でユーティリティを作るとき等に非常に参考になります。
0