SlideShare a Scribd company logo
1 of 10
Download to read offline
ドキュメントとエラーハンドリング


            高橋 晶(Akira Takahashi)
               id:faith_and_brave
                       @cpp_akira
      エラーハンドリング勉強会 2011/09/04(日)
自己紹介
•   株式会社ロングゲート 取締役
•   C++テンプレートメタプログラマ
•   Boost Geometry Libraryコントリビュータ
•   『プログラミングの魔導書』 編集長。
チュートリアル

• チュートリアルにはエラーハンドリングが記載
  されていないことが多い。

• そのまま使用すると、あとで想定していなかっ
  たエラーが発生してしまう場合がある。
ドキュメントは大事!

• 適切なエラーハンドリングを行うためには、ド
  キュメントをしっかり読まないといけない。

• その関数はどういったケースでどういったエ
  ラーを出力する可能性があるのか。
  そのエラーは、そのプロジェクトで起こること
  が想定できるものか。
ドキュメントの読み方

• 直接記載されていないエラーが報告される可
  能性がある。

• その関数自体だけではなく、引数として渡し
  たオブジェクトがエラーを報告する場合もある。

• その関数が引数をどのように扱うのか注意し
  て読む必要がある。
アンドキュメントなものは使わない
• アンドキュメントな機能は、将来のバージョンアップで予
  告なく変更・削除される可能性がある。

• 「ライブラリをアップデートしたらリリースノートにも変更
  が書かれていないのに動かなくなった」では困る。

• アンドキュメントだが有用な機能だと思うなら、それを作
  者に報告し、方針を確認した上で使おう。
 例.
 「アンドキュメントだからまだ使わないほうがいい?」
 「ドキュメントパッチを送れば取り込んでくれる?」
ドキュメントに記載されていないエラー

• ドキュメントに記載されていないエラーを投げ
  る可能性が、実装を読んで発覚する場合が
  ある。

• ドキュメントバグなので報告しよう。

• アンドキュメントなエラーをハンドリングする場
  合は、その旨コメントに書こう。
  報告した際のチケット番号を記載するとGood!
ドキュメント読むのめんどくさい
• めんどくさいです。

• ドキュメント読まなくても適切なエラーハンドリ
  ングがしたい!

• ライブラリ作者は、間違った使い方をした場合
  や、適切なエラーハンドリングを行わなかった
  場合に、事前にそれを検知できる機構を用意
  すべし。
型付けしよう
• 静的型付け言語では、型付けによって、間違った使い
  方をした場合にコンパイルエラーにすることができる。

• ハンドリング洩れも、がんばればチェックできると思う
  (戻り値を受け取ったかのチェック、エラーチェックした
  か、をコンパイル時に判断するのは難しい)。

• ただし例外の型付け、ハンドリング洩れの静的チェッ
  クは難しい。IDEのサポートに期待。
  (もしくは例外を積極的に使わない)
まとめ
• ドキュメントは大事

• アプリケーションコードの全ての関数までドキュメントを記
  載する必要はないが、ライブラリコードはドキュメントを書
  くべし。

• ドキュメントが間違っていたら報告しよう。
  それはあとに続く開発者にとって有益。

• 型は大事。
  型はプログラム内にプログラムで記載されたドキュメント。

More Related Content

Similar to Doc and Error Handling

イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方Yuta Matsumura
 
プログラミングを早くする方法
プログラミングを早くする方法プログラミングを早くする方法
プログラミングを早くする方法kazukiTakahashi18
 
エンジニア取扱説明書
エンジニア取扱説明書エンジニア取扱説明書
エンジニア取扱説明書Hisanao Ichikawa
 
ログ管理でウキウキAndroid Life (Log Management in Android)
ログ管理でウキウキAndroid Life (Log Management in Android)ログ管理でウキウキAndroid Life (Log Management in Android)
ログ管理でウキウキAndroid Life (Log Management in Android)Tomoaki Imai
 
会議室を現場にする! リアルタイム共同編集によるプロトタイピング
会議室を現場にする! リアルタイム共同編集によるプロトタイピング会議室を現場にする! リアルタイム共同編集によるプロトタイピング
会議室を現場にする! リアルタイム共同編集によるプロトタイピングMasaru Nagaku
 
CIサーバを制圧せよ! - プロジェクトメトリクスと自動化技術の活用よる混乱の収拾と「最強」の組織の育成
CIサーバを制圧せよ! - プロジェクトメトリクスと自動化技術の活用よる混乱の収拾と「最強」の組織の育成CIサーバを制圧せよ! - プロジェクトメトリクスと自動化技術の活用よる混乱の収拾と「最強」の組織の育成
CIサーバを制圧せよ! - プロジェクトメトリクスと自動化技術の活用よる混乱の収拾と「最強」の組織の育成Rakuten Group, Inc.
 
プログラマに優しいバグレポートの書き方
プログラマに優しいバグレポートの書き方プログラマに優しいバグレポートの書き方
プログラマに優しいバグレポートの書き方Katsutoshi Makino
 
Php勉強会スライド
Php勉強会スライドPhp勉強会スライド
Php勉強会スライドsuzumurashingo
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」Shuji Morisaki
 
error handling using expected
error handling using expectederror handling using expected
error handling using expectedAkira Takahashi
 
ソフトウェア開発の現場風景
ソフトウェア開発の現場風景ソフトウェア開発の現場風景
ソフトウェア開発の現場風景Koichi ITO
 
女性エンジニアの1週間
女性エンジニアの1週間女性エンジニアの1週間
女性エンジニアの1週間x1 ichi
 
Hacker's meetup boost_vol1発表資料_20150902
Hacker's meetup boost_vol1発表資料_20150902Hacker's meetup boost_vol1発表資料_20150902
Hacker's meetup boost_vol1発表資料_20150902真一 藤川
 

Similar to Doc and Error Handling (20)

イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
 
プログラミングを早くする方法
プログラミングを早くする方法プログラミングを早くする方法
プログラミングを早くする方法
 
エンジニア取扱説明書
エンジニア取扱説明書エンジニア取扱説明書
エンジニア取扱説明書
 
読書会Vol6
読書会Vol6読書会Vol6
読書会Vol6
 
20120529 アジャイルサムライ読書会第6回
20120529 アジャイルサムライ読書会第6回20120529 アジャイルサムライ読書会第6回
20120529 アジャイルサムライ読書会第6回
 
俺とGitHub
俺とGitHub俺とGitHub
俺とGitHub
 
ログ管理でウキウキAndroid Life (Log Management in Android)
ログ管理でウキウキAndroid Life (Log Management in Android)ログ管理でウキウキAndroid Life (Log Management in Android)
ログ管理でウキウキAndroid Life (Log Management in Android)
 
C language Sem 01
C language Sem 01C language Sem 01
C language Sem 01
 
会議室を現場にする! リアルタイム共同編集によるプロトタイピング
会議室を現場にする! リアルタイム共同編集によるプロトタイピング会議室を現場にする! リアルタイム共同編集によるプロトタイピング
会議室を現場にする! リアルタイム共同編集によるプロトタイピング
 
CIサーバを制圧せよ! - プロジェクトメトリクスと自動化技術の活用よる混乱の収拾と「最強」の組織の育成
CIサーバを制圧せよ! - プロジェクトメトリクスと自動化技術の活用よる混乱の収拾と「最強」の組織の育成CIサーバを制圧せよ! - プロジェクトメトリクスと自動化技術の活用よる混乱の収拾と「最強」の組織の育成
CIサーバを制圧せよ! - プロジェクトメトリクスと自動化技術の活用よる混乱の収拾と「最強」の組織の育成
 
プログラマに優しいバグレポートの書き方
プログラマに優しいバグレポートの書き方プログラマに優しいバグレポートの書き方
プログラマに優しいバグレポートの書き方
 
Php勉強会スライド
Php勉強会スライドPhp勉強会スライド
Php勉強会スライド
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
 
error handling using expected
error handling using expectederror handling using expected
error handling using expected
 
ソフトウェア開発の現場風景
ソフトウェア開発の現場風景ソフトウェア開発の現場風景
ソフトウェア開発の現場風景
 
女性エンジニアの1週間
女性エンジニアの1週間女性エンジニアの1週間
女性エンジニアの1週間
 
cochica
cochicacochica
cochica
 
Hacker's meetup boost_vol1発表資料_20150902
Hacker's meetup boost_vol1発表資料_20150902Hacker's meetup boost_vol1発表資料_20150902
Hacker's meetup boost_vol1発表資料_20150902
 
20150131 mvp com_camp_lt
20150131 mvp com_camp_lt20150131 mvp com_camp_lt
20150131 mvp com_camp_lt
 
Chrome 拡張のご紹介
Chrome 拡張のご紹介Chrome 拡張のご紹介
Chrome 拡張のご紹介
 

More from Akira Takahashi (20)

Cpp20 overview language features
Cpp20 overview language featuresCpp20 overview language features
Cpp20 overview language features
 
Cppmix 02
Cppmix 02Cppmix 02
Cppmix 02
 
Cppmix 01
Cppmix 01Cppmix 01
Cppmix 01
 
Modern C++ Learning
Modern C++ LearningModern C++ Learning
Modern C++ Learning
 
cpprefjp documentation
cpprefjp documentationcpprefjp documentation
cpprefjp documentation
 
C++1z draft
C++1z draftC++1z draft
C++1z draft
 
Boost tour 1_61_0 merge
Boost tour 1_61_0 mergeBoost tour 1_61_0 merge
Boost tour 1_61_0 merge
 
Boost tour 1_61_0
Boost tour 1_61_0Boost tour 1_61_0
Boost tour 1_61_0
 
Boost tour 1.60.0 merge
Boost tour 1.60.0 mergeBoost tour 1.60.0 merge
Boost tour 1.60.0 merge
 
Boost tour 1.60.0
Boost tour 1.60.0Boost tour 1.60.0
Boost tour 1.60.0
 
Boost container feature
Boost container featureBoost container feature
Boost container feature
 
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 mergeBoost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
 
Boost Tour 1_58_0
Boost Tour 1_58_0Boost Tour 1_58_0
Boost Tour 1_58_0
 
C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructorC++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
 
C++14 enum hash
C++14 enum hashC++14 enum hash
C++14 enum hash
 
Multi paradigm design
Multi paradigm designMulti paradigm design
Multi paradigm design
 
Start Concurrent
Start ConcurrentStart Concurrent
Start Concurrent
 
Programmer mind
Programmer mindProgrammer mind
Programmer mind
 
Boost.Study 14 Opening
Boost.Study 14 OpeningBoost.Study 14 Opening
Boost.Study 14 Opening
 
Executors and schedulers
Executors and schedulersExecutors and schedulers
Executors and schedulers
 

Doc and Error Handling