Date:  Wed, 30 Jan 2008 16:48:32 +0900
Subject:  【オブジェクト倶楽部: 2008-04号】
X-Mail-Count: 00226

       ┏━━━━━━━━━━━━━━━━━━━━━━━━━━■
       ┃                         ■┃
      ●┃● ● オ ブ ジ ェ ク ト 倶 楽 部   ■ ┃
       ┃                       ■  ┃
       ┗━━━━━━━━━━━━━━━━━━━━━━■━━━┛
                          No.220 2008/01/30

■ I N D E X
┃
┣【Topics】『出張!北欧勉強会 in デブサミ2008』
┣【Topics】Developers Summit 2008 オブジェクト倶楽部も参加します!
┣【Topics】『Python Developers Camp 2008 冬』が開催されます
┣【プログラミング】Rubyで進むオブジェクトの道[26] 
┗【プログラミング】tracプラグイン使ってる? 〜 いまそこにあるPython [4]

〇━━━━━━━━━━━━━━━━━━━━━━━━━━━T o p i c s━
 〇 「出張!北欧勉強会 in デブサミ2008」
        〜今年のVarentainDayは、目黒に北欧の風が吹き荒れる!(チョコが舞う!!)〜
  〇 〇━━━━━━━━━━━━━━━・ 
現在弊社で行われている「北欧勉強会」ことオブジェクトデザイン読書会を
デブサミ2008のコミュニティライブ枠で行うことになりました。その名も
『出張!北欧勉強会 in デブサミ2008』です。
今年のバレンタインデーは、オブラブメンバーと一緒にゆるーく北欧本を読ん
でみませんか?

■日時:2008年2月14日(木) 10:20〜10:50
■場所:目黒雅叙園 デブサミライブ会場 (華しらべ)
■必要なもの:オブジェクトデザイン (邦訳/原著どちらでもOK)
 ▲ http://www.amazon.co.jp/o/ASIN/4798109037/xpjp-22

詳しくは http://wiki.fdiary.net/ObjectDesignReading/ へどうぞ

〇━━━━━━━━━━━━━━━━━━━━━━━━━━━T o p i c s━
 〇 Developers Summit 2008 オブジェクト倶楽部も参加します!
  〇 〇━━━━━━━━━━━━━ ━━・
   技術者コミュニティとの連携から生まれた総合ITコンファレンス
     ◇◆ Developers Summit 2008 (デブサミ2008)◆◇
◆2月13日(水)・14日(木)開催!◆会場:目黒雅叙園 ◆主催:翔泳社
   ▼無料の70セッションは完全事前登録制!お申込はこちら▼
       http://codezine.jp/devsumi/2008/

〇━━━━━━━━━━━━━━━━━━━━━━━━━━━T o p i c s━
 〇 『Python Developers Camp 2008 冬』が開催されます
  〇 〇━━━━━━━━━━━━━ ━━・ 
3月初旬、Pythonをテーマにした合宿が松本(長野県)で開催されます。Pythonで
バリバリ開発してるぜ!というデベロッパーの方はもちろん、初心者でベテラン
から話を聞きたい人、Pythonって興味はあるんだけど触ったことなくて・・・と
いう人も歓迎です。今回、やっとむもスタッフやってます。

   ◇日 時:2008年3月7日(金) 〜 9日(日)
        ※土曜泊のみの方の参加も歓迎します
   ◇対象:Pythonに興味のある方
   ◇費用:交通費,宿泊費を含んだ実費
   ◇場所:松本ホテル花月(JR松本駅より徒歩15分/松本ICより車10分)
   ◇主催:Python Developers Camp 2008 冬実行委員会

プログラムの内容も募集中です!

詳しくはこちらから。
http://www.python.jp/Zope/PyLog/1201102994

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■━
■
┗【プログラミング】Rubyで進むオブジェクトの道[26]

おさらいです。前回までにRSpecのモックやスタブを簡単に紹介しました。
モックとスタブの大きな違いは、モックは、モック自身を使ってテスト対象が
期待する振る舞いをしたかをチェックする点です。
モックのチェックが不要であれば、モックではなく、単にメッセージを受け
取ったり、返り値を返すだけのスタブを選択します。
(Behavior Verification[*1]、Mock Objects[*2]、 Test Stub[*3]を参照)

今回は、RSpecのモックの仕様を確認し、モック自身がチェックする具体的な
内容について確認したいと思います。

●RSpecのモックの仕様の詳細を知りたい場合は?

