タイトル/名前 | 更新者 | 更新日 |
---|---|---|
読書メモ/"How Google Tests Software", 「テストから見えてくるグーグルのソフトウェア開発」 | msakamoto-sf | 2013-08-11 17:57:52 |
Groovy/Enum型を使う時はGroovyのバージョンに注意 | msakamoto-sf | 2013-08-10 20:01:26 |
日記/2013/08/10/調査メモ : WebブラウザのRecord and Playback Framework(RPF)関連 | msakamoto-sf | 2013-08-10 13:35:54 |
日記/2013/08/10/調査メモ : デスクトップ画面の動画キャプチャソフト | msakamoto-sf | 2013-08-10 13:15:45 |
Java/NIO/Netty, Mina, Grizzly, Vert.x + WebSocket 調査メモ | msakamoto-sf | 2013-08-10 13:10:14 |
Java/Maven3/Eclipse上でサクサクWeb開発 (tomcat-maven-pluginを使ったテンプレート + Groovy) | msakamoto-sf | 2013-07-28 21:19:34 |
Java/Maven3/Eclipse上でサクサクWeb開発 (例:tomcat-maven-plugin) | msakamoto-sf | 2013-07-28 20:59:00 |
Java/Maven3/Eclipse上でサクサクWeb開発 (tomcat-maven-pluginを使ったテンプレート) | msakamoto-sf | 2013-07-28 20:53:47 |
技術/RCS/Subversion | msakamoto-sf | 2013-07-28 18:33:35 |
日記/2009/05/10/UNIX-C言語でのTCPのechoサーバのサンプル | msakamoto-sf | 2013-07-28 18:30:22 |
邦題:「テストから見えてくるグーグルのソフトウェア開発」
・テスト技術者、およびTDD(テスト駆動開発)やテストファーストに意欲的に取り組んでいるエンジニア向けに3行でまとめる。
1. グーグルですら適切で合理的なテストケースの作成やテスト計画、テストの自動化、そして開発者にテストコードを書かせるのに苦労している。昔も、今も、そしてこれからも。
2. だから、テストやその自動化には「正解」なんて無い。グーグルですらそんなの知らない。だからグーグルではテストに対して様々な実験や検証が日常的に行われ、そこからイノベーションが生まれる。
3. では何を軸とするか?それはひたすら、「テストにより製品に価値を追加する」こと。テスト計画、自動化、開発者へのテストコードの啓蒙、それら全ては製品の価値に従属し、会社の利益につながる。
これで本書を読みたくなった人は、以下の文章を読む必要はありません。さあ、今すぐ上のリンクをクリックして本書を購入しましょう!特に、TDDに一度は夢を見て→現場導入を試みて挫折と絶望、を味わった人におすすめです。
※なお、技術的な技法や管理手法についてはほとんど書かれてません。テストコードの書き方やインフラの構築方法、あるいはテスト工程の管理方法などは期待しないほうが良いです。そもそも組織文化を変えたい、とか、JavaScriptが多用されたWebアプリ、あるいはAndroidやChromeOSなどハードウェアやOSレイヤーと結びついたソフトウェアに対して、どのようなアプローチでテストに取り組んでいるか、という話が多いです。もちろん、グーグルのテストエンジニアはどういう仕事をしていて、どんな日常なのかも書かれてます。
JavaのEnumと、その魅力的な機能はGroovyでも使えます。
JavaでのEnum参考:
しかし、GroovyでJavaのenumを使う場合、特に変態的な凝った組み合わせを導入し始めると(例:コンストラクタのカスタマイズ、メソッドのオーバーライドなど)、Groovyのバージョンによっては期待通りに動作しないケースがありました。その辺りを簡単にメモします。
まず、codehausにあるような超単純なenumの使用方法では特に問題なくGroovyでも使えます。コンストラクタをカスタマイズしてる例もありますが、まだenumインスタンスごとの初期化ブロックは無いので、偶然にも地雷を回避できています。
しかし、2010年ごろになるとJavaのenumの変態的な機能に魅了されたGroovierが、「これってGroovyでも出来るんじゃ・・・」と試した結果、残念な結果に終わる報告が出てきます。
まあこの辺は、1.8で大体直されてるので可愛いものです。
初期化ブロック中の";"とか"(", ")"のような些細な問題は 1.8 で解決されましたが、enumに抽象メソッドを導入してインスタンスごとに実装させるとか、enum中のメソッドをインスタンスごとにオーバーライドしようとするとか始めると、2.0/2.1の初期バージョンでは期待通りに動いてくれなかったようです。
この辺は、2.0.8 / 2.1.3 になってようやく解決されています。
プロジェクトによってはGroovyのバージョンをドラスティックに上げられない場合もあると思います。マイナーバージョンアップで 1.8.9 まで上げられたとして、上記のような凝ったenumを使おうとするのであれば、以下の様な回避策があると思います。1.8.9 で動作確認済みです。
結論:enumの変態的な特徴をフルに使いたいのであれば最新版のGroovyを使いましょう。
ただ、個人的にはenumの変態的な特徴に依存したデザインにするのは、単に言語の特徴に悪ノリしただけのような気もしますので、あんまりそれに依存し過ぎないよう、調整したほうが良い気もしました。(他の言語と比べて特出した特徴に依存し過ぎると、黒魔術化してメンテナンスが悪くなる可能性があるので、それを避けたい。)
Google BITE & Record and Playback Framework (RPF)
Selenium IDE for Chrome
Selenium IDE for Firefoxで作ったのをIE/ChromeでPlayback剃る方法:
無いのかな・・・と思ったけど、こういうのを見つけた:
Sciroccoといえばクラウド上でのAndroidテストサービスだが、どうしてChromeに?と思ったが、どうやらChrome上での操作内容をAndroidDriverのテストスクリプトに変換することをメインに据えているらしい。
ユーザからの評価はまずまずといった感じで、これからの拡張に期待。OSSらしいが、ソースはどこだろう?
結局、ひと通りのWebブラウザを確実に対応しようとするならテスター向けの商用製品に今のところはなってしまうのかもしれない。RPF自体が、エンドツーエンドのテスト自動化という、わりと大規模で体力のある企業でないと導入出来ないものだろうから、致し方ないところか。
Record and Playback System : 有償製品
NIOフレームワーク、およびそれらにおけるWebSocket対応状況(ついでにErlang + WebSocketどうよ?も含む)についてざっと参考リンクをまとめる。
Nettyを中心としてNIOフレームワーク全般に話が及んでいる、総括的な記事:
Netty, Grizzly, MinaをサンプルとしたNIOフレームワークの検証:
ErlangとWebSocket周り:
NettyとWebSocket周り:
Vert.xとWebSocket周り:
Grizzly周り:
Java/Maven3/Eclipse上でサクサクWeb開発 (tomcat-maven-pluginを使ったテンプレート) に、さらにGroovyのソースも組み込めるようにしたもの。
参考:
ポイント:
動作確認:
Win7 Pro 64bit JDK 1.7.09 64bit Eclipse 4.2 Juno SR1 64bit plugin: m2e-1.2.0.20120903-1050 (maven 3.0.4) Groovy-Eclipse plugin 2.7.1
2013-07追記
tomcat-maven-plugin (2.1) に更新しました。Tomcat6を起動する場合は "mvn tomcat6:run", Tomcat7で起動する場合は "mvn tomcat7:run" を実行します。
2013-07更新
2013-02に Apache Tomcat Maven Plugin の 2.1 がリリースされ、nexus.codehaus.org のリポジトリから 1.2 が削除されました。現在はMavenのCentralリポジトリから 2.1 を直接ロード出来ます。
pom.xmlへの組み込み例:
<build> <plugins> ... <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat6-maven-plugin</artifactId> <version>2.1</version> <configuration> <port>8090</port> <path>/tomcat6-demo</path> </configuration> </plugin> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1</version> <configuration> <port>8090</port> <path>/tomcat7-demo</path> </configuration> </plugin> ... </plugins> </build>
Tomcat6とTomcat7用に分離されています。ゴールも"tomcat6:xxxx"と"tomcat7:xxxx"で分かれているため、両方同時に組み込んでもゴール指定で使い分けることができるため、衝突問題も発生しません。
実際のサンプルコードについては Java/Maven3/Eclipse上でサクサクWeb開発 (tomcat-maven-pluginを使ったテンプレート) を参照してください。
MavenプロジェクトでのServletプログラミングで、Eclipse上で「サクサク」、つまりJavaソース修正→Eclipse上で保存→Eclipseによる自動コンパイル→即座にServletContainer上に反映という素早い開発サイクルを実現するためのメモです。
対象:フルスペックのJ2EEサーバ機能を用いない、TomcatやJettyなどの軽量ServletContainer上で動作するWebアプリケーション。
環境:Maven3, Eclipse 3.6 or 3.7 以上, m2e プラグイン, Tomcat 5 以上
Java/Maven3/Eclipse上でサクサクWeb開発 (例:tomcat-maven-plugin) にもう少し肉付けした、Maven 兼 m2e Eclipse Projectのテンプレート。ライセンスは Apache License 2.0 にしています。
特徴:
archetypeを構築するのがベストではあるのですが、そこまで時間なかったのでこういうテンプレートという形でお茶を濁しました。
Subversionメモ。
日記で書いた記事:
SubversionリポジトリをGitリポジトリに変換:
GitリポジトリをSubversionリポジトリに変換:
UNIX上でのC言語による、TCP/IPソケットを使った"echo"サーバ/クライアントのサンプル実装をcodereposに登録しました。
http://coderepos.org/share/browser/lang/c/echo_samples
2013-07-28 : msakamoto-sfが著作権を持っているコードのみ、GitHubにコピーしました。以降はこちらを更新します。
https://github.com/msakamoto-sf/toybox/tree/master/tcp_echo_sample/c
詳細はREADME_ja.txtを参照して下さい。
http://coderepos.org/share/browser/lang/c/echo_samples/README_ja.txt
元々、「サーバ側でどうにかして"接続タイムアウト"をクライアント側に発生させられないかな」と思い、select + acceptの間にsleepかませたらどうかとか考えていたのですが、下記リンクの「TCP/IP エラー処理 connect編」で普通に「マシンが居ないIPアドレスに接続」で普通にクライアント側で発生させることが出来たので、そこまでは作りませんでした。
というか、最後にソケット系の関数を弄くったのが1年以上昔で、思い出して普通のブロッキングバージョンのechoサーバ/クライアント作るだけで土日終わってしまいました・・・。
ギリギリで、connect()前にソケットを非ブロッキングモードにしておき、EINPROGRESSで戻ったらタイムアウト秒数指定のselect()で任意のタイムアウト秒数を設定できるサンプルが出来ました。
そもそもSYN+ACKを返したりするのはOSのTCPスタック内部の処理なので、ユーザーランドからはそこまで制御できないのでは?と思ったり・・・。SOCK_RAW使ったら出来るかな?
また来週末位に、気力が残っていたらサーバ側で select() + accept() するパターンを実験してみようと思います。
以下は参考にしたリンクです。