AgileTourOsaka2010 に参加して。

私が無知なだけなのだが、知らない有名人がいっぱい。たくさんの経験をお持ちの方たちばかりだった。

みなさんの経験則を踏まえて体系化された情報を伝えていただいたので、それが目から鱗
あれだけバシッと見せつけられると、さすがと言わざるを得ません。

基調講演

長瀬さんのお話。この方、直接ケントベック氏やマーチンファウラー氏との接点のある人。
2000年当初のXPまわりの懐かしいお話をされていた。私は2003年くらいから認知したのですが、あの当時はよくXP本を読みました。それらの本の翻訳も手掛けているとか。そしてアジャイルの未来にむけて。なんだか急に流行だしてトップダウンでやりはじめているから失敗事例の数は増えるだろうと。
→この意見に激しく同意。どうしよう。
そもそもなんでまた急に流行だしたのか知りたかったのだけれど、今日はその答えには至りませんでした。
→だれか教えてください。
海外はウォーターフォール→イテレーティブ→アジャイル(2002年)など比較的短いスパンで開発方法論が考えられているが、日本はウォーターフォールアジャイル(2011年)のように突然の変貌になっているという話がありましたが、これもとても不思議。というか日本ではやっぱりあまり開発方法論とかが考えられてないんじゃないかなと思いました。一種の思考停止状態。で、突然どっかでうまくいってる話を輸入してそれっぽい事をマネしてやるんです。そして本質を理解してないし、そもそも考えながらやってないから失敗する。の図式ではと。

気になったポイント、学んだコト

→は私なりの解釈部分も入ってます。

  • ステークホルダを巻き込む

  →確かに。わかっていたのに、忘れていた事。
   忘れてたって事はできてなかったって事なのですが。
   利害関係者を巻き込んでやるってのは重要ですね。
   アジャイルを知らないマネージャーでも優秀な人はたくさんいるし、
   そもそもアジャイルに渉外的な側面はありませんから。
   いかにしてうまくPJ遂行するかというマクロ視点で考えないとダメかもですね。

  • 相手の言葉で話をする

  →相手を理解して、相手のわかる言葉で話をする。
   伝わって初めて「伝えた」のである

  • 相手を理解する。

  →相手を理解しないと、自分も理解してもらえないもんね。
   だって人は人の鏡だから。とは私の意見。

  • 自分の考えは相手に透けている

  →思っている事は態度や行動で見えてしまうもの。
   なんだコイツと思ってる人から助けは得られない
   自分が「なんだコイツ」って思われてるのを感じてたら、そんなヤツ助けないでしょ?

  • アジャイル導入の目的は自分の中で明確にしておかなければならない

  →これは普段から考えている人はクリアしていると思うが
   導入したいから導入するのではなくて、なにか改善したいから
   導入するのであろう。それを相手に伝えれるレベルに柔らかくしておけばOK

  • 全体像の共有が必要

  →スケジュールをサーバに置いておくだけではダメ。という話にギクリ。
   見ない人には見せに行く、伝える。という事が必要だと。確かにその通りですよね。
   公開しただけで、なに伝えた気になっていたのかと反省。

  • ストーリー供給力

  →これは必須。業務仕様がどれだけ出てくるかという事。
   ここのネゴを失敗するとかなりのボトルネックになる。
   イテレートごとの食い扶持くらいは引っぱりだしてこれなければならない。

  • RedmineSVNコミットログとの連携ができる。

  →知らなかった !! コミットログにタグ埋め込めば、チケットがcloseするようにできるらしい。

  • 小さく失敗してもトータルでリカバリできる。

  →アジャイラーは失敗を知らない。
   トータルでリカバリできてるからか、失敗を失敗と思ってないからか。
   どっちの意味も含めて言ったのか。
   ただ、小さく失敗してもトータルでリカバリできる。は真実だ。

  • ツール→チームへの波及

  →ツールを使えば行動が変わる
   行動が変われば考え方が変わる
   考え方が変われば人が変わる
   人が変わればチームが変わる

  →1,2week は無理。1ヶ月は必要。

  →エクストリーム・ウォーターフォール
   とはなかなかの揶揄。でもそれくらい日本人は元来勉強熱心でそれなりに柔軟性があるんだ !!
   発信力や仕組みを生み出す力はまだまだ弱いかもしれないけれど。。。

  • チケット駆動

  →親チケット(ストーリー)、子チケット(タスク)とするとちょうどよい

  --変化に追いつけない
    →チケットファースト(No Ticket, No Commit)、チケット棚卸し
     などの対策必要
  --イテレーションを運用できてない
    →
  --並行開発できてない
    →メインラインモデル、タスクブランチ、トピックブランチ を検討

  • 牛尾さんテンション高けーw

  →話うまいなー。関西人がみんなこんなテンションじゃあないっすよw
   今日の資料すごく見たい。復習したい。


その他、たくさん気になる事はいっぱいあったのですが、
まだまだ咀嚼できてません。UST で復習しないといけないかな?

さてさて、たくさんの刺激とエッセンスをいただきましたよ。
このパワーが衰えないうちに、これからどうやっていろんなモノと関係していくかさっそく思案して行動しなければですね !!


Before

Agile Tour Osaka (Japan) | agiletour.org
http://www.agiletour.org/osaka.html

こくちーず - 10月30日 AgileTourOsaka2010
http://kokucheese.com/event/index/4870/

After

【Event】AgileTourOsaka2010 - XpjugWestWiki
http://www.xpjug.jp/cgi-bin/main_wiki/wiki.cgi?page=%A1%DAEvent%A1%DBAgileTourOsaka2010

ハッシュタグクラウド - #agileto2010 Agile Tour Osaka 2010
http://hashtagcloud.net/info/agileto2010

watij での webページダイアログ テスト

webページダイアログなど、モーダルダイアログのテストの仕方

    new Thread(new Runnable() {
        public void run() {
            try {
                ie.button("Launch Dialog").click();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }).start();
    ModalDialog modalDialog = ie.modalDialog();

スレッドを生成し、モーダルダイアログを表示させる為のトリガを実行する(上記ではボタンクリック)。スレッドの外で、modalDialog オブジェクトを取得してテストする。

※スレッドを使わずに、webページダイアログなどのモーダルダイアログを表示させると、そこでテストコードの実行が一時停止してしまうので要注意。(モーダルダイアログを閉じると継続実行される)

サンプルコード

import static watij.finders.SymbolFactory.*;
import junit.framework.TestCase;
import watij.runtime.ie.IE;

public class GoogleTest extends TestCase {
    public void testGoogleSearch() throws Exception{

        IE ie = new IE();
        ie.start("http://www.google.co.jp");
        ie.textField(name,"q").set("Watij");
        ie.button("Google 検索").click();
        assertTrue(ie.containsText("/Web Application Testing in Java/"));
        ie.windowCapture("./0000.png");
        ie.close();
    }
}


図1:Eclipseワークスペースイメージ


上記ソースでウィンドウキャプチャをとる様に指定しているが、うまく撮れている。
ちなみにキャプチャをとる際にはちゃんとターゲットを最前面に持ってきてくれていたみたい。


図2:実際に ie.windowCapture("./0000.png"); で撮ったキャプチャ

watij

watij

webアプリケーションに selenium を採用してからかなりの時間が経つが、やはりしっくりこない点が多く、IE では使いにくい。他に良いテスティングツールはないものかとをネットを探していたら、watij (ワットと発音?)なるものがあった。

IE で使うなら selenium よりも使い勝手が良さそう。試行錯誤の度合いも selenium を使うよりは少なかった気がする。
もちろん Alert や Confirm にも対応しており、子ウィンドウや webページダイアログにも対応している。ただし FireFoxOpera, Chrome などクロスブラウザで使う必要があり、FireFoxSelenium IDE など強力な Webオペレーション記録ツールが使用可能なら Selenium を利用する方がコストパフォーマンスは良いかもしれない。

今回は IE のみで動く 昔ながらのビジネスアプリケーションをテストする必要があったので Watij を採用する事にした。ネット上にドキュメントがかなり少ないようなので、つまずいた点や参考になりそうな点をつらづらと綴っていく。

ダウンロード

こちらから

zip を解凍し、lib 配下の jar ファイルをすべて eclipse プロジェクトなどにコピーしておくのを忘れないように。
※ダウンロードした zipファイルの中 (src/java-test/watij) に テストクラスがあるので、テスト方法がわからない場合は参考にすればよい。かなり参考になると思う。

使用方法

私の環境では beanShell はうまく動かなかった事と、Java 方が馴染みがある事と、どうせ Java Web アプリケーションをテストする為に使うので Java 技術者に広く展開できるように Java UI でのテストを試みる。

http://watij.com/ には

IE ie = new IE();
ie.start("http://www.google.com");
ie.textField(name,"q").set("Watij");
ie.button("Google Search").click();

のように書いてあるのだが name が解決できるわけがない。。
どうしてコレでみんなうまくいくのかが実はよくわからず。
自分なりの解決方法をで解決を試みる。*1

Symbol name = new AttributeFinder("name");

結局 Symbol が見つからないだけなので、上記のようにあらかじめ指定して解決。
(BeanShell ではこのままでうまくいったりするのでしょうか?これがよくわからないです。あくまでも例文はそれくらいわかるやろ的なある程度抽象化したコードだったのでしょうか?)


その他のシンボルはこのような感じで指定できる。

Symbol value = new AttributeFinder("value");
Symbol text = new TextFinder();
Symbol xpath = new XPathFinder();
Symbol tag = new TagFinder();
Symbol url = new UrlFinder();


スクリーンショット

ie.windowCapture("C:\\xxx\\yyy\\0000.png");
ie.windowCapture("./0000.png");


Aタグの href属性に記述された特定の文字列を探し、そのリンクをクリックする方法。

ie.link(xpath,"//A[contains(@href,'javascript') and contains(@href,'shop=00001') and contains(@href,'dept=DA0001')]").click();

例えば href="javascript('shop=00001','dept=DA0001','sex=female');" のように関数処理したりしている場合でもこのような指定で画面中の任意のリンクをクリックできる。
xpath文の記述中でHTMLタグは大文字で記述しないとelementの検索がうまくいかないので注意が必要。



※ 2010.04.09 追記
この問題は

import static watij.finders.SymbolFactory.*;

とする事で解決できる事を確認 ( Release 3.1.0にて確認済み。 )


*1:1.2010.04.09 追記