ドキュメントを読むという選択以外に、RSpecのインストール先に含まれる、
mock_rspec.rbを調べるという手もあります。
ここは、RSpecのGoodな点ですね!mock_rspec.rbのごく一部を抜粋します。

●mock_spec.rbの抜粋を読む前の注意書き

通常、モックを使ったテストは
 * モックに対してモックの期待する振る舞いを明記
 * テスト対象にモックに依存関係を注入(Dependency Injection)[*4]
 * テスト対象の実行
 * テスト対象実行中にモックとメッセージのやり取り
 * モックが期待通り振る舞ったかをverify
になります。
ただし、今回の参考にしているmock_spec.rbは、モック自体の仕様に焦点を当
てているためテスト対象に対してモックを注入するような記述はありません。
ご注意ください。

●mock_spec.rbの抜粋

module Spec
 module Mocks
   describe Mock do

     before(:each) do
       @mock = mock("test mock")
     end

     after(:each) do
       @mock.rspec_reset
     end

     it "should pass when receiving message specified as not to be
received with different args" do
       @mock.should_not_receive(:message).with("unwanted text") #1
       @mock.should_receive(:message).with("other text") #2
       @mock.message "other text" #3
       @mock.rspec_verify #4
     end

●解説

#1は『@mockは、[message "unwanted text"] といメッセージを受け取らない
こと』を、@mockの期待する振る舞いとして明記しています。
#2は、『@mockは、[message "other text"]というメッセージを受け取ること』
を@mockの期待する振る舞いとして明記しています。
#3は、@mockに対して実際に、[message "other text"]を呼び出しています。
#4で、モックが期待通り振る舞ったかをverifyしています。(モックの自身の
Specのため明記していますが、モックを使ったテストの場合は不要です。
#1、2で明記したモックの期待する振る舞いを満たしているため上記はパスし
ます。
もし、#3のようにメッセージ呼ばれなかったら、期待する振る舞いではないた
め、specの実行に失敗してしまいます。

上記のように、モックは、モック自身に期待する振る舞いを明記して、実際に
メッセージが呼ばれたか(呼ばれなかったか)を、verifyすることで期待した振
る舞いをしているかをチェックします。RSpecのスタブはこのようなVerifyは
行いません。

もう少し、別の例を見て行きましょう。詳細の解説は省きます。
下記は、『@mockが not_expectedメッセージを受け取らないこと』が@mockの
期待する振る舞いだけど、実際に呼ばれてしまってMockExpectationErrorの例
外が発生する例です。

     it "should fail when receiving message specified as not to be
received" do
       @mock.should_not_receive(:not_expected)
       @mock.not_expected
       lambda {
         @mock.rspec_verify
         violated
       }.should raise_error(MockExpectationError, "Mock 'test mock'
expected :not_expected with (any args) 0 times, but received it once")
     end

下記は『@mockが [something "a", "b". "c"]メッセージを受け取り、"booh"を
返すこと』が@mockの期待する振る舞いとして明記され、実際に期待通り呼ばれ
ている例です。

     it "should allow parameter as return value" do

@mock.should_receive(:something).with("a","b","c").and_return("booh")
       @mock.something("a","b","c").should == "booh"
       @mock.rspec_verify
     end

下記は、『@mockが [something "a", "b". "c"]メッセージを受け取り、引数
の逆順を返すこと』が@mockの期待する振る舞いとして明記され、実際に期待
通り呼ばれている例です。
ブロックを使って、モックの返り値を工夫することも可能です。

    it "should allow block to calculate return values" do
       @mock.should_receive(:something).with("a","b","c").and_return
{ |a,b,c| c+b+a }
       @mock.something("a","b","c").should == "cba"
       @mock.rspec_verify
     end

●終わりに
モックはモック自体を使って、テスト対象が期待する振る舞いをしているかを
チェックするのに利用します.
mock_rspec.rbの一部抜粋を紹介して、モックで可能なverifyを簡単に紹介し
ました。今回は紹介しきれませんでしたが、メッセージの呼び出し回数を指定
するonceやat_least、呼び出し順序まで指定するorderedなどもあります。
mockの詳細を知りたい場合は、ぜひmock_rspec.rb[*5]や
mock_ordring_spec.rbなどを参照してみてはいかがでしょうか?

●参考
[*1] : Behavior Verification
       http://xunitpatterns.com/Behavior%20Verification.html
       mockの要素は、リンク先の図のDOC(depended-on component)に相当する。
[*2] : Mock Object
       http://xunitpatterns.com/Mock%20Object.html
[*3] : Test Stub
       http://xunitpatterns.com/Test%20Stub.html
[*4] : Dependency Injection
       http://xunitpatterns.com/Dependency%20Injection.html
[*5] : mock_spec.rb
       http://rspec.rubyforge.org/svn/trunk/rspec/spec/spec/mocks/mock_spec.rb
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E006-25&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E006-25&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E006-25&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■━
■
┗【プログラミング】tracプラグイン使ってる? 〜 いまそこにあるPython [4]

こんにちは、オブジェクト倶楽部のコナモンガー、やっとむです。
先日大阪にて、お好み焼き!焼きソバ!たこ焼き!ビバ・コナもん!
と思ったらコナモンってキャラがいるー!いや、キャラ名は違うー![*1]

TOPICSでもお知らせしましたが、3月にPython合宿があります!寝ても醒めて
も明けても暮れても五臓六腑もPython漬け!やっとむもスタッフとして微力な
がら役に、立ってなかったりしますが、Pythonが大好きな人も、Python活用者
から話を聞きたい人も、勉強したいと思ってる人も歓迎です。密度の濃い空気
を吸い込んでみませんか!詳しくはこちらからどうぞ。

http://www.python.jp/Zope/PyLog/1201102994

■Pythonにtracあり、tracにプラグインあり

連載第1回でもご紹介したtrac、Pythonで書かれたプロジェクト管理Webアプリ
ですが、みんな使ってるよね!単体では意外とシンプルなtracですが、欲しい
機能はだいたいプラグインやマクロで実現できます。その数、数百!

定番のものから(プラグインから本体の機能に昇格したものも少なくありませ
ん)、おそろしくニッチで世界中にこれ使ってるの3人と1匹くらいじゃね?と
いうものまで。ごくスタンダードなプラグインやマクロは、tracの開発をホス
トしているedgewallのサイト[*2]にあります。

また、Trac-Hacks[*3]には、数百のプラグイン、マクロや、パッチがあります。
なおTrac-Hacks自体がTracサイトになっていて、誰でも自分の作品を公開でき
るようになっています。日本にだって、Trac月[*4]とかShibuya.trac[*5]とい
う雄が!Shibuya.tracにも、プラグインなどが集まってますよ。

以下ではTrac-Hacksから、膨大な数のプラグインのごく一部をチョイスしてご
紹介しましょう。一覧はそれぞれのサイトでも見られますし、ごく簡単な紹介
をやっとむが日本語で公開しているものもあるので[*6]、こちらもご利用くだ
さい。

■鉄板系 - 100人いたら120人使ってます

WebAdminPlugin http://trac-hacks.org/wiki/WebAdminPlugin
・各種管理作業をWebインターフェースからできるようになる。

AccountManagerPlugin http://trac-hacks.org/wiki/AccountManagerPlugin
・フォーム認証が使えるようになる。
・ユーザが自分でパスワードを変更、アカウント削除できる。

TagsPlugin http://trac-hacks.org/wiki/TagsPlugin
・Wikiやチケットにタグをつけられる。

TocMacro http://trac-hacks.org/wiki/TocMacro
・ページ内目次(Table of Contents)を表示する。

■便利系 - 頭とはさみは使いよう

CalendarPlugin http://trac-hacks.org/wiki/CalendarPlugin
・trac上でスケジュール管理ができる。
・予定とチケットの関連付けもできる。

XmlRpcPlugin http://trac-hacks.org/wiki/XmlRpcPlugin
・TracをXML-RPCでアクセスできるようになる。

ScrumBurndownPlugin http://trac-hacks.org/wiki/ScrumBurndownPlugin
・バーンダウンチャートを表示する。

MasterTicketsPlugin http://trac-hacks.org/wiki/MasterTicketsPlugin
・チケット間に親子関係、前後関係などの依存関係を設定できる。
・依存関係をgraphvizで表示できる。

■オモシロ系 - こんなこともできるって知ってました?

ExcelReportPlugin http://trac-hacks.org/wiki/ExcelReportPlugin
・既存のレポートを(HTMLでなく)Excelで出力する。

WikiGoodiesPlugin http://trac-hacks.org/wiki/WikiGoodiesPlugin
・スマイリー(顔アイコン)を使える。
・文字を記号に置き換えて表示する(矢印、分数、など)。
・強調、イタリック、下線を簡単に入力(*, /, _など)。

TracBlogPlugin http://trac-hacks.org/wiki/TracBlogPlugin
・ブログを書ける。
・tracのほかのWikiページと混ぜられる。

NikoCaleMacro http://trac-hacks.org/wiki/NikoCaleMacro
・ニコカレを表示するマクロ(プロセッサ)。
・やっとむ拙作。

■まとめ

今回はいまそこにあるtracプラグインをご紹介しました。個人でもコミュニ
ティでも仕事でも使えるtrac、これからもっと普及するんじゃないですかね。
各種プラグインを使いこなして自分なりの活用法を編み出せば、効果絶大勇気
百倍拍手喝采!ですよ。(やっとむ)

[*1] : http://konamon.com/info/index.html

[*2] : PluginList - The Trac Project
       http://trac.edgewall.org/wiki/PluginList
       MacroBazaar - The Trac Project
       http://trac.edgewall.org/wiki/MacroBazaar

[*3] : http://trac-hacks.org/

[*4] : http://sourceforge.jp/projects/traclight/wiki/FrontPage

[*5] : http://sourceforge.jp/projects/shibuya-trac/wiki/FrontPage

[*6] : やっとむでぽん
       http://d.hatena.ne.jp/yach/20080129 
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E0011-3&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E0011-3&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E0011-3&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■ 
■
┗【アンケート】気になるシステム業界 ホントのところ

今週は「追い出したいのはどんな鬼ですか?」のホントのところ。もうすぐ節
分。読者のみなさんの想像以上に季節感のあるオブラブメルマガですが、節分
の日に「オニはそと!」って豆をまきますよね。今年はどんなオニを追い出しま
すか?気になるものを、1つクリック。

  実はなかなか折が合わないアイツを追い出したい。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=186&choice=0
  どこにあるか解らないバグをいっそのこと。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=186&choice=1
  運動不足でたまってきた脂肪。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=186&choice=2
  イマイチな体調とか病気を追い出して、健康に。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=186&choice=3
  貧乏神。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=186&choice=4
  スペックの悪い開発用マシーン。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=186&choice=5
  雪崩のように迫る仕事。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=186&choice=6
  自分の中の怠け虫。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=186&choice=7
  それは秘密です。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=186&choice=8
  ちょっと語らせて!
     詳細をこのメールに返信ください!!

アンケート結果はオブジェクト倶楽部サイト上にて公開します。お楽しみに。
なお、前号「初めて仕事で使った言語は?」の結果は公開中。ぜひご覧下さい。
⇒http://www.ObjectClub.jp/special/kininaru/vol185/PlonePopoll_results2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
■
┗編集後記

こんにちは、編集人です。豆まきの日は日曜日。今年は普段忙しくて鬼の役が
なかなかできないお父さんたちも、出番がありそうですね。旧暦の時代では
節分を「季節を分ける」と考え「立春正月」と言い伝え、新しい一年は節分から
とも考えるそうです。元旦に決めたことが三日坊主になってしまった人には、
もう一回チャンスが回ってくるんですよ。リベンジです!

さて、オブジェクト倶楽部カレンダーの2月分の電子データを公開します。
2月は「オブジェクト倶楽部用語再入門 Agile」です。『アジャイルプラクティ
ス ―達人プログラマに学ぶ現場開発者の習慣』(オブラブスタッフの木下さんと
角谷さんが翻訳)と併せて、ぜひどうぞ。
http://www.ObjectClub.jp/special/#calendar

今週の強引な一言
*** 鬼に金棒(ことわざ)***
ただでさえ強い鬼に鉄棒を持たせる。強いうえにも強くて、敵するものがない
という意味。強い鬼だって、もっと強くなりたいんですね。さすが!だったら
私たちも身の回りのいい物を見つけて、もっと良くしてみませんか?カイゼン
はそんな感じで身近にあるものなのかもしれませんね。
出典参考:故事ことわざ辞典 東京堂出版
(上田雅美)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
● ご意見、ご感想は         ⇒このメールに返信ください
〇 配信中止、アドレス変更は ⇒http://www.ObjectClub.jp/community/object_ml/help/
〇 免責事項、過去の記事は   ⇒http://www.ObjectClub.jp/community/object_ml/
■ 発行:オブジェクト倶楽部 ⇒http://www.ObjectClub.jp/
■ 編集代表:平鍋  健児
Copyright (c)2003-2008 オブジェクト倶楽部. All Rights Reserved.
powered by Eiwa System Management, Inc.