udon's blog

思いついたことを、思いついた時に。忘れないように。

TDDって、なんだろう?

こういうのをちょっと、やったんですけどね。

TDDBC大阪2.2パッチ : ATND

TDDってなんじゃいな?

内容的にはディスカッションがメインで、私はコードは一行も書いてないんですけど、今回一応「教えかた」ってタイトルでちょろっとだけ話をしました。

で、結局自分にとってTDDってなんだろうなぁというのをふと考えてみたんですね。

Red/Green/Refactorのサイクルとか、test 1stやDog foodとか、いろいろあると思いますけど、自分にとってはやっぱり「不安を解消する方法」っぽいなぁと。

ふあん?

やっぱり書くと不安なんですね。「動くかね?」と。でまぁ、10行くらい超え始めると不安を超えて恐れになってきたりする感じがあります。まぁ自分を信用してないってのもありますね。

動かしたい欲求

一応組み込みを生業にしているわけですが、今の様な多少なりともの知識を得る前からなんとなく「スグ動かして確認したい」というのは自然発生的な欲求として持っていた感じがします。
なんぼ書いたって動かないと意味が無いでしょうに、という感じでしょうか。

でやっぱり一気に作るといざ動かなかった時のデバッグが大変で、自然と「ちょっと作っては動かし、ちょっと作っては動かしで、少しずつ積み上げる感覚に近づいて」いってました。この感覚はなんとなくTDDの中にも流れているような気がしています。

ささえる知識と実践への障害

で、仕事サボってネットの記事読んだりとかで「test 1st」という言葉にだけ遭遇したりとかでしたが、具体的に「TDDっていうのがあるんだよ」っていうのを聞いた時に、割とすんなり受け入れられたのは上のような"欲求"が元々あったからかもしれません。
それまでなんとなくモヤモヤ持っていた感覚に「ちゃんと名前がついた!」と、そういう感じでしたね。

なのでよく聞く「TDDしたいけど無理だす」ってのは、正直言うと理解に苦しむところではあります。何か障害がありますかい?と。(怒らないでね☆

組み込みだと一番の障害は「実機でフレームワークが動くか?」だったりして、次点的に「動かすのに時間が掛かる」な感じですが、話し聞いてると結局は心理的な問題が大きい様な気がしています。後は「必要ない(と、思っている)」とか。

めんどくせ?

でも話を聞いてると「動かしながら書いてる」とかって聞こえたりするんですよね。
ということは実は「自分(人間)がテスティングフレームワークになっている」だけで、「動くもので確認」ってところは、実はクリアしとるわけです。

  • やっぱり不安でしょ?動かして確認したいでしょ?

から始まって、

  • 一々見て確認するのめんどくね?勝手にやらせられたら楽じゃね?

になれればやれるでしょうきっと。

言い訳

あっていいんですきっと。ちょっとくらいテストを後に書いたってええんですよ。
テストしないところがあったっていい。
かっこ良くフレームワークを使いこなしてなくってもいいし、少々自動化できてなくってもいいんです。

そう、いつまでも「できない」って嘆いてるよりはね☆

MacPortsでgcc 4.7を。

・・・。わかりにくいぞ。

前にTDDBC大阪でboost/c++11という、まぁ、なんというか魔法みたいなのを触ったんですが、gccのバージョン4.7が必要だったんですね。

でもまぁ、手持ちのMacのデフォルトは4.2でして。

datsuns% gcc --version
i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

あい。4.2ですね。

で、その場で4.7はインストールしたんですが、切り替えが上手く行かず・・・。

datsuns% port installed | grep
gcc47 @4.7.0_3
gcc47 @4.7.1_2 (active)
gcc48 @4.8-20120527_1
gcc48 @4.8-20120729_0 (active)

インストールはできてるけど、切り替え方がわからん・・・。
で、ぱっと探すとgcc_selectっつうのがあったので入れたんですが、

datsuns% port installed | grep gcc_select
gcc_select @0.1_5
gcc_select @0.1_6 (active)
datsuns% gcc_select
zsh: command not found: gcc_select

がー。。。
で、今頃になってようやく答えが見つかりました。


#29531 (_select ports no longer provide _select binary)
– MacPorts

You should check port select --list gcc first. You want to run port select gcc mp-gcc45.

あー。portにその機能があったんですね。。。

datsuns% sudo port select --list gcc
Available versions for gcc:
gcc42
llvm-gcc42
mp-gcc47
mp-gcc48
none (active)
datsuns% sudo port select gcc mp-gcc47
Selecting 'mp-gcc47' for 'gcc' succeeded. 'mp-gcc47' is now active.
datsuns% gcc --version
gcc-mp-4.7: error trying to exec '/opt/local/bin/i686-apple-darwin11-llvm-gcc-4.2': execvp: No such file or directory

・・・あれ?
なんかでもターミナル立ち上げなおしたら直しました。

datsuns% gcc --version
gcc (MacPorts gcc47 4.7.1_2) 4.7.1
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

ま、まぁとりあえずこれでいけるかな。

実行の終了を通知する

と、書くと結構大仰ですけど、今仕事のメイン環境がcygwinなんですが、テストプログラムとか実行に10分くらいかかるやつを頻繁に実行することがあるんですね。

もちろん「ぼーっと待つ」のなんか論外で、何か通知の仕組み無いかなーと。
元々は「タスクバーのアイコンがブリンクする」とか考えたんですけど、、よく分からなくて挫折。

で、考えてみれば「メッセージボックス出すだけでいいじゃん」と。

show_done.cpp

#include
int main( void ){ ::MessageBox(0, "DONE", "DONE", MB_OK); return 0; }

で、

$ run_long_task && show_done

とかやれば良し。

まぁ、&&の使い方初めて知ったよー!って話なんですけどね実は。

コマンドラインからredmineでも

一応形だけですけどredmineを仕事で使ってます。redmineいいですね!

でももうちょっとちゃんと使わないとまるっきりアンチパターンちゃうかなぁ〜 【公開】RedmineのFAQとアンチパターン集 #Rxtstudy: プログラマの思索・・・ではなくて、仕事の環境がcygwinメインなので、ブラウザとcygwinを行ったり来たりするのが面倒なのですよ。

以前のredmine勉強会 RxTstudy で、コマンドラインからredmineを操作するツール「redcuine」が紹介されてました。
いや〜〜、やっぱりやってくれてる人がいるもんです。しかもgemでインストールできるとは!ありがとうございます!

Redmineのチケットをコマンドラインで扱う「redcuine」 - I am Cruby!

ただ、コマンド一発で動いて終わりな動作がどうにも、、、対話式な動作にならないかな〜〜。と。。。

ということで、redcuineのラッパースクリプトを作り始めてみました。

datsuns/cmdmine · GitHub

びっくりするほどのナンチャッテrubyと、やっつけなネーミングについては言わない約束です :-)

  • 使い方

まずはredcuineをインストールしておいてください。

$ gem install redcuine

で、スクリプトを起動。

$ ruby cmdmine.rb
>

ヘルプ

> help
init : 初期化を実行します
exit : スクリプトを終了します
config : 設定ファイルを編集します
list : チケットの一覧を取得します
show : のチケットの詳細をvimで表示します

初期化(redcuineの設定ファイル生成)

> init
Please input -g or -u or -p -or -d.

redcuineの設定ファイル編集

> config

エディタ(もちろんvim固定)が立ち上がるので編集してwq

とりあえず http://www.redmine.org/ を対象に。
一覧表示

> list

  • id: 11501 subject: More filters on page admin -> users
  • id: 11500 subject: Add --unknown-user=register to create inactive users
  • id: 11499 subject: Fixed attachments handling when receiving a new issue by mail
  • id: 11498 subject: Added --no-account-notice option for the mail handler script
  • id: 11497 subject: Dry up logging in MailHandler class
  • id: 11496 subject: Make labels clickable in Adminstration/Settings

....暫く続く

IDとsubjectだけ出します。

id指定の詳細表示

> show 11473

ここでも詳細表示はエディターで行います(もちろんvim固定

と、今のところはこれくらい。

後はエディタ(もちろんv (以下略)使って更新でもできたらええかな〜〜

「ハイブリッドアジャイル」について

勉強会なんかで時々聞かれるハイブリッドアジャイル

自分の認識としては

  • 要求決めとシステムテストフェーズをウォータフォール的に
  • 詳細設計とか実装とかはアジャイル

だと思ってます。いわゆるV字モデルの最初と最後をWF的な。
# 大筋で間違ってないはず・・・?

で、その言葉が出た時って大抵「現実解」とか「妥協案」とか、割とネガティブな言葉で形容されることが多いように感じてます。
もちろんそう思うところもありますが。。。


◯積極的な採用
今にして思うとですけど、なんだか「アジャイル = "回す"」に注目しすぎてなかったか?と考えたりします。回したところで何やねん。言ってしまうとたぶんそうなるんじゃないかと。

目指すところは何か。「顧客の価値」という言葉は、ナカナカ好きになれないですけど、「自分たちが満足して、なおかつお客さんも喜んでくれるものを作ろうよ!」な発想は非常に気に入っています。
で、先の言葉には2つの要素「開発者の満足」と「顧客の満足」があるはずで、どっちもうまく最大化できないかというのが、ワタシもそうですけど多くの方が感じてる課題じゃないのかなーって、勝手に思ってます。

で、やっぱり「お客さんの要求を出す」っていうのはすごく難しいことで、それを「動くS/Wで見せる」か、「しっかり考えて出す」になるのかなと。

前者がいわゆる教科書通りのアジャイルで、後者は要求開発とかそのあたりになりそうです。

ということは、

  • 要求を出すあたりで要求開発の知識を持ってうまく要求を出して
  • アジャイルのプラクティスで持って素早く動かしてみせる

っていうのは、かなり最善に近い方法じゃないかなー、とか思います。
で、これは外から見ると「ハイブリッドアジャイル」と呼ばれるやり方に近く見えるのではと思いました。

で、結局のところ

  • アジャイルで言うユーザーストーリーを出すあたりで、要求開発な思考を取り入れて上手く見える化する

とかできれば、かなりいいんではないかと。
我ながらナカナカ核心めいてないかと思ったり。

その辺を踏まえると、アジャイル関連って「要求を出すことそのもの」ってあんまり大きくはできてない気もしたり(?)しますし、意外と個人的なこれからの本題になりそうな気がしています。(勉強不足はもちろんですけどね)

Let's よーきゅーかいはつ!

言葉だけは知ってたんですが、中身は全く知りませんでした。

7月11日 要求開発アライアンス西日本勉強会#19(大阪府)

ほんとにまるっきり丸腰でしたが、まぁいつものことですね!

◯要求分析ツリー
今回はワークがメインとのことで、説明もそこそこにワークに突入。
・・・えっと、何も知らんのですが、要求分析ツリーとうものを作るとのこと。

一応こくちーずに参考URLとかあったので事前にちらっと見たりはしてみたのですが

要求開発アライアンスのビジネス・モデリング道場 - 「要求分析ツリー」を使って要求の構造をとらえる:ITpro

これぱっと見て理解できる人おる?!

簡単に言うと、

  • 一番左に「問題点」を
  • 一番右に「解決策」を
  • その間を論理的につないでいく

ということらしいです。
ふむふむ。発想のブレークダウンを見える化するわけですね。

◯お題
関西の要求開発アライアンスをもっと広めるにはどうするか?

全く参加していない勉強会について話すのは、結構難しかったです。
とりあえず「問題点」は、いくつか出せたのですが、そこから先がつながらない。。。

問題点の出し方は

  • hogeだからfooできない

と出して行くらしいのですが、これがなんとも。
出した内容が「手段」なのか「目的」なのか。

このあたりって、いわゆるインセプションデッキにも近いものがあったりするかなと思ったのですが、あちらの様に「穴埋め」的な枠が存在するといいかもと思いました。

やっぱり「言い方」って大事だなと。「〜する」とかって言うと手段になるしと。

◯感想
ワークの間ただひたすら「むずいわ〜」でした。言葉が出てこない。
しかも途中から話が脱線してしまって、結局何が解決したい問題だったのかを見失う始末 orz

やっぱり最初に「ゴール」を明確にしておくべきだったと反省。。。

あと「ゴール記述書」というのがあるらしいですが、これってエレベーターピッチっていうか、インセプションデッキのテーマにすごく近いなと感じました。

後気になったのは

  • 「要求開発」して出したアウトプットは誰が見るのか?

と、

でした。懇親会に行けなかったので講師の方には聞けませんでしたが。。。

誰が見るかについては、「マネージャーとお客さんだけ見てる」なんてダメですよね、たぶん。
帰りに話しをチラッと聞くと、要求開発には「こたつモデル」という概念があるそうで。やっぱりプロジェクトに関わる人みんなが近いところでちゃんとコミュニケーションとって、っては似た発想を持ってるみたいです。よかったよかった。

悪いウォータフォール・・・。「要求さえちゃんと固めて出せればOKさ!」な奴。。。
もちろん「本当にちゃんと出せれば」いいんですよ、えぇ。

ただ「どっちが正しい」とかってのも無いわけなので、これからはこの辺の分野も勉強したいですね。

あとはTOCとか。

TABOK勉強会関西 Iteration Zero

ノリと勢い(は、時々怖い)

TABOK勉強会関西 Iteration Zero : ATND

そうそう。また会議室使わせてもらいました。
会社に感謝!

◯話したこと

  • TABOKって何?
  • TABOK買い方知識体系
  • 何をしましょうか

◯決まったこと

  • 次回(8/19)
  • TABOK 1.1.1と1.1.2を読んで話をする

◯My ToDo

  • 会議室使えるか確認
  • TABOK買う
  • 1.1.2読んでまとめる
  • (どうせ1.1.1も読まないとイカン気もする)
  • 弊社社員。。。

◯感想
とりあえず「発足感」がすごいありましたね。
まぁ、やりながら考えながら。