当社は、首都圏における事業拠点として「東京事業所」を設置しておりますが、より一層の情報収集、営業力の強化、迅速な顧客対応を目的として、平成26年1月1日付で現在の「東京事業所」を「東京本社」に改称し、従来の本社(大阪市淀川区)との2本社制へ移行いたします。
今後とも何卒よろしくお願い申し上げます。
当社は、首都圏における事業拠点として「東京事業所」を設置しておりますが、より一層の情報収集、営業力の強化、迅速な顧客対応を目的として、平成26年1月1日付で現在の「東京事業所」を「東京本社」に改称し、従来の本社(大阪市淀川区)との2本社制へ移行いたします。
今後とも何卒よろしくお願い申し上げます。
会社案内のプロモーションビデオを公開しました。
https://www.kronos.jp/company/data/
※業務内容の欄に御座います。
この動画は、弊社が取り組んでいる社内プロジェクトで在籍社員(エンジニア)が作成した
パラパラマンガによる動画です。
ぜひ、ご鑑賞ください。
冬季休業のお知らせ
拝啓 寒冷の候 益々ご繁栄のこととお慶び申し上げます。
毎々格別のお引き立てを賜り有難く厚く御礼申し上げます。
誠に勝手ながら下記の日程を冬季休業とさせて頂きます。
2013 年 12 月 28 日(土曜日)~ 2014 年 1 月 5 日(日曜日)
ご不便おかけいたしますが、
何卒、ご了承いただきたくお願い申し上げます。
敬具
クロノスでは、iPhoneアプリやWebサービスといった製品開発に取り組んでいます。日々の製品開発の取り組みの中で、多くのアイデアが生まれています。シリーズ[製品たまご]では、製品化まであと一歩、そんなちょっとした面白アイデアをご紹介します。
製品たまごの記念すべき第1回は、製品開発チームのリーダー的存在、谷村(仮称)が取り組んだ小銭不要のお菓子販売機「オフィス・クロノス」をご紹介します!
突然だがネットの前のみなさんはSquareリーダーをご存知だろうか。SquareリーダーはiPhone、iPad、Android端末につないで使うクレジットカードリーダーだ。早い話がSquareリーダーを使うとスマホでクレジット決済ができるというわけだ。
今日はSquareリーダーを使った小銭不要のお菓子販売機オフィス・クロノスの話をしようと思う。
ことの始まりはこんなかんじだったんだ。
その日の製品開発会議は白熱していた。
議題はたしか、弊社のiPadアプリ「かおわらい」が市場に上手くリーチできていないとかだった気がする。
会議は紛糾し、予定の1時間を超過して延長戦に突入することになった。
ここで10分の休憩。時計は17時を過ぎている。
小腹が空いたな、オフィスグリコでお菓子でも買おうとおれは席を立った。
「堅あげポテトでも買うかな」おれは財布から小銭を取り出そうとした。そのとき事件は起きた。
財布に30円しかないのである。
一度話を整理しよう。30円しかない、というのは正確ではない。正しくは1万円札はあるのだ。しかし、オフィスグリコのインタフェースは1万円札に対応していないのは明らかだ。
このとき、おれの製品開発魂に火がついた。
間もなく会議は再開した。室長がモニターを操作している中、開口一番、私は提案した。
「みんな聞いてくれ!小銭がなくてもオフィスグリコで買い物できないかな?」
あっけに取られた参加者達。静寂が会議室を包む。
「意味がわからないしぃ、カエルかわいいけどむりむりー!」DB担当hiromiが静寂を破る。
ざわざわ。
「・・・かおわらい、の会議中ですよ」室長がつぶやく。
「すみません、でもどうしてもオフィスグリコで買い物をしたいんです!小銭がないんです!」
「・・・よろしい、これを使いたまえ」室長は胸ポケットからSquareリーダーを取り出した。
SquareリーダーはiPhone、iPad、Android端末につないで使うクレジットカードリーダーだ。(詳しくはGigazineさんの記事を参考にしてほしい)
「Squareリーダー・・・これなら、これならいけるかもしれない!」
おれの脳内で右脳と左脳が激しく共鳴した。
オフィスグリコのような「置き型お菓子サービス」に「Squareリーダー」を組み合わせれば、小銭による買い物の煩わしさを解消できる。そして、以下のような効果が得られのではないか。
小銭を準備しないでお菓子が買えるのでお菓子がたくさん売れるはず!
そして社員の満足度もUPするはずだ!
翌日、アイデアが固まったので早速、実験してみることにした。作業は次の3ステップだ。
カード決済を行うためには、iPhoneやAndroid端末に接続する「Squareリーダー」を入手しなければならない。驚くなかれ、Squareリーダーはローソンで販売されているのである。コンビニでクレジット決済システムが買える、なんだか夢のような話だ。
続いて、Squareサイトでアカウントを登録する(https://squareup.com/jp)。メールアドレスにパスワード、口座番号の入力が必要だ。
(アカウント登録後に、Squareが口座の利用確認を行う。そのために数日待つことになる)
あとは商品を準備すれば完了だ。独自のルートで仕入れておいたお菓子に対して、商品の仕入れ値にカード決済手数料(2013年9月現在:3.25%)を上乗せするかたちで商品マスタの登録を行った。(今回はあくまで実験目的なので、利益が発生しないように設定した)
準備は整った。心も整えた。まずはオフィス・クロノスを見てほしい。
どうだろう。アカウントの登録確認に数日かかったが、実働3時間程度でここまでできた。写真右下のiPhoneに注目してほしい。オフィス・クロノスのお菓子類を購入する場合は、クレジットカードで決済することができるのだ。
準備ができたので、これから5日間の売上を確認することにした。
開店から5日。お菓子のほとんどは完売した。予想していたとおり、売上は上々の結果を納めた。Squareサイト上で売上レポートも確認できる。
つづいて、社員満足度はどうか。社員へのアンケートから以下の回答が得られた。
「小銭を準備しないでいいのは良いね。カード決済が新鮮で面白い!」
「レシートがSMSで届くのはカッコいいね」
「お菓子買うだけでサインするのが面倒かな」
「好きなお菓子をリクエストしたいなー」
「お財布携帯は使えないの?」
「間違えて商品マスタを編集しそうになりました!」
また、社内メンバーの88%が利用したこともわかった。
まず、実験してみて気づいたことは3つある。
1. 売上動向を即座に確認できる
商品の売上データは、Squareのサイト上で確認できる。今回は検証していないが「スタッフを代理とした決済」機能も用意されている。この機能を使えば代理人のSquareリーダーからの売上情報も管理できるようになる。もし、実際の置き型お菓子販売業者が同様の仕組みを導入すれば、より効率よくお菓子を配布できる!のではないだろうか。
2. あくまでレジ。自動販売機のようには設置できない。
実際に試すまで気づかなかったのだが、Squareリーダーはレジのような位置づけの製品であった。つまりレジを操作する店側の人間のためのものだ。そのため、iPhone端末上で商品マスタを編集できるようになっている。今回実験したソリューションは自動販売機に近いものであった。そのため、利用者に対して商品マスタを編集しないよう周知しておく必要があった。
とはいえ、自動販売機型のソリューションに面白みがあった点は強調しておきたい。
3. クレジットカードよりお財布携帯の方がいい?
これも実際に購入を経験してみてはっきり感じたことだが、小額の決済(100円程度)にクレジットカードを使うのは仰々しい感があった。社員の声にあったお財布携帯のようなインタフェースで検証してみるのも面白そうだ。
今回の実験を通じて、小銭不要のお菓子販売機は面白いと感じることができた。一方で、Squareリーダーは自動販売機のように設置できない、また、お菓子の購入にクレジットカードの利用は仰々しいというフィードバックが得られた。これらの問題を解消するために、以下のような仕組みを提供すればどうだろうか。
・レジ端末に自動販売モードを追加する
・在庫管理システムと連携する
・クレジットカードだけでなく携帯電話や暗証番号で購入できる
次なる製品企画の輪郭が見えてきた。コンセプトは「自動販売機型ガジェット」といったところか。
明日の製品開発会議も長くなりそうだ。
こんにちわぁ~ひさしぶりだね~
また見にきてくれてありがとぉ~Oracle女子のhiromiです
みんな元気だったかなぁ?hiromiは元気ー
でも最近、お友達とショッピングするよりもOracleのサイジングについて考える方が楽しくなっちゃって、仲のいい友達がどんどん離れていっちゃうよーってのが一番の悩み。
でもまあOracle触ってたらそんなことすべて忘れちゃうんだけどね。ふふ
早速なんだけどー、前回は実行計画についてれくちゃーしたから、今回はStatspackについて教えちゃおうと思うのー。いいかなー?
Statspack、すたっつぱっく、ね。はー?Statspackってなにー?って感じだよねー?
早く知りたいよねー?じゃあもういっちゃおかー
Statspackっていうのは、Oracleが標準で提供してくれている性能を分析するためのツールだよ。
無料だよ、無料。It’s Free!
hiromi、無料大好き。サンプル化粧品とか試食とか無料って超好き!
実はAWRっていうものすごーく細かく分析できるツールもあるんだけど、こっちは有料なの。もしStatspackじゃものたりなーいって人はぜひ調べみてね
で、Statspackを使うとOracleの使用状況を見ながら分析レポートを作ってくれるんだけど、定期的に、そう、1時間毎くらいにレポートを出力することなんかもできるんだよー。1時間単位のレポートだとその前後のスナップショットをもとにして、その1時間で繰り広げられた処理の情報を元にいろいろ教えてくれちゃうんだよー。まぢで、すごくない?
どう?よくわかんないよねー?hiromiも最初見た時わけわかんなすぎて、Oracle女子やめてDB2女子になろうかと思ったもん。ウソだけどね。えへ。
大事なところを順番に拡大して説明しちゃうよー
そう、まずはここ。赤で囲んでいるところね。ここはLoad Profileっていう項目なんだけど、ここを見ればデータベースの特性とか傾向をざーっくり見ることができるんだよ。
なんか参考になりそうな感じするでしょ~!
たとえば、Parsesの回数に対してHard Parsesの割合が大きいほど超ハードパースしちゃってんじゃんてことだから、バインド変数を使うように修正できるSQLがないか探してみるとかー、共有プールサイズを大きくしてみるといいと思うよ
ちなみに、SQLの空白の数とか改行の位置が違うだけでも、それぞれ別ものってことでハードパースされちゃうからね~
じゃあ次のレポート見てみよっかー
Instance Efficiency Percentageっていう項目なんだけど、簡単に言うと「インスタンスが効率的に使われてるのー?」ってことだよ。非効率だと全体のパフォーマンスに影響するからねー。非効率ダメ、絶対アカン!
Load Profileにでてきた数値だけぢゃ、ぶっちゃけパフォーマンスどんなもんなの?ってところがパーセンテージでわかっちゃうー!
だいじな項目の意味はこんな感じだよ
このへんの項目が100%に近かったら効率的に使われてるよー、ってことなんだ。このサンプルとか超イイ感じ~♪データもSQLもメモリからスルスルスルリ~ンてとってこれてるねー。
ココはわかりやすよねー。hiromiも喜怒哀楽が激しいから、超わかりやすい子ってよく言われるんだー。激おこぷんぷん丸!
で、95%以上が理想的らしーんだけどね、それより低かったらどーすんのよって?まぢ焦るよね。Buffer Hitはー、バッファキャッシュのサイズを大きくするとかー、SQL実行タイミングを調整してみるといいかもねー。SQLを実行しまくって、いろんなデータを取得すればするほど、その分バッファキャッシュはパンクしちゃうからねー。パンクしたら、また物理読み込みが発生して、パフォーマンスが低下しちゃーう(泣)
同じデータを使う処理をかためたり、バッチの実行時間をほかの処理とかぶらないようにを調整することで効果が出ることもあるかもしれないよ~
Library Hitは、Load Profileで書いた超ハードパースしてんじゃんってのがパーセンテージで見えるんだよねーわかりやすーい!でも、Hitって言ったらやっぱりイチローだよねー。4000本とかまぢ神!実は、hiromi野球好きだったり~、てゆーか、やっぱりやっぱりスポーツしてる男子とか超カッコイイっしょ
ハイ、次ね、次。次はここ。
Top 5 Timed Events、簡単に言うと「超頑張っちゃってるイベントの上位5つ」だよー
よく見るイベントはサンプルのなかからコレ!
「CPU Time」はね、CPUを使用して処理してる時間だからいいとしてー、それ以外でなに頑張っちゃってるの?ってところがパフォチュの観点だよね。「CPU time」が一番上にきてると、まぁイイ感じらし~よ~
このサンプルの場合だと、「CPU Time」よりも上に「db file sequential read」てのがきてるよね。キングだよね~なんでキングとってんのかってゆーと、インデックスで検索をして単一ブロックを物理読み込みしたからってのが一番の理由だと思うんだよねー。
てことは、イベントだけで言うと悪いやつってわけでもないよね。「db file scattered read」も物理読み込みが発生してて、こっちは全表検索をして複数ブロックを読み込んでいる可能性が高いみたい。
「db file sequential read」でも「db file scattered read」でも、まずはどのSQLで物理読み込みが発生しているのかを突き止めちゃおーよー。で、どうやって突き止めるかというと・・・、Statspackのレポートの「SQL ordered by Reads」ってのが物理読み込み回数が多いSQLを示してくれてるんだよね!!超タスカルー!!
そしたら、インデックス設計を見直したりー、読み込み対象のデータが多くなりすぎてるようだったら、パーティションを使ってみるとか、考えてみてほしぃなぁ~
Statspackって実はもっともっといろんなことを調べられちゃうの。たとえば・・・
とかね。
でもhiromiはこれから青山でOracle男子とコンパだから、もし興味があったら各自で調べてみてー。うふふふー
でわ、ばいばぁ〜い
銀河ソフトウェア株式会社(本社:東京都目黒区、代表取締役:熊井久隆)、株式会社フルネス(本社:東京都中野区、代表取締役:古川正寿)、株式会社クロノス(本社:大阪市淀川区、代表取締役:月村俊之)の3社は、講師未経験者および講師経験の少ない技術者の講師育成を目的に、2013年1月より「IT講師養成コンソーシアム」を立ち上げました。
第1回目の講師プロ養成講座には15名の方にご参加いただきまして、大盛況に終わりました。
ただ、参加者の多くの方が経験者ということもあり、講師経験者がお互いのメソッドを披露し合い、スキルを高め合う内容に終始してしまった部分がございます。
そのため、今回(第2回目)は未経験者の方々を募り、講師プロ養成講座を経て、ゆくゆくは講師として登壇していただきたいと考えております。
第2期生の募集は2013年9月から開始し、2013年10月24日~11月28日の期間で全6回の「IT講師プロ養成研修」を行います。
本研修の講義は、年間100日以上登壇している現役のプロ講師が担当し、プロ講師としての心得や立ち振る舞い、研修のポイントなどを実践形式で行います。
詳しくは、下記募集要項をご確認の上、「IT講師養成コンソーシアム」事務局の各担当者までお問い合わせください。
☆☆☆ 第2回 IT講師プロ養成研修 募集要項 ☆☆☆
◆主 催 | : | IT講師養成コンソーシアム |
◆開催目的 | : | 講師未経験者および講師経験の少ない技術者を対象に、IT分野におけるプロ講師を育成し、優秀な講師人材を確保することを目的に研修を実施します。 |
◆開催日時 | : | 2013年10月24日(木)、31日(木)、11月7日(木)、14日(木)、21日(木)、28日(木) 各回とも18時30分~21時 |
◆場 所 | : | 株式会社クロノス 「会議室」 (東京都品川区東五反田1-10-8 五反田S&Lビル6F、五反田駅より徒歩3分程度) |
◆募集内容 | : | 今後プロ講師として活躍したい方、または企業内講師として新人や若手技術者への指導を検討されている方(未経験者)を受講対象として募集します。 |
◆受講条件 | : | Java言語での開発経験がある方 |
◆募 集 数 | : | 8名程度(申込み順)※応募が多い場合は、別日程で開催する予定です。 |
◆募集期間 | : | 2013年9月1日~10月23日 |
◆受 講 料 | : | 12,000円(2,000円/回×6回) ※受講料は、第1回目の講義時に全額持参ください。 |
◆受講後の特典 | : | 優秀な受講者には、受講後、本コンソーシアムの参加企業から優先的に講師を依頼させていただきます。 |
◆申込み |
: | お申込みはこちらから → http://bit.ly/18YLgUN |
◆問合せ先 |
: | IT講師養成コンソーシアム 事務局 銀河ソフトウェア株式会社 高橋 TEL:03-3712-5540 e-mail:k-takahashi@ginga.info 株式会社フルネス 宇渡 TEL:03-5345-7738 e-mail:uwatari@fullness.co.jp 株式会社クロノス 大石 TEL:03-6431-9271 e-mail:oishi@kronos-jp.net ※お気軽にお問い合わせください。 |
<1回目:【座学】>
イントロダクション、新入社員研修とは、講師の心構え、(宿題)講義導入プレゼン準備
<2回目:【演習】>
講義導入プレゼン、[企画]A氏の講話、(宿題)講義準備(基本構文)
<3回目:【演習】>
講義、良いところ/悪いところを洗い出す、[企画]B氏の講話、(宿題)どうすれば良くなるか考える
<4回目:【座学】>
プロのメイン講師の講義を見る、[企画]C氏の講話、[コラム]目的を考えよう、(宿題)講義準備と質問に応える準備(※アレンジ)
<5回目:【演習】>
講義&質疑応答、[企画]D氏の講話、[コラム]新入社員研修での取り組み、(宿題)講義準備と質問に応える準備(※アレンジ)
<6回目:【演習】>
講義&質疑応答、[企画]E氏の講話、(宿題)講義準備と質問に応える準備(※アレンジ)
※アレンジについては、以下の中から個人ごとに別々の宿題を出す予定です。
配列、基本データ型と参照型、メソッド、コンストラクタ、オーバーロードとthis、ポリモフィズム、例外処理、コレクション、JDBCなど
テスティングレッドのスミハラタツヤによって、Selenium(光線)の解説している最中に、
デグレード将軍が現れた。 デグレード将軍は、デグレード範囲拡大攻撃を行ったのであった。
テスティングレッドの攻撃(デバッグ)も虚しく、デグレード範囲が広がりを見せつつ合った時、
テスティングレッドは、Selenium-IDEを利用した人海戦術により、見事デグレード将軍を倒したのであった。。。
レッド 「前回はSelenium-IDEのお陰でデグレード将軍を倒せたが、このままではいつか敗れる日がくるかもしれない・・・」
タッキ博士「レッド!」
レッド 「ん?その声は・・・タッキ博士!?」
タッキ博士「どうしたんじゃ、そんな難しい顔をして」
レッド 「タッキ博士、このままでは悪の軍団デスマーチにいつか敗れてしまうのではないでしょうか。。。」
タッキ博士「ぶはははは、そんな事で落ち込んでおるのか?」
レッド 「そんな事って!前回の戦い・・」
タッキ博士「お主は何にも知らないようじゃの。よし、わしが本当のSeleniumを教えてやろう」
レッド 「本当のSelenium?」
タッキ博士「そうじゃ、まずは最新兵器(Selenium2)のSelenium WebDriverについてじゃ!」
最新兵器であるSelenium2には、ブラウザテストを行うためのインターフェイスとして、環境適応設定(WebDriverインターフェイス)がある。 また、環境適応設定(WebDriverインターフェイス)を実装した、陸海空モード(各種ブラウザのWebDriver具象クラス)が存在する。 実行するブラウザごとに陸海空モード(具象クラス)を変更することで、同一コードで複数のブラウザテストに対応できるのじゃ。
レッド 「す、すごい・・・じゃあ、早速・・」
タッキ博士「まぁ待て、落ち着くんじゃ。まずはWebDriverを利用する環境作りじゃ。」
このサンプルでは、MavenとEclipseを利用する。
※MavenとEclipseのダウンロードと設定は事前に行っているものする。
まずは、下記のコマンドを実行し、Maveプロジェクトを作成する。
1 |
mvn archetype:create -DgroupId=sample.selenium -DartifactId=selenium-sample -DarchetypeArtifactId=maven-archetype-quickstart |
次に、自動生成されたpom.xmlのdependencies要素として下記を追加する。
Junit3の記述がある場合は削除する。
[pom.xmlのdependencies]
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.31.0</version> </dependency> </dependencies> |
Eclipseのworkspaceで、初めてMavenで利用する場合は、下記のコマンドを実行し、Eclipseのクラスパス変数にM2_REPOを追加する。
workspaceがまだ作成されていない場合は、一度Eclipseを起動しworkspaceを作成しておく。
1 |
mvn eclipse:add-maven-repo -Declipse.workspace=<workspaceの絶対パス> |
Eclipseのプロジェクトに変換する。
pom.xmlがあるディレクトリへ移動し、次のコマンドを実行する。
1 |
mvn eclipse:eclipse |
Eclipseプロジェクトに変換後、Eclipseから
「ファイル」→「インポート」→「既存プロジェクトをワークスペースへ」
でインポートする。
タッキ博士「これで準備は万全じゃ。陸(IE) 海(Firefox) 空(Chrome) のどんな環境であろうともテストができるぞい。」
レッド 「は、はい。それじゃ、ついに使うんですね!?」
タッキ博士「では使ってみるかのー。」
タッキ博士「まずは、環境適応設定(WebDriver)を海モード(FirefoxDriver)にセットしてっと・・・」
タッキ博士「Googleで”test”文字列を検索でもしてみようかのー」
FirefoxでGoogleにアクセスし、「test」文字列を自動入力、検索結果画面表示
JUnitのソースを作成する。
テンプレートとして用意されている、AppTestクラスのtestAppメソッドを、以下のように書き換える。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public void testApp() { // FirefoxでGoogleを開く WebDriver driver = new FirefoxDriver(); driver.get("https://www.google.co.jp"); // 入力フォームにtestを入力し検索ボタンを押下する new WebDriverWait(driver, 10).until(ExpectedConditions.titleIs("Google")); WebElement searchBox = driver.findElement(ById.id("gbqfq")); WebElement searchButton = driver.findElement(ById.id("gbqfb")); searchBox.sendKeys("test"); searchButton.click(); // 検索結果を確認する new WebDriverWait(driver, 10).until(ExpectedConditions.titleIs("test - Google 検索")); assertEquals("test - Google 検索", driver.getTitle()); // ブラウザを閉じる driver.close(); } |
このテストを実行すると、Googleでtestという文字列を検索し、検索結果画面のTitleが
期待通りの文字列になっていることを確認する。
タッキ博士「どうじゃ、環境適応設定(WebDriver)の実力は?」
レッド 「す、すげぇ。。。SUGEEEEEEEEEEEEEEEEEEEE!!!」
レッド 「これならどんな環境でも戦える!!!!」
タッキ博士「よしよし、良いリアクションじゃ。次回はSeleinum Gridについて教えよう!」
そして、テスティンガーは明日も世界平和のために戦うのであった、続く
ユニット戦隊テスティンガーによる必殺兵器Selenium(光線)の解説
私の名は、テスティング・レッドことスミハラタツヤ!
地球の平和とプロジェクトの定時退社を守るため、
悪の軍団デス・マーチと戦う正義のヒーロー「ユニット戦隊テスティンガー」の一員だ。
今日は、前回の戦いで憎き悪の軍団デス・マーチの6大将軍の一人、マージミステイク将軍との戦いで我々が使用した必殺技について紹介しよう。
その名も「Selenium」!我々がこの最終兵器(リーサルウェポン)を使用する時は、最後に「光線」をつけて叫ぶのが慣習となっている。
では、まずはみんなで叫んでみよう。「Selenium光線!」
ちなみに光線の類いは一切発生しない。
よし、それではSeleniumについてざっくり説明していく。
概要
Seleniumとは、WebアプリケーションのUI(画面操作や画面表示)の平和を守るためのテストツールである。
通常、WebアプリケーションのUIに敵(バグ)が潜んでいないかを調べるには、手動でパトロールして黙視でバグを捕まえるといった原始的な方法が一般的であった。
しかし、このSeleniumを使う事で、WebアプリケーションUIテストの手順をプログラムで記述し、実行を自動化することができるのである!!!
この必殺技は、我らの究極必殺兵器である「コンテニュアス・インテグレーション(CI)」の一つとして組み込む事で、更に強力なパワーを発揮して敵を打ち砕くのである。
では続いて、Seleniumの細部について順を追って説明していこう。
Seleniumの構成要素
Seleniumはいくつかの集合兵器(ツールスイート)と単体兵器(プロダクト)から成り立っている。まずは下記の表を見てほしい。
No |
ツールスイート |
プロダクト |
概要 |
1 |
Selenium 1 |
Selenium-Core |
HTML形式でテストスクリプトを記述し、アプリケーションサーバーに配備することでテストが可能。現在は単独配布されていない。 |
2 |
Selenium-RemoteControl (Selenium-RC) |
アプリケーションサーバーにスクリプトを配備せずにテストが可能。 |
|
3 |
Selenium-IDE |
FireFoxの拡張機能であり、自動テストを作成するためのプロダクトである。 |
|
4 |
Selenium-Grid |
一回のテスト実行で複数のWebブラウザの動作検証を行うことができる。 |
|
5 |
Selenium2 |
Selenium-WebDriver Selenium-Server |
ブラウザごとの専用ドライバー。各ブラウザの操作をAPI化している。 |
Seleniumは改良と発展の歴史により、上記のような複数の兵器(プロダクト)が上げられる。最新の兵器はSelenium2ではあるが、Selenium1やその他の兵器についても開発は止まっておらず今後も更新されていく。
大きくは、Selenium1とSelenium2という集合兵器がある。またSelenium1を強力にサポートする位置づけでSelenium-IDEやSelenium-Gridがあり、これらの存在がSelenium1を未だ現役にとどめている理由といっても過言ではない。
Selenium-IDEを使うと、ノンプログラミングでWebアプリケーションのUIテストが作成できる。
Selenium-Gridは大規模なテスト時のテストの長時間化回避、複数ブラウザの動作検証などを効率化するために利用する巨大兵器である。
それでは、これらのツールスイートを順に説明していこう。
Selenium1
Seleniumはブラウザの操作を自動化する製品であり、主にWebアプリケーションのテストの自動化で利用されるが、テストの自動化以外にも活用できる。
Selenium1は米国のThoughtWorks社が2004年に開発したツールを原型としていて、その原型は今もSelenium-Coreとして存在している。
まずはこのSelenium-Coreについて解説しよう。
Selenium-Core
Selenium-Coreの機能は、用意したテストスクリプトをブラウザ操作ロジックに変換して対象ページに埋め込んで返すというものだ。
Selenium-Coreで利用するテストスクリプトはHTML形式で記述する。そして、事前にテスト対象のWebアプリケーションと同じフォルダに配置する必要がある。実行時にSelenium-Coreがテストスクリプトを、JavaScriptに変換してブラウザ操作実行を実現する。
Selenium-Coreは、後述するSelenium-RC、Selenium-IDEやSelenium-Gridにも内部的に使用されており、Selenium単体で利用するよりもRCやIDEを利用することが推奨されている。
そのためSelenium-Core単体での配布はされていないがSelenium1の核となる技(プロダクト)である。
Selenium-RC (Remote Control)
Selenium-Coreは、Webアプリケーションと同じフォルダにテストスクリプトおよびSelenium-Coreのライブラリを配置する必要があったが、このやり方では利用しづらいシーンがあるため改良されたのがSelenium-RCである。
Selenium-RCは、テスト実行マシン上に仮想プロキシサーバーを起動し、ここでテストスクリプトを処理して、対象ページに埋め込むのでWebアプリケーションサーバーにテストスクリプトを配置せずに利用できる。
また、Selenium-RCでサポートしているプログラム言語(C#、Java、Ruby、Perlなど)を使用してテストコードの記述ができるため、テストコードの表現力が高まる。
Selenium-RC は、Selenium-ServerとClient Driverで構成されている。
・Selenium-Server
自動テストを対象Webアプリケーションに埋め込むための仮想プロキシサーバー
・Client Driver
プログラムから仮想プロキシサーバーを制御するライブラリ
Selenium-RCがサポートしているプログラム言語のライブラリ
Selenium-IDE
Selenium-IDE はFireFoxの拡張機能であり、テストスクリプトの作成を補助するためのプロダクトである。ユーザが手動で実行したテストの手順を記録し、テストスクリプトを作成できる。また、Selenium-RCを内部に持っているためプラグインをダウンロードしたらすぐにテストを作成する環境が整う。非常に手軽なツールとなっている。
Selenium-IDE 1.Xまで |
FireFox以外で使用することは出来ない |
Selenium-IDE2.X以降 |
FireFoxで作成したテストコードを、他のブラウザで実行出来る |
そして、、
むむ、誰だ貴様は!
デグレード将軍「私は、デスマーチ軍団の一人、デグレード将軍だ!」
デグレード将軍「よくも我が同胞、マージミステイク将軍をヤッてくれたな!」
テスティングレッド「ふん。潰したバグのことなど覚えてないな。」
デグレード将軍「貴様らのようなヘボPGがいるから
我々不幸なバグが生まれてくるんだろうが!覚悟しやがれ!」
テスティングレッド「知らぬ!この世に悪とバグが栄えた試しなしだ!」
テスティングレッド「えい!」
テスティングレッド「やあー」
テスティングレッド「とぉー」
デグレード将軍「そんな小手先の攻撃(デバッグ)は無駄だ。
どんどんデグレード範囲を増やしてやるぜ!!」
テスティングレッド「くそーなかなか手強いバグだ、倒しても倒してもきりがない」
テスティングレッド「こんなとき、ヘルプがいてくれたら・・・
とはいえ今は新人プログラマーしかいないし・・・」
テスティングレッド「そうだ!こんなときこそSelenium-IDEを使おう!」
■Selenium-IDEのインストール
1. Firefox(http://www.mozilla.jp/firefox/)をインストールする。
2. Seleniumのダウンロードサイト(http://docs.seleniumhq.org/download/)からプラグインをダウンロード・インストールする。
ダウンロードの入り口は少し分かりにくいが以下の図を参考にしてほしい。(本稿ではバージョン2.2.0)
メニューバーのツールからSeleniumIDEを選択すると、下記の様なウィンドウが表示される。
このウィンドウの右上にある、赤いボタンが「操作記録」のボタンである。
このボタンをOnにして、ブラウザを操作すると操作内容をSeleniumのテストスクリプトに変換してくれるのである。
では、Googleで「クロノス」を検索してKronosのコーポレートサイトを表示する操作を記録してみよう。
すると以下のような結果となる。
操作記録の赤丸ボタンを押して、操作の記録を停止すればSeleniumスクリプト完成である。
では、このスクリプトを実行してみよう。
緑色の三角マークが2つあるうち、左側のボタン(三角形に3本線のマーク)
を押してテストスクリプトを実行する。
エラーが発生するようであれば少し実行スピードのスライダーによって実行ペースを下げてみると良い。
HTML画面の描画が終わっていないうちに次のアクションをしようとしてしまうことがあるためだ。
SeleniumIDEではかなりいろいろな事が出来るので詳しく説明しないが、操作記録を活用することで簡単に作成する事が出来ることが分かるだろう。
テスティングレッド「よし!これで新人プログラマーを大量投入だ!!」
デグレード将軍「なんと!人海戦術のローラー作戦でくるとは!マネジメントの風上にも置けぬ奴!!」
テスティングレッド「とどめだ!Selenium光線!」
デグレード将軍「ぐわーーー!!」
こうして、テスティングレッドは今日も定時退社していくのであった。
つづく
こんにちわ〜はじめまして〜Oracle女子のhiromiです
hiromiのことを先にちょっとだけ紹介させてね。あたし、
な感じのふつ〜の女の子。でも、ITエンジニアなの。見えないってよく言われる。
でも、Oracleと出会って、DBが気になってきて・・・で、ER図描くのが好きになって〜って、自分でもウケる〜。
そんなあたしが、みんなのお役に立てたらなって思って、hiromiが知ってるOracleのパフォーマンスチューニング(ぱふぉちゅ)を教えるよ〜
hiromiと一緒に楽しくパフォチュしてみよ〜
作ったアプリケーションがなんか遅いな〜なんて思って調べてみたらSQLが遅いせいだった!なんてことよくあるよね。
そういう場合はまずSQLの実行計画を見るの。そっこ〜見る!!実行計画は、どうやってどんな順番でデータを読みに行くのかっていう道すじを表してくれるもののことね。
SQLの実行計画を見るには3つの方法があるんだけど
だよ。すぐ使えちゃうから、試してみてね!!
Oracleの機能にはAUTOTRACE機能っていうのがあるの。おーととれーす
で、これがなにかっていうと、SQLの実行計画を集める機能なの。SQL*Plusなんかで「SET AUTOTRACE」っていうコマンドを実行すると使えるんだけど、そのあとに実行したSQLの実行計画が自動的に出力されるようになるんだよ。ちょ〜便利〜
1 |
SQL> SET AUTOTRACE {ON | TRACEONLY | OFF} [EXPLAIN] [STATISTICS] |
オプションがいくつかあるんだけど、それぞれの意味を書いておくね。ぶっちゃけ、「SET AUTOTRACE ON」だけ覚えてたら十分見れるんだけどね〜
◆SET AUTOTRACE ON EXPLAIN
実行結果表示の後に、実行計画のみ表示
◆SET AUTOTRACE ON STATISTICS
実行結果表示の後に、統計情報のみ表示
◆SET AUTOTRACE TRACEONLY
実行結果を表示せず、実行計画と統計情報を表示
このSET AUTOTRACEコマンド、気をつけなきゃいけないのは、実際にSQLも実行されちゃうってこと。だから、DELETE文の実行計画を確認したい場合にはちょっと不向きかなぁ。せっかく入れたデータが消えちゃった-(爆泣)!!ってことになっちゃう。
でも、簡単で覚えやすいから1番おすすめ〜
実行次はEXPLAIN PLANだよ。
さっきのAUTOTRACE機能は、実際にSQLが実行されちゃってDELETE文のとき困るよね。どうすりゃいいの〜ってときに使えるのがEXPLAIN PLAN
じゃあ実行の仕方を教えちゃうよ〜
1 2 |
SQL> explain plan for [解析したいSQL] SQL> select plan_table_output from table(dbms_xplan.display()); |
これでこのSQLの実行計画が出力されるの。でも、長くて覚えるのたいへんだよね〜・・・
だから、hiromiも使うときメモったの見たり、調べなおしたりしちゃう(笑)EXPLAIN PLANは、AUTOTRACE機能と違って解析したSQL1回ぽっきりの出力で終了。その代わり、1回解析したSQLは、さっきの実行方法2行目のSELECT文を実行すればEXPLAIN PLAN文を打たなくても見れるからね。
実際に実行したらこんな感じに出力されるよ
最後はV$SQL_PLAN。
V$ってなんだろね?よくわかんないけど、Oracleが用意してくれいてる便利なビューはV$という文字で始まるみたいだよ。ちなみに動的パフォーマンスビューっていうらしいよ。どうてきぱふぉーまんすびゅうV$はぶいだらー。このV$で始まるビューはほかにもいろいろあってどれも便利で使えるヨ!!
じゃあ、V$SQL_PLANってどんなビューかっていうと、ハードパースされたSQLの実行計画を一気に確認できる表なの。ハードパースって、OracleがSQLを解析することね。
SQLを実行するときって、まず最初にSQLを解析して実行できるかどうか、どう実行するのかを考えて、その解析結果とか実行計画をライブラリキャッシュっていう箱に入れておくの。それで、次に同じSQLを実行しようとしたときには、この箱から出して使うの。ハードパースするのに時間くっちゃうからね、同じSQLだったら解析する手間を省いて、はやく結果を返してあげられるってことね。
Oracle賢い〜やさしい〜!!
賢くてやさしいOracle君のイメージを描いたら、こんな感じかな。
イメージつかめてもらえたかなぁ?
ライブラリキャッシュっていう箱がある共有プールってのは、Oracleのなかにあるメモリのお話だよ。
みんなで一緒に使うものをためておくところだから「共有プール」って名前っぽいよね、hiromiも知らないけど〜
それで、ハードパースしたSQLの実行計画はV$SQL_PLANを検索すると見れるんだけどね、実際にV$SQL_PLANを全件参照してみた結果サンプルを見てみて。
なんだこれ〜〜〜〜〜、うーん、、、って、よくわかんないよね
結局、V$SQL_PLANだけ見ても、どのSQLのものなのかわからないのが正直なところ。解析済みのSQLの解析結果が全部入ってるからね。だから、どのSQLの実行計画か知るためには、先にV$SQLっていうビューから実行計画を見たいSQLのSQL_IDっていうキーを拾っておかないといけないんだよね。
なんか、これだけ聞くとV$SQL_PLANとか見るの面倒くさいし、使わなくてよくない?って思うけど、ちゃんと出番があるんだよ〜
実際にそのDBを使ってるアプリケーションが実行したSQLの実行計画を見たいってときには、コレしかないんだよね。今までの2つの方法は、SQL*Plusなんかで直接SQLを実行するときに見る方法だからね。
それとね、アプリケーションが動いてたくさんのSQLが実行されたなかから、全表走査(テーブルの全レコードを読み取ること)している実行計画を見つけて、そのSQLを探りあてたい!ってときとかV$SQL_PLANを見ることから始まるね。全表走査は、レコード数が多いとその分読み取るのに時間がかかってしまうから、場合によっては良くなかったりするの。
実行計画を見る3つの方法の説明はここまでだけど、そういえば実行計画の見方を教えてなかったね
実行計画で確認する項目にアクセスパスがあって、OPERATIONってところに(V$SQL_PLANは、OPTIONS列も)「TABLE ACCESS FULL」とか「UNIQUE SCAN」とか書いてるよね。これが「データをどうやって検索するかー?」ってことなの。アクセスパスにはいろんな種類があって、さっき話に出てきた’全表走査’ってのもコレでわかるってこと。「TABLE ACCESS FULL」ってのが、それだよ〜
ほかにもインデックスとテーブルのアクセスパスがあるから挙げておくね。
じゃあ今日はこのへんでおしまい
次回は「Vol.2 Statspackを見てみよう」でね!ばいばぁ〜い