The RSpec Book 読書記録(1)

ちょこちょこ Rails をいじる機会が多くなってきたので、やっぱりテスト書かなくちゃと思って The RSpec Book を購入しました。(たまたま翔泳社のポイントをいただいたというのも大きいけど) [ The RSpec Book (Professional Ruby Series) ](http://www.amazon.co.jp/exec/obidos/ASIN/4798121932/hatena-blog-22/)[The RSpec Book (Professional Ruby Series)](http://www.amazon.co.jp/exec/obidos/ASIN/4798121932/hatena-blog-22/)- 作者: David Chelimsky,Dave Astels,Zach Dennis,角谷 信太郎,豊田 祐司,株式会社クイープ- 出版社/メーカー: 翔泳社- 発売日: 2012/02/22- メディア: 大型本- 購入: 6人 クリック: 129回- この商品を含むブログ (13件) を見る タイトルは RSpec とあるけど、前書きにあるとおり Cucumber も出てくるし、BDD の側面が強い。ちゃんと BDD と TDD のサイクルをどう回すか、アジャイル開発とはまで出てきて、良いことが書いてある。 さて、目的の Rails については前半は出てこなくて、19章以降になる。ここで Gemfile に Cucumber を書いてインストールするんだけど、本書のままだと Rails 3.2.11 でうまく動かなかったのでメモしておく。cucmber-railsとdatabase_cleanerをtestグループにのみ含めるのがポイント。 `group :development, :test do gem "rspec-rails" gem "webrat" end group :test do gem "cucumber-rails" gem 'database_cleaner' end `

January 27, 2013 · nnasaki

宮城大学大学院 情報デザイン特別講義 2012 に行ってきた

宮城大学大学院 情報デザイン特別講義 2012 小飼 弾 先生 がいらっしゃるということで行ってきた。 もう全然 Perl の話じゃなくてコンピューターサイエンス。いや、それも通り越してしまって、哲学的なものを感じました。 だって、print "Hello, World"がプログラムかデータか?っていうところから、チューリングマシンが出てきて、ライフゲームが出てきて。ライフゲームに生命があるか? こんなの話の展開誰が想像できますか?w で、生命ってのは結局 生命 → 物理法則 + 初期状態 と言い表すことができるかもしれないって一つの結論が導きだされた。ライフゲームが1970年に生まれて、チューリングマシンが表現できるとわかったのが2010年で40年かかっている。 これは物理法則が単純すぎるから、初期状態を探すのに時間がかかった。 これもプログラミングに当てはめることが可能でプログラム → 言語 + ソースコードであり、言語が複雑になるほどソースコードは簡略化可能で、言語が簡単なほどソースコードは複雑化するっていうので、BrainFuck 等の言語で FizzBuzz を表す例を見た。 ライブコーディングもあり、フィボナッチ数は普通に書くと35あたりから辛くなるというところで、高速化するにはどうするか?という問題。Perl だと memorize の2行を追加すれば良いということで、自前でキャッシュする場合との比較を行った。 ここら辺のプログラミングはHigher-Order Perlというとても良い本がPDFで全文公開されているので是非見て欲しいとのことだった。英語だけど。日本語だとメタプログラミングRubyとかいいかもしれないね。 今後求められるプログラマーとしては複雑なものから単純なものを生み出す。つまり、メタプログラミングのできるプログラマーが求められるとの話。 最後は杜の都ということを意識していただいたかもしれないお言葉で結論が導き出された。 逆に考えるんだ

January 13, 2013 · nnasaki

年末年始にやったことメモ

せっかくの休みなのに、所用で友人との忘年会2件ぐらい参加できなかったので黙々とプログラミングをするとか、とても勿体ない年末年始を過ごした。 忘れないうちにやったことと感想をメモしておく。iOS と Play Framework と Rails をやった。 iOS 2歳の息子が電車とか車が大好きなので、あいうえお順に電車を表示するアプリを作った。単純に page based application で写真を表示するようにしただけ。写真は wikipedia から拾ってきた。写真のライセンスを確認していなかったので、ソース公開は現時点でちょっと控える。写真のライセンスを確認したら公開したい。 今後やりたいことは2つある。 起動時にメモリにガッって、全写真を読み込むのでとてもよろしくない。Core Data やらを勉強してページごとに動的に読むように改善したい。 写真のリサイズは iOS 6 だと自動でやってくれるけど、iOS 5 だとやってくれないのでなんとかしたい。でも面倒なので iOS 6 な iPad を購入して息子に与えてしまった。お金で解決できることはお金で解決してしまうというのが最近のモットー。ヴァイヤイヤイヤイヤー、 Play Framework いまさらながら、Web+DB vol 71 を見ながら写経してみた。やってみた感じ、View は Razor なので ASP.NET MVC と同じ感じで組めてすんなり入れた。けれど、SQLを直接書く必要があったり Model と Controller は Scala で書かれたコードを見てもイマイチ理解できなくて、今後使うことは今のところ無いかなという感想。 非同期やホットリロードという魅力的な利点があることは理解したので、今後 Scala 力が高まったらまた試してみたいと思った。 Ruby On Rails お仕事でプロトタイプを作成するのにちょっと使った。だいぶ前にハローワールドぐらいはやってたんだけど、テストや配信周りを含めて本腰入れてやってみた。 Assets Pipeline とやらの仕組みが最初わからず、なんで jQuery やら SASS やらがロードされるのかわからなかった。あと、Production で Deploy するとそこら辺でエラーになったりとか。 けれど、ググればなんとかなった。持っている本は Rails 1.x や 2.x の頃で、現在の3.2とは異なりすぎていて吹いた。 今のところ Play よりは理解できているので、もうしばらくいじってみたいと思う。Rails だけでなく、テストに RSpec や Cucumber を使ったり、本番環境への配信も Chef やら Capistrano 等の Rails 周りのやつも使っていきたい。開発・テスト・デプロイとすべて一貫して Ruby でできるあたりに、Rubyist の Ruby 愛を感じた。 ...

January 9, 2013 · nnasaki

あけましておめでとうございます

あけましておめでとうございます。今年もよろしくお願いします。 1/6までお休みなので、去年の振り返りと今年の目標をゆっくり決めようかなと思っています。

January 1, 2013 · nnasaki

デシジョンテーブルを使用してテストしてみよう #TddAdventJp

この記事はTDD Advent Calendar jp: 2012 : ATND の6日目です。 前日(5日目)は @a_suenami さんの 受託開発でTDDを導入するということ でした。 デシジョンテーブルを使ってテストしたい! 仙台で行われている、仙台ソフトウェアテスト勉強会とデシジョンテーブルとSpockで試すTDD(ネタ) - pocketberserkerの爆走にインスパイアされ、テスト技法としてデシジョンテーブルを書いた後に、具体的にどのようにテストの自動化を行うか考えてみました。 今回は(も?)FizzBuzzをお題としたいと思います。 デシジョンテーブルとは? デシジョン・テーブルを活用するを参照してください。以下引用します。 デシジョン・テーブル(ディシジョン・テーブル)は decision table、 つまりそのまま訳せば「決定表」です。 様々な事情・条件を考慮して、 何かを「決める」ときに、 それを表形式で表現する方法です。 SpecFlowを使用する id:pocketberserker さんは Groovy で実践していらっしゃいますが、私は c# でデシジョンテーブルを表現できないか試行錯誤してみました。テーブルの表現は Ruby on Rails の受け入れテストでよく使用される Cucumber でできそうです。 c# では Cucumber は残念ながら使用できませんが、同じDSL(Gherkin)を使用できる SpecFlow というツールで代用ができそうです。 環境設定 以下の環境で試しています。 Windows 8 Visual Studio 2012 Professional (Expressは拡張が入らないので非推奨) c# また、Visual Studio の「拡張機能と更新プログラム」から次の拡張をインストールしてください SpecFlow 実践 Project Setup | SpecFlow とだいたい同じように進めますが NUnit ではなく MSTest を使用し、さらに Chaining Assertion を使用します。xUnit 系とは少々異なる記述となりますが、単純に好みの問題です。 SpecFlowプロジェクトの作成 Visual Studio にて c# のクラスライブラリを新規作成します。名前は「FizzBuzz.Specs」とします f:id:nnasaki:20121201015902j:plain Class1.cs は不要なので削除します ...

December 6, 2012 · nnasaki

DDD勉強会に行った

f:id:nnasaki:20121201001323j:plain 主催者多忙によりおよそ2ヶ月ぶりの開催。結局、今日もこれなかったんだけど今年最後になりそうなので、みんなで開催することにした。 久しぶりにやれてみんなで毒吐きまくりで、いつもながら楽しかった。 初めてF君も発表していい経験になったんじゃないかなーと思う。 今年は一回ぐらいしか発表できていないので、来年も発表したいですね。 飲みに行きたかったけど、明日は会社の研修があるので今日は残念ながらキャンセルした。ここら辺も来年はサッといけるようにYAuthの認証を得ておきたい :-)

December 1, 2012 · nnasaki

Visual Studio 2012 周りをアップデートした

community technology preview (CTP) for Visual Studio 2012 Update の vsupdate_KB2707250.exe、Microsoft ASP.NET Fall 2012 Update BUILD Prerelease、Type Script 0.8.1 をインストールした。 それぞれのダウンロード先は下記の通り。 Download: Visual Studio 2012 Update 1 CTP 4 - Microsoft Download Center - Download Details Download ASP.NET Fall 2012 Update from Official Microsoft Download Center Download TypeScript for Visual Studio 2012 from Official Microsoft Download Center 目的は特になくてなんとなくやってみようかなーぐらい。ASP.NET に knockout.js と Web API のテンプレートが追加されていて良い感じ。これでなんかネタ作れないかなー・・・。 あとは neue cc - Microsoft Fakes Frameworkの使い方 にて知ったんですが、Provide Microsoft Fakes with all Visual Studio editions – Customer Feedback for Microsoft に期待しています。 ...

November 27, 2012 · nnasaki

ソフトウェアテスト勉強会に行って来た

f:id:nnasaki:20121116215807j:plain ソフトウェアテスト勉強会~やってみよう!デシジョンテーブル&状態遷移~ - TDC - ニュース - 東北デベロッパーズコミュニティ 写真 は21歳誕生日を祝っての21個のイカリングスカイタワー写真です。 テスト勉強会は0回以降参加していなかったので、ようやく参加できた。講師は@nemorineさん。 デシジョンテーブルと状態遷移は結合テストと思い出したくない強化テスト(結合テスト以降でバグがいっぱいあるとやる)で作ったなーと懐かしながらやっていた。 ジョジョネタがところどころ出てきましたが、残念ながら不発ッ!学生もチラホラいるので、ついてこれなかったかしら。 デシジョンテーブルと状態遷移図(表)はJSTQBテスト技術者資格認定-シラバス(学習事項)・用語集-では「〜という役割である」という説明だけで、作成の仕方までは解説されていないので、実際に手を動かして作るのはとても参考になった。 いくつか覚えていることを箇条書きメモ。 デシジョンテーブル 入力条件(縦軸)は同値分析を行い、2のべき乗で増えていく条件を出来るだけ減らすこと。 条件指定部(横軸)の組み合わせも同様に圧縮できる。設計時には便利だが、テスト時はやり過ぎると試験項目漏れとなるので注意。 真偽値は綺麗に書く。バラバラに書くと網羅しているかパッと見分かりづらいから。 コツは入力条件が3つなら2**3 = 8通りとなるので、一番目の入力条件はYYYYNNNN、2番目の入力条件はYYNNYYNN、3番目はYNYNYNYNとして機械的に書く。 三番目の機械的に書くのは表にするとこんな感じ。Yを半分ずつに減らし(分割し)て書いていくのがポイント。自分は知らなかったので、おーなるほどーと思った。 入力条件 条件指定部 クーポン YYYYNNNN 平日 YYNNYYNN 学生 YNYNYNYN 状態遷移テスト 状態遷移図で条件漏れは発見しにくい。理解をしやすくするものとして、図を元に表を作ると良い。 UML の状態遷移図を使用しても良い 状態が遷移する間、初期状態からイベントをいくつか経由して初期状態に戻った時、イベントの同時実行等に注意する。 勉強会後の懇親会はほぼ全員参加で14人も集まった。 なんと昨日誕生日と明日誕生日というニアピンな人が二人もいたので、低音なハッピバースデーで祝った。 生搾りパイナップル絞りサワーが大人気で、うまかったけど、酵素のせいか飲めば飲むほど酔いが覚めるという意見もあり。 c#erいないすかね、という話をしたら「僕は.NETが嫌いなんでc++でゴリゴリですね」という強者もいて、なかなかc#使いには肩身が狭い世の中です。 次回は12月15日(土)にゲストを招いてテスト技法の勉強会を予定しているそうで、HAYST法を使ったりするようです。私は残念ながら既に先約があって行けません(とても行きたい!)が、皆さんは予定をあけておくと良いと思います!

November 17, 2012 · nnasaki

Parallels Desktop から BootCamp の Windows 8 が起動しなかった

f:id:nnasaki:20121114061951j:plain 問題 Parallels Desktop から BootCamp の Windows 8 を起動しようとしたところ、下記エラーとなった。 **Boot Camp パーティションのハードディスクを構成できませんでした。 ディスク構成エラーが発生しました。ディスクに対する読み取り/書き込み権限があることを確認して下さい。 f:id:nnasaki:20121114062034j:plain 詳細を押すと下記のメッセージが出た。 Error: PRL_ERR_DISK_GPT_MBR_NOT_EQUAL (0x80021065) f:id:nnasaki:20121114062137j:plain 解決策 rEFIt - An EFI Boot Menu and Toolkit をインストールして、MBR と GPT の不一致を解消すれば良い。 んで、試す前に注意を。 rEFlt はブート領域を書き換えるので、最悪 Mac が起動しなくなるリスクがあります**。USB メモリにインストールとかも出来るようですので、心配な人はそっちを試したほうがいいです。 リスクを理解した上で、私が行った具体的な手順は下記の通り。 1.rEFIt 0.14 (6.5M Mac disk image) をクリックしてダウンロードする 2.イメージをマウントして、Finder から rEFlt.mpkg をクリック 3.インストールを進めていく 4.再起動 5.Boot 画面が rEFlt になっていなく、Mac OS が起動 6.もう一度再起動する。わりとここが重要っぽいです。 7.Boot 画面が rEFlt になっていた 8.Start Partitioning Tool を選択 f:id:nnasaki:20121114053358j:plain 9.May I update the MBR as printed above? [y/N] とでるので、yを入力してエンター ...

November 15, 2012 · nnasaki

Android の自作ホームアプリでホームボタンが効かないときの対処

Android のホームアプリの情報って少なくてハマったので断片だけメモ。 ホームアプリは AndroidManifest.xml に<category android:name="android.intent.category.HOME"/>を追加すればいいだけ。 大体これでクリアできたんだけど、再起動後に問題があって、ホームボタンを押してもうんともすんとも言わない。正確にはイベント(onCreate()やonResume()等)が来ない状態となってしまった。 SDKに付属しているサンプルのホームアプリも同様の現象が起きるようだった。android-sdk-macosx/samples/android-16/Home/src/com/example/android/home/ こういう時はオープンソースの強みということで、デフォルトのランチャーのソースを見ることにした。https://android.googlesource.com/platform/packages/apps/Launcher2 結果、 AndroidManifest.xml の activity に以下が記載されており、自作ホームアプリに組み込むことでイベントが来るようになって解決した。 `android:stateNotNeeded="true" android:clearTaskOnLaunch="true" ` AndroidManifest.xml 詳細を見ると、clearTaskOnLaunch の効果があったのかなと思います。 こういうことはデバッガで追ってもわからないし、LogCat にも何も出ないし、Android Hacks にも載ってなかった。もうちょっと Android の基礎力が必要と感じました。

November 5, 2012 · nnasaki