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

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

11月30日のメルマガは、外部設計について

2005-11-29 22:43:33 | コピーされるほど儲かるシステム!

 11月30日、「コピーされるほど儲かるシステム!開発日記」第25号を出します。

 内容は、外部設計について。
 以前書いた外部設計で、やることなどの内容プラスアルファです。

ということで、あとは決り文句。




 25号のメルマガについての、感想などはここの「コメント」にどうぞ!

 メールと、ウィリアムのいたずら自身のブログについては、このブログの
「コピーされるほど儲かるシステム!開発日記」へのメールについて
http://blog.goo.ne.jp/xmldtp/e/a58b79b40b1148c2f744556e27b76a79
を参照してください




 さらにつけたし。

 ちなみに、そのメルマガっていうのは、
ここのことです
http://www.geocities.jp/xmldtp/mag.htm

このブログは、そのメルマガについて、書くはずだったんだが。。。(>_<!)

P.S いつも、上記の「決り文句」を書いていて、もう20回以上になるが、
今日はじめて、その「決り文句」に、誤字があるのに気付いた(>_<!!)
 

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

フリーのPHPエディタを使ってみる&そのダウンロードサイト

2005-11-29 18:39:05 | PHP

 PHPで、最近書くことが、多くなった。
 メモ帳じゃなくって、エディタがあったほうがいいなと思ったけど、
 Zend Editorは、3万円以上もするので、あちゃ。。ということで、却下!

 ということで、フリーで使える、PHPエディタをとりあえず、つかってみることにした。
 そのPHPエディタのサイトはここ
http://phpspot.net/php/phpeditor.html


 で、ダウンロードしてみた。

 おお、なんとなくつかえそうじゃん!
 ちゃんと、文字を打つと色分けされるし。。




 まずはじめに、立ち上げて
 プロジェクトを「ファイル」の「名前を付けてプロジェクトを保存」でつくって、
 そのプロジェクトに、とりあえず、いままで作ったphpプログラムを
  「ファイルから追加」で追加して
 で、ちょこっと修正して、保存して
 「実行URLの設定」でhttp://127.0.0.1/そのPHPにして
 「実行URLを開く」にすると、実行する!おお!!

 で、コードチェックは、
 「実行」の「構文チェック」をやると、php.exeの場所をきくので、
 指定すると(普通C:¥phpとかにはいってる)
 おお!チェックするぞ!

 ただ問題は。。。それを開いてみると、
 改行コードが¥nだ(>_<!)
 (¥rが入ってないので、ぜんぶつながっちゃってる。↑が改行のところに入ってる)
 しかたないっす。
 一度保存したのを、ワードパッドで開いて、再度MS-DOS形式で保存しなおすっす。。
 



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

PHPでつくる、仕様書からのプログラム自動生成(その4:データファイルの仕様など)

2005-11-29 17:19:22 | Weblog

 昨日書いた、仕様書をCSVで書き出し、雛形ファイルを用意すると、仕様書の内容をいれて、プログラムが自動生成するという話。

 今回は、その仕様書の形式とか。。の話
 もう一度、手順を書くとこんなかんじ。

■■ 手順的にはこんなかんじ
・仕様書をCSV書き出ししたものと、
・雛形を用意して、
   ↓
・このPHPを実行すると、
   ↓
・ブラウザ上に、雛形の指定したところへ、仕様書の値を入れて
 ソースを書き出す。

 前のブログは、雛形ファイルの書き方だったので、今回は、「仕様書をCSV書き出したもの」について




■■ 仕様書の形式

仕様書の形は、昨日の例に示したような、(CSVっていってるけど、本当は)タブ区切りのテキストです。いちおう昨日の例をしめしておくとこんなかんじ。
Mtr>
テーブル名	HELLO_WORLD_TABLE	PRIMARY KEY	NO
名前	型	桁数(文字のとき)	NOT NULL
NO	INTEGER		NOT NULL
LANGUAGE	VARCHAR	50
MESSAGE	VARCHAR	100


上のほうに、繰り返しとは関係ない項目をかき、
(例の場合は、テーブル名とプライマリーキー)

見出しをいれて、
(名前 型 桁数(文字のとき) NOT NULLの行)

あとは、繰り返し部分をかきます。
繰り返しのはじめの行が、for $i=開始行 の開始行になります。

で、0スタートです(0行0桁からはじまる。1ではない)
したがって、例の場合は、開始行は2からです。




ふつうのExcelの仕様書をCSVファイル形式でおとすと、こんな感じになると思います

 で、昨日のPHPプログラム(makepro.php)にバグがあって、途中に、改行だけの空白行があった場合、その行を読み飛ばしてしまいます。
 そのため、最終行以外で、改行だけの行がある場合、漢字の空白なり、何か文字を入れるなりして、空白行でないようにしてください。
(今度、Webに公開するかもしれませんけど、そのときは、途中に空白行があっても大丈夫なように、直しておきます)




 実際にこれを使ってやる場合、雛形をいっぺんに作ると、バグがあると、なにもでない!となってしまい、バグが見つけにくいので、まず、テストデータをつくって、雛形をすこし作ったら、確認しながら、全体を作っていったほうが、やりやすいです。




 ちなみに、なんで、これで、ソースが作成されるかというと、実は、ここのブログで書いたことの応用です。

 コントローラー=makeproでやっていること
    画面の内容をセッションにいれて
    処理(CSVデータを読み込む)をして
    その結果を、セッションに入れて
    画面(ここでは、雛形プログラム)を呼び出す

 処理部分(shori)=makeproのshori
    CSVデータを読み込んでいる

 画面=自動生成されるソースプログラム
    セッションの内容($dataにいれている)を、セットして、
    画面(じゃなくって、ソースコードだけど)を生成

 これを一連の処理として実行すると、CSVデータを読み込み、その内容をセッションにセットして、雛形ファイルをLocationで呼び出して、セッションにはいっているCSVの内容を取り出して、雛形の指定のところに入れてもらうと、画面のかわりにソースコードをつくってくれるということです。




 っていうことは、データをセットして、画面のかわりに、PDFlibを使って、PDF書き出しをしたら
帳票作成ツールができるのかとか?

 っていうことは、データをセットして、画面のかわりに、GDを使って、グラフ書き出しをしたら
グラフ作成パッケージができるのかとか?

 言われたら。。。たぶんできるんでしょうな。。 

 (ただ、その場合は、雛形ファイルをPHPプログラムにするより、雛形ファイルは、位置と、文字や線など表示種類と、文字の場合、CSVデータのどの項目を出力するのかの指定にして、画面プログラムは、CSVデータと、この雛形データを読み込んで表示する形にしたほうが、後での雛形修正が楽)

 とするとですよ。。。

 Javaなんかだと、帳票作成ツールは、自分で作らないけど、PHPの場合、そういうツールを作れるから、PHPのほうが、自由度たかいっちゃー、たかいよね。



 ということで、この「PHPでつくる、仕様書からのプログラム自動生成」シリーズはここで完結です。



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

CVSを使った構成管理の問題と対策

2005-11-29 14:22:49 | 開発ネタ

 確か、日経システム構築の今月号(2005年12月)に、CVSを使って、ドキュメント管理とソース管理、システムの自動生成テストを行い、オフシェア(中国利用)で開発した例が載っていたと思います。
 ですが、そこでは、単に成功事例だけで、一般的に、どういう問題が起こり、どういう対策ができるか?なぜ、そういう手法をとったのかについては、かかれていなかった気がします。
 そこでウィリアムのいたずらが、今日はまず、CVSによる構成管理の問題点と、その対応策について(この点に注意すれば、けっこうおおきな開発でも使えそうという話)を書きます。




 まず、CVSによる集中型の構成管理(1箇所をCVSサーバーにして、すべてそこに成果物をおき、管理する方法)は、そこにも指摘されていたように、オフショアでは問題ありますし、そうでなくても難しいと思います。

 そこに指摘されていたのは、中国の通信事情でした。

 これは、中国の一般的なソフトハウス(注:中国の場合、大学が直営?のソフトハウスを持っている場合があり、その場合は、事情が違うかもしれない)の場合、通信回線が(厳密に言うと)「遅くなることがある」ということです。

 これについては、中国のIXについての事情があるかもしれません。
 日本と違い、外国への通信をするためのIXは。。。(いわないでおこう。。壁に耳あり商事にメアリー:ちょっとちがう?調べれば分かる)。

 (中略)

 てなわけで、通信事情に、問題がある「場合がある」のですよ。
 それに、日本でも、ある場所にサーバーをおいてソース管理するといった場合、わけもわかんないフリーの人や、大手競合会社が入ってきていいのか?という問題があります。
(最近のシステムでは、FNHIの複数が部分的に受託するということがある)




 ということで、自然と、分散型の構成管理になります。

 この方法は、ある一定時間に、自動的あるいは手動的に、ネットワークあるいはフットワーク(だれかが持っていくということ、別にフットワークの配送に限ったわけでなく、一般名称)を使って送り、全体を構成管理するサーバー(CVSサーバーでも、なんでもいいんだけどね)に送ります。

 このとき、構成管理の追加、変更の申請書があると、作業的に、実はバグ発生時のバージョン管理で楽なんですけど、そんなことは、OSS信奉者には、「面倒になるだけだ」といって、受け入れられないことなんで、書いてもらえない気がします(といいつつも、この書類を、「やみくもに」書かされることもある。その場合は、この書類を十分に使いきれていない。つーか、なぜ書くのか分かっていないことも多かったりする。結合テスト以降のバグのときにつかう)。




 この場合の問題は、多くは結合テスト以降で起こります(それ以前では、起こらない。また、中小規模では起こらない。開発場所がある程度多くないと起こらない)。

■問題1 (集中型でも、分散型でも起こります)
 ある会社が、呼び出されるほうの”インターフェース(引数または返り値などの)の”修正を行ったとき、一部の会社は対応しているが、ほかの会社は対応していないため、コンパイルができなくなることがある。
 この場合、バグフィックスを確認するためのテスト確認作業が(コンパイルができなくなるので)遅れる。

■問題2 CVSから、更新されたソースだけを入れ替えて、独自で、コンパイルしてテストされた場合に問題が起こる。

 あるいは、jarファイルの一部だけを持ち帰ってテストされたときなどで。。

 そうすると、バグが起こっても、どの状態のソースのときに、バグがおきたのか分からない

 たとえば、ソースA,B,C、D,Eとあったとき、

 10:30分にソースBが
 10:50分にソースDが
 11:00分にソースB、Cが更新されたとする。

 このとき、勝手に最新版をとってきて、テスターがテストしていいとしたとき、
 (ありえないけど)

 テスター甲は、10:45分にソースを落とし、10:55分に、ソースEの箇所で起きたバグを発見し、11:10分に報告したとする。
 その時点で、Eの担当が11:15分に、ソースを入れ替えて見ても、再現しなかった場合、何が原因なのか、わからない。(この場合、ソースBのバグがEに影響したもので、11:00の修正版で直ってて、今のソースでは、自然治癒している可能性がある)。バグ票に、発見時間が書いてあったとしても、更新が頻繁に行われ、かつ、すべての時計の時刻が必ずしも正確でないという状況の場合は、意味がない。

→この問題は、実は起こらない。必ず対策が行われるので。

 そして、このための対策として行われることのために、実はCVSの利用は広まっていない。




■■ 対応策

●問題2についての対応策

・後者の対応として、ビルド番号(ないしはバージョン番号)をいれて、一定時刻にコンパイルするようにしています。

 そして、バグ票には、かならずビルド番号をいれます。

 テスト対象になるのは、このビルド番号を持っているオブジェクトのみです。

 上記の例の場合、10:30、Bがいれたあと、一斉ビルドを行い、bild no 200511291145というものだったとしたら(めんどーなので、NOを時刻とした)、バグ票にそうかかれるので、開発の人は、現在のバージョンで再現しない場合、このビルドNOのオブジェクトとソースを取り出して確認するので、問題箇所を再現できます。

 ふつう、このような形で管理していると思います。

 あの日経システム構築の場合も、この手法でしたよね。一定時間でのコンパイル。

 だからこの問題は、起きません。

 しかし、こうやってやる場合、そのコンパイル時間前までに、ソースをある場所にFTPで送って(HTTPやHTTPSでアップロードでも、いいけど)、そのあとmakeでプログラムを実行して、ビルドしたオブジェクトを公開、ソースを退避させ、保存しておけばいいじゃん!っていうことになります。

 そのとおりです。。

 でもそうすると、CVSいらないです。

 事実、CVSのような構成管理ルーツは使わないということも多いですよね。

 ちなみに、このため、バグ票に、ビルド番号(ないしはバージョン番号)は絶対入れてね!




●問題1についての対応策

 前者の問題は、現在、マネージャーレベルで、打ち合わせして、「いっせのせ!」で、ある日のバージョンに入れるということで対応していますが、連絡ミスなどの問題が発生することが多いです。
(なお、このためにも、バージョン(一定時間のビルド)という概念が必要になってきます)

 なので、それへの抜本的な対策は、インターフェースを基本的に共通にして、新旧、どちらの引数でも送れるようにして、引数内にバージョンをいれ、そのバージョンを見て、それなりの処理をすればいいです。

 この方法として、ハッシュマップや連想配列を使う方法については、前にブログに書きました。
ここ

 なお、前のバージョンで使ったソースは、できるだけ消さないほうがいいです。
 前に戻すこともけっこうありますので。。。

 ただ、そーすると、みにくくなっちゃうんですよね。ソースが。
//DEL Ver1.0
//
//
//DELEND
 とかが、いっぱいでてきちゃって。。

 なので、メソッドレベルで、たとえば、
バージョン1.0なら、a_1_0,
  バージョン1.1なら、a_1_1
 というかんじで、バージョンごとにメソッドをつくっちゃって、こぴぺで対応するのも、いいかもお。。そー言う意味でも、コントローラーが必要だったりする。




●そのほかの構成管理の問題と対策

 そのほかの問題として、デグレードと、それを起こさないための、リグレッションテスト(回帰テスト)の実行方法の問題があります。
 これについては、テストの自動生成って言う話になるのですが、それについては、その日経システム構築の記事にもかいてあったし、まあ、ここのブログでも書いた気がする(どの記事かは忘れた)なので、今回は省略




 思いついたところは、こんなかんじ。
 結局、まとめると、日経システム構築の記事は、成功の秘訣がCVSによる管理のように読めてしまうんだけど、CVSによる管理は、基本的には集中型に向いている(常時ネットワークが見れる)のであって、記事のように分散型にするのであれば、CVSでなくても、別にかまわない。

 むしろ、あの記事での成功事例は、テストの自動生成と確認部分にあって、それを実現するには、インターフェースのミスマッチ(上記問題(1)のこと)を防ぐということで、そのインターフェースミスマッチを防がないと、オフシェア開発は難しいんだけど、そこの部分の対策については書いてなかったね。

 つーような、オフシェアの話は、今度、気が向いたときに。。。

 もう、長くなりすぎちゃったので。。


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