2013年5月18日土曜日

Junit実践入門のまとめ

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)



・assert that actual is expected(実測値が期待値であると表明する)

・例外
    テストメソッドの前に以下を記述してから、例外が起きるメソッドを実行する。
    @Test(expected = 例外.class)
・カスタムMatcher
    ・BaseMatcherクラスのサブクラスとして定義
    ・matchesメソッド
        値の比較検証
            actual(実測値)を受け取るようにする。
            期待通りの動きをしている場合はtrue、そうでない場合はfalseを返す。
    ・describeメソッド
        比較が失敗した場合に通知する情報
        Descriptionオブジェクトを受け取り、
        この中に検証失敗の情報を入れる。
            java.lang.AssertionError:
                Expected: is Descriptionオブジェクト中身
                     got: 実測値のtoString
            appendValueメソッド
                出力にダブルクォーテーションがつく
            appendTextメソッド
                出力にダブルクォーテーションがつかない
    ・コンストラクタ
        expected(期待値)を受け取るようにする。
・テストのコンテキスト(テストの構造化)
        ・共通の初期化処
        ・共通の状態
       
        ●例
            @RunWith(Enclosed.class)
            public class クラス名Test{
                public static class ○○○○{
                    ~ テスト処理 ~
                }
                public static class □□□□{
                    ~ テスト処理 ~
                }
            }

・パラメータ化
    ・テストケースを少なくし、品質も良い状態に保つには、
      すべて満たしている条件と1つだけ満たしていない条件でテストを行えばよい。
    ●@Theory
        パラメータ化テストでは@Testの代わりにこれを使う。
    ●@DataPoints
        パラメータ化テストのパラメータ定義を行う。
   
    ●複数パラメータ化テスト
        public class クラス名Test{
            @DataPoints
            public static Fixture[] params = {
                new Fixture(1, 2, 3);
                new Fixture(3, 4, 7);
                new Fixture(5, 6, 11);
            };
           
            @Theory
            puvli void add(Fixture p) throws Exception{
                ~ pがパラメータ ~
            }
           
            static class Fixture{
                int x;
                int y;
                int expected;
                Fixture(int x, int y, int expected){
                    this.x = x;
                    this.y = y;
                    this.expected = expected;
                }
            }
        }
        ●外部リソースを使ってパラメータを定義するのが便利!
            ~未記載~
    ●assumeTrue(boolean flag)
        flagがtrueの場合のみその後の検証を行う。
        falseの場合はAssumptionViolatedExceptionが送出され、テストが成功となる。
    ●どのパラメータで失敗したかメッセージが出ないため、
      assertThatの第1引数に失敗時のメッセージを記述すること。
・TDD(テスト駆動開発)
    ●開発工程
      以下を繰り返す
        ・設計する
        ・テストコードを書く
        ・プロダクションコードを書く
        ・リファクタリングする

2013年4月25日木曜日

ビルド+ツール

JenkinsとJUnitと組み合わせるのにビルドツールがあると便利なわけだけど、
AntもMavenもわかりません。

Makeもわからないしビルドツールは好きではないんですよね…。

でも最近見つけたGradleさんがどうも調子よさそうです。
日本語の本はまだ出てない?ようなので、
自分も使えるようになって流行っていってくれたらいいな~。

とりあえずここ読んどきましょう↓
クイックスタート
ユーザーズガイド

2013年4月19日金曜日

Jenkins

ジェンキンスさん。
間違ってもテストを自動でやってくれるやつと思ってはいけない。

テストをやってくれと合図を出して、
受け取った結果なんかを綺麗に表示してくれるだけ。

高性能なGUI版cronです。

テストの中身なんかは自分で実装する必要があるし、そこが一番時間がかかるとこ。

Rubyと一緒に解説されることが多い気がするけど、
本当はJAVAやただのバッチをあるパターンで実行させることなんかにも使える。

テストしてくれるだけって思うととてももったいない。

2013年4月7日日曜日

情報処理試験DB用語まとめ(自分用)

単語の定義ってIPAで出してたりするんですかね?
本によって定義が違って、答えに影響が出てくるんだけど。

●エンティティ
  テーブルと一緒
●アトリビュート
  行。タプル。
●カラム
  列
●候補キー
  主キーになることができるキー集合。この中から妥当なものを選んで主キーにする。
●関数従属性
  ある属性の値が決まるとき、別の属性が一意に決まる事。
●部分関数従属性
  候補キーの一部に非キー属性が関数従属している事。
●推移関数従属性
  Aが決まるとBが決まり、その結果Cが決まる事。
  (ただし、A→Cの関係がBを経由しなくても成り立つ場合は除外される。)


2013/04/09追記

●リレーションシップは外部キーとそれに対応するエンティティを結ぶ。
  (明確に1対1関係を示していなければ大抵外部キー側が矢印)
  (外部キーでもある主キーを書き忘れない忘れないこと)

●(単一に多い)主キーかつ外部キーである~番号、~コードで紐付けているエンティティは、
  紐付け先にある項目を余計に定義しないように。

●カラムが1のエンティティも存在する。

●自然結合、内部結合、USING、外部結合はNULLが現れる、自己結合、COALESCE

●コミットではトランザクションのログデータのみ書き込み。チェックポイント(一定のタイミングかメモリーバッファがいっぱいになったら)になったらデータベースファイルに書き込む

●ダーノンリファリード。
RU
RC
RR
SE

●3層スキーマ
外部スキーマ…ビュー。利用者へ見せるデータ。
概念スキーマ…テーブル。管理対象。
内部スキーマ…インデックス。物理的な格納。


●楽観的方法…ロックしない。
●セミジョイン法…分散時の結合処理で効率化。

●ACID特性
原子性…トランザクションが実行されるかされないかのどちらか。
一貫性…トランザクションの前後でデータの不一致は起きない。
独立性…データを隠蔽して余計な手出しはさせない。
耐久性…障害などでもデータの損失は起きない

●÷
22年午前Ⅱ問12。R÷SはRのうちSの組で抽出される行のSの組と関係しない列が同じものが残るw

●外部キー
参照する場合は、参照先が存在する必要。参照される場合は削除や更新の制限がある。

●代理キー
候補キー=主キーU代理キー
主キーA代理キー=空

●2相ロック方式
分散データベース環境にて資源をすべてロック→ロックを解除する方法。

●スループット
大きいほうが良い。

属性が全て単一値をとる。
☆午後2では主キー、外部キーを忘れずに。
☆周りの関係をよく見て(矢印なのか、線なのか)。

2013年4月3日水曜日

Winmerge - リポジトリ取得

WinMergeの機能で追加したいものを思いついたので、探ってみた。

現在公開されてるのはWinMerge2だが、どうもWinMerge3が出るようだ。
→公式
…でも今日は落ちてるみたい。

WinMergeのリポジトリは→ここ
Githubにあるのかと思ったらBitBucketっていうGitとMercurial(Gitに似た分散バージョン管理)
が使える所に挙げられてる。

Githubくらいは私でも知っていたがBitBucket走りませんでしたね。

BitBucketは無料ユーザーでもプライベートリポジトリが持てるので、
こっちの方が使えそうな気がする。
Githubからリポジトリを持ってくるのもWebUIで可能だし。

で、BitBucketからWinMerge3のリポジトリ取得でつまずいた…。
EclipseのEGitを使ってたんですが、これはどうもMercurialには使えないようで。
WinMerge3がMercurialで管理されててGitへの変換もできない。
なのでEclipseにMercurialEclipse(インストール用URI)をインストールをして無事リポジトリの取得が出来ましたとさ。


WinMergeはもともとWindowsのアプリだったんだけど、
3からはマルチプラットフォームになります!

gccでコンパイルできるのかもしれないけど環境無いので諦めて、
MicrosoftのVisualStudioExpress(ここ)でコンパイルできないか試み中…

あれ無理っぽい



2013/04/07 追記
ソース見てみるとやたら薄い…これって動く以前の問題じゃん。
そういえばどこかのサイトで白画面が一枚でておしまいみたいなこと書いてたな。

2013年3月25日月曜日

多読→理解力向上→頭いいスパイラル

齋藤孝の速読塾 これで頭がグングンよくなる! (ちくま文庫)

●本をたくさん買ってきてそのあと喫茶店で読む。 →頭の良い友人もやっていた、私はカフェに本を持ち込んでも1冊も読み終わらないので不思議に思ってたんだが、 効率のいい人はやっているのねーと。 几帳面な性格なので一言一句読んじゃうタイプ。 逆に要約だけしようとすると1行2行でどんな本も言い表せる気がしてた。 最近はそれに至る理由や背景を付け加えるってことが出来てきたので少しはましになってきたけど、 周りにいるある本について語れる人ってのはもっとすべての事を巻き込んで意見を述べれてますよねーと思う。

●自分がゲットした概念を間違ってもイイから使ってみる。 →これはスノーボードの経験がでかい。 ボードで得られた観点を他の全ての中で使っている。 実力に対してどの程度のアプローチが可能なのか、その時のリスクがどの程度なのか、 それをすることによって今までの自分よりどの程度成長したことをしているのか。 業界の中じゃただのアマチュアでたいしたことをしてないけど、 エクストリームスポーツにかかわった人でないと( ゚д゚)ポカーン とされますね。

●本を一冊読んだら経験と絡めてA4一枚にまとめる。 →これ

●本は背表紙が見えている状態が重要。 →確かに今の状況だと目に入らなくてなかなか「読もう!」って思った時にしか昔の本を読んでいない。 必須なジャンルは少しずつ蓄えられてきたから、同じ本を何度も自然と読み返す環境がほしいね。

●自分でも抽象語を使ってみる。 →ロハスな生活とは何ぞ。

●英語の本は音読を1時間続ける。 →英語の勉強のためにOSSの翻訳始めたけど、わざわざ訳さなくても翻訳サイトに投げて細かいところは自分で補えばいいじゃん。 て感じなので、もっとたくさんの英文を読みましょうね。

2011年11月17日木曜日

GAE(Java)でBASIC認証

参考1をそのままコピー。
セッションが有効になっておらずエラーが出たので、
「appengine-web.xml」の<version>の次に
<sessions-enabled>true</sessions-enabled>を追加。

ローカルで成功するも、デプロイ後にUserInfoがシリアライズ不可と言われたので、
変更前:public class UserInfo{

変更後:public class UserInfo implements Serializable{
としたら、動きました。