2013年3月30日土曜日

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

実際に行った対応は、このコミットで概略は以下の通りです。

  1. もともとのCSSである assets/stylesheets/xls_export.cssrev/assets/stylesheets/1.3.0-xls_export.css として移動。
  2. 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を呼び出す方法とかないのかな?と、いろいろ調べてみたんですが分からず。
rubyzipzipでdiffをとるとrubyzipのほうが包含しているようにみえたので、DMSF Pluginにrubyzip使ってもらえないかとPull-Requestしたら取り込んでもらえました。
いっけんらくちゃくw

#でも、そもそもZip::ZipOutputStream::write_bufferが無い場合にzip拡張子で出すという処理自体にも問題があると思うんですが。。。


2013年3月24日日曜日

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枚ぶんになりました。

  • テストレベルごとにテストプロセスがあり、そのプロセスがフェーズ(時間の流れ)の中に当てはまっていく。これははじめて絵をみてなるほどと思いました。
  • 視座、視野、視点を意識してテスト観点を列挙していく。
  • 演習ではある機能に対してどんなテストが必要かをマインドマップで考えるというものでした。
  • 情報交換会や打ち上げなどで他の人のものを聞いてみると、自分で気づかなかったところも多々あり。なるほどなあ、というところも多く、視野が狭いなあと感じました。

事例発表
「新潟ソフトウェア開発勉強会『すわにい』の活動」
すわにい

すわにいで行ったテスト設計の成果発表を行いました。あとは、参加者募集!の宣伝w
独自のテスト設計アプローチとして、利用者の安全をキーワードにアバター抽出とそれぞれに対するフローからポイントを洗い出す、というものでした。
ご講評として、大きく2点コメントを頂きました。アプローチ、手法という観点ではなるほどなあ、と感じ入りました。

  • アプローチでの結果の再現性。同じ事をやったときに同じ結果につながるのか?ということ。アバターの抽出、フローの作成ともに「気づき」を促すもので、再現性があるかというと乏しいと確かに感じました。
  • フローである事の意義。前述の通り「気づき」を促すものとしてフローではなくマインドマップなども同じような効果が得られそうです。


去年は参加できずのJaSST Niigataでしたが、一昨年同様多くの気づきを得ることができました。
やはり本やネットだけでなく、実際に聞いて話してみると感じる事があります。それを実際の開発にもつなげていけたらと思いました。
#オフィシャルのレポートが上がったらリンクを追記しようと思います。

2013年3月7日木曜日

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

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


なんで、自分の追加したところの確認をしました。
特に問題なく動いていました。

環境


  • 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 SQLite
  • Redmine plugins
    redmine_plugin_views_revisions 0.0.1
    redmine_xls_export 0.2.1.t1