nDiki : assertion

assertion

2004年5月16日 (日)

assertion

昼食の時に話題になったので、考えてみた。

assertion を書いているか? いつ書くか?

最初からあまり書くことはない。 大抵、デバッグ中に書く。

ただし assertion を埋め込むようなデバッグをした次のコーディングフェーズでは、結構書く(長続きはしない)。

契約による設計をしたいと思いつつ、場当たり的。

C++ の時

最初に、自前の assert 処理を定義する(assert 関連マクロ、例外クラス、assertion を評価する関数など)。

比較的 assertion を埋め込む。

Java の時

うーん。C++ の時ほどは書かないかな。

 assert a_obj != null;

とか書いていて後で「あまり意味ないな」って思ったり。 C++ だと assertiion でチェックしておかないと発見が遅れる場合があるが、Java だと NullPointerException が吐かれるから大抵気がつくから。

Perl の時

簡単に無効化できないという意識があるためほとんど書かない。 大規模なパッケージの場合は、Makefile.PL を実行する際デバッグフラグを立てると make 時にコメントアウトされている assertion を有効にするようにソースコードを書き換える。

assertion を書くのをためらう時

  • assertion の条件式の計算がヘビーな時
  • assertion でチェックする条件の値を求めるのが面倒な時(ループを回さなければならないとか)
  • 本来のコードより assertion の方がずっと多くてコードが読みにくくなる場合
  • return 文が複数ある時(事後条件)
  • 他のメソッドの戻り値を直接 return してしまう時(事後条件)
スポンサード リンク
[ 5月16日全て ]

2004年8月1日 (日)

契約による設計と状態遷移モデルの抽出とか

事前条件/事後条件/不変表明で宣言できる仕様はプログラムの仕様の一部であるので、カバーできる範囲を明確にしつつ議論するのが重要。

テストフェーズとの連携

assertion による実行時検出の場合は、実際にそこを制御が通過しなければならない。テストフェーズとの連携があると実用的(単体テストスケルトンの自動生成など)。

表明状態数

事前条件/事後条件/不変表明から内在的な表明状態を抽出できたとして、状態数はどれぐらいになるのだろう? 1〜3ぐらいだと面白くない。かといって多すぎる場合は設計上の誤りがある可能性が高い。

過去の話題

[ 8月1日全て ]

2004年8月2日 (月)

テスト駆動開発入門

[ コンピュータ書籍 ]

テスト駆動開発入門 契約による設計における段階的な表明を追加するプロセスの話などが昨日出た。 自分ももちろん assertion を書くのだが、それとは別に最近はテスト・ファーストによる開発お気に入り。 しかしまだ「単体テストのカバー範囲」・「テストケースが十分であるか」・「リファクタリング時のテストの追随」などまだ勇気を持てていない部分がある。

ということで(テストとはまた別ではあるのだが)テスト駆動開発もちょっとチェックしておこうかと思い Kent Beck のテスト駆動開発入門を購入。

紙質も比較的チープ。 本屋でぱっと開いてみると細かいコードの断片が散らばっていて、何かプログラムの初学本っぽくてちょっとどうかなというのが最初の感じ。

しかし読み始めてみると面白く Part 1 までまず読み切った。 レッド/グリーン/リファクタリングのサイクルの中で、コードやテストが書き換わっていく様が非常にわかりやすい。 Martin Fowler のリファクタリング-プログラムの体質改善テクニックと同様細かい作業ステップを実演していて、雰囲気が良くわかる。

テスト駆動開発はテストではなく開発方法である」というのも納得。

「動作するきれいなコード」を書くために続きを読もう。


[ 読書ノート ]

[ 8月2日全て ]

2008年2月26日 (火)

cron 呼び出しから D-Bus (Net::DBus) 使おうとしたら失敗していた

Twitter への書き込みを自動的に Skype ムードメッセージに設定するスクリプトを定期的に実行しようと cron に設定しておいたのだが、一向にうまくいく気配がない。

cron からのメッセージを見たら

process 22612: arguments to dbus_connection_ref() were incorrect, assertion "connection != NULL" failed in file dbus-connection.c line 2465.

This is normally a bug in some application using the D-Bus library.

org.freedesktop.DBus.Error.Spawn.ExecFailed: dbus-launch failed to autolaunch D-Bus session: Autolaunch error: X11 initialization failed.

と出ていた。 X 関連か?

cron から呼び出す際には DISPLAY=:0.0 してからこのスクリプトを呼ぶようにしたらうまく動くようになった。

[ 2月26日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

follow us in feedly

月別インデックス
Process Time: 0.048392s / load averages: 0.44, 0.70, 0.55
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker