新しくブログを開設しました。

Webエンジニアがデザイナーになってみる。


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

新しくブログを開設しました。

Webエンジニアがデザイナーになってみる。


・テストファースト
テストファーストとはコードを書く前に、まずテスト(JUnit等)を先に行う方法である。
昔は開発を行い、成果物が完成してからそれの整合性安全性を確認するためのテストを行ってきた。
現在でもテストは後に行う機関も少なくないはずだ。
なぜならば、成果物がないのにテストを作成するなんて通常の開発者にはなかなか受け入れ難いからだ。

しかし、通常のテストはバグを見つけるためにあるが、これは書いたコードが仕様どおりに動くかどうかを確認するためにある。
それでも、この斬新なアイデアに大きな衝撃をうけ、短期開発における有効性も認められ、JUnitなどのテストツールが普及した今では、開発者に広く受け入れられるようになった。

JUnitを作成するのはまったく問題ない。
単なるテストを作成して実施するよりも機械的にテストコードを作成して、修正時に既存機能が正常に動作するか調べるのにとても便利だからだ。

しかし、気になるのは今回のタイトルにある

「テストファースト」

テストファーストは世間的に認められているのだがどこにメリットがあるんだろうか。

まずテストファーストのデメリットについてまとめてみた。

■計画性のないテストである場合、品質の低下につながる
入念な計画によるテストケースの作成を行っていない場合、品質が低下してしまう。
計画を立てずにテストケースを作成した場合、多くは簡単なテストケースを先に作成してしまう。
大事なのはリスクの高いものから順にテストを行うことである(これをリスク・ベース・テストという)


■単体テストが行われずにバグが残る。
従来はコーディングの後にテストケースの作成をしていたため、問題がなかった。
しかし、テストファーストの場合コーディングはテストケースを全てバスしたものを作成している。
そのため、実際にはバグを見つけるためのテストが失われてしまう。
テストファーストの考えは、仕様にそって作成される。用は確認のためのテストである。
つまり、テストファーストでは実施できるテストが限られてしまい高品質とは言えないものになる可能性がある。


■無駄なテストにかかる工数
テストファーストでは、テストケースをコードで書くため工数が増えてしまう。
また、完全なテストケースを作成するために大量のテストを作成する開発者も少なくない。
テストケースの作成が一番初めの工程となるためどの程度の規模のテストを作成すればいいのか判断しにくい。
また、はじめは先ほど記述したように簡単なケースから先に作成してしまいやすいので工数だけかかり、効果は薄い。


次にテストファーストのメリットについて
■影響箇所の把握
このコードを修正した場合、どこに影響がでるのかを理解しやすい。
そのため、以前よりも安心してコードの修正に取り組むことができるのだ。
また、テストコードがあることで問題点があった場合以前のようにデバッグを動かして何度も確認しなくてもテストコードを動かすだけで発見することができる。

■無駄なコードの削減
以前の方法ではこのクラスにはこの機能を付加したほうが、品質が良いだろう、これも・・・などと考えがつですが、テストファーストの場合は必要なメソッドしか実装しません。
なので無駄なコードを削減でき、仕様変更時も問題を起こしにくくなります。


とテストファーストのメリットやデメリットをまとめてみた。
しかし、やはりテストをはじめに行う利点があまりみつからない。
おそらく、開発者としてまだまだ未熟すぎることが原因であると思います。
なので、次回からもう少し深くテストファーストについて調査したいと思います。

テーマ:JUnit - ジャンル:コンピュータ

新しくブログを開設しました。

Webエンジニアがデザイナーになってみる。


Java開発者には基本的名ことかもしれませんが、一度まとめたいと思います。

jarファイルとは、簡単にあらわすとクラスファイルの集合体です。
複数のクラスから構成されるJavaプログラムをコンパイルすると、複数のclassファイルが作成されます。
jar コマンドを用いてこれらを *.jar形式のファイルにまとめることができます。


■JarTest.java



このファイルをコンパイルすると以下のファイルが作成されます。




次にjarコマンドでjarファイルに圧縮します。



次にJarTest.jarを実行します。
しかし以下のエラーが出力されてしまいます。




jarの中身を見るには「jar tvf jarファイル名」を実行します。



Jarファイルを解凍すると、META-INF\MANIFEST.MF ファイルに次の1行を加えます・



再び、jarファイルに圧縮します。


以上により、jarの実行が可能となります。

続きを読む

テーマ:Java - ジャンル:コンピュータ

新しくブログを開設しました。

Webエンジニアがデザイナーになってみる。


仕事でJavaを開発していて、様々なタイプの型変換がわからなく調べたことがあります。
下記に載せていませんがたとえばBLOB型の型変換など、あまり使用する機会はありませんがいざ変換する際に、わからない場合が多いです。
私の場合はJUnitを使用して様々な型をチェックする機会がありましたが、その際に普段使用する機会が少ない、全くないデータ型の型変換をしなければいけない時がありました。
未熟な自分は何時間もかけてようやくassertEquals()の通る変換を実現することができました。
あまり使用する機会はないけれども、いざ使用する際に困らないように少しずつまとめていきたいと思います。


Javaの型変換一覧

■Date型からString型へ変換


■String型からDate型へ変換




■boolean型からBoolean型に変換


■BigDecimalをBigInteger型に変換


■BigDecimalをdouble型に変換


■BigDecimalをfloat型に変換


■BigDecimal型をint型に変換


■BigDecimal型をlong型に変換


■char[]型をString型に変換


■double型をBigDecimal型に変換


■double型をString型に変換


■int型をbyte型に変換


■int型をInteger型に変換


■int型をString型に変換


■Integer型をdouble型に変換


■Integer型をfloat型に変換


■Integer型をint型に変換


■Integer型をlong型に変換


■long型をDate型に変換


■long型をLong型に変換


■long型をString型に変換


■String型をBigDecimal型に変換


■String型をBoolean型に変換


■String型をchar[]型に変換


■String型をint型に変換5692ed


■String型をIntege型rに変換
■String型をlong型に変換


■String型をStringBuffer型に変換


■StringBuffer型をString型に変換


テーマ:プログラミング - ジャンル:コンピュータ

新しくブログを開設しました。

Webエンジニアがデザイナーになってみる。


Javaの講座をはじめました

http://webyoutility.web.fc2.com/java/javaBase.html

Javaの基礎~応用・実践まで優しくまとめてあります。

現在はまだ基礎の部分しか作成しておりません。



Javaとは・・・
Sun Microsystems社が開発したプログラミング言語。

Javaのコンパイルの方法・・・
javac・・・

オブジェクト指向プログラミング(OOP)とはなに?

Javaは「一度書けば、どこでも動く」と呼ばれるのはなぜか?

Javaプラットフォーム
J2EE(Java 2 Platform, Enterprise Edition)
J2SE(Java 2 Platform, Standard Edition)
J2ME(Java 2 Platform, Micro Edition)
について

カプセル化とは?

継承とは?

ポリモーフィズム(多態性)とは?

クラスとメンバとは?

アクセス修飾子とは?


など多岐にわたって紹介していますので、どうぞご覧ください。

http://webyoutility.web.fc2.com/java/javaBase.html

テーマ:プログラミング - ジャンル:コンピュータ

新しくブログを開設しました。

Webエンジニアがデザイナーになってみる。


Oracle JDBCドライバでPreparedStatementインターフェースのsetString()メソッドを使用した場合、使用しているキャラクタ・セットによってより厳しいサイズ制限が課せられる

ということだが
対処方を探してみた。

正直Javaに詳しくないので難しい・・・

「PreparedStatementインターフェースのsetString()メソッドを使用した場合」と言っていたが、setStringを使用しなければバインドできるというわけではない。

用はsetStringはString型で渡しているからINSERTすることができないんだと思う。

そこでsetCharacterStream()を使用すればバインドできるという話があったのだ。
これはString型でなくLONGVARCHAR型でデータを送る事ができるからだ。
こちらでおくれば無事INSERTできるという。

しかし、ここで問題点が、先日も話したが
setCharacterStream()で送ればINSERTできるの
しかし1つのテーブルにつきLONG型は1つしか存在してはいけないらしく
2つ以上大量データの領域があるカラムが存在すると
正常にバインドされないという。

→ただし情報が古いようなので、現在では大丈夫かも!?

なので大量データカラムが2つ以上あるテーブルでは気をつけて実装しましょう。






と、まあここまでは先日の復習。

実は、今回実装している部分ではsetCharacterStream()が使用できない実装方法で
これが使用できないことがわかりました。
しかしStringで渡しているのでこのままではバインドできない


■対処法1

そこでもうひとつバインド関数で用意されていたのを発見した
それは引数にInputStreamが指定されており
これはLONGVARBINARY型でデータを送るため、解決できるのではないかと思った。

InputStreamにはバイト型変数を指定しなければならないため


String st = 'じゃばってめんどくせっここに2001バイト以上4000バイト以内のデータをいれるんだよ';
InputStream is = st.getBytes();

こんな感じ?(ちょっと違うかもねw)

これをバインド関数の引数に渡して
データをバインドしてみた。

結果


4000バイトまでINSERTできました!!


しかーし


バイトでINSERTされましたw


やっぱりバイナリでVARCHARに送るとそのままバイトでINSERTされるみたいです。


しょぼーん。


テーマ:プログラミング - ジャンル:コンピュータ

前のページ 次のページ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。