Date:  Wed, 15 Nov 2006 16:13:00 +0900
Subject:  【オブジェクト倶楽部: 2006-43号】
X-Mail-Count: 00170

       ┏━━━━━━━━━━━━━━━━━━━━━━━━━━■
       ┃                         ■┃
      ●┃● ● オ ブ ジ ェ ク ト 倶 楽 部   ■ ┃
       ┃                       ■  ┃
       ┗━━━━━━━━━━━━━━━━━━━━━━■━━━┛
                          No.164 2006/11/15

■ I N D E X
┃
┣【Topics】オブジェクト倶楽部 クリスマスイベント概要公開!
┣【プログラミング】Rubyで進むオブジェクトの道[17]
┣【設計】ソフトウェアのお言葉[13] - 不良除去に最も時間がかかる
┗【アンケート】気になるシステム業界 ホントのところ

〇━━━━━━━━━━━━━━━━━━━━━━━━━━━T o p i c s━
 〇 オブジェクト倶楽部 クリスマスイベント概要公開!(12月20日:代々木)
  〇 〇━━━━━━━━━━━━━ ━━・ 

オブジェクト倶楽部のクリスマスイベント、気になる概要が公開になりました。
こちらから⇒http://www.ObjectClub.jp/event/2006christmas/

日 時:2006年12月20日(水) 10:00〜17:00 (懇親会17:30〜19:30予定)
場 所:国立オリンピック記念青少年総合センター (http://nyc.niye.go.jp/)
内 容:講演、ワークショップ
参加費:講演会3,000円、懇親会4,000円

申し込み受付は、来週の11月22日を予定しています。みなさん、手帳には
「オブラブ参加」って書いておいてくださいね。

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

●前置き
こんにちは。唐突ですが、筆者は最近、家の大掃除をしました。
家の中のものを改めて見直すと、いらないもので占められていることに気がつ
きますね。

     * 最後に使ったのがいつか思い出せず、いつの間にか使えなく
       なっていたカセットコンロ
     * 一度も動かしたことのない、友達から頂いたビデオデッキ
     * 積読を言い訳にしながら家に放置していたけど、今後の人生
       できっと読むことがないだろうホコリがかぶった本

整理してみると、現在住んでいるところも結構すっきりするんだなとちょっと
びっくりです。

●今日のポイント
さて、今日は、簡単なTip「||=」を紹介します。
このTipを使えば手軽にRubyのソースコードをコンパクトに記述できます。
このTipを覚えて、ソースコードをすっきり整理してみましょう。

まずは「||=」を使わなかった場合のソースコードから。
before
class Foo
  def initialize
    // ...重たい処理が必要と想定
  end
end

class FooProxy
  def foo
    if (@cache == nil)
      @cache = Foo.new
    end
    @cache
  end
end

FooProxyクラスのfooメソッド内のif文に注目してください。
もし@cacheがnilであれば@cachにFoo.newを代入し、(そうでなければ代入しな
い)プログラムです。
「nilだったら代入」って、時々必要になる記述ですよね。

「||=」は上記のif() ... endの3行を1行にコンパクトに
まとめてくれる便利なやつです。

それでは、「||=」を使った場合を見てみましょう。
after 1
class FooProxy
  def foo
    @cache ||= Foo.new
    @cache
  end
end

どうです。見た目すっきりしたでしょ?
さらに短くすると次のようになります。

after 2
class FooProxy
  def foo
    @cache ||= Foo.new
  end
end

念のため fooメソッドを説明すると
もし@cacheがnilであれば@cachにFoo.newを代入し、(そうでなければ代入ぜず)
@cacheを返すメソッドです。

●最後に
「||=」を紹介しました。「||=」を使えば不要な記述を減らし、ソースコード
のすっきり見せることができます。
これで僕もRubyのソースコードの収納達人に一歩近づけたかな?

ところで「||=」ってどう読むのでしょうかね?
おっと、お時間です。では:-)(IENAGA)
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E006-16&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E006-16&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E006-16&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━2 n d ■━
■
┗【設計】ソフトウェアのお言葉[13] - 不良除去に最も時間がかかる

こんにちは、天野勝です。
今回のお言葉は「不良除去に最も時間がかかる」です。今回も筆者の独断と偏
見で、解釈、解説してみます。

●バグは隠れる
このお言葉は、「ソフトウエア開発のライフサイクルで、不良除去に最も時間
がかかる」という、『ソフトウエア開発 55の真実と10のウソ』[*1]の真実31
として紹介されています。
ここでいう不良除去とは、デバッグ作業の事と捉えることにします。
さて、なぜデバッグに時間がそんなにもかかってしまうのでしょうか。いくつ
もの要因が考えられます。

(1)バグを再現するのに時間がかかる
(2)バグを直すと、新たなバグを生むから
(3)プログラマーは、デバッグが好き
(4)バグは隠れているからバグ
 etc...

プログラム経験のある方ならば、他にも多くの要因を挙げることができること
でしょう。今回は、この中で、特に4つ目の「バグは隠れているから」に焦点を
当ててみます。

●バグの滞在時間と除去時間
バグの取りにくさは、その滞在時間と相関があると言われています。つまり、
どんなに重大なバグであっても、すぐに発見すればそれを取り除くことは容易
であり、どんなに些細なバグであっても、その発見までに時間が経つとそれを
取り除くのは難しくなるということです。確かに、自分の作ったプログラムも
時間が経つと、なぜそのように作ったのかの理由を忘れてしまい、なかなか修
正に踏み切れなかったりします。ましてや、作った人が去ってしまい、残され
た人がデバッグするとなると、もっと悲惨な状況になることは想像に難しくあ
りません。
そして、一般にバグは隠れる傾向にあり[*2]、バグがあることすら気づかずに
時間が経過してしまいます。

●デバッグ時間を短くするために
製品にバグが潜在しているというのは一つのリスクですから、予防的な側面と、
対処的な側面の両面から対策を考えてみます。
対処的な対策としては、いくつかのツールが役に立ちます。デバッガーなどは、
その最たるものでしょう。また、Bugzillaや、Trac、影舞などの管理ツールを
活用されている方も多いようです。
では、予防的な対策はどうすればよいでしょうか。バグを出さないためにはど
うすれば良いか、とつい考えてしまいがちですが、ちょっと待ってください。
バグを出さないというのは人間がプログラムを作っている以上、なかなか解決
しにくい問題だと思いませんか。
これはこれで精進する必要はありますが、その一方で、先ほどの「バグの滞在
時間を短くするには」という視点で考えてみると、「早めにテスト、何度もテ
スト」というのが一つの鍵ではないかと思います。簡単に言うと、テスト駆動
開発をしましょうということです。製品コードと同時にテストコードを書き、
できるところからすぐにテストを行い、そのテストコードを何度も走らせ、結
合してはテストコードを走らせを繰り返すことで早い段階でバグを見つけるこ
とができます。バグを燻り出す感じです。ナイトリービルドも効果のあるプラ
クティスですが、より間隔を短くして継続的にビルドを行い、それと併せて自
動の回帰テストを実行すると効果が増します。早めに見つかれば、バグの発生
箇所も特定しやすく、素早く対処できますね。

●おわりに
ソフトウェアは人間が作っている以上、すべてを完璧に成し遂げることは難し
いことだと思います。どうしても、考慮漏れや、勘違い、やり忘れなどが発生
してしまうでしょう。
しかし、やり方や、手順を工夫することで「ポカヨケ」[*3]となり、ソフトウェ
アの質を向上させることができると思います。ぜひ皆さんも、自分達の知恵と
工夫でソフトウェア開発を楽しくしていっていただきたいと思います。
(天野勝)

[1]:『ソフトウエア開発 55の真実と10のウソ』
     著:ロバート・L・グラス、訳:山浦 恒央
     日経BP(2004)
     http://amazon.co.jp/o/ASIN/4822281906/xpjp-22

[2]:隠れるからこそバグなんだと思います。隠れていなければ、目につくので
その場で取り除けるはずです。

[3]:ポカヨケとは、人間がついやってしまうようなミス(ポカ)を回避する(ヨケ)
ような仕組みのことです。ポカヨケ[fool proof]は、昔はバカヨケ、と言われ
ていましたが、より適切な言い方に最近変わっています。ヨケ=プルーフの語
感は、チャイルド・ロック=child proof、耐水=water proof などから類推で
きるように、「何かに対して前もって備えておく」、という意味があるようで
す。ちなみに、製造業では、Poka-Yokeとしてそのまま世界で通用する用語です。
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=L001-13&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=L001-13&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=L001-13&choice=2

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

今週は「プライベートでの、パソコンの使い道は?」のホントのところ。パソ
コンを持っている方は多いと思うんですけど、仕事以外には何に使ってますか?
年賀状のコマーシャルを見ながら、ふと気になっちゃいました。

回答はこちらから!(複数回答可能です)
http://www.objectclub.jp/special/kininaru/vol130/PlonePopoll_view2

 (1)ゲームをする。
 (2)ネットサーフィン。
 (3)スカイプ・チャット。
 (4)HP作成で情報発信など。
 (5)プログラミング。
 (6)ブログやSNS。
 (7)テレビを見る。
 (8)年賀状作成。
 (9)創作活動。
 (10)写真や映像の管理。
 (11)オンライン・ショッピング。
 (12)家計簿やスケジュールの管理。
 (13)暖房器具。
 (14)出会い。
 (15)それは秘密です。
 (16)プライベートでは持っていない。
 (17)ちょっと語らせて!
   いつものとおり詳細をこのメールに返信ください!!  
アンケート結果はオブジェクト倶楽部サイト上にて公開します。お楽しみに。
なお、前号「ペンケースに何が入っていますか?」の結果は公開中。ぜひご覧
下さい。
⇒http://www.ObjectClub.jp/special/kininaru/vol129/PlonePopoll_results2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
■
┗編集後記

こんにちは、編集人です。いよいよクリスマスイベントの概要が、明らかに!
皆さんが「聞いてみたい」「参加してみたい」が、たくさん見つかるといいなぁと
思っています。来週からいよいよ申し込みが可能になりますので、お忘れなく!

今週の強引な一言
***笛吹けども踊らず(ことわざ)***
人に何かをさせるつもりで、様々に手立てを整えて誘っても、相手が動かない
こと。または、先に立って扇動しても、まったく応じず、動き出そうとしない
という意味です。はて!?あなたの笛は、相手に聞こえているのでしょうか?
聞こえないから動かないって言うことだって、たまにはあります。(上田雅美)

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