投稿

2013の投稿を表示しています

[Spring Advent Calendar 2013 3日目] Thymesheetを使ってみる #spadc13

Spring Advent Calendar 2013 3日目です。
http://www.adventar.org/calendars/153

Thymesheetとは
Thymeleafのテンプレートからth属性を取り除いてCSSみたいに外だししようというものです。
https://github.com/connect-group/thymesheet


Thymeleafのおさらい
ThymesheetのREADMEに書いてあるので、おさらいがてら適当訳してみました。

Thymeleafは、Javaのライブラリーです。XHTML/HTML5を提供するWebはもちろんWebでない環境でもっともいい感じの、XML / XHTML / HTML5(他のフォーマットも拡張可能)のテンプレートエンジンです。
Spring MVCに組み込むためのモジュールが提供されており、Spring MVCのJSPテンプレートエンジンに対する、HTML5での完全な代替として使うことが出来ます。
Thymeleafのゴールは、エレガントでちゃんとした形式でのパワフルで自然なテンプレート、つまり静的なプロトタイプとして動作しブラウザで正しく表示できるテンプレートを作る方法を提供することです。

詳しくはこちらをご覧下さい。


Thymesheetの使い方
とっかかりレベルではREADMEみればOKって感じですが、一応サンプル作ってみました。
去年のAdvent Calendarで書いたものから修正しています。
https://bitbucket.org/twopack/spring-thymeleaf/branch/thymesheet
というわけで、さくさくと説明です。

Mavenの設定
pom.xmlに以下を追加します。
Thymesheetは、Thymeleafは2.1.0以降をサポートですのでdependencyのバージョンもチェック。
<dependency> <groupId>com.connect-group</groupId> <artifactId>thymesheet-spring3</artifactId> <version>2.1.0</version>…

テスト設計コンテスト’14 東京予選を見学してきた

11/30にテスト設計コンテスト’14 東京予選を見学してきました。
テスト設計コンテストは、NPO法人ASTERが行っているコンテストです。
翌日にシステムテスト自動化カンファレンス2013へ出るため東京へ前日入りの予定だったため、少し早めに行けば見れる!と早起きしました。(ついでではないw)

今年からテストベースがポットから自動販売機になりました。ポット時代もテスト設計コンテスト自体を生でみたことはなかったので、どんな感じなのかなと楽しみにしていきました。
とりあえず、会場についてAグループ、Bグループがあり、好きな方を見学できる、ということでBグループをみました。チーム名だけの情報だったので、理由は特にないですw

まだコンテスト中なので、ああだったこうだったは書けませんということになりますw(じゃあ、後で書くのかというと(ry)
Bグループは6チームでしたが、違いもあれば共通点もあり、アプローチもいろいろでした。
また、プレゼン資料だけでなく実際の成果物を見るのは初めてで、これも各チームいろいろで面白かったです。
Aグループは掲示と資料を眺めたぐらいでしたが、プレゼンも聞きたかったなあ、と思いました。

いろいろと見たり聞いたりしても、すぐに忘れる鳥頭で辛いですが、頭と心があったかい内に刷り込んでおかないとな、ということが多い半日でした。

あと地区予選の見学は、あと関西が残っていますね。お近くの方はぜひ!(まだ空いてるのかしら
http://aster.or.jp/business/contest/visitor.html

第33回勉強会(2013/09/28) Scala入学式 に参加してきました。 #nds33

9/28に新潟県長岡市でScala入学式に参加しました。 長岡IT開発者勉強会(NDS)の一環として開催されたハンズオン形式の勉強会です。 @neko_gata_sさんが講師をしてくれました。
資料はこちらで公開されています。
https://gist.github.com/Shinpeim/6740436


入学式名前は聞いた事ありましたが触るのははじめてなScala。猫型さんがどんどんコードを書いてくれるのを追っかけていくのも精一杯!って感じでした。反面、追って書いているコードはとても分かりやすく簡潔だと思いました。Scalaもすごいですが、猫型先生の準備もすごいものがあるなあ、と。

型で作っていくというスタンス。型推論含め、コンパイラーによって型の問題を解消して値の問題に注目できるのは重要なメリットだと感じました。@trailrecOptionforが糖衣構文というのも非常に面白かったです。

モナドのあたりからは、もっと勉強せねば・・・・という感じでした。コンテナの中身を気にせず扱えるという説明は、今までもなんどか呼んだはずのモナドについての説明よりも大分すっと入ってくるものがありました。それを踏まえて、もう一度学ばねば。。。


LT&懇親会
相変わらず楽しいLT&懇親会でした!入学式でぐったり、、、だったのですが、大笑いでしたwwww
それに比べて自分のLTときたら、準備不足というかなんというか(ry
今後はGo/NoGoの判断をちゃんとしたいと思います。
テストレベル? #nds33 from Tatsuya Saito
懇親会でもいろいろな話がでますが、なかなか中身についていけないです;;話を聞いているだけでも、技術的にも話としても面白いんですが。
学生さんも多いので、テストの話だったりもいろいろしてみたいなあ、と思うのですが、引っ込み思案な私。。。
もっと興味をもってもらえるようなアウトプットをしないとなあ、と思いました。


というわけで
今回も非常に楽しい勉強会でした。

「ホワイトボックス単体テストにおけるペアテスティング」を読んで

"ホワイトボックス単体テストにおけるペアテスティング" 第20回 ソフトウェア工学の基礎ワークショップ FOSE 2013 in 加賀(ショートペーパ採択)http://t.co/teiEFk2vX1— Hironori Washizaki (@Hiro_Washi) August 30, 2013

上記のツイートを見て興味があったので読んでみました。
感想とか気づきのまとめ。

ペアテスティングペアプログラミング、と同じ感じだよな、と直感的にわかりますが、Googleさんに聞くとテスティング・ペアとかも出てきてます。
ペアでテスト設計したときの品質に与える影響、および方法、最も良いテスト品質を実現するには?というあたりが、このペーパーの内容です。
また、テストコードでのホワイトボックス単体テストを対象としています。他のテストレベルだったり、ブラックボックステストだったりすると、変わってくる部分、同じような結果になる部分がまた出てきそうだなと思いました。

テストカバレッジテストカバレッジが高いほど欠陥検出力が高い、という引用があります。
ここではホワイトボックス単体テストなのでコードカバレッジなのですが、テストカバレッジってコードカバレッジだけなんだっけ?と思いJSTQB用語集を見ると、coverage参照となっていて、
指定の網羅条件をテストスイートが実行した度合い。パーセンテージで表す。となっていました。コードカバレッジは別であったので、限定的なものではないなと再確認。

ミューテーション解析ミューテーション解析は、初めて聞いた言葉でした。テストコードの妥当性をどう担保するのか、というのはいつも説明が難しいところでした。
JavaやJavaScriptでもツールがあるようですし、Jenkinsのプラグインもあるようなので、今後使ってみたいなと思いました。

検証結果検証の結果は予想を覆すもので面白いと感じました。特に、被験者がやりやすいと感じた「ペア1台」の方法が必ずしもテストコード品質につながっていない、というところです。
先日TDDBC Boot Camp長岡1.0でペアプロしたときに「やりやすさ」だったり「楽しい」ということ感じましたが、ペアテスィングでも同じ傾向がある気がします。
ただ、必ずしも品質につながっていない、というのはペアプロも同じで、こ…

Niigata.rb #3 に参加してきました。 #niigatarb

新潟のRuby勉強会「Niigata.rb」に参加してきました。
RubyといえばRedmineのプラグインもやっている・・・というか、すがる思いで申し込みましたw
場所は、新潟市中央図書館「ほんぽーと」。私が8/31現在メイヤーな、行きつけの勉強スポットでした!ああいう会議するところもあるんですね。
@dictav さんをはじめ、みなさまありがとうございました。

例によってアジェンダに沿って振り返ります。

Niigata.rb についてるびこさんがマスコットな、Niigata.rbは第3回。
NDSでrubyな人たちが新潟にもいる!というところから、はじまったそうです。
今回は半数ぐらいが県外勢でまたびっくり。学生さんも多かったです。

テスト駆動開発は みんなの心の中にある (@kenchanさん) TDDBC 長岡1.0に続き、くるものがあるお話でした。

「複雑」には「Complicated」と「Complex」がある、「Complecated」な複雑は分解して一つずつ相手にするとテストが書きやすくなるというのは、なるほどなあと思いました。小さな問題にして、というのがもう少しクリアになった感じがしました。角谷さんのお話からとのことでしたが、コードにした事だけではなく、コードにしなかった事も含めてプログラミング、という話がありました。いろいろな方法から選択した理由、選択しなかった理由を捉えて、初めてコードを作っていると言えると思います。TDDBC 長岡1.0 Reloadedは、自分も参加して言語は違えどやったお題だったので、なるほどなるほどと思いながら聴いていました。

初心者向けrubyの実行環境構築 (@kasacchifulさん) Windows、Mac、Linuxでの実行環境構築のお話でした。
rbenvでのバージョン切り替えなども含んだ実践的な内容でした。
私はLinux環境でやってた頃はrvmでしたが、最近はrbenvでやってます。bundlerがあればrbenvかな、と思ってます。

エモい話かなにか(@upinetreeさん) TideSDKというHTML5からRubyを扱いつつ、ネイティブアプリになるっていうフレームワーク?のお話でした。
艦コレ・・・なにこれ?の私には今ひとつ笑うタイミングが掴めませんでしたがw、簡単な指定で使える事、ネイティブアプリ…

SEMATカーネル勉強会 第2回に参加してきました! #sematj

ちょうど東京の用事と日程が重なりラッキー!ということで、SEMATカーネル勉強会へ参加してきました。
以下に資料もアップされています。
開発のよいやり方を形式値にして共有しよう! 〜パターンマイニングワークショップ〜
https://www.facebook.com/events/550763354987282/
パターンについての解説を聴き、ワークショップを時間オーバーの盛り上がりで行いました。
鷲崎さん、川口さんはじめ、みなさまありがとうございました。


パターンとはパターンとは、
特定の「文脈」で繰り返し起きる「問題」とその「解決」の記述
と定義されていました。
資料も見て頂くとして、ワークなどの中でポイントだなと思った点がいくつかありました。
「文脈」「問題」「フォース」をどう切り出すのか?「フォース」は、理由に通じるところであったり、物事の仕組みであったりすることがある。手段や制約といったところであったりもする。「問題」は「解決」によって変化するものである。
パターン候補の簡易マイニング資料にも書かれている、
 経験的なコツや暗黙知を、言語化して形式知にしたもの
ですが、暗黙知をどうやって形式知にして再利用可能にするか、ということへの一つの解として、パターン形式で書いてみるというのがあるんだなと思いました。

チームでのワークで「パズル的な要素」ということがでました。パターンの種になりそうなものを「パターンの形式」に当てはめていく中で、「文脈」から「結果」までのスジが通っているような、いないような、しっくり来ない状態がありました。そこをチームのメンバーの経験などで「文脈」や「問題」などを当てはめていくと、いい感じにピースがはまったんじゃない?というものがでてきました。
パターン形式で書く過程において共有を行う事で、メンバーが共通的に考えているような形式に集約されていくんだな、という印象でした。
また、他のチームは具体的なパターンから抽象度の高いパターンに変わっていたというところもあったり、他のパターンへの展開がありそうという話があったり、いろいろ面白かったです。


パターンを使いやすい形に改善していくというお話が川口さんからありました。
GoFのデザパタのように、いいものをまとめたもの、がパターンと思っていたので、これは重要だなと思いました。
確かに、いろいろなことをカイゼン、カイゼン言っているの…

第32回勉強会(2013/07/06) Githubハンズオン に行ってきました! #nds32

第32回勉強会(2013/07/06) Githubハンズオンに行ってきました!
飲んでいるままで、感想ですw #思います多いww

(おもにデザイナー向け)やさしいGithubハンズオンGithubのHands-onでした。 Windows版のSourceTreeがある、というところでしたが、非常に楽しめました。 My Page作るのがイマイチ分かってなかったので収穫でした。 今回は範囲外だよなあ、と思いながらRebaseの話があっても良かったかな、とか。
はじめてのnode.jsマージしてたら9割ぐらい聞いて(ry ごめんなさいm(__)m
実録!勘違いが生んだ悲劇。〜えッ!?修正なんて聞いてないんだけど…。リアル。まじリアル。 デザインの部分では要求定義って難しいなあ、と思います。 見える部分ということでお客様と合わせやすい、というよりも、出しても出しても見れば言いたい事がある、って感じ。 契約とかの話もでましたが、それことトリアージみたいなことが重要なとこだと思います。

高校生長岡ラーメン選手権の告知チラっ、チラっ(-- #YAuth
Keynote+Gimpでアイコン作成 興味深い内容でした。
アプリを作るときのアイコンとか、”アイコン 商用利用可 改変”、"Icon Createvie Commons"とかググってる自分としては、フラットデザイン!www
RでダイエットRといえば、統計、ぐらいのイメージでした。 実際、統計だったんですけど、食わず嫌いでした、すみません。 シンプルに情報の偏りを出すあのデモは、衝撃的でした。 言葉だけのビッグデータ、DWHではなく、アカデミックなところでのRは非常に落ちるものがありました。
VCS入門お世話になってますw

NDSの(ry
プロジェクト・アンブレラ、まじリスペクトです。@civicさん。
懇親会楽しかった!

自ら行動する技術者についての首都圏と地方における違い

JaSST'13 Tohoku の情報交換会で、そんな話題がありました。で、地方を盛り上げていくにはどうしたらいいのか?という感じ。
参加者からの質問がきっかけでパネルディスカッションのお題になったものでした。具体的な質問は失念orz
追記: @leecom さんから質問を教えてもらいました。ありがとうございます!「大都市圏ではない国内各地域のIT技術者・管理者がもっと元気に、より高い成果をあげるために自ら行動するようになるには何が必要でしょうか?」でした。
首都圏だからといって「自ら行動する技術者」の割合が多いわけではない、という意見。母数の大きさから大勢いるように見える。
そこから、母数の大きさから実数が多くなる事で、「なにかをしたい」というときの始めやすさ(勉強会するにも人数が集まるとか)はあるのではと。
また、同様の理由で、自発的な行動へとつながる「刺激」が多くなるのも首都圏の利点ではないかと。

組織内でも「刺激」の多寡がある。10ウン年同じ領域の同じ仕事をやり続けているベテランにとって、「刺激」の重要性は低く同じ方法で同じく仕事を回す事に重きが置かれる。
そのようなところに、例えば新人が配属されたとして「自ら行動する技術者」になる「刺激」を享受する機会は少なくなるのではないかと。
反面、地方ではやる気のある人で集まって勉強会などを行うから母数の多い首都圏と比べて、議論の密度は濃いのではないか?という話も。

JaSST'13 Tohokuでの議論を正しく捉えているか、が心もとないのですが、こんな話があったと記憶しています。


ここからは私の感じている事です。
新潟にいる私は、「地方」にいる技術者です。丸10年ほど開発に携わっています。
私は、「刺激」があるだけでは不十分で、「きっかけ」が必要ではないかと思います。
現在、「刺激」を受けることはインターネットの普及なんて大昔という勢いで、むしろ取捨スキルが必要なぐらい、刺激多すぎと言う状況ですw
しかし、その「刺激」を軸に自ら行動へとつなげる「きっかけ」は、また別のところにある気がします。

私の場合、ソフトウェアテストPRESSが初めての「刺激」だった気がします。そこからテストについて興味を持ち、自分の視野の中での「開発」について疑問を持ち、アジャイルといったテスト以外のことへも興味を持ちました。直…

JaSST'13 Tohokuに参加してきました! #jassttohoku

JaSST'13 Tohoku(以降JaSST)に参加してきました!
新潟以外のJaSSTは初参加。コミュ症なんでドキドキでしたが、すごく楽しい一日になりました。
@nnasaki さんが、Togetterで当日のつぶやきをまとめてくださっています。
というわけで、感想をつらつら。

午前の勉強会JaSSTは午後からで、午前中は東北デベロッパーズコミュニティ(TDC)の「ソフトウェアテスト勉強会(番外編)~レッツ!テスト!~」に参加しました。
@kitanosirokumaさんが、講師としてお話しされながら、実際に使われているWebサービスに対して、チームで探索的なテストを行うというワーク形式のものでした。実際に動かしてバグを見る、というのは非常に面白いし、JaSSTの中でも触れられていた、「達成感」を感じる事ができ、いいお題だなあ、と思いました。
特にポイントだと思ったのは以下。

意図をもってバグを狙う。それによって、見つかっても見つからなくても次につながる。できるだけ情報源を使い切る。
情報源としてソースもあったので、私ソースみたいです!って、ソースから重大バグ探しをしてました。
Railsわかんねww、って感じの時点で切り返した方が良かったかな、と後で思ったりもしました。

最後にチームごとに一番重大だと考えたものを発表して、その中でも重大だと参加者が考えたチームに送られる「ネモリン賞」を頂きました!
そして、おいしいお菓子を頂きました!やったね!w

午後のJaSSTそしてJaSSTです!とりあえず、タイムテーブルはこちら

基調講演:「開発を楽しくするソフトウェアテスト」 @yumotsuyoさん命題的な講演でした。テストに限らずソフトウェア開発の現場では、楽しく開発をするということが「目指す」になっている現状があると思います。
まあ、仕事だから楽しい事もあれば辛い事もあるのは当たり前なんですが、そこで思考停止してたらいかんですよね。
日頃から考えている事に対しての一つの視点という意味で、非常に楽しく考えながら聞きました。
特にポイントだと思ったのは以下。#書ききれない。。。

出来事 -> 考え -> 気分 という思考の流れ。「楽しい」の意味、仕掛け。達成感。ゲーミフィケーション。全員の立場でのソフトウェアテストに向き合う。テスト対象に対して、ユーザ…

JavaScript+QUnitでTDDしてみた。

TDD Boot Camp 行ったので復習を兼ねて JavaScript で TDD してみました
なんでC言語でやら(ry

お題 JQueryを使ってFizzBuzz、にしました。
ちなみに、JavaScriptはわかりません。Google先生に誰が知ってるか聞きました。
JQueryもわかりません。Google先生に誰が知ってるか聞きました。
いろいろ調べ過ぎてどこみたかも不明ですが、ツイート参照ということで、先人に感謝。

準備 環境は QUnit + Eclipse + JSDT Plugin という感じでやりました。
jsTestDriver を使おうとしたのですが、うまく行かず、テストの実行自体はブラウザです。
JQueryはダウンロードしてきて、main/js/external/ というフォルダを作っていれました。

QUnitの準備QUnit は npm で入れました。package.jsonを作ったので、PJルートで以下のコマンドでインストールされます。
/node_modules にインストールされるので、そこのパスをみるように実装しています。
$ npm install
テスト実装のHTMLは /test/html/runner.html です。
基本的にはオフィシャルをみれば分かる感じでしたが、 #qunit-fixture のdivタグの中に、評価条件のHTMLを入れるというのがポイントでした。
テストコードの setup() でタグを置き換えても良さそうでしたが、今回は複雑ではないので固定にして、プロダクトコードの body と一緒にしています。
ちなみに、 #qunit-fixture の divタグ内は、テストケースごとに初期化されます。

この状態でブラウザで runner.html を開いておいて随時テストを実行します。

TDDをやった経過 TODOリストも随時コミットすれば良かった・・・と思ったのは後の祭り。
でも、最終的なものをコミットしています。
Red -> Green -> Refactoring の流れのうち、Red -> Green でコミット、 Refactoring でコミットを基本にして、 Red -> Green -> Refactoring でコミット、大きなリファクタリングでの…

TDD Boot Camp 長岡 1.0に参加してきました! #tddbc

TDD Boot Camp 長岡 1.0に参加してきました!
ずっと参加してみたかったTDDBCが長岡で!、ということで飛びつきました。
長岡での開催にアクションして頂いた @masaru_b_cl さん、講師の @t_wada、TAのみなさま、協賛のNDSのみなさま、本当にありがとうございました。

時系列で心に留まったところをメモをみながらピックアップします。

自己紹介みなさんの自己紹介。県外から参加されている方もいました。学生さんから普段はPMをされている方まで、幅広い人が集まっている印象でした。
Keynote@t_wada さんのキーノートからスタート。「現代ソフトウェア開発の三本柱」として、VCS、テスティング、自動化のお話。関連して頭に浮かんだのが、VCS、ITS、CIという三種の神器でした。ITSの位置づけも重要だけど、3脚椅子のメタファーを4脚椅子にすると足を一つ削っても結構安定するから駄目だな、って思いましたw「テスト」という言葉の捉え方について。Developer Testing, Customer Testing, QA Testingという分類で説明され、TDDの文脈ではDeveloper Testingが該当。テストに関する用語の標準化という意味ではISTQBの用語集もあります、ってツイートしました。TDDのこころもち、というお話。なるほどなあ、という感じ。サイクルが1分 -> 1分 -> 2分というのは衝撃的でした。TDDの真の目的は健康。健康なコードと健康なチーム。健康第一ですよね!
ペアプログラミングによるTDDデモ&写経タイム写経タイムだ!と思ったのに、CppUTestでやろうと思ったらEclipseではまってついていけずorzペアとは終始話をしながらやっているなという印象。沈黙がない感じでした。アサートファースト。テストケースの後ろから書いていくことで、テストも見やすくなるとのこと。仮実装、三角測量といった方法。なるほどなあ、という感じ。

ペアプログラミングによるTDDハンズオン@bei_kan さんとC言語+CppUTestでハンズオンしました。ありがとうございました!>べいかんさんペアプロではキー配列とかショートカットとかが普段と違うと大変だと痛感。私のPC(MBA)でやらせてもらったので、私はよかったですが、ペ…

Redmine XLS Export Plugin で Iconv::InvalidEncoding

掲題のエラーになる、とのチケットが発行されました。
BitNami Redmine Stack使われてますねえ。
https://github.com/two-pack/redmine_xls_export/issues/23

エクスポート時にspreadsheet内でIconvを呼び出しているところが該当箇所でした。
UTF-8 から UTF-16LE の変換で失敗しています。
Iconv::InvalidEncoding (invalid encoding ("UTF-16LE//TRANSLIT//IGNORE", "UTF-8")): spreadsheet (0.8.5) lib/spreadsheet/encodings.rb:38:in initialize'
spreadsheetを調べてみるとruby 1.8と1.9で処理が分かれていました。
1.9.x以上はString#encodeメソッドなどで変換してます。
1.8.x以下は、Iconvを使って変換しています。
今回問題が起きている環境はRuby 1.8.7でした。

そもそもUTF-8でないデータが渡ってきてるのでは??と思いBitNami Redmineでの文字化け情報がないかなあ、、、と調べたら以下がありました。
これによると、データベースはずいぶん前からUTF-8になっているようなので、大丈夫そうです。。。
■[redmine]bitnami::redmine で文字化けしなくなった!

他を調べると以下のようなものもありました。環境問題っぽいのでそれで終わりにしました、、、なのか?w
http://stackoverflow.com/questions/4965796/convert-utf-8-to-unicode-in-ruby

コードカバレッジにテストケース分も含むべきか?

JaCoCO Maven Pluginでテストケースのカバレッジもとるの後、パッチを書いてpull requestを出しました。
結論から言うと、一旦取り下げました。

作ったパッチは、

mavenでJUnitのテストを実行した際に、テストのオブジェクトファイルができる場所(例えばtest-classes)をカバレッジ対象に加える
というものです。前のブログで書いたような結果が得られます。
しかし、以下のような点からデフォルトで含むのはどうなの?という意見がでました。

あまりコードカバレッジにテストケース分を含むのは一般的じゃないんじゃない?だって、プロダクションコードのカバレッジと混ざって、ほんとのカバレッジが見づらくなるじゃん?EclipseのプラグインであるEclEMMAの場合は、テストコードの場所に決まりが無いから全部にしてるんだよね。
#やばい、closeした時、誤訳してたと書いてて気づいた。。。少なくともデフォルトは出さない方がいいよね。
1は、普通フォルダだったりパッケージだったりを分けるんじゃないかな?と思います。
カバレッジもそれぞれで分けて表示できると思うので、問題にならないんじゃないかな、と。
2は、1のように分けていなければ、その通りだと思います。

そもそもパッチを書いた理由は、テストケースのカバレッジも見えるべきじゃない?ということでした。
他の意見としても、デフォルトは出さずオプションで選択できるようにしたらいいんじゃない?というものでした。
Maven pluginの形をとるという事は、いろんなケースがありえる前提に立って2のようなことを避ける方に倒すべきかな、と考え直し取り下げました。
オプション形式に書き直そうと思ってます。

で、JaCoCo Maven Pluginではパッケージで階層化されたレポート出力になるので、混ざらないように書いておくのが良いのかな?
ベストプラクティスとかあるんですかね?

JaCoCO Maven Pluginでテストケースのカバレッジもとる

イメージ
JaCoCoというJavaのカバレッジライブラリを調べています。

テストコードを書いて確認。EclipseのプラグインであるEclEMMAは内部でJaCoCoを使っています。
とりあえずオールグリーンです。


カバレッジが100%ではないですが、ここでは問題にしません。#ほんとはこれを調べてたんですが。
ちゃんとテストコードのカバレッジもとれてます。


次にMaven Pluginです。使ったバージョンは、0.6.3-SNAPSHOT。
HTML、XML、CSVでレポートが出力されます。HTMLのレポートを開いたものです。テストコードのカバレッジが無いです。


調べていくと、prepare-agentゴールでデータを作って、reportゴールでレポート化しています。
prepare-agentゴールでは、JavaAgentを使ってデータを取っています。この辺はたぶんEclEMMAも一緒のはず。
実際、HTMLレポートのSessionsのリンクをたどると、実行時のデータがすべて出てます。


ここを見るとちゃんとテストコードも通ってます。ということは、データは取れているけどレポートできてない、EclEMMAで出てるという事は、Maven Pluginで出ていないですね。


で、いろいろとpomをいじってみましたが駄目だったのでソースをみることに。
https://github.com/two-pack/jacoco/blob/master/jacoco-maven-plugin/src/org/jacoco/maven/BundleCreator.java
public IBundleCoverage createBundle( final ExecutionDataStore executionDataStore) throws IOException { final CoverageBuilder builder = new CoverageBuilder(); final Analyzer analyzer = new Analyzer(executionDataStore, builder); final File classesDir = new File(this.project.getBuild() .getOutputDirectory(…

長岡 IT開発者 勉強会(NDS) 第31回勉強会に参加しました。 #nds31

長岡 IT開発者 勉強会(NDS) 第31回勉強会に参加しました。
NDS自体初めての参加でしたが、とても楽しむ事ができました。
http://nagaoka.techtalk.jp/no31

テーマは「はじめての~」。初心者向けのテーマでなにか話して!ということでした。
以下、発表のまとめというよりも、気になったところの備忘録。発表順です。
スライドなど最新は上のページでまとまってます。

第31回勉強会 アジェンダ(@civicさん) はじめてNDSに参加されたかたも多かったとの事で、@civicさんからNDSについての説明がありました。
誰にでも発表の場を提供します!、というのは、新潟において貴重な場ではないかと感じました。

はじめてのChrome App (@civicさん) Chromeアプリでデバイスなどの低いレイヤーのAPIもあるということでした。
実際にUDPでメッセージを受けるデモをされてました。
bluetoothとかもあったので、今後何かやっていたいと思いました。

はじめてのmac用ビューアアプリ(@piras4さん) 最近はMBAべったりなのにXCode使ってみたこともない、、、、という私にはぴったりでした。
こんな風にするんだ、という感じでした。

はじめてのテスト技法 (@two_pack) NDSの実施ポリシーが非常にいいね!と思い、NDS初参加でしたが私も発表してきました。
http://nagaoka.techtalk.jp/Home
中身はテスト技法の話はしておらずw、「ソフトウェアテスト」に触れるきっかけになれればいいなということで書きました。
初めてSlideshareにも載せてみました。100viewいくとメールが来るんですねw

はじめてのPerl(のモダン?な環境構築) (@hajyajoさん) Perlの開発環境についてでした。システムPerlという言葉を初めて知りましたorz
開発環境用にバージョンを入れ替えるとか、ライブラリを指定のところに入れるとか、rvmみたいのか、と聞いていました。
IDEもあるようですw

はじめてのWindowsストアアプリ (@AILightさん) 生MVPだよ!生Surfaceだよ!と思ってたのは秘密ですw
ちょうど前の日に8のアプリを少し見たのもあって、非常に興味深かったです。
8がないのが痛いですが、や…

Redmine XLS Export PluginのRedmine 2.3.0対応

XLS Export PluginのRedmine 2.3.0対応を行って0.2.1.t2にバージョンをあげました。
https://github.com/two-pack/redmine_xls_export/tree/0.2.1.t2


2.3.0での問題Redmineのapplication.cssが変わったため、管理者のプラグイン設定画面の表示が崩れていました。以下のチケットです。
https://github.com/two-pack/redmine_xls_export/issues/19


対処XLS Export Pluginは、作者のVitaly Klimovが同じく作成しているPlugin views revisionsを使ってRedmineのバージョン違いに対応しているため、今回も使ってみました。
revフォルダの下にバージョンごとのファイルを作成すれば、インストール手順にある以下のRakeコマンドでRedmineのバージョンに合わせたファイルが使われます。
$ rake redmine:plugins:process_version_change RAILS_ENV=production
実際に行った対応は、このコミットで概略は以下の通りです。

もともとのCSSである assets/stylesheets/xls_export.cssrev/assets/stylesheets/1.3.0-xls_export.css として移動。redmine_xls_export/rev/assets/stylesheets/2.3.0-xls_export.cssとして、Redmine 2.3.0用のCSSを作成。

Redmine XLS Export Pluginの競合

年頭にXLS Export Pluginのフォーラムで、チケットリストのQUICKリンクでzipファイルが正しく作られないという問題が報告されてました。

調べてみると拡張子はzipなんだけど、実際にはxlsファイルだと判明。。。
ソースを追っていくと以下の部分が該当箇所。
export_nameには出力するファイル名と拡張子が入っています。issues_xlsはxlsファイルの内容で、zipの場合はこの後にrubyzipを使ってzipファイルにする処理があります。
export_name[1] == 'zip'trueだけど、Zip::ZipOutputStream::write_bufferfalseの場合は、現象が起きるルートになります。
issues_xls=issues_to_xls2(@issues, @project, @query, @settings) return issues_xls unless export_name[1] == 'zip' && defined?(Zip::ZipOutputStream::write_buffer)

Zip::ZipOutputStream::write_bufferがない?rubyzipをrequireしているのにZip::ZipOutputStream::write_bufferがないってどういうこと?
いろいろ調べていくと、Redmine DMSF Pluginが入っている場合に起きる事が判明。
DMSF Pluginではrubyzipではなくzipbundlerでインストールしていました

これによってrubyzipzipの両方がgemに入っている状態になります。
どちらのプラグインも、以下のようにしてロードしています。
require 'zip/zip'
しかし、ロードパスの優先順位の関係でzipのほうがrubyzipよりも先に見つかるので、zipがrequireされます。
そして、zipにはZip::ZipOutputStream::write_bufferが含まれていない、というのが原因でした。


調査と対応XLS Export Pluginだけrubyzipを呼び出す方法とかないのかな?と、いろいろ調べてみたんですが分か…

JaSST'13 Niigataに参加してきました。

2013/3/15に行われたJaSST'13 Niigataに参加してきました。
今回は参加している勉強会「すわにい」の成果発表で登壇もしてきました。
http://www.jasst.jp/symposium/jasst13niigata.html

遅くなりましたが、気づきのあった事を書いてみます。
ちゃんと内容理解できているか不安ですが。。。

2013/4/10追記
JaSSTのサイトにレポートがアップされました。スライドも見れます!
http://www.jasst.jp/symposium/jasst13niigata/report.html

基調講演
「仕様ベースのソフトウェアテストを上手に進めるには
~明文化された要求仕様に対して漏れなくテストするための観点とは~」
大西 建児さん 仕様ベースのテストで何がむずかしいか、を4つの視点からむずかしさを説明されました。「むずかしさ」を整理するポイントを教えて頂けたと感じました。

ISTQBとは、というお話から。JSTQBのFoundation Levelを持っているはずの私ですが、成果発表の資料の用語からしてISTQBの用語に沿ってない・・・・と焦りました(ーー; もう一度シラバスを読もうと思います。自然言語による仕様記述でのあいまいさ。言葉を尽くして表現しなくてはならない。情報が絡み合ってごちゃごちゃしている状態。情報の整理が必要。複数のテストアイテムに対するテスト条件がいっぱいあり整理できない。テスト条件とは、テストアイテムについてテストしなくてはならないこと。現在ではユースケースが膨大になるのが当たり前。どこまで保証するか範囲を決めることになる。製品、サービスの領域に関する知識は持っている必要がある。すべてを知っている必要があるということではなく、テスト対象が目的を果たせるか確認するのに必要なことは知っている必要がある。
演習付きチュートリアル
「マインドマップを用いたテスト要求分析・設計エクササイズ」
鈴木 三紀夫さん テスト分析、設計でマインドマップを活用する、、、の前にテストケースに至までのテストプロセスのお話がありました。また、講演自体をマインドマップで各自書いていく、という流れ。私は結局A3で2枚ぶんになりました。

テストレベルごとにテストプロセスがあり、そのプロセスがフェーズ(時間の流れ)の…

Redmine 2.2.x でのXLS Export Pluginの動作確認

ぐぐったら、動いている風な記載がありました。

Redmine plugins that work in Redmine 2.2.2.stableRedmine にいれたものの手順書。
なんで、自分の追加したところの確認をしました。
特に問題なく動いていました。
環境
OS
Mac OS X 10.7.5環境
Redmine version 2.2.3.stable
Ruby version 1.8.7 (universal-darwin11.0)
Rails version 3.2.12
Environment production
Database adapter SQLiteRedmine plugins
redmine_plugin_views_revisions 0.0.1
redmine_xls_export 0.2.1.t1

[Spring] Autowiredアノテーションを使っているクラスのユニットテスト

ちょっと確認のために試してみました。ソースは以下。
https://bitbucket.org/twopack/jsonrest/commits/e5353d883dffe31f99948a977b938c69
試したかったのは、 @Autowired でインジェクションしているクラスをJUnitで動かすにはどうするかです。

上記のソースで autoPerson@Autowired してます。
決めうちでアクセスすると、autoPerson にアクセスして Micheal を返すようにしています。

テスト側で対応を行わない場合、テストを実行すると autoPersonNullPointerException になります。JUnitで実行時には、 @Autowired でインジェクションが行われていないことが原因です。
対策のポイントは、以下のサイトを参照しました。

Autowired JUnit Tests with Spring 2.5Spring JUnit testing with @Autowired annotation

@Autowiredアノテーションを有効にする 1つ目のポイントは、JUnitのテストに @RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration を記載して、 Spring の TestRunner で動くようにします。
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration public class HomeControllerTest { .... }
@ContextConfiguration を記載すると、クラスパス上の テストクラス名-context.xml を読み込んで設定します。
この中で、インジェクションするbeanを設定します。
<beans:beans xmlns="http://www.springframework.org/schema/mvc"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:beans="http://www.sp…