ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

引数の値を変えただけのメソッド単位のテストでは、網羅しきれないときのスタブについて

2005-05-24 15:26:37 | 開発ネタ
 トラックバックしていただいたブログをみて、思い出しました!!
 (トラックバックしていただき、ありがとうございますです)
 そうです。そのブログに書かれているとおり、ドライバ作って、そこからメソッドを引数を変えて呼び出すだけでは、できないテストが、あります。


1.メソッドの内部から、他のメソッドを呼び出し、その呼び出しメソッドの帰り値(または引数)を参照して、他のプログラムを起動する場合。引数だけでは制御できないというか、引数がまったくないときがある。

2.DBのデッドロック等、なんらかの例外が発生したときの異常系


 とくに、想定外の例外が発生したときの異常系っていうのが、思わぬバグがおきたときに大事なので、テストする必要があります。

 で、こういうののテストのためには、呼び出される側のスタブを作る必要があるのですが、そのスタブを作るときに、問題があるんです。




たとえば、このクラスをテストするとしますよね。
(yd.readDataが、上記の呼び出される側=スタブが必要)

import java.sql.SQLException;
import java.util.*;

public class ChkCtl1
 {
	public int doTheJob()
	{
		HashMap retHash = new HashMap();
		Job job = new Job();
		
		try
		{
		//	このYobidashiの結果で、処理内容がきまるとき
		//	YobidashiをここでNewして
			Yobidashi yd = new Yobidashi();

			switch(yd.readData(retHash))
			{	//	そのとってきた値を元に、
				//	モデルのクラスをディスパッチしてる場合
			case	1:
				System.out.println("1" + retHash);
				return job.Job1(retHash);
				
			case	2:
				System.out.println("2" + retHash);
				return job.Job2(retHash);
				
			case	3:
				System.out.println("3" + retHash);
				return job.Job3(retHash);
			
			default:
				return -1;
			}		
		}
		//	SQLExceptionがおきることは、想定している
		catch(SQLException e)
		{
			System.out.println("SQLException");
			return -99;
		}
		//	想定外のエラー対応
		catch(Exception e)
		{
			System.out.println(e);
			return -999;
		}
	}
}



さあ、テストするドライバを作りましょう!
っていうことで、
public class TestDriver {
	public static void main(String[] args) {
		ChkCtl1 chk = new ChkCtl1();

		System.out.println("start");
		chk.doTheJob();	
		System.out.println("end");
	}
}


っていうテストドライバをつくっちゃうと、

yobidashiクラスのreadDataメソッドは、
return 1;
として、まず、テストを行い、それがOKだったら、今度は
return 2;
に修正して、それもOKだったら
return 3;
に修正して、それもOKだったら
Exceptionをスローするように修正して。。。
と、大変なのよ!
(今は、3個だから、ぜんぜん大変じゃないけど、ウィリアムのいたずらの作るプログラムなんかだと、このケースが200個以上とかあるものもあって、大変なのよ!)

だから、テストドライバからスタブに、どの値をセットするかを指示しないといけない。。
このテストしようとしているChkCtl1クラスを修正しないで!!
そんなとき、どうするか。




ウィリアムのいたずらの場合、こういう、テストケースの値を持っているクラスを用意してます。

staticにしておくことがみそです!

public class ImaDoko {
	/**	現在のテスト番号	*/
	public static	int	testNo	=	0;

/**
 * セッターだよ。ついでに、セットされたテスト番号も表示
 */
	public static void setTestNo(int no)
	{
		testNo	=	no;
		System.out.println("**********  test NO = " + testNo + "  ***********");
		
	}
	
/**
 * ゲッターだよ。
 */
	public static int getTestNo()
	{
		return testNo;
	}
}



で、ドライバ側は、テスト番号を順番に切り替えて、テストしていくわけ
こんなかんじ
public class TestDriver {

	public static void main(String[] args) {
		ChkCtl1 chk = new ChkCtl1();

		System.out.println("start");
		ImaDoko.setTestNo(1);
		chk.doTheJob();	

		ImaDoko.setTestNo(2);
		chk.doTheJob();	

		ImaDoko.setTestNo(3);
		chk.doTheJob();	

		ImaDoko.setTestNo(4);
		chk.doTheJob();	

		ImaDoko.setTestNo(5);
		chk.doTheJob();	

		System.out.println("End");
	}
}



StaticのtestNoの値を変えているので、他のところから呼び出されても、ちゃんと現在のセットされた値を返すわけだ(うーん、うまく表現できん)

で、スタブ側は、テスト番号に応じて、値を返したり、値をセットしたり、Exceptionをスローする。
/**
 * スタブだよ
 */
public class Yobidashi {
	
	public int readData(HashMap ret) throws SQLException
	{
		
		switch(ImaDoko.getTestNo())
		{
		case	1:
			ret.clear();
			ret.put("komoku1","1");
			ret.put("komoku2","2");
			ret.put("komoku3","3");
			return 1;
			
		case	2:
			ret.clear();
			ret.put("komoku1","12");
			ret.put("komoku2","22");
			ret.put("komoku3","32");
			return 2;

		case	3:
			ret.clear();
			ret.put("komoku1","31");
			ret.put("komoku2","32");
			ret.put("komoku3","33");
			return 3;

		case	4:
			SQLException se = new SQLException();
			throw se;

		case	5:
			RuntimeException e = new RuntimeException();
			throw e;
		}	
		return 99;
	}
}


とくに、想定外のエラーをとるためにExceptionで受け取っている場合っていうのがありますよね。その場合、RuntimeExceptionなら、throwsのところに書いてなくても、スローできるという特性を、case 5:に使っています。




こうすると、テストドライバから流しただけで、ログ(今回はSystem.out.printlnだけど)がとれて、こんな形で、きれいにエビデンスがとれます。


start
********** test NO = 1 ***********
1{komoku3=3, komoku1=1, komoku2=2}
********** test NO = 2 ***********
2{komoku3=32, komoku1=12, komoku2=22}
********** test NO = 3 ***********
3{komoku3=33, komoku1=31, komoku2=32}
********** test NO = 4 ***********
SQLException
********** test NO = 5 ***********
java.lang.RuntimeException
End


で、テスト仕様書に書く項目ですが、
  あるメソッド内部で呼び出して、
  その結果をもとに処理が変化する
といった今回のような場合では、変化するケースぶん、テストをつくることになります。

 で、テストのしかたは、

・テスト番号を持っているクラス(例だとImaDoko)を作成し、
・ドライバからは、そのテスト番号を変えていく。
・スタブでは、そのテスト番号にあった、帰り値その他もろもろを返す。
・テスト仕様書には、そのテスト番号のところに、スタブでどういう値を返すから、結果、なになにが、動くはず!みたいに書く。
・もし、なんだったら、
   テスト仕様書のフリーフォーマットで書く欄に表を作成
   その表に、
      テスト番号、
      スタブで返す値、
      その他、スタブで設定する値
      起動するメソッド(など期待する処理)
 を書いておくと、自動化できるし、そもそも、テスト仕様書が見やすい&書きやすい。

てなかんじでやってます。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ExcelやWordをPERLで操作する方法のメモ

2005-05-23 16:45:15 | JavaとWeb
 前に、ExcelをJavaから操作できるということで、プログラムサンプルを示しました。
 で、ここまで出来るんなら、部隊に流して大丈夫かなと思い、部隊のプロジェクトマネージャーやってる人に、紹介しました(意味通じなかったら、「えらい人に紹介した」とおもっていただければ、間違いない)

 そしたら、そのマネージャーの人が、「あ、やっぱJAVAでも、あるんだ!いままで、Perlでは、あるらしいって聞いてたけど。。。」
 といってました。

 Perlから、Excelが、操作できる。。。

 そっちも、興味しんしん。

 ということで、今回は、PerlからExcelの操作方法を調べたメモ。




PerlからExcelを操作するには、ちょっと調べたら、2通りの方法がありました。

1.Win32::OLEを使う
方法については、これらのサイトに説明がありました。
http://prettycat.s13.xrea.com/excel/excel.html
http://www.mars.dti.ne.jp/~jun-krb/OfficeWithPerl/index-excel.html

2.Spreadsheet::WriteExcel、Spreadsheet::ParseExcelを使う
方法については、これらのサイトに説明がありました。
http://www.drk7.jp/MT/archives/000565.html




PerlからWordについては、ここに使用例があります。
Microsoft Wordの文書を印刷するにはどうすればよいのでしょうか?
http://www.att.or.jp/perl/faq/perlwin32faq/perlwin32faq12j.html#print_word


ただし、「APACHE上でうまくいかなくなった」と、はてなに質問を出している人もいる




とはいえ、Javaで操作できるなら、結局、Javaでやると思うけど

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

コントローラーとモデルのテスト・プログラムの自動生成の可否とドキュメントの関係

2005-05-23 16:07:53 | 開発ネタ

(みかままさんのところから来た人へ、たぶん、ここの記事でなく、ここのことだと思います)。

 「テストとプログラム、どこが自動生成できるかどうかについて説明する」と、以前のブログで書いた気がします。でも、書いてませんよね。
 ってことで、それを書いておきます。

まず、今までの話から、MVCモデルで、CのコントローラーとMのモデルがあるように、資源アクセス(RDBとか)でも、コントローラー(CBS,セッションBeanなど)とモデル部分(CBM,エンティティBeanなど)があるということは、説明したということにします。

 なので、以下、コントローラーとモデル、それぞれ別々に、テストやプログラムの自動化とその方法について、ウィリアムのいたずらの独断と偏見を書きます。




■■ モデル部分について

・プログラムの自動化・・できない
 ここの部分の内容は、Excelの仕様書でくる場合、フリーフォーマットで、書いてきます。そんなもんは、自動的に作れません。

・プログラムの中身を空っぽにして、自動化・・可能ではある
 では、プログラムの中身は空っぽにして、クラスファイルを自動生成し、その中に、メソッド名、メソッドの引数、JavaDoc用コメントを(自動的に)作成することはできるかというと、それは可能。

 Excelの仕様書のドキュメントのどこかに、たいてい、クラス名と、そのクラスに属するメソッドと引数が書いてある。それをみて、作ればいい。

 ただし、それをやるかどうかは別(やってもらっても、あんまり、うれしくないかも)

・ドライバの自動生成-支援ツールなら自動化可能
 まず、上記のExcelの仕様書のドキュメント「だけ」では、自動的にドライバ作成はできない。理由は、呼び出すときの引数に、何の値を設定していいか、わからないから。

 ただし、逆に言えば、テスト実行時の引数一覧みたいのをExcelで作れば、それと、Excelのプログラム仕様書をもとに、ドライバの自動生成(JunitのTest部分の自動生成とかも含む)は可能。

 そして、このテスト実行時の引数一覧に相当するものが、「コントローラー」のところに出てくる、表でもある。なので、その表を作れば、自動生成可能の可能性も高い。

・モジュール呼び出しテスト仕様書の自動生成-支援ツールなら自動化可能
 上記の、「テスト実行時の引数一覧みたいの」があれば、仕様書は、作成可能。
 一般に、ドライバが自動生成可能な場合、呼び出しテスト仕様書も作成可能。
 なぜなら、
 ドライバが、自動生成可能=呼び出す引数&呼び出す関数を自動生成できる
 →テスト内容:(呼び出す引数)によって、(呼び出す関数)を呼び出し、
         適正な値が帰ってくるか確認する。
  エビデンス:ログ
 というふうに、テスト仕様書がつくれるので


・モジュール内部の単体テスト仕様書の自動生成-支援ツールなら自動化可能

 Excelファイルに、

 チェック大項目、条件、ログのチェック変数

と書き、チェック大項目は、フリーフォーマットで書いた、プログラム仕様書の大項目(1,2,3、・・・)、条件に、チェックするときの条件(引数の値など)、ログのチェック変数に、チェックしたい変数を記述する(2つ以上の変数でも可)とすると、そこから、自動的に単体テスト仕様っぽいものを作るのは可能。




■■ コントロール部分について

・プログラムの自動化・・場合によって可能
 ここの部分の内容は、Excelの仕様書でくる場合、フリーフォーマットなのだが、ふつう、表で書く。
ステータス1ステータス2ステータス3起動メソッド
A1YESメソッド1
A1NOメソッド2
A2YESメソッド21
A2NOメソッド22
B1YESメソッド211
B1NOメソッド212
B2YESメソッド221
B2NOメソッド222


みたいな表の場合。

 もちろん、このステータス1のところに条件(A=1だったらとか)が来て、値がYES,NOだけでも、かまわない。そうすれば、ディシジョンテーブルになる。
 また、ステータス1のみ、つまり、あるステータスなら、何を動かすというのでもかまわない。

 この場合、このテーブルと、雛形コントローラーから、自動化が可能。
 どのように自動化するかについては、いくつかのパターンがあり、長くなるので、今回は省略。別な機会に書きます。

・プログラムの中身を空っぽにして、自動化・・可能ではある
 プログラムの中身は空っぽにして、クラスファイルを自動生成し、その中に、メソッド名、メソッドの引数、JavaDoc用コメントを(自動的に)作成することもできるけど、中身が自動化できる場合、普通一緒にやりますよね。

・ドライバの自動生成-可能なことが多いが。。
 Excelの仕様書のドキュメントで、呼び出し方法がわかることが多い。コントローラーの引数は、フレームワークのドキュメントに書いてあることも多い。
 なので、そこから自動化できることも多い。

 ある値をセットした場合、なにを起動しているかを見る場合は、上記の表を元に作成する。

・モジュール呼び出しテスト仕様書の自動生成-可能なことが多い
 モジュールのところで説明したとおり。
 ドライバが出来るなら、できる。


・モジュール内部の単体テスト仕様書の自動生成-自動化可能な可能性大

 上記の表から、ステータス1が何、ステータス2が何、ステータス3が何のとき、何々が起動されることを確認する。エビデンス=ログとして、生成する。




 こんな感じだと思います。ちなみに、VIEWについて

・プログラムの内部の作成に関しては、
  HTMLのエディタを使うとか、ツールが出来ている。

・テスト仕様の支援ツールに関しては
  今、考え中。近々ブログで発表予定

です。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

コントローラーとモデルのテスト方法って、多分、違うと思う。

2005-05-22 23:30:18 | 開発ネタ
 前のブログで、MVCモデルも、DBアクセスなんかでも、基本的には、コントロール部分と、実際の処理部分にわかれ、MVCの場合、Vがクライアント側、CとMがサーバー側で、Cがサーバー側コントローラー、Mがサーバー側処理部分といいました。

 で、テストの問題なのですが、コントローラーとモデルの部分のテストは違うと思うのです。
 なぜなら、処理内容が違うからです。




 じゃあ、コントローラーとモデルの処理内容は、どんなのかというと、こんなかんじ

■■ コントローラー
・データのチェック(あれば)
・モデル部分の呼び出し
 →条件によって呼び出し内容は変わることあり

■■ モデル部分
・データチェック
メインの処理に対する
 ・事前処理(前処理)
 ・主処理
  →基本的なデータ操作と、下位の資源呼び出し
 ・事後処理(後処理)





 つまり、データチェック以外の部分は、テストも違ってくるんじゃあ、ないでしょうか?

■■ コントローラーの場合のテスト

 結局、やっていることは、下位のモデル部分の呼び出しですから(もし、コントローラーで、これ以外の処理をやっているようだったら、それは、本当に、コントローラーなの??)、チェックも、値を入れて、その値にしたがって、モデルのメソッドが呼び出されているかを確認することになります。

 ログは、モデルの呼び出し箇所に、受け取った値と、モデルの呼び出しメソッド名を入れて、
 テストは、値によって、正しい呼び出しメソッドが呼び出されているかのチェック
  →境界値チェックとか
 エビデンスをとる場合は、その呼び出されたログ

 


■■ モデルの場合
 これを、モジュールからの呼び出ししか行わないで、テスト終了としてしまうと、モジュール内部で、やっている処理が本当に正しいかどうかわかんないことになります(たとえば、DBの更新処理で、更新をかけるテーブルに対して、正しくいっせいにロックしているかどうかなど)。

 なので、JUNITなどによる、ドライバからの呼び出しと、返り値チェックのほかに
  →この呼び出し引数に対する、境界値チェックとかも、もちろんある

 ログを、データチェック、前処理、主処理、下位資源呼び出し部分、後処理の主要の所にいれ、
 →場合によっては、IF文の分岐のところも
 ログの表示内容は、その処理が終わったときに、その処理内で更新された値などを表示させ
 テストは、そのログが正しく取られているかどうかを確認する
 →ロックなどの場合は、ロックされている状態で、ほかのプログラムがアクセスをかけたとき、ログがどうなるか
  (待ちになる、デッドロックするなど)を予想し、確認
 エビデンスは、ログになる
 →上記、ログを入れたところ1箇所ごとに対し、ログが正しく書き出されているかで1項目とする

となります。

 なので、コントローラーの場合は、どういう値のとき、何が呼び出されるか(表になってるとわかりやすい)、
モデルの部分の場合は、前処理、主処理、下位資源呼び出し部分、後処理など、処理のまとまりが(1,2,3などのように箇条書きで書いてあると便利)プログラム設計書に書いてあるとわかりやすいです。




 JavaDocの場合は、そのプログラムでどういう処理をするかは書いてありますが、上記のような、値と呼び出しメソッドの組み合わせ表や、処理手順と、その順番は書いてないことが多いのではないでしょうか?
 なので、こまってしまいます。

 でも、プログラムの仕様書を書く場合、普通、この内容をかく、フリーフォーマットの紙がついてきます。
 そこで、わかっているSEなら、その紙に、上記の内容を書いてあると思います。

 でも、わかってないSEやプロマネの場合は。。。問題です。

 この続きは、また、気が向いたときにでも。。。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

O/Rマッピングも含めた、オブジェクト指向とのミスマッチの考え方

2005-05-22 09:18:14 | 開発ネタ
 昨日、インピーダンスミスマッチだけでなく、オブジェクト指向とのミスマッチは、いろんな資源と起こりえるのでないか?そして、その資源すべてを包括する考え方(もちろんO/Rマッピング含む)で、テスト仕様などを考えているというふうに書きました。
 昨日挙げなかった例で、付け足すと、実際での開発は、プロパティファイルから読み込んだ結果と、RDBから読み込んだ結果を合わせて、モデルとなるプログラムが欲しいなんていうこともあるわけです。そういうのでも、矛盾のない考え方が必要です。




 で、その考え方なのですが、業務アプリから、RDBやファイル、帳票、さまざまな資源にアクセスするわけなのですが、業務アプリから見た場合、それらの資源の違いを意識することなく、業務アプリに都合のいい格好で、取得したいわけです(この「業務アプリに都合のいい格好」っていうのが、(ちょっと古くなりますが)ひがやすをさんのブログに出てくる結果セット中心ということなのかなあと考えます)

 さて、「業務アプリに都合のいい格好」にするには、どうしたらよいか。
 実際の資源は、そういう形になっていないので、
   ・それぞれの資源の部分の操作
   ・それら複数の資源を呼び出し、コントロールし、矛盾のない格好で業務アプリにかえす
 という2つの部分があると考えます。
 普通のEJBだと、上記がエンティティbean、下記がセッションBeanに相当するんでしょうか?
 富士通Interstageだと、上記がCBM、下記がCBSに相当するということになります。。




 で、おやおやおやです。

 WEBシステムでみると、クライアント側がVIEWで、Viewにとって都合のいい格好にするため、サーバー側が、コントロールとモデル(この場合モデル=資源の部分、上記で、コントロールは下記」
 つまり、MVCとは、サーバーとクライアント間の上記の構造で、DBなどの資源アクセスは、MVCからのモデル構造で呼ばれる上記の構造になっております。つまり、こんなかんじ。
 


 つーことで、この構造は階層構造になっていて、最上位の構造が、ユーザーインターフェースとなるView、一番下が、資源になります。なので、Webサービスを使うと、さらに、サービス提供側でも、このコントローラーとモデルの考え方が続き、さらなる階層構造を形成することになります。
 VIEWにおいてだけ、コントローラーがありません。本当にないのかというと、実は、コントローラーに相当する部分はあります。メニューです。でも、世間一般では、それを分けていないので、こう書いています。




 つーことで、気が向いたとき(次回とは限らない、もっと先かも)。この考えと、プログラム、テストの自動化、およびテストの考え方について書きます。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

O/Rマッピングに一部批判的な理由と、昨日のテスト仕様書の作成思想

2005-05-21 20:33:14 | 開発ネタ
 O/Rマッピング批判を書くといって、書いていなかった気がするので今日は、その話。
 O/Rマッピングの概念的なことに関して、ウィリアムのいたずらは批判する気はない。有効性についても、否定する気はさらさらない。

 ただ、O/Rマッピングを素直に心酔してしまい、O/Rマッピングツールを導入しないといけないと考えると、昨日のテスト仕様書を作る部分がまったく理解できなくなってしまう。

 つまり、「オブジェクト指向とのミスマッチの解決」=O/Rマッピング導入と考えられると、
 少々自動化の考え方で、問題があることが起こってしまうと思う。
 
 今回のブログは、その問題が起こる開発内容について、述べたいと思います。
 (解決方法やテスト仕様書について、つまり昨日のやばい話の続きで、なぜ、テスト仕様書が
自動化できるのか、どこの部分が自動化でき、それは、どういう手段でできるかは、またこんど)

 したがって、この問題は、ウィリアムのいたずらが、テスト仕様の自動化の際に必要になる考えをまとめた、独断と偏見です(便利な思想)。

 なので、真剣に反論しようとしないでね(^^;)




 O/Rマッピングは、RDBを利用する場合、かなり有効な手段であることはみとめます。
 ただし問題は、O/Rマッピングを行う理由が、「インピーダンスミスマッチの解消」であるならば、そのようなミスマッチは、RDBだけでは、ないんじゃないかい?

 シーケンシャルファイルだって、XMLで記述しないで、RDBのテーブルの中に入っているようなレコードみたいな形で保存すれば、ミスマッチだし、帳票も、オブジェクト指向に基づいた。。。というより、入れば入れちゃえ!っていう感じで作るからをミスマッチを起こす
 オブジェクト指向が出てくる前に出てきた通信プロトコルだって、オブジェクト指向を意識していないからミスマッチが起きて当然だし、プログラムからメールを出すときだって、メールはXML形式というわけではないので、ミスマッチを起こしてるかも。。

 つまり、オブジェクト指向とのミスマッチを起こしているのはRDBだけでなく、結構いろんなものが起こしているんだけど、その中で、RDBが有名だから、「O/Rマッピングツール」が出てきているんだと思う。

 なので、RDB,メール、帳票など、複数の物を使うとき、RDBのミスマッチ解消はO/Rマッピングツール、メールは、なんとかツール、帳票は何とかツールなどと個別にやっていたのでは、それらツールに対して個々にテスト基準を設けなければいけない。

 なんか、オブジェクト指向と、そのほかの資源に対するミスマッチ解消のための統一フレームワークがあって、そのフレームワークに基づいたテストがあれば、今度新しい、オブジェクト指向とミスマッチを起こす資源が出てきても、簡単なのに。。。
(そのフレームワークにO/Rマッピングも、ほかのツールも入る)

 と思いませんか?

 そんなフレームワークに基づいて、自動化と、テスト基準を考えるわけです。

 富士通な人へ:
 ていうことで、次の話はCBMとCBSだ。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

やばいかなあ。。Excel上でのプログラムテスト仕様書、こう作ってる

2005-05-20 17:48:52 | 開発ネタ
m_pixyさんのブログで、もうひとつ。「ほしい本」について。

ブログって、どこまで書いていいもんなんでしょうね。

ウィリアムのいたずらがかかわってきた開発話で、書いてよさそうなところまで。




まず、「大企業が好むExcelでの日本語プログラム設計書」に関して、

 昔はそういう本があったのですが、最近は、みないですね。

 もっと、夢のあるおはなし(XPとか、アジャイルとか)のほうが売れるからだと思います。

 っていうか、「大企業が好むExcelでの日本語プログラム設計書」って、いくつかのプロジェクトから、ドキュメントもらえばわかるし。。

 さらに、大手さん(F社さん,N社さん,I社さんとか)ごとに、書き方違うし。。。

 さらに、そんなことやっている人たちは、ウィリアムのいたずらのように、有名人ではないので、本書いても売れないし。。

 だから、本は、「ない」と思います。




で、m_pixyさんのブログにもどって、

「大企業が好むExcelでの日本語プログラム設計書」
→お、"Excelの"!仕様書なんですね。。。
 つーことは。。。たぶん、入っているドキュメントの種類は。。

Excel上でのプログラムテスト仕様書を作成するための方法

→モジュールの結合テストは、自動生成している部分と、
 まじめに(?)書いている部分

 モジュールの結合テストは、プログラム設計書に書かれている値
 (その境界値)と、それ以外に調べたい値(これは手作業で入れることが多いと思う)
 から、テスト仕様書を、自動的に発生させる

 その後(そこから)、呼び出しドライバ、場合によってはテストデータを自動生成している。くわしいことは、かけない(実は、プログラム自体も自動生成させてたり。。)

 手作業でやっていたのでは、気が狂う(病気になる)

 「ドライバや、スタブは作っていられない」という会社は、多分、このノウハウを知らない可能性大。実は、仕様書から自動的に作れるように、設計仕様書を書いている。そういう構造になっている(その自動化をするのがウィリアムのいたずらの仕事だ)。

 実は、この辺に絡んで、JavaDocだけだと、困る話題がある。

 それについて、詳しくかけないが、その問題が、開発上、大量のドキュメントを生み出している。

 まじめに書く部分は、画面に関しての項目値チェック。
 これは、型に、はまっている。

 このへんのは、サンプルをもらうとわかる。




・単体に関して、よく、「流しでやります」といっているのは、
「エビデンスにログをとっているので、そこのログの値をみれば、通過率とか、わかります。」の意味で使っている人がいる(ウィリアムのいたずらなど)。

 そのエビデンス(多くはログ)になにを残すか、ログは、どういれるか
 に関しては、指示があるか、サンプルをみればわかるはず。

 どのポイントにログを入れるかは、たぶん、ここで書ける話でない。

 そのポイントに関して、単体テスト項目をつくる。
 そのポイントを、ソースが大きくなることに、増えるように作れば、ソースコードが大きくなると、項目数が自動的に多くなる。
 この手を使うと、テストのカバー率が上がる。

 ちなみに、これを自動化して、「ログの箇所からExcel単体テスト仕様書自動生成」
 を作ると、単体テスト仕様書が簡単に作れるけど、そこまで自動化はしてないと思う。
 (めんどうなので)

 流しで、どうしても流せない部分は、Exceptionをnewしてしまって、無理に流すという手もある。




 モジュールの結合以上のテストとか、総合テストについては、シナリオがあるかないかとかで違うけど、どっかの結合テスト以上のドキュメントを見ればわかると思う。

 そのお作法をみればいい。




 ということで、大体、サンプルをもらって、プロジェクトの大量のドキュメントを1セットもらうと、どこかに書いてあります(自動生成してる部分は、想像つきます)。

 でも、大量すぎて、どこにかいてあるのか、みわけにくいです。

 それを、見抜くと、優秀なプロジェクトマネージャー、見抜けないと、だめだめマネージャーっていう感じです。

 この記事、やっぱ、やばいかな。。。あとで、削除するかも(^^;)

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

CSEやAccessでのテストデータ作成と、富士通のRDB、SymfoWAREは要注意!

2005-05-20 15:28:32 | 開発ネタ

 m_pixyさんの「テストデータ作成ツール」の話、前後の文脈は、わからないのですが、CSE、いいですよね!!

 便利便利、フリーだし、SQL文でいろいろ操作できるし、データをみて更新かけることも出来ましたよね(「データ編集機能」って、webには、かいてありますね)。

 Accessでも、クエリで、「表示」→「SQLビュー」にすると、クエリ以外のInsertとかUpdateでも、SQL文を入れて、実行させることが出来ます(くわしくは、こちら)。
 たぶん、これで、テーブルをリンクしたりすると、CSEみたいなことができるのかな?
 (そこまでは、やったことがない。そういう必要のあるときはCSEを使うからだ)。

 ということで、CSEでもAccessでも、データ見ながら操作したり、insert文を自動生成して、テストしたりっていうことができる。

 これで、どんなRDBでも、(多少のSQL文の違いはあっても)
 CSEやAccess使えば、簡単にテストできるね。

 めでたしめでたし。




 といいたいところなのだが、ひとつだけ、insert文なんかを自動生成して、テストするのに厄介なRDBがある。

 富士通の出しているDB、SymfoWAREだ!

 このやっかいさ、私がテストの準備をしたときのお話で、振り返りましょう。




 まず、Excelの仕様書から、自動編集で、Create Table文を書いたDDLを作成(このときは、ここみたいにjavaでやるんじゃなくって、Excelマクロを使ってやりました)。

 で、Excelにテストデータをつくって、自動生成でInsert文のSQLを作成(これも、ここのようにJAVAでやったんじゃなくって、Excelマクロで、ただしデータの入れ方は、同じようなかんじ)。


 あ、そうそう、別件になっちゃいますが、Excelマクロでinsert文を作成するマクロを公開している人がいますね。この方です。



 で、実際にテーブルつくって、データ入力です。

 たしか、CSEのODBC接続で、うまくいかなくって(私の設定が悪いんだと思うけど)、DDLはrdbddlex、InsertのSQLは、rdbexecsqlという、このDB独自のツールを使って、入れようとしましたが。。。

 はいりません。エラーっす!

 ここで、いただいたサンプルにもどる。

 なんだ、DSIって?DSOって。。。??

 どうにか理解し、表のDSI、DSOをExcelで自動生成。実行。

まだだめだあ。。。

 なになに、インデックスにもいるのお???

 インデックスのDSI、DSOをExcelで自動生成。実行。

 なんか、ここまでで、いろいろおかしくなったので、消したり作ったりを繰り返す。

で、データを入れてみる。

 はいらない。

 また、サンプルにもどる。

 ncharのところは、insertのとき、N'値'とか、しないと入んないみたいだ。

 修正。

やっと入ったときには、疲れまくりで、「今日はここまで」でした。
 (テストする前に疲れたよ!)




 SymfoWAREは、他のmysqlやpostgreSQLなどと違い、DSI,DSO(ディスクスペースの宣言)が必要だったり、insert文のところで、Nが必要になる時があったり、ちょっとちがいます(また、日本語のところに、英語半角入れちゃったりすると、怒られたり)。

 まあ、日付の書き方が違うくらいなら、そんなに問題ないけど、ここまで違うとSymfoWAREの自動生成や、データ作りには、注意が必要。新人研修なんかで使うと、混乱するかも(売られているSQLの本には、そんなこと、書いてないから)。

 あ、でも、富士通の人が、このブログ、見てるかもしれないので、その人のためにフォローすると、SymfoWAREも、いいデータベースだと思いますよ!

 富士通以外の人に、「どこがいいの?」って聞かれると、答えられないけど(^^;)。。。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

流行に乗って、大規模開発との違いを書いてみたりする

2005-05-19 18:26:38 | 開発ネタ
 大規模開発について、書いてあるブログが多い気がするので、ウィリアムのいたずらも流行に乗って??1つ。

 一番大きな違いは、全体を見切ることが出来ないこと。
 システム全体も(全体概要は、わかったとしても)、プロジェクトマネージャーまでは、だれがいるか、わかっても、プログラムを作っている人は、見たこともないし、そもそも、どこで開発しているかもわからない(協力会社で、持込可の場合など。わかんない)。

 こういう状況の場合、訂正が効かない。

 仮にクラスのメソッドを修正するとき、直接プログラムに修正をかけてしまうと、(業務でも、完全に業務内容を作っている場合は、影響少ないけど、共通部分を作っている場合など)どこまで影響が出るかわからない。

 なんていうと、プロジェクトマネージャーに聞けばいいじゃん!?と思うかもしれないが、プロジェクトマネージャーも中身を把握してないケースがあって、そうすると、修正を簡単には出来ないし、修正するための手順ノウハウみたいなのがある
(さっきのブログで示した、返り値のハッシュマップに変更前の値も入れるような話)




 そのほか、これは、プロジェクトマネージャーの能力に起因してしまうんだけど、大規模開発では、このブログで、おっしゃるとおり、ドキュメントが多い。

 そして、そのドキュメントは、こんなふうにわけられるかな。。。

(1)ガイドラインとして、与えられているもの
   →実は、守んなくっても、それほど問題がない
(2)世間一般のことがまとめられているもの
(3)事務管理もの
(4)システムの設計上、重要なもの
  4-1、DB構造など、今回の開発に必要なデータ、業務内容などの記述
  4-2、パターンの開発思想など、標準化の考え方、方法についてかかれたもの
(5)インストールマニュアルなど、作業手順が書かれたもの


 おおざっぱな、独断と偏見だから、抜けもあるかと思うけど。。。
 で、問題は、プロジェクトマネージャーは、(3)は、自分にかかわるから、かならず忘れないのよ。(5)も、必要だと気がつくのよ。4-1も、このシステム独自だから、気づくのね。
 問題は、(1)と(2)と4-2の区別がつかず。。
 さらに最悪なのは、4-2の資料が、どれに相当するかわかならいプロジェクトマネージャーがいるのよ。

 そうすると、いろいろ資料を持ってきてくれるのはいいんだけど、肝心な資料が抜けちゃったり。。。




 大規模になればなるほど、
・システム全体の考え方や、
・フレームワークと、外部入出力・各開発部分の位置づけ、
・なぜ、そういうパターンやフレームワークを採用し、
・そのパターン・フレームワークを採用すると、どこに問題があるのか
 を早めに知って、それに対応しないといけない(あとで修正が効かないから)。

 だから、パターンに関する標準化資料(開発標準)というのが重要なんだけど、ひどい場合、その標準化の資料を渡してくれるのを忘れたりさあ。。。

 あきらかに、いくつかのソースコードをみると、
  ・標準化されているはずで、
  ・その標準化も途中変わり、
  ・その連絡が、途中で消えている(届いていない)
 つー状態で、「ここの標準化のドキュメントは?」って聞くと、「ありません」って、返事されたり
(ないのではなく、あるのを忘れているんだと思う)。

 そのへんの、どのドキュメントが重要で、仕事を出すのに、なにを見ないといけない、なには、省略しても大丈夫という境界線をプロジェクトマネージャーさんが理解しきっていないと、最悪の現場の混乱を招くっていうことがあると思う。




 あと、大規模の場合、どのレベルでパターンを切り上げて、部隊に渡すかの切り口とか、間違えると、えらいことになる部分があるんだけど(かならずしも、ソフトウェア工学でいわれている部分で切るのが、いいとは限らないこともあるし。。たとえば、クラスを細かく割って詳細化していくよりも、パターンに落とし込んで、継承させて、一部しか、いじれないようにするほうが、部隊への展開は楽なときがあるよね)。。。

 まあ、基本的には、一番大きな違いは、全体を見切ろうとしても、見切れないところに起因した問題が多い気がしますな。。。

 で、プロジェクトマネージャーが、「だから文書化だ!」などといって、容易に文書化したり、どっかのえらーい外国の先生の考えを単純に導入しちゃうと、「部隊を動かすのには、何が必要か」という部分が抜けてしまって、結局大混乱!なんていうことになるわけですな。

 小さいと、この辺、訂正が効くんだけど、大きいと、訂正したとたんに、なおさら大混乱になる。部隊に出す指示は、1度言い切りにしないと、わけわかんなくなる(小規模だと、お前が考えろでも、極論するとOK)

 なんて、いうのが違いかな?と、独断と偏見で、思ったりします。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

JAVAでRDBにアクセスするとき、SQL文、全部書きます?自動生成させます??

2005-05-19 15:45:11 | 業務のモデル化
 JAVAでデータベースにアクセスするとき、たとえば、

Statement stmt = con.createStatement();
String sql = "SELECT * FROM KAIGI_TBL";
ResultSet rs = stmt.executeQuery(sql);

 のような感じで、SQL文を、「全部」自分で書きますか・・・??

 私は、てっきり、書かないのが、普通だと思っていたんですよ(@_@!)
 つまり、
  1.SELECTなり、UPDATEなり、DBアクセスするための共通メソッドがあって、
  2.その共通メソッドに設定する値は、ある程度自動設定し、
  3.そのための設計書は、Excelで作られている。。。

 こういう開発ばかり(例外:この前の、ActionクラスからSQLを直接書いちゃう人)なので、最近は、そういう風に書くものかな?って思ってました。

 なので、前のブログに書いたように意識あわせのために、この記事を書きました。

 そうしないと、以前のブログなんかで、なんで、ExcelからJavaのプログラムが必要なのか、ぜんぜんわかんないですもんね!!




 一応、上記1~3について、説明しておきますね。

■■1について

 たとえば、データベースアクセスのSELECTをする場合(他もおなじようなもんなんでSELECTだけ説明します)、まず、こういうメソッドを、システム共通として用意しておきます。
(下のは、こんなかんじという雰囲気。正しいかどうかは確認しておりません)

 public Vector selectData(String[] komoku,String[] tbls,Vector whereKu,String[] sortKu) throws Exception
{
 // 中身は、こちら
 // メモ帳で書いて、チェックしてないので、間違えとかあるかも??
}

これで、たとえ、どんなSQL文でも、返り値のVectorの中に、
 1レコード1エレメント(項目)で、
      1レコードの中身は、ハッシュマップで、
        キーは、カラム名、
        値は、そのレコードにおけるカラムの値が、String型で
入っていることになります
(数値型のものは、Stringになっているので、使うとき、型を変える)




■■2、3について
 1で、komoku,tbls,whereKu,sortKuを、自動生成すれば、SQL文がかけるということになった。
 で、そこでなんですけど、たとえば、Excelで、こんな雛形を用意して、


komoku[0] = "*";(全部検索)
tblsは、「アクセステーブル名」に書かれているテーブルをセット
whereKuの 1レコード目は項目名
     2レコード目は条件1、
     3レコード目は条件2を、(縦にみて)セットし、
sortKuを、ソートの順番をみて、設定するように、

 Excelファイルを読み込んで、Javaのプログラムを書き出す、自動生成プログラムを作ります。
 昨日までのブログで、この辺のものが作れることは、示しました。
ここにまとめてある
 ちなみに、ウィリアムのいたずらの主な仕事は、こういうものを作ることなので、ExcelからJava変換が重要だったのです。

 もちろん、条件式には、引数で渡された値をセットする
(たとえば > args[0]) みたいなときもあるので、すべて自動化で書かないほうが、
効率的かもしれない(それでも、自動化したほうがいいかな??)




 で、よく、テーブルの項目名が変わったときっていうのが、問題としてあがっているけど、そんなもん、項目名をすぐに変えたら、いたるところで問題が起こる。

 なので、上記のselectDataメソッドの場合、返り値にVectorを返し、その要素の中のHashMapに値を入れているので、前の値も、そのハッシュマップにセットして置くようにするっていうのが、ウィリアムのいたずらがかかわった仕事ではおおいな。

(具体的にいうと、検索項目 heyaMeishoがroomNameに変わった場合、
Vector allData = selectData(komoku,tbls,whereKu,sortKu):
for(int i = 0 ; i <allData.size() i ++ ) HashMap mp = (HashMap)allData.elementAt(i);
mp.put("heyaMeisho",mp.get("roomName")); // 古い名称をセットしておく
  allData.set(i,mp);
}

 みたいな感じで、新しい項目名の値をとってきて、前の項目名にもセットしてあげる)
 そうすれば、この返り値をもらった上位のメソッドでの変更はない。
 この名称変更はあまりないので、ここを自動生成させるメリットはあんまりないと思うけど)




 実際の開発では、どこまで自動化するかっていう問題がある。
 ここまできれいにやらない場合もあるし(ウィリアムのいたずらの場合、ここまでしないかな??)
 逆に、テーブル構造が修正になったら、上記のselect内容を記述したExcelファイルを読み込み、修正があったら伝えるみたいな機能を付けることなど。。さまざまある。

って、ここまで書いて、結局結論としていいたいことは、

 だから、テーブル変更があったからって、修正が頻繁に入るっていうわけではないと思う。適切にプログラムを書いて、適切なパターン、ドキュメント規約が出来ていて、自動化するプログラムが出来てれば、RDBでも、修正箇所は、そんな目くじら立てていうほど、多くはないと思うぞ。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

O/Rマッピングを否定している人をみつけっちゃたよ!

2005-05-19 12:14:43 | 開発ネタ
昨日のブログで、「うん、なんか、とんでもないことが書いてありそうな予感のページを発見したじょ!」の中身です。

 サイトをぐるぐるしていたら、O/Rマッピングを否定している人をみつけっちゃたよ!
 ここ(ただしPDF)にあるんだけど、この人の意見によると(この人の意見であって、ウィリアムのいたずらの意見ではない)

・O/Rマッピングは、本来不要で(シート6枚目)、
・O/Rマッピングで、本来不要なオブジェクトを追加しなくてはならず、
・その結果、コード量が増え
・テーブルスキーマ変更時の変更箇所が多い(シート7枚目)

なので、RDBを使わないで、開発するそうな(ここの会社のなんかをつかうらしい)

で、事例なんだけど、
・205クラス
・41153行(自動生成23464)行
での実績があがっている。




 O/Rマッピングがいけないから、RDBを廃止するっつーのは、すごい発想だ。
 自動車事故が多いから、自動車をなくすという考え方で。。。

 ある意味、場合によっては、ありなのかもしれない。
 この程度の中規模(小規模?)の開発だと。。。
 (シーケンシャルファイルでいいじゃん!っていう開発でも、RDB使うこともあるしね。
  掲示板とかみたいなので。。)


 ただ、言語が入り乱れちゃうような開発(VC++とJavaがあって、みたいなシステム)とかどうするの?っていう問題もあるんだけど、それより、
 大規模開発において、いがぴょんさんのブログで指摘されている
オブジェクト指向やデザインパターンのなかの多くの技は「構造化」という観点からは リレーショナルデータベースにおける「逆正規化」に相当しているのだという点です
ほうが、気になります。




 大規模開発だと、他の人が、どこで、なにを開発しているのか、見えないことがあります(プロジェクトマネージャーまではわかっても、その先、だれが、どんなプログラムを作ってるか不明。中国に発注すると、お国柄、とくにそうだと思う。。独断と偏見)。

 そんななかで、オブジェクト指向をつかって、完璧に隠してしまうと、本来、関連しているはずのデータまで、隠れてしまうことがある。

 たとえば(極端な例だよ。こんな、お馬鹿なやつ、絶対いないと思うけど!)、

 ・今月、商品の合計5000円以上お買い上げの方は、プラチナ会員
 ・商品の合計は、値段を足して合計を出した後、消費税をかける

 といった場合、この条件だと、会員(プラチナ会員)のオブジェクトと、商品合計を求める(買い物かなあ?)オブジェクトは、たぶん、別です。で、2つのオブジェクト間で、やり取りされるのは、合計値です。

 そのとき、消費税の規定が変わって、
 ・商品の合計は、消費税をかけた内税値段を足して合計をだす

 という規定に変わった場合、商品合計を求めるオブジェクトを修正すると、問題なく動いてしまう。。。。

 それって、問題でしょ!

 プラチナ会員の条件は、「消費税を含まない」合計値が5000円、含んじゃったときも5000円でいいの??
 じゃあ、5250円にすればいいじゃん!って?
 端数処理から考えると、そういうわけにもいかないですよね(5%割り戻すのも、同じ話)
 というわけで、問題があるんだけど、データが隠れてしまい、加工されたデータでやり取りすると、まったく、わかんなくなっちゃうことがあるのよ。




 ただし、こーんなにわかりやすい、おばかなはなしは、もちろんないよ!

 だけど、データが隠れてしまうと、これに似たような、もっと複雑な話で、加工されたデータだけ、受け取った場合の問題っていうのが、生じるのよ。

 RDBの場合、正規化するので、このような計算で求めるような項目は、本来、第三正規形だったかな?で入れてはいけないことになっているし、第三正規形までしなかったとしても、データを求めるのに必要な値は、(データベースの共用性の規定により)基本的にDBにいれて、公開するのがふつう。

 つまり、RDBの場合、永続的データの全体像が、テーブル上に表現されていることが多い。
 それによって、情報共有が図られ、なので、大規模でも、矛盾が発見しやすいというメリットがあるわけなのですよ。
 だから、正規化って、重要なんだけど、オブジェクト指向の場合、正規化しなくても(情報を抱え込んで、隠しちゃっても)OKっていうことなんで、その辺、どーなのどーなの??
 やっぱ、RDBも、大規模になると、大切じゃないの??

 なんて、思ってしまいます。




 ただ、さらに、もっと気になった論点。
・テーブルスキーマ変更時の変更箇所が多い(シート7枚目)

かあ??これ、たしかに、SQL文を、ばかみたいに、書いていたら、修正、多いよ。
 でも、いまって、ハッシュマップをつかって、QBEグリッドみたいな感覚で指定するから、どれほど、修正、いらないんじゃないかなあ。。。
 あれ、その方法って、一般的でない??ひょっとして??意識あわせが必要(お、大規模っぽくなってきました!)

 じゃ、こんど、気が向いたときに、みなさんと、意識あわせしましょう!

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

週刊アスキーの創刊号を発見。記事は、こんなんでした。

2005-05-18 13:37:47 | Weblog
 ウィリアムのいたずらの本家とダブってしまうのですが、まあ、本家を見てる人と、こっちを見てる人、違いそうなので。。。さらにパワーアップ?して、書きます。

 週刊アスキーの創刊号を発見!こんなのです。
週刊ASCII創刊号

 うーん、今とは全然違います。

で、記事をみましょう。




97年6月2日、創刊号の記事

・海外進出すブランド出産
・インタビュー桑田真澄
・「たまごっち」の電磁波で、飛行機は墜落するか?
・日本でも使いたい双方向ポケベル
・弱者のためのインターネット
・グルメ国民投票
・美少年という癒し(ヒーリング)
・豪華連載
   タイガー・ウッズ
   岡田斗司夫
   山藤章二
   島本和彦




 ポケベルっす!うーん、時代が。。。97年だから、まだ10年も経ってないのに。。

 ちなみに、創刊号は、Wフェイスということで、縦書きと横書きの表紙があり、その後に続く中身も縦書きと、横書き、真中で合体するものです。
 はじめのころは、たしか、コンピューターっぽい内容ではなかったのですが、途中から編集方針が変わって、今のコンピューターコンピューターした、週刊アスキーにかわった。。。っていう記憶がある。



P.S:
 ちなみに、前のブログで、「つぎのつぎのブログで取り上げる」といった話、明日のブログになります。
 今日は、さっきのと、この2つです
 

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Excelでテストデータを入力、INSERT文を生成するJavaプログラムも一応公開

2005-05-18 12:07:04 | 開発ネタ
 昨日のコメントをいただく前に、実は、Excelでテストデータを入力すると、INSERT文を自動生成してくれるJavaプログラムを、(コメントをいただく前のやりかたで)作っておいてしまったので、一応、そいつも公開しておきます。

 ここに公開してあります。
http://members.ld.infoseek.co.jp/mokano1/ExcelDocToIns.htm





ちなみに、Excelで、こんなふうに、テストデータをいれていきます。


そうすると、こんな感でINSERT文にします。
INSERT INTO kaigi ( kaigishitsuID,buildID,kaisu,heyaMeisho,ninzu,ookisa ) VALUES ( 1,1,1,'第一会議室',20,12 );
INSERT INTO kaigi ( kaigishitsuID,buildID,kaisu,heyaMeisho,ninzu,ookisa ) VALUES ( 2,1,2,'第二会議室',10,8 );
INSERT INTO kaigi ( kaigishitsuID,buildID,kaisu,heyaMeisho,ninzu,ookisa ) VALUES ( 3,2,2,'会議の間',5,6 );





 昨日のものと、同じやり方で、できそうなので、パターン化しちゃったほうが、やりやすいのかなと思い、実は、昨日、パターンの話を書いたのですが、chung-zeeさんからのコメントで、

取込みクラスと生成クラスを切り離してプロトコルをXMLにしとくと保守が超楽ですよ。

と教えていただいたので、そっちの方向も考えてみようと、思います。




 ということで、まずは、「取込みクラスと生成クラスを切り離し」ということで、調べてみると。。

 ストリームを、生成とデコレーションに分ける、こんな話が書いてあるページがありました。まあ、こんな感じかなあ。。などと思っていると。。。

 うん、なんか、とんでもないことが書いてありそうな予感のページを発見したじょ!

 これは、全然別の話になりそうなので、つぎのつぎのブログで取り上げるぞ!!

 (ちなみに、次は週刊アスキー創刊号の話です。もう、書き終わってるので。。。)

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

IBM、従業員に「慎重な」Blog 活動を呼びかけ

2005-05-17 17:49:28 | Weblog
 「YAHOO ニュース」で見ました。ここです

 IBM の公式 Blog サイトへの書き込みについては、「IBM の事業価値を高める」形での利用を奨励している。

 ほお・・・っていうことは、Blogにバグ情報とか、書いちゃいけないのかな?
 逆に、書いていいのかな?ようわからん。。



各自の良識に照らして配慮するとともに

 ウィリアムのいたずらに、「良識」。。。ない(^^;)

 まあ、IBMの社員でも、関係者でもないから、どーでもいいんだけどね。。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Excelの仕様書から、create tableを自動生成するJavaプログラム、作っときました

2005-05-17 14:40:24 | 開発ネタ
 Excelのテーブル仕様書から、create tableのDDLを自動生成する、Javaのプログラムを、
 この前、このブログで書いたJExcelApiを使って、作りました
(とりあえず、今回はJExcelApiを使いました。POIは、将来、やってみたいと思います)。

 ここに公開してあります。
http://members.ld.infoseek.co.jp/mokano1/index_ExcelJava.htm





ちなみに、Excelのテーブル仕様書っていうのは、こんなかんじ。


それを、こんな感じのcreate tableのDDLにします。

CREATE TABLE kaigi (
kaigishitsuID INTEGER NOT NULL ,
buildID INTEGER ,
kaisu INTEGER ,
heyaMeisho VARCHAR(20) ,
ninzu INTEGER ,
ookisa INTEGER ,
PRIMARY KEY(buildID,kaisu,kaigishitsuID)
);





 こんどは、Excelの仕様書のよこに、テストデータを入れたものから、テストデータを登録するInsert文の自動生成なんかを書いて、
 そのあと、POIで、おんなじようなことができるか、試してみたいと思います。

。。。覚えていたら、気が向いたとき、やります。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする