11 Aug 2013, 06:34

RubyのAPIレベルのテストを直叩きできるFitNesse用フレームワーク ‘RubySlim’

FitNesseをRubyで利用するためのslimフレームワーク、RubySlimを試してみました。

RubySlimは、FitNesseのブラグインで、FitNesseからRubyのコマンドを実行することができるツールです。

作者はボブおじさんです。作者直々のチュートリアル動画も見つけました。

RubySlimを使ってみる

作業用ディレクトリ作成
mkdir ruby_fitnesse
cd ruby_fitnesse
fitnesseのダウンロード
rubyslimのダウンロード
git clone https://github.com/unclebob/rubyslim.git
TestCase の作成

まずは、URLにアクセスして、現れたURLを編集します。

http://localhost/RubySlimFirstExample

TEST_RUNNERには、bin.rubyslimを設定。

!pathには、Custom Fixtureのパスを設定。

!contents -R2 -g -p -f -h

!define TEST_SYSTEM {slim}
!define TEST_RUNNER {/home/tsu-nera/src/ruby_fitnesse/rubyslim/bin/rubyslim}
!define COMMAND_PATTERN {ruby -I %p %m}
!define PATH_SEPARATOR {-I}
!path /home/tsu-nera/src/ruby_fitnesse/tests
Custom Fixture作成
mkdir -p /home/tsu-nera/src/ruby_fitnesse/tests
cd /home/tsu-nera/src/ruby_fitnesse/tests
emacs some_decision_table.rb

ファイルの命名規約が重要。 SomeDecisionTable -> some_decision_table.rbのようにする。

 module Fixtures
  class SomeDecisionTable
    def set_input(input)
      @x = input
    end

    def get_output
      @x
    end
  end
end
Decision Table

wikiに戻って、decision Tableを書く。

Fixtures は module名に対応させること。

|Import|
|Fixtures|

some decision table <-> SomeDecisonTable Classに対応させること。

set_input <-> input,get_output <-> get output?に対応する。

|some decision table|
|input|get output?  |
|1    |2            |

これで、準備完了。testを実行すればOK.

10 Aug 2013, 23:26

C/C++のAPIレベルのテストを直叩きできるFitNesse用フレームワーク ‘CSlim’

FitNesseをC/C++で利用するためのslimフレームワークではcslimがあります。これを試してみました。

前回の続きです。

CSlimを使うと、APIレベルのテストを直接実行できます。ほかのテストツールとの役割分担はこんな感じ?

  Web I/F   ... Selenium
  -----------------------------
  API       ... CSlim
  -----------------------------
  Function  ... xUnit(CppUTest)

Authors は Robert Martin, James Grenning, and Doug Bradburyです。James Gremmingさんといえば ‘Test-Driven Development for Embedded C’の著者ですね。

cslimは内部でCppUTestを使ってます。CppUTestもこの本が詳しいです。

Webのドキュメントは、githubのwikiにある、以下の2つのリンクが詳しい。

cslimを動かす

以下の記事を参考にして、自分も動かしてみました。

まずは、CSlimを実行するディレクトリを作成

$ mkdir cpp_fitnesse
$ cd cpp_fitnesse

cslimはCppUTestに依存しているので先に、CppUTestをダウンロードしてコンパイル。

git clone git@github.com:cpputest/cpputest.git
mv cpputest CppUTest
./configure
make

cslimをダウンロードしてコンパイル。

git clone git@github.com:dougbradbury/cslim.git
cd cslim
make

cslimとcpputestは同じディレクトリにある必要がある。

<path>/cslim
<path>/cpputest

ブラウザに、以下のURLにブラウザからアクセス。

http://localhost/CslimFirstExamples

編集画面がでるので、以下のように修正。(pathは自分の環境に合わせて)

!contents -R2 -g -p -f -h

!define TEST_SYSTEM {slim}
!define TEST_RUNNER {/home/tsu-nera/src/cpp_fitnesse/cslim/CSlim_cslim}
!define COMMAND_PATTERN {%m}
!define SLIM_VERSION {0.0}

次に、以下のURLにブラウザからアクセスして、同じようにテストのサブページを作成する。

http://localhost/CslimFirstExamples.DecisionTableExample

wiki形式でテストケースを書く。

|Modulus                 |
|value|divisor|remainder?|
|6    |2      |0         |
|13   |27     |13        |
|5    |2      |1         |

テストを実行すると、失敗する。

気を取り直して、テストケースを書く。コードはこのサイトを参照。

<path>/fixture/Modulus.cpp
<path>/fixture/Fixture.c

Pointは、テスト対象ファイルの下に、以下の様な記述をすること。これで、自分の関数をfixtureから呼び出すための登録ができる。

SLIM_CREATE_FIXTURE(Modulus) 
    SLIM_FUNCTION(setValue)
    SLIM_FUNCTION(setDivisor)
    SLIM_FUNCTION(remainder)
SLIM_END

また、Fixture.cにModulesフィクスチャを登録すること。

    SLIM_FIXTURE(Modulus)

再度makeしてテストを実行すると、今度は成功した。

for cygwin memo

Cygwin環境では、うまく動作させることができなかった。makefileに細工が必要なようだが、以下の記事を参考に編集すると、コンパイルはできるものの、Slim serverにアクセスできない。

my environment

  • FitNesse 20130530
  • CentOS 6.4

10 Aug 2013, 12:55

受け入れテスト用フレームワーク「Fitnesse」導入手順のまとめ

受け入れテスト用のテスト管理ツール、「Fitnesse」を使ってみました。

[toc]

Fitnesseとは

Fitnesseとは、wiki形式でフリーのテスト管理用ツールです。

以下のような特徴があります。

  • 簡単なセットアップ
  • 簡単に使えるwikiサーバ
  • 仕様書や要求がinputとして使える
  • 豊富な言語サボート

最近読み始めた、「実践アジャイルテスト」で頻繁に紹介されていました。

作者は、「ボブおじさん」こと、ロバート・マーチンさんです。以前、「CleanCoder」を読んだときにも、紹介されていました。

Fitnesseを導入する

環境

  • Windows 7 64bit
  • Java 1.6.0_2

Fitnesse の Download

正式版のダウンロードは、公式サイトの以下のリンクから。

また、開発版はgithubから。

Fitnesse の 起動

以下をコマンドラインから叩くだけ。

$ java -jar fitnesse-standalone.jar

こんなメッセージが表示されれば、起動完了。

FitNesse (v20130530) Started...
        port:              80
        root page:         fitnesse.wiki.FileSystemPage at ./FitNesseRoot
        logger:            none
        authenticator:     fitnesse.authentication.PromiscuousAuthenticator
        page factory:      fitnesse.responders.PageFactory
        page theme:        fitnesse_straight
        page version expiration set to 14 days.

http://localhost/にアクセスすると、Fitnesseが現れる。わぉ、簡単(・∀・)

Port指定の起動もできる。

$ java -jar fitnesse-standalone.jar -p 8080

Fitnesseの使い方

公式ドキュメントは以下。

Sample Test を動かす

起動したら、http://localhost/FitNesse.UserGuide.TwoMinuteExampleに移動。

右上に TEST とかかれたボタンがあるので押す。テストが走る。

あらら・・失敗orz.

次に TOOL ボタンの Propertyをクリック。続いて Action:というところにある Editにチェックを入れる。すると、 EDIT というボタンができるので、クリックする。編集画面が出るのて、表の部分を以下のように修正。

# before
| 100 | 4 | 25.0 |
# after
| 100 | 4 | 25.0 |

再びテストを実行すると、テストがすべてパスする。wikiで編集できる気軽さをまずは実感(・∀・)

Fitnesseの仕組み

Fitnesseの仕組みは、以下のページの図を参照。

FitNesse.UserGuide.OneMinuteDescription

オレンジの部分を自分で用意する必要がある。

  • TestCases
  • Custom Fixture
  • SUT

緑の部分は、FitNesseで用意されている。CustomFixtureを実行するためには、2つの手段がある。

FIT

HTMLでかかれたテスト管理用ツール。

FitnesseはこのFITのHTMLをwikiで実行できるようにしたもの、という言い方ができる。

SLIM

Fitnesseのwikiを解析して、CostomFixutreを実行するためのフレームワーク。

様々な言語に対応しているのが特徴。そのため、FITよりも拡張性がある。

ここからがいいところだけれども、続きはまた次回!

04 Aug 2013, 13:55

teratermマクロで自由自在にエンドツーエンドを書く!TTLのためのxUnitフレームワーク「TTLUnit」

Teratermマクロを利用してテスト自動化ができたらいいのになと思っていたのだけれども、いくらさがしても良いツールが見つからなかったので、つくてみました。

名づけて、 

TTLUnit

じゃじゃ~ん!githubにあげました。

本当ならば、Rubyでエンドツーエンドを書きたいところだが、Rubyだと、多段telnetをする方法がいつになっても、わからなかった。

しかし、Rubyはたいていの仕事で利用するPCにはインストールされていないので、どうしても多段telnetは必要。そして、teratermマクロならば多段telnetが可能だ。

これは、以下の記事のリベンジ、というか続編です。

[toc]

これはなに

TTLUnit とは、Tera Term Language(TTL)のためのxUnitフレームワーク。

使い方

フォルダパスの設定

テストをはじめる前に、フォルダパスの設定をする。 lib/config.ttl を修正。

  • BASE_DIR : TTLUnit デフォルトフォルダパス
  • LIB_DIR : TTLUnit ライブラリパス
  • TEST_DIR : テストフォルダパス
  • LOG_DIR : ログフォルダパス

以下のオブションもチェック。

  • TEST_PREFIX : テストケースのブレフィックスを指定
  • LOG_MODE : ログモード 1:有効 0:無効

テストスイートフォルダの作成

TTLUnitでは、テストスイートをフォルダで管理します。フォルダパスで指定したフォルダにテストスイートのフォルダを作成。

また、テストスイートのリストファイルをつくる必要がある。 ts_lit.ttl をテストフォルダに作成して、テストスイートを追加する。

; Pleas Modify Test Suite Max 
TEST_SUITE_MAX = 2
strdim test_suite TEST_SUITE_MAX

; Add your test suite folder
test_suite[0] = 'ts_mkdir'
test_suite[1] = 'ts_pwd'
test_suite[2] = ...

テストケースファイルの作成

テストケースファイルをテストスイートフォルダに作成する。テストファイルの名前は、決められたものを指定する(lib/config.ttlのTEST_PREfiX で指定したもの)

TTL の知識も必要。TTLコマンドリファレンスをチェック。

For Example: Test_mkdir_test_dir.ttl

;Test
sendln 'mkdir testdir'

;Assert
sendln 'ls'
Wait 'testdir'

;tearDown
sendln 'rmdir testdir'

exit

最終行は exit である必要がある。Wait commant 以降では、resultを返すTTLコマンドは使えません(苦し紛れの仕様です)

テスト実行

テストの実行方法は3つ

すべてのテストを実行

.ttlファイルをttpmacro.exeに関連付ける(これでクリックひとつで.ttlファイルがttpmacro.exeで開ける)

lib/RunAlltests.ttlを開く。すべてのテストスイート(ts_list.ttlに登録したもの)が実行される。

一つのテストスイートを実行

一つのテストスイートを選択すくこともできる。 lib/RunTestSuite.ttlを

開く。メッセージボックスがボップアップするので、テストスイートフォルダを入力する。

 ドラッグ & ドロップで実行

テストスイートフォルダを.batファイルにドラッグするだけで、テストが実行する。

example/RunTestSuite.batをご覧されたし。ttpmacro.exeとテストフォルダを指定する必要がある。

@echo off

set file=%*

rem Call TestSuite
"C:\Program Files (x86)\teraterm\ttpmacro.exe" "C:\cygwin\home\TSUNEMICHI\src\ttlunit\lib\RunTestSuite.ttl" %file%

テスト結果

テストが実行され、結果がポップアップする。

Tips

Setup と TaerDown

テストスイートフォルダに ‘setup.ttl’ , ‘teardown.ttl’があると、 SetUp と tearDownがテストケースの前、後ろで実行される。

テストフォルダに、’setup.ttl’ , ‘teardown.ttl’があると、 SetUp がすべてのテストの開始前に実行される。 TearDownが全てのテストの実行後に実行される。

Expect の表示

デフォルトのテスト結果では、Expectの値が表示されない。もし、どのWaitコマンドでテストが失敗したかをチェックしたい場合は、こんなふうにかく。

expect_str = 'hogehoge'
Wait expect_str
タイムアウト

デフォルトのタイムアウト値は 5秒にしている。もし、値を変えたい場合は、この行はどこでも書いて変更できる。

timeout = (your favorite value)
ログモード

ログモードをOnにすると、テストケース実行ごとに、ログフォルダにテスト結果をログすることができる。 lib/config.ttlを編集。

LOG_MODE = 1

動画

[//www.youtube.com/embed/h6iN5MiI3FI?list=UUT1w_8QIwJc5Ia67MjOWN1A]

03 Aug 2013, 23:10

最強ポモドーロアプリはコレだ!無料で使えるWindows用ポモドーロアプリ9選

Windows 7 で使える、最適なポモドーロタイマーを探してみました。


今回探した条件は、以下

  • オフラインで利用できること
  • トマトの見積もり機能があること

あとは、+ αの要素で

  • UIがオシャレなもの
  • 終了時にポップアップで知らせてくれるもの

ベストアプリだったもの

実は、すでにコレがベストだというものはありました。

「Pomodoro App」 が、自分の要件を満たす最高のAppだったのですが、これは最近になって、「TeamViz」というものに変わった。これは、オンライン前提のクラウド型アプリなので、条件から外れてしまった。(´・ω・`)

PomodorとGTDを組み合わせようという発想でできている。UIのオシャレさと、多機能さならば、これがベスト。

TeamViz | Unleash Your Team’s Productivity

カウント機能がないもの

ポモドーロ・テクニックは、基本形と発展形の2種類がある。

  • 基本形 ・・・ 25分集中して、5分休む。このインターバルを繰り返す。
  • 発展形 ・・・ 25分単位でタスク管理をする。一日のはじめに実行できるトマト数を見積もって、一日の終わりに評価する。Interupt task やUnexpected taskは 別タスクとして記録する。

今回探すのは、この発展系の方。といっても、細かくタスク管理するものがほしいわけではなく(それはOutlookでしているので)、単純にトマトの数を記録できればよい。

詳しくは、この本をどうぞ。

カウント機能がないけどオススメなものを以下に並べる。

いずれも、インストール不要で利用できる、とても軽量なアプリ。

focus booster

UIがとても、カッコイイ!しかし、これにはカウント機能が備わっていなかった。

focus booster – home; try the pomodoro technique

Pomodorium

なんと、ポモドーロ・テクニックとRPGゲームを組み合わせたもの。タスクをこなすごとにお金を手に入れて、旅をするゲーム。出オチっぽかったので、インストールだけしてやめた。

Pomodorium: best pomodoro timer windows

オフラインでは使えないもの

会社で利用したいので、オフラインというのが今回の条件だ。

オンラインで利用できるものは素晴らしいものがいくつもある。簡単に紹介。

Tomatoes

Webサービスでもっともオシャレなものは、これ。

githubとtwitterアカウントでログインして利用できる。簡単な統計機能もついている。

Tomatoes

TeamViz

冒頭でも紹介した、多機能なポモドーロアプリ。ポモドーロの枠をはみ出して、タスク管理アプリ。

TeamViz | Unleash Your Team’s Productivity

評価したもの

pomodario

そこそこ洗練されていて、タスク管理もあるのはこのアプリ。しかし、これはバグってた!トマトを7以上カウントできなかった。

pomodairo – An Air application for working with the Pomodoro technique – Google Project Hosting

AutoFocus

タスクをリストで箇条書きにして管理するもの。箇条書きにした結果が残るので、ある意味カウントあり。


XorTime

中国製のソフト。ハンドメイドなUIがとても気に入った。

Xoring

 まとめ

結論、Pomodoro Appに代わるベストアプリは見つからなかった。

アナログが一番よいのかもしれない?

02 Aug 2013, 03:41

TopCoder SRM : 587 Division : Div2 Level : Level1 InsertZ

TopCoderに参戦。

今日は、Level1が解けなかった・・・(´・ω・`)

3つくらい実装方法を考えたが、どれも失敗。頭に浮かんだ方法にすぐに飛びつかず、いくつかアプローチ方法を考えたあとにコーディングを始めたほうがよかったなと反省。

あとは、主にString型の知識不足。

問題

文字列 init と goalが与えられる。initに’z’を挿入をして、goalが作れれば”yes”を、そうでなければ”No”を返せ。

解答

initに文字列を挿入して、goalで比較するよりも、goalから”z”を削除してinitに一致するかどうかを調べるほうが簡単にかける。

Challenging TopCoder SRM 587!

Today, I could’t solv any problems

Question

Geven String init, goalYou can insert ‘z’ to init any times if init atch to goal return “yes”, else “No”

Answer

It’s easy to delete ‘z’ from goal rather than insert ‘z’ to init

29 Jul 2013, 07:48

jQueryでGoogleカスタム検索をさくっとカスタマイズ

jQueryを使って、Googleカスタム検索をカスタマイズしました。

検索窓にフォーカスしているときはメッセージは消す、フォーカスしていないときは、メッセージを表示するようにしました。

デフォルトのコードはこんな感じで取得できるると思います。

<form action="http://www.google.co.jp/cse" id="cse-search-box">
  <div>
    <input type="hidden" name="cx" value="*****" />
    <input type="hidden" name="ie" value="UTF-8" />
    <input type="text" name="q" size="20" />
    <input type="submit" name="sa" value="検索" />
  </div>
</form>

<script type="text/javascript" src="http://www.google.co.jp/coop/cse/brand?form=cse-search-box&amp;lang=ja"></script>

ここで、type=“text”に操作するためのclass を追加します。

<input type="text" class="focus" name="q" size="20" />

jQueryのコードはこんな感じで書きます。

$(function(){
     $(".focus").val("サイト内検索");
     $(".focus").focus(function(){
          if(this.value == "サイト内検索"){
               $(this).val("").css("color","#f39");
          }
     });
     $(".focus").blur(function(){
          if(this.value == ""){
               $(this).val("サイト内検索").css("color","#969696");
          }
     });
});

最後に、デフォルトでの表示を灰色にするために、CSSに色の宣言をします。

.focus{color: #969696}

jQueryでサクッとかけました。jQuery、便利ですねー。

完成!

28 Jul 2013, 13:17

WordPressで処理をファイル分割する方法を調べてみました

WordPressで処理をファイル分割する方法を調べてみました。

wordpressのコードをいじっていると、だんだん長くなってきた。

そこで、責務が独立できそうな部分を、別ファイルとして独立させる方法を調べてみた。

get_template_part()をつかう

header.phpやfooter.phpなどの、WordPressで決められた名前のファイルは、専用のinclude関数が用意されている。(get_header(),get_footer()など)

自前で作ったファイル(hogehoge.php)を読みこむには、get_template_part()を利用する。

get_template_part('hogehoge');

例えば、前回の記事で、固定メニューバーをheader.phpから独立させたい場合は,以下のようにすればよい。

  1. header-sticky.phpというファイルを新規作成
  2. 処理をファイルにカット & ペースト
  3. header.phpのカットした場所に以下の行を追加

.

<archives/hp get_template_part('header-sticky'); ?>

ファイル名は、.phpをつけないところがミソ。

28 Jul 2013, 07:15

WPプラグイン「qTranslate」で記事を新規投稿すると403 Error(wp-admin/post.php)

WordPressの多言語化プラグインqTranslateを入れて、記事を投稿しようとすると、403エラーとなり、記事が投稿できなくなったので、解決方法を調べました。

wp-admin/post.phpにはアクセス権がないと怒られます。

原因

ロリポップサーバで動作している、WAFが原因でした。

WAFとは 「Webアプリケーションファイヤーウォール」 ワフ: – IT用語辞典バイナリ

WAFとは、外部ネットワークからの不正アクセスを防ぐためのソフトウェア(あるいはハードウェア)であるファイアーウォールの中でも、Webアプリケーションのやり取りを把握・管理することによって不正侵入を防御することのできるファイアウォールのことである。

解決方法

ロリポップの管理ページから、Webツール -> WAF設定を選択。

WAF設定が有効になっているので、無効に設定。

5分から10分ほどすると、設定が反映されて、無事投稿できるようになりました。

Reference

28 Jul 2013, 06:45

ブログの上部に固定メニューバーを設置しました

ブログの上部に固定メニューバーを設置しました。

CSS と HTMLのカスタマイズ

コピペでいけるかと思いきや、全くそうはならなかった。

以下のサイトをベースにいろいろググりました。

ちょっとしたTips

スクロールしてもついてくるためには、 position: fixed を使います。

     position: fixed;

画像を重ねて表示するときは、最上位に表示される画像を指定しないと、期待した画像が見えない。z-indexを使って調整。

z-index: 999;
z-index: 900;

アイコンを表示させる場所は、1000pxに収めたいけれども、固定バーは画面全体に表示したい。

divとidで2段階に表示を分けることで実現。

.stickey_sns {
     width: 100%;
}

#stickey_footer {
     width: 1000px;
}

Googleカスタム検索の設置

Googleカスタマイズ検索は、デフォルトのままだとカッコ悪いのでCSSでスタイルを変更しました。

<form action="http://www.google.co.jp/cse" id="cse-search-box">
   <div>
      <input type="hidden" name="cx" value="******" />
      <input type="hidden" name="ie" value="UTF-8" />
      <input type="text" name="q" size="40"/>
      <input type="submit" name="sa" value="検索" />
   </div>
</form>
  • id: cse-serch-box 検索全体をカスタマイズするID
  • type: text 検索ポックス
  • type: submit 検索用アイコン

と要素が定義されているので、この値をいじるようにCSSを記述すればよいですね。

以下のサイトを参考に、自分でもいじってみました。

ソーシャルアイコンの設置 IcoMoon

ソーシャルアイコンは、無料で使えるものがたくさん配布されています。

今は、画像アイコンよりも、Webアイコンフォントが流行りらしいですね。

レスポンシブやらアイコンフォントやらフラットやら!2013年の気になる技術やデザインを試してみたリニューアル手順! | バンクーバーのうぇぶ屋

というわけで、IcoMoonというサイトを使ってアイコンフォントに挑戦!・・・とおもったけど、設置方法わかんなかったから、結局画像アイコンで妥協した。。。そのうち再挑戦します。

このサイトにアクセスして、ほしいアイコンをクリックして、ダウンロードするだけ。とってもカンタン。


Result