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

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

次期Windowsは7つのエディション!テスト大変そう!Officeの環境合わせですら大変なのに

2005-09-14 13:59:46 | 開発ネタ

 Windows Vistaには7つのエディションが用意されるらしい(ここの記事
 うーん、7つもエディションが合ったら、テストとか、大変なんじゃーないでしょうか!?
 環境合わせるのに。。。

 Officeだって、環境合わなくって大変なのに。。。




 この前も、Officeの2003で開発したたら、検収で、不良で帰ってくる。。。

 よくよくしらべたら、検収している人は2002、開発環境は2003!
 2003と2002では、Excelの罫線などがちがっているので、おんなじにならないのです。
 で、検収不良になっていた(>_<!)。。。




 それと、Officeの場合は、オブジェクトが違って動かないっていうことが、結構よくあります。
 Excelのツール→マクロ→Visual Basic Editorをたちあげて、
 そのVBEで、ツール→参照設定ってやると、利用しているオブジェクトがみれるんだけど、

 ここで、

Microsoft Office 11.0 Object Library

 っていうのがある。
 この数字、ウィリアムのいたずらのところは11.0なんだけど、9.0とか10.0とか、環境によってまちまち。さらに、場合によっては(違う環境のところにコピーすると、ある環境においては)、この Microsoft Office Object Libraryのチェックがはずれてしまい、ぜんぜん動かないことがある(ファイルのダイアログとか、ファイルコピー関係でこまる)

 あるSEさん、それを知らないで、客先にもってって、さあ大変!
 ぜんぜん動かないけど理由がわからない!
 客先で、しろーい目でみられたことは、言うまでもない。




 ってなかんじで、Officeでも、環境違いの問題あるのに、さらに、Winodowsで、同じバージョンの中でも、7つのエディションですか。。
 きっと、それによって、DLLとかも違うんでしょうね。。。
 テストとか、全部しないと、いけないのかなあ!?




 とはいえ、マイクロソフトにそんなことを言ったら、一言なんでしょうな。。
 「そこで、ぜひ、最新のバージョンを皆様でお使いください」

 はいはい、それがいいのは100も承知です。

 承知してるんだけどお。。。


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

コンビニで、POSレジに登録してない商品が売っているんだけど。。

2005-09-13 22:03:32 | Weblog

いま、ファミリーマートでヤマヨシのポテトチップス 「極辛横濱カレビーフ」(これ、ただしPDF)をかったんだけど。。。

 POSレジでエラーになる。

 どうも、商品マスタに登録されてない。

 値札は。。。
 ウイリアムのいたずらも勘違いしてた。それは隣の値札で。。。
 値札もない!

 つーことで、商品台帳をだしてきて、調べること数分。。。
 やっと110円とわかり、買えたんだけど。。。

 POSレジに登録されてない商品売ってるって、それって、ありなのか?
 システム的に。。。
 どーやって注文したんだろう?それともEOS(コンピューターで発注する。あのタブレット(=液晶の板にチェックしてるやつ)をもってやってるやつ)の商品マスタと、POSの商品マスタは違うの。。。??

 なーんてことを食べる前は、いや、食べた瞬間も考えてたけど、

 ちょっとたべたら、飛んでしまった。。。

 たしかに、からいっす(>_<!)
 そんなこと、どーでもいいくらいに。。


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

別にExcelの仕様書でも、CSVファイルにしちゃえば、自動化は簡単

2005-09-13 18:07:16 | 開発ネタ

前のブログ&今までの連載「DB等の入出力の設計とテストについて考える」のオチ。

 結局、OSSを使っても、仕様書からの自動化という作業は、必要だったりするんだけど、じゃあ、仕様書がExcelで書かれている場合(っていうか、たいてい、自動化させることが目的の仕様書はExcelだったりする)、ExcelのVBAを知らないとだめかっていうと、そんなこたーない。

 のに、みんな、そう思っているらしく、ウィリアムのいたずらのお仕事が続いたりする。




 あのですね、ExcelシートをCSVに書き出してしまえば、あとは、言語は関係ないのですよ。

 Excelの仕様書中、テーブルの項目名や型など、必要なことが書いてある部分を、コピーして
 それをメモ帳(notepad)に貼り付けると、タブ区切りテキストになりますから、それを保存してもいいし、素直に「別名で保存」で、「ファイルの種類をテキスト(タブ区切り)」にしてもOK。

 CSVになったら、あとはJavaだったら、たとえば、ファイル全体を読んできて、まずsplitで改行を指定して、1行ごとに配列に入れた後、その1行ごとにsplitで今度はタブを指定すれば、各セルごとの内容は取れる。

 セルまで取り出したら、こっちのもんだよね。




 とはいえ、CSVファイルをいちいちコピーしたり、保存したりするのは大変!
 という場合は、こういうマクロを書いておくと
Sub Macro1()
Dim i As Integer

' 今開いているブックのすべてのシートに対して
For i = 1 To ActiveWorkbook.Sheets.Count
' シートをアクティブにする
Sheets(i).Activate
' アクティブなシートをCSVで保存する
ActiveWorkbook.SaveAs Filename:=Sheets(i).Name & ".txt", FileFormat:=xlText, CreateBackup:=False
Next i
End Sub


 XPの場合だと、自分のマイドキュメントに、シート名.txtで、全シート書き出してくれる。
 今度、覚えていたら、そんなプログラム(シートの中のファイルを全部CSVで書き出す)も、作っておくね。

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

DB等の入出力の設計とテストについて考える(その3:フリーソフトのほうが手間なケース)

2005-09-13 14:10:57 | 開発ネタ

前のブログ(その2)では、DBをアクセスするクラスの4種類のうち

1.DBの場合なんですけどO/Rマッピングを使う
2.J2EEなら、セッションBean
3.入出力用のハッシュマップを使い、テーブルごとにクラスを作成する
4.入出力用のハッシュマップを使い、1つのクラスで行う

 3.のケースについて書きました。この手のものは、自動生成で、仕様書から作ると思うんですけど、その場合、今多いのは、WHERE句のところを引数で渡して、SELECTしたり、UPDATEしたりなどなどする(insertやUPDATEの場合は、追加、変更する項目と値をハッシュマップで与える)っていう話。

 このほかに、ちょっとプログラムをかいたけど、ハッシュマップには、値をいれる=値の型もわかるので、その型を見て、WHERE句を作ることができる。ただ、この場合、4のように、1つクラスを作ってしまえばいいだけになり、今、主流ではないと思う。
 このやりかたは、いつか、覚えていたら書きます。今日の話には、関係ないので。




 で、これらは、手作業で書くと大変なので、自動生成でプログラムも、テスト(仕様書とドライバ)も、つくってしまう。

 そして、設計書にテストデータを記入して、そこから、テストデータも自動生成するっていう感じじゃないかな(そうしないと、間に合わない)

 その場合、プログラムは、

 if ( whereMap.containsKey("項目1") == true )
 {
if ( whereBuf.equals("") == false)
   {
     whereBuf = whereBuf + " AND ";
   }
   if ( whereMap.get("項目1") == null )
   whereBuf = whereBuf + " 項目1 IS NULL ";
   else
   whereBuf = whereBuf + " 項目1 = " + whereMap.get("項目1");
 }

てなかんじなプログラムが続くと思う。
自動生成の場合、項目名(項目1)のところを、テーブル定義から読み込み、null指定が可能かどうか、と、値を""で囲む必要があるかどうかを確認して、プログラムの後半部分を書き分けるのね。




で、本題のテストなんだけど、命令網羅でいいとすれば、Selectのテスト項目は、

・WHERE句に指定しなかった場合
・WHERE句に指定して、値がNULLのとき
・WHERE句に指定して、ちゃんとした値が入っているとき
・Where句のはじめが、この項目からのとき
・Where句のはじめが、この項目以前のとき

の5種類になる。ただし、はじめの3つは、ほかの項目についてもいえるので、これだけしか調べないとなると、

・WHERE句になにも指定しないケース場合
・WHERE句にNOT NULL項目以外のすべての項目を指定して、値をNULLにしておく
・WHERE句にすべての項目を指定して、ちゃんとした値が入っているとき

でいいんだけど、これだとたった3通りになってしまい、
行数のわりにテストが少なくなってしまうので、
(でも、これで大丈夫なこともおおいんだけど、マネージャーさんとか上の人に
おこられそうなので)まあ、上の5通りを各項目に対して行う。

 どうせ自動生成でつくるので。。

 でも、そうすると、今度、上のプログラム10行にたいして、テストが5個
(^^;)
やたらこまかいとなってしまったりするんだけどね。。。




 で、こんなかんじでやるので、テーブル数が増えても、プログラムは問題ない。

 一方、O/Rマッピングのソフトを使う場合なんだけど、項目をXMLなんかで書かないといけない場合、テーブル数が増えると、やっぱ、自動生成を使わざる終えない。
 また、O/Rマッピングツールを使ったら、項目のテストをしないでいいか?といわれると、設定ミスとかもありえるので、一応テストしないとということになる。
 で、全項目をテストするとすると。。。結局、O/Rマッピングツールをつかっても、自動生成プログラムを作って、テストと仕様書を作成しないといけないから、O/Rマッピングツールを導入する分だけ、てまになっちゃうのよね
(^^;)

 自動生成の場合、ドキュメントやプログラムが1種類、2種類増えても、たいして手間ではないので(というか、手間にならないように、プログラムを生成する手段がある)。




 てなかんじで、自動生成はなざかり?なのかしら。

 でも、そーすると、仕様書はExcelファイルで書かれているから、自動生成するためには、ExcelのVBAを知らないといけないように勘違いされてる風潮がある気がする。
 そんなことはない。

 っていうところが、実はオチなんだけど。。。
 ひえー、こんな時間、仕事しなくちゃ!

 っていうことで、オチの部分は、またこんど。


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

DB等の入出力の設計とテストについて考える(その2)

2005-09-12 17:53:45 | 開発ネタ

 前のブログ(その1)では、DBをアクセスするクラスとして以下の4つをあげた

1.DBの場合なんですけどO/Rマッピングを使う
2.J2EEなら、セッションBean
3.入出力用のハッシュマップを使い、テーブルごとにクラスを作成する
4.入出力用のハッシュマップを使い、1つのクラスで行う

で、さらに、その際の条件についてあげて、結果として、3ないし4の方法になるということまできて、時間切れとなった。
 ので、今回は、3についての具体的な内容について




「入出力用のハッシュマップを使い、テーブルごとにクラスを作成する」方法

 別にハッシュマップでなくても、レコードセットをそのまま利用してもいいんだけど、結局、テーブル名のクラスを作成し、そこの引数に、検索条件(それと検索対象を入れる場合もあり)を引数とした検索メソッドを作成し、検索するパターン。

 たとえば、
 テーブル名をTB001
 項目を以下の項目
ID 数字
item1 文字 5桁
item2 文字 10桁
 あったとすると、こんなクラスが用意される

 クラス名:TB001

 メソッド その1:
HashMap[] selectData(String[] komoku,HashMap[] whereKu,String SortKuNado)
 内容:
    whereKuに指定された条件をもとに、テーブルTB001にアクセスし、
    komokuに指定された項目(NULLのときは全項目)を検索し、
    結果をHashMapに返す(1レコード1ハッシュマップとし、配列で返す)
    SORTED BY , GROUP BY, HAVING句を指定する場合は、SortKuNadoに記述する
    なお、WHEREにおいて、 AND指定の場合は、1つのハッシュマップに、
                OR指定の場合は、別配列に入れてください
    例(item1 = "はい" ) OR ( ( ID1 >= 4 ) AND ( item2 = "いいえ") )
の場合(領域はとってあるものとして)
whereKu[0].put("item1","はい");
whereKu[1].put("ID4",">= 4");
             // >= などははじめにつける。 = は省略可
whereKu[1].put("item2","いいえ");


 メソッド その2:
int deleteData(HashMap[] whereKu)
 内容:
Where句で指定されたデータ(NULLなら全データ)を削除します

 メソッド その3:
int insertData(HashMap data)
 内容:
dataで指定されたデータを挿入します。

 メソッド その4:
int updateData(HashMap data,HashMap[] whereKu)
 内容:
whereKuで指定されたレコードに対しdataで指定されたデータに更新します。

 メソッドその5:トランザクションスタート
 メソッドその6:コミット
 メソッドその7:ロールバック(トランザクションキャンセル)

 などなど、こういったメソッドを持ったクラスが、自動的に生成されるものとする。
 こんなのが、一般的だと思う。ただし、where句の処理、Sorted By指定など、ここまでやってないかとは思う。またメソッド名はselectでなく、findが多いと思う。




「入出力用のハッシュマップを使い、テーブルごとにクラスを作成する」プログラムの中身

これは、こんなかんじ。

(1)WHERE句を展開して
(2)SQL文をつくる
(3)Excuteする
(4)受け取ったレコードセットをハッシュマップに展開
   →レコードセットを渡しちゃってもOKだけどね

(1)のプログラムは、下記のように、

String where = "";

if ( whereKu != NULL )
{
  for(int i = 0 ; i <whereKu.length ; i ++ )     if ( where.equals("") == False )
    {
      where = where + " OR ";
    }
    String[] key = (String[])whereKu[i].keySet().toArray(new String[0]);

for(int j = 0 ; j <key.length ; j ++ )       Object val = whereKu[i].get(key[j]);

if ( where.equals("") == False )
      {
         where = where + " AND ";
      }
      if ( val == null )
      {
        where = where + " " + key[j] + " IS NULL ";
      }
      else
      {
        switch(val.charAt(0)) //仕様で符号ははじめの文字に入れるようにしとく
        {
        case '<':
        case '>':
        case '=':
// このときは、""は、自分で書いている
           where = where + " " + key[j] + " " + val;
           break;
        default:
           //文字列のエスケープが、ほんとは、はいるはず。
           if ( val instanceof String )
           where = where + " " + key[j] + " = '" + val + "' ";
           else
           where = where + " " + key[j] + " = " + val + " ";
           break;
        }
      }
     }
   }


てなかんじで(感じをしめしただけで、ただしくないかも。いま、ノートパッドでかいてるから、プログラムもまちがえてるかもかも)where句をつくるか、

もしくは、

 String[] key = (String[])whereKu[i].keySet().toArray(new String[0]);

のように、キーをとらないで、
まじめに??ひとつひとつ

 if ( whereKu[i].get(キー項目名) != NULL)

と、項目名を聞いていくかんじにするものもありだとおもう。




で、とにかく、そんなかんじでwhehe句をつくり、それをあわせて

"SELECT " + komokuを文字にしたものまたは "*" + " FROM TB001 WHERE " + where + " " + sortKu

 みたいな感じでSQLを作って実行することになる。

 もちろん、ほかにPrepareStatementを作ってやる方法もある。

 そうすると、テストログは、こんなところにはいるはず
(1)SQL文
(2)正常に返ってきたとき(値や件数を表示)
(3)実行したらException
(4)その他のエラー

 で、こんなのは、きっと仕様書から、自動生成してるよね。
 手でプログラムを書くのは論外としても、
 XMLでやるっていっても、そのXMLを書くのが大変。




 で、項目の新旧項目の置き換えのために、受け取った結果(ハッシュマップ)にたいして、
 if ( 受け取った結果.get("新しい項目名") != NULL )
{
受け取った結果.put("古い項目名",受け取った結果.get("新しい項目名"));
}
 みたいなかんじで、新しい項目名で値が入っていたら、古い項目名でも値を入れておいてあげる。

 それと、CSVにするときは、Selectは、ファイルを読んできて、条件に一致したら、返してあげるみたいな感じにする。
(データの1行目に項目名を入れる形にすると、汎用性がもてたりする)




 で、テストなんだけど。。。

 って、かこうとおもったら、また時間がないじゃん(>_<!)
 じゃ、この続きは、またこんど(あしたになっちゃうかもね)



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

DB等の入出力の設計とテストについて考える(その1)

2005-09-12 14:19:25 | 開発ネタ

で、今日は、前に書いたとおり、DBの話

で、その話を始めるにあたり、まず、ここで取り上げるDBのプログラムというのは、どういうのをさすかについて、規定しておきます。

 たとえば、モデルの中、あるいは、Viewやコントローラーから直接DBにアクセスするようなプログラムは、今日の話題から除きます。

 なぜなら、たとえば、StrutsのActionクラスから直接SQLを発行するプログラムをテストする方法は、SQLを発行しているかどうかの問題にかかわらず、Actionクラスのテスト方法になります。
 Viewについても、Viewのブラックボックステスト(項目と、その値チェック法の組み合わせ)で行い、DBにアクセスしているかどうかは、付加的な問題だし、モデルについても、そのテスト方法は、単体のホワイトボックス、ブラックボックスとしての、モジュールの引数の境界値テストに落とし込めてしまいます。

 それらについては、このブログのほかで話しているので、そっちを見てください。




 今日の話の対象は、DBや、ファイル、プロパティなど外部入出力に関して、直接操作をするクラスの設計とテスト方法です。

これには、いくつかあります。

1.DBの場合なんですけどO/Rマッピングを使う
2.J2EEなら、セッションBean
3.入出力用のハッシュマップを使い、テーブルごとにクラスを作成する
  →この場合、テーブル定義書から自動生成する
4.入出力用のハッシュマップを使い、1つのクラスで行う
  →実はテーブルごとに、クラスがなくてもかまわない。。




■■ このようなクラスが必要になった背景

 では、なぜ、このようなクラスが必要になったのか、つまり、モデルから直接SQLを発行しないのかについての理由を書区と同時に、これらのクラスで要求される内容をかきます。

(1)実は、テーブル項目がよく動いてしまう。

 ふつう、ウォーターフォールで開発した場合、テーブルの項目は(プログラム開発前に仕様がかたまるから)動かないはずです。
 しかし、IT1レベルでのミスがあると、そのバグ修正のために、項目は動きます。
 (アジャイルの場合も、動くことはありえると思います。もちろん、バグ修正でも動くと思います)

 その項目修正のたびに、SQL文を修正するということになりますが、そうすると、おおきな開発の場合、項目の変更は、1日や2日では、修正があがってきません(メールで流せばいいと思うかもしれないが、関係者がわからないので、だれにメールを回すべきかすら、確定できないことがある)。
 その間テストできないと困ります。

なので、以下の要求を満たさないといけません

(1-あ)項目が変わって、変更項目に修正しても、コンパイル、リンクでエラーにならない
 (たとえば、その項目のgetter,Setterなどを作ってしまった場合、項目が削除されて、そのgetterも削除してしまったら、まだ修正していない人が、いた場合、そのメソッドを呼び出しているので、リンクできず、作成できない。これは、絶対に避けなければならない。同様に、クラスに項目があるのもまずい)

(1-い)項目が変わっても、変更期間内は、古い項目における値が以前と同様に取得できるようにして欲しい
 ただし、変更期間後は、古い項目における値は取得できないようにしてほしい
 できれば、警告をだしてほしいが、Javaのコンパイラのように、コンパイル時だけでなく、実行時にできるカラクリのほうが、のぞましい。

 この理由は、次のとおりです。

 項目変更、テーブル変更があった場合、朝会(あさかいとよんでね、別に社歌を歌い、社長の説教を聴くのではなく、朝、進捗報告を行い、変更点、問題などについて報告する会のこと。朝に限らず、夕会、昼会、夜会などもあることがある。スクラムでう、デイリースクラムに相当するんだと思う)で報告されると思います。
 朝会で報告が合った場合、マネージャーはその旨を報告し、プログラマーは修正し、修正後、単体テストを行い、構成管理にのせます。
 ということは、プログラマーが単体テストを行う時点で、修正はなされていないといけません(じゃないとテストできません)。ところが、そのとき、その修正している(単体テストをやっている)プログラムを呼び出している人たちもいます。その人たちが、IT1を行うには、修正前のプログラムの状態で呼び出しているわけです(単体テスト中=修正プログラムはまだ来ていない)。
 だから、その人たちのために、修正前の状態でも、呼び出せないといけません。

 さらにさらに、マネージャーがすべてのプログラムを把握してるわけではないので、修正連絡漏れがありえます(というか、普通あります)その人たちにわからせるためには、プログラムをよびだしたら、どの部分のどの項目が変わったのかを、知らせてあげないといけません。そのため、古い項目で呼び出されたら、メッセージが出ることが望ましいです。
 これをまとめると、(1-い)になります。




(2)実は、データベースでいくか、ファイルでいくかを決めかねるときがある

 (アジャイルはもちろん)ウォーターフォールでも、この項目を、DBにいれるか、ファイルでもつか、サーバーに置くべきか?クライアントローカルで持っておいたほうがいいか、決まらないで開発することがある(実際ウィリアムのいたずらは。、そういう開発に携わったことがある)。
 このとき、ある皮をかぶせてしまい、その中で、DBアクセスするか、ファイルでいくか(プロパティファイルで行くか)、サーバーとアクセスするかを吸収して欲しい。その上のモデルレベルでは、リソースは何であれ、その(皮の)クラスにアクセスすればいいようにしてほしい。
 というか、そうしないと、開発が進まない。

なので、以下の要求を満たさないといけません

(2-あ)DBもファイルも、リモートアクセスも、ぜんぶひっくるめて、あるクラスを呼べば、とにかく、レコードを取得できるようにしてほしい。DBもファイル等のリソースの違いは、このクラスで吸収して欲しい。





(2)実は、データベースを手配できないで、CSVでやってほしいときがある
 IT1フェースだと、いいんだけど、単体フェースだと、そんなにDBを用意できないときがある
 (単体を開発しているチームが、「お持ち帰り」で、DBソフト持ち出し禁止の場合など)
 そういうとき、CSVで単体はとりあえず、確認してもらいたいことがある

なので、以下の要求を満たさないといけません

(3-あ)Jarまたはクラスを変えただけで、DBアクセス用、CSV用が切り替わって欲しい
 CSV用は、指定されたとことに1テーブル1ファイル、ファイル名=テーブル名の形で入っていて欲しい。

 



 で、これらの要望を満たすと、O/Rマッピングを使うのではなく、普通

3.入出力用のハッシュマップを使い、テーブルごとにクラスを作成する
4.入出力用のハッシュマップを使い、1つのクラスで行う

になってくると思います。
ということで、3についてですが。。。




えー(@_@!)

これの設計方法と、テストの話(=ここからが本題)
を書こうと思ったら、もう、こんな時間だ。。
本題に入ってないじゃん(^^;)

お仕事しないといけないので、とりあえず、ここまで。


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

小売業や、サービス業における、標準的なエンティティ(その3:仕入れ側の続き)

2005-09-11 17:41:54 | Weblog

まえのブログに書いた仕入れ側のイベント(業務)
(1)新商品等の案内受け取り
(2)発注
(3)入荷・検品(仕入れ商品の)
(4)支払い(仕入れ商品の)

のリソースを考えます。
リソースには、3種類
登場人物
物(商品)





■■ 登場人物
登場人物は、すべての事象に、送り手(売り手)と受け手(買い手)があるので

(1)案内発送者-案内受け取り-案内受け取り
(2)発注先-発注-発注者
(3)納入業者-入荷・検品-受取人
(4)支払い先-支払い-支払人
なんて感じになる。このとき、
 案内発送者=発注先=納入業者=支払い先=>売り手
 案内受け取り=発注者=受取人=支払人=>買い手
となるのが普通。

 ただし、商品案内、つまり、
   新製品の商品マスタを本部におくり、
   本部は、各支店の端末に、商品データを転送し
   各支店が、商品発注を行い
   各支店の倉庫が納入先になる
 というケースや、発注までも本社で、納入先が各支店のような、本社一括発注の場合もある。
 この点を、各ケースごとに押さえておくことが重要。




■■ 物(商品)

 商品について、「(1)新商品等の案内受け取り」とは、実質、商品マスタ更新依頼である。
 発注に関しては、発注明細として、発注ー商品の対応、
 入荷に関しては、入荷明細として、入荷ー商品の対応、がある
 支払いに関しては、かならずしも、商品との対応が取れる必要はない(例:分割払い)




■■ 金
 金は、エンティティでなく、属性としてはいる。発注金額、支払い金額が、総額として必要。
 商品単価(および税込み価格)に関しては、商品マスタに入るのはもちろん、案内受け取り、発注に入る(入荷にはいっても、入らなくてもかまわない)




これをまとめると、こんな感じ

   案内送付元  仕入先     納品者      支払い先
    |      |       |         |
  (1)案内- (2)発 注 -(3)入 荷 - (4)支払い
    | |    | |     |  |      |
 案内受取人|   発注者|    受取人 |     支払人
      |      |        |
     案内明細   発注明細     入荷明細
        |    |       |
        し  ょ う  ひ    ん


・案内送付元、仕入先、納品者、支払い先は同一エンティティになることがある
・案内受取人、発注者、受取人、支払人は同一エンティティになることがある
・実際のイベントは、もっと細かく、いろんなことがあります。
 →でも4つのイベントのどこかに、たいてい入ると思います。




 ただし、イベントの順番は、必ずしも、この順番ではないです。これは、販売側にもいえることで、たとえば、この前書いたときは、受け渡しがあってから、支払いがあるように書いたが(普通そう)逆に、支払いをしてから、受け渡しを行うこともできます(チケットを販売して、コンサートを行うとか、現金書留の通販など)。

 とくに、コンテンツの販売などにおいては、いろいろな方法があり、WindowsのDRMにおいては、様々なビジネスモデルを想定し、そのモデルを組み合わせて、DRMが行えるようになっています。その詳細は、おいおい紹介していくと思います。




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

小売業や、サービス業における、標準的なエンティティ(その2:仕入れ側)

2005-09-11 15:40:44 | 業務のモデル化

 今日は、以前、小売業や、サービス業における、標準的(通論的)なエンティティと分析方法のまとめ のなかで、販売側のイベントについて書いたので、今日は逆に、仕入れ側のエンティティを書きます。この2つをあわせると、小売、サービスの全体のエンティティになります。


その前に、昨日のアクセス数について
昨日9月10日のアクセス数は、
1003PV、609IPで、アクセスランキングで119位でした!!
すごすぎ!なんで、こんなにアクセスが多かったんだろう。。。
それも、いつも、アクセス数のない土曜日に。。。
さっぱりわからん(?_?)




 仕入れ側のイベント(業務)は、おおきく4つ考えれれます。
(1)新商品等の案内受け取り
(2)発注
(3)入荷・検品(仕入れ商品の)
(4)支払い(仕入れ商品の)

なぜ、4つといえるのか?というと、これは、民法からきています。
民法のたしか、契約のところだったと思うけど、売買契約というのは、申し入れ(この商品、買わない?)と、承諾(うん、買う、売って!!)というので、成立します。
 契約が成立すると、義務が発生します。売り手は、物やサービスを提供し、買い手はお金を支払います。これが、売買契約です。
 (1)が申し入れ、(2)が承諾で、契約成立、(3)が財サービスの提供で、(4)が支払いということになります(大体の区分であって、実態はちょっと違うことも多い)




 ちなみに、以前書いた、販売に、(1)の申し入れがない理由は、申し入れ部分は、システム化しないことが多いからです。
 たとえば、ラーメン屋さんの場合、(1)はメニューや、お店の前に出ているレプリカです。
 それって、あんまり変わんないし、システム化するようなものでもないです。
 お弁当屋さんもそうです。

 ただ、通販などにおいては、考えれれるのですが、日々の提携業務とは、別システムにすることが、多いと思います(カタログ作成は、普通、販売管理とは別)。




 で、リソースについてなのですが、またこんど書きます。

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

ブラックボックステストの場合、コーディング前にテストのことを考えないといけない

2005-09-10 18:35:38 | 開発ネタ

 昨日のブログは、「すご!」っというほど、ヒット数があったので(IP数も、いつもより、多かったし)ということで、ちょっと、昨日の話しのつけたし
(というか、今日、DBのプログラムとテストの話にしようとおもったが、土日なのでやめて、月曜にしようとおもったので、今日は、つなぎの話)




 昨日のブログの方法でテストを行う場合、

 ホワイトボックステストのテスト項目は、テストする直前でも、作成可能。

 しかし、ブラックボックステストで、ログの値を確認する場合、当然、プログラムを作る前に、その入れ方が決まっていないといけない。そうしなければ、ログをいれることができない。
 具体的には、フレームワークを作成している間に、ログを入れる方法、箇所のガイドライン、環境の作り方をきめ、フレームワークを利用したコーディング規約の中に書くことになる。

 ログは、たいていDebugモードでいれて、入れる箇所はメソッドの
 ・入ってきたところ
 ・出ていくところ
 ・try-catchのエラーでキャッチしたとき
 ・SQL文を発行する場合のSQL文
 は普通に入るけど、単体でバッグ用としたら、ほかに
 ・分岐する場合(分岐の終わり、ENDIFやELSEの近くに入れる)
なんてかんじかな。はいってきたところ、出て行くところはレベルをかえる(Infoくらいに。。。すみません、あぱっちのろぐ4Jのレベルで書いてます)とかもある。

 っていうことで、事前に手を打っておかないと、できない。
 &
 プログラマに、フレームワークの説明書がなにより大事って教えないといけない。
 これだいじあるよ。


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

テスト仕様書の書き方というか、手抜きのしかたというか。。(その2:テスト仕様書の自動作成)

2005-09-09 18:36:42 | 開発ネタ

さっきのテスト仕様書の書き方のつづき

試験仕様書に書かれる内容として、

・調査項目(大分類、中分類、小分類と別れている場合がある)
・確認方法(目視、ログ、ほかエビデンスの指示)
・確認箇所と、どうなっていればいいかということ
・操作方法

とあり、前のブログで、「調査項目」について書いたので、今度は、操作方法




 操作方法は、基本的には、みかままさんの「自由に使える読書感想文」に書かれているようなことに注意して書きます
(注:といっても、まちがっても、仕様書に感想文を書くということではない。。あたりまえだが)

つまり、誤解なく伝えたい内容を伝える基礎技術として

・単文を心がける
・主語を常に意識しておく
・接続詞を適切に使うようにする
・相手に不足している知識は何か、を意識する


(斜体の部分はみかままさんのページからの引用、一部省略してます)
ということです。

ということで、実際には、
・まず、何々を、なんとかする、つぎに、何とかするというかたちで、動作を明確に書く
・操作をするときの対象物を明確にする(主語はたいてい、「テスター」だ)
・専門外の人が読んでわかるようにする
 →開発が炎上したとき、高卒の1年目の新人が、救援部隊として入ってきて、
明日から仕様書読んでテストしろといわれたとしても、わかるようにしておいたほうが無難
   →そういう人たちが、炎上している最中に入ってくるという、とてつもなく迷惑なことを
    平気でやられるケースがあるという意味だ。
・最後に確認ポイントを書く。

で、こうすると、相当文章が長くなってしまう。




たとえば、画面のテストをするとき

・初期画面から項目Aをクリックし
・画面Bが表示されたら、以下の項目に、次の値を入力し
    項目B-1  値 XXX
    項目B-2  値 XXX
    項目B-3  値 XXX
    項目B-4  値 XXX
    項目B-5  値 XXX
・ボタンCを押したときに、
・画面Cに遷移し、その項目C-1が、OOOOとなっていることを確認する
(目視確認)

とかになると、操作方法がExcelの数行文しかないところに書く場合、書ききれない。




そこで、2つの方法がある。

■■ テスト内容を自動化してしまう
 テストを自動化すれば、「TestNo001.txtのファイルを、入力ファイルのパス(別紙参照)におき、プログラムAを実行する。その後表示される画面の項目Cが、値XXXXになっていることを確認する」とかけばいいだけ。入力ファイルは、TextNo002.txt,TextNo003.txt...とテストごとに変えていけばいい。

■■ テスト操作内容を別紙(別シート)に飛ばす
 自動化しなくても、別紙に書くことが許されるのなら(たいてい、許される)「別紙:「テスト1の内容」を実行し、その結果表示される画面の項目Cが、値XXXXになっていることを確認する」と書けばいい。

 こうすると、テストNoをExcelのA桁,確認画面をB桁,項目をC桁,予想結果をD桁にいれ、

 E桁に

 ="別紙テスト" & A1 & "の内容を実行し、その結果表示される画面" & B1 & "の項目" & C1 & "が、値" & "D1" & "になっていることを確認する"

 と入れておいて、コピーすると、自動的にどんどんテスト項目が生成される。
 あとは、そのできたものを「値だけ」仕様書にはりこむ

 で、別紙のほうは、大体操作内容は同じなので、雛形を作っておき、変わる部分だけ、(みかままさんの読書感想文では、●だったが、XXXでも、なんでもいい)ある文字列にしておき、プログラムで自動的にかえても、検索で、確認しながら変えても、どっちでもいいから、作成する。




 これを行うためには、ホワイトボックステストの場合、「確認画面と項目、チェックするテスト、その結果」の組み合わせをExcelシートに書くことになる(番号はシーケンシャルに振る)が、それは、まさに、前のブログでかいた、試験項目のことなので、そこのやりかたでできる。あとは、結果だけを考えれば、OK。

 ブラックボックステストの場合、ログごとにチェックするとすれば、まず、grepで、ログのメソッドを含む行を表示し、どっかにコピーする。

 そいつを、表示項目ごとに、改行をいれてしまい、その後、項目名以外消す。

 項目名の1行ができたら、その行の前に、メソッド名をいれていき、そのあと、予想される結果をいれて、やっぱ、自動生成にもっていける。




 っていうのが、簡単なケース、実際には、ここまで簡単にはできなくて、これと、自動生成プログラムを組み合わせて、いろいろ書いたりする。

 また、別紙に飛ばしたとき、それをみて、監査の人が、「うん、妥当なテストをやってるね!」とわかるようにしておかないといけない。
 なので、自動化を完全にしたとしても、その旨わかるようなかんじで書かないといけない(ただ、「このプログラムをうごかす!」と書くだけでは、いけないっってこと)。
 そのため、書き方にも、どこでとめるかについての方法論みたいなもんもある。




 でも、こんな感じで、テスト項目は、大量生産ができる仕組みになっていて、とにかく、いちいち、手でかいていない。
 これをある派遣の人が見て、「すげー」と驚いていたけど、まあ、世の中、そんなもんです。
 驚くほどではありません。
 学生さんだって、「自由に使える読書感想文」をちょこっといじって、提出してるんでしょ。

 キャラクターの世界だって、インスパイ「ア」されて、似たようなものが、どんどん出てくる時代です。

 テスト仕様書だって、雛形からちょこっと変えて、自動生成しても、「すげー」と驚く時代じゃーございません。

 なんで、仕様書をみたとき、不自然な改行があったら、自動生成かもしんない??
 



 そいと、「なんで、自動化しているか」について、今、1つのこたえ(だれがやっても、同じ結果にするため)っていうのを書いたけど、もうひとつの理由として、回帰テスト(リグレッションテスト)を早くするためにも、自動化します。同じ条件でやれますしね。

 実際の自動化の様子について。。。
 うーん、文章力と時間がないので、うまくかけんかった(>_<!)

 おわびに、こんど、読書感想文の書き方でも。。。

 書いても、おわびになってないって!?


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

ジャストシステムのXFY、株価上昇に貢献してるみたいだけど。。

2005-09-09 15:33:09 | Weblog

 日本証券新聞(日付は、今日のもの、発行は昨日の夕方)によると、ジャストシステムの「すごいソフト」(って、たしか、日本証券新聞にかいてあったとおもう)のおかげで、ジャストシステムは、最近、株価が上昇し、年初来高値をつけているらしい。

 で、そのソフトに米国の大手ベンチャー(って書いてあった気がする、大手のベンチャーって、変な気もするけど)が注目とか。。。(今、記憶でかいているので、ちょっちまちがってたらごめんなさい)




で、そのすごいソフトとは、
 統合XMLアプリケーション開発・実行環境のxfy
ニュースリリースは、こちら、これが、10月だったかなに出るらしい。

うーん、でも、どうなんでしょーねー。

XMLをクライアントで操作できる。。

 たしかに、XMLでテストデータを作るときや、流通業など、XMLでの受け渡しフォーマットが決まっているときなどは、べんりかもしんないけど。。。

 ただねえ。。XMLが、ほんとうに流行なら、マイクロソフトのInfoPathとかもはやると思うんですけど。。

 っていうより、InfoPathとXfyの違いも、よくわかってなかったりする。。。

 もっとも、証券新聞には、そんな実際の内容なんて、
 いっさい!関係ない話なんだろうけど (^^;)


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

テスト仕様書の書き方というか、手抜きのしかたというか。。(その1)

2005-09-09 14:24:16 | 開発ネタ

 テスト仕様書の書き方のまとめ
 (なぜ、そんなのを書くのかは聞かないでくれ。書きたくなったからだ)

<<何を書くべきか(目的)>>

 テスト仕様書の目的は、テストをしてもらうために書くことという意味はもちろんあるのだけれど、そんなことより
・後で見たとき、テストが網羅されていることがわかること(他人が確認できること)
・その仕様書に書かれているテストの目的と、そのためのテストの操作の妥当性が、ほかの人が見ても(コンピューターのことを知らない弁護士や裁判官、国の仕事なら会計検査院の人が見ても)確認できること

 が必要になる。これがないと、品質がわからないので、プログラムを作りっぱなしと同様と、ユーザーやシステム監査人、裁判官に判断されても、また、「会計検査院が、予算を適正に使っているかどうか、確認できないって言われちゃうジャン!」と、こっぱ役人にいわれても、「反証ができない」。

 後者の、だれからみても、確認できるということから、
 ・一通りにしか解釈できない操作手順

 前者の網羅性から
 ・なにを調べているか、その調査項目と確認方法、確認ポイント
 が明確になっていないといけないことになる。




<<何を書くか(項目)>>

したがって、ふつう、試験仕様書には、

・調査項目(大分類、中分類、小分類と別れている場合がある)
・確認方法(目視、ログ、ほかエビデンスの指示)
・確認箇所と、どうなっていればいいかということ
・操作方法

が、最低限書かれる。

 ただし、テスト仕様書が1枚のシートになっていればいいが、そうでなく、テスト項目の台帳みたいな形式に書く場合がある。その場合、操作方法が書ききれない。
 また、手作業で書いていたんでは、実際、終わらない。そこで、テスト仕様書の自動化をするわけなんだけど、その話のまえに、調査項目について




<<調査項目>>

 調査項目をみて、テストが網羅されていることがわかるようにかくということと、
 調査項目と、確認内容がつながっている必要性がある。

 調査項目は、仕様書が、大項目、中項目、小項目のように別れている場合、タイトルですべてを表さないといけない場合、文章中に書く場合、さまざまな形式がある。

 ここでは、大項目、中項目、小項目のように別れている場合についてふれる。ほかの形式の場合には、これらから、適当に言葉をとって、つなげてくれ。

 テスト項目は、大きく、以下のように分かれる

■■ ホワイトボックステストの場合
(あ)どのモジュールの(プログラムAのメソッドBの、3番目のIF文の結果)
(い)どこの部分を、(変数Aが)
(う)どういうふうになっているかテスト(値が正しく入っている=正常系の値チェック)

■■ ブラックボックステストの場合
(あ)どこの部分(帳票・画面)の (発注画面の)
(い)どの項目の(商品名の)
(う)何チェックか(桁数チェック)

■■ シナリオや、契約に基づくテスト
(あ)どのシナリオの(シナリオNo321)
(い)何の部分が(発注金額が)
(う)どうなっていればいいの(大きすぎると入力できない)

そして、この調査項目の結果から、正常系と異常系にわかれる。
これの組み立て方に関しては、以前、マトリックスをかく方法で、このブログのどこかにかいておいた。

(あ)が大項目、(い)が、中項目、(う)が小項目になる




<<網羅性について>>

 ブラックボックスについては、たいてい、ログでしらべる。
 なので、必要な値について、全部のケースをしらべているかどうか、ログの箇所と、ソースを見比べて、かくにんできる。

 ホワイトボックステストに関しては、全項目について、必要なテストをしているかどうかが確認できればよい。なので、(い)が、すべての項目がでているかどうか、(う(について、項目が(い)のとき、考えられるテストを全部しているかを確認することになる。

 



<<確認内容とのつながり>>

 これは説明するまでもなく、(い)の項目の(う)をしらべているので、それが、そうなっているかどうかを調べる旨を、書いておけばよい。この記述がないと、調べるポイントが散漫になる(ために書いてる人もいるけど)だけでなく、せっかく網羅性があっても、網羅してるかどうかわからない。
 



で、操作方法(一通りにしか読めない操作方法)の書き方と、手抜きの仕方、テスト仕様書の自動生成、については、またこんど。




PS:2015年10月28日

 10年くらい経って、古くなったので、この記事をアップデートした内容を書いています。

テスト仕様書の書き方というか、手抜きのしかたというか。。(2015 Update)
http://blog.goo.ne.jp/xmldtp/e/1156bb825857eea0e5ccc28683602e4c

です。

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

エイベックス「のまネコ問題」その後

2005-09-08 22:42:38 | Weblog

 エイベックスから、のまネコの著作権についてのコメントが出たらしい
 ここ


■のまネコ著作権について
当社製品に使用されているキャラクター「のまネコ」は、「のまネコ」の著作権を管理する有限会社ゼンと商品化契約を締結した上で使用しております。


その有限会社ゼンは、ここ
このページ、会社のホームページとしたら。。。へんだよねえ??
だって、会社概要の、会社の場所とか、なにもないんだよー!
 これじゃー、ほんとーに会社あるの??
とか、言われても、しょーがないよねえ。。。
(会社自体はある「らしい」ここ

 つーか、この会社、へん。この日付もあやしいみたいなことが、YAHOOで書き込まれてる(こことか


それと、これに関連したブログっていうのもあったけど、消えてるらしい(ここにかいてある)


この話題、続きそう。。。


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

はてなキーワードの高速化と、韓国のハングル変換

2005-09-08 19:32:51 | Weblog

 はてなキーワードをblogに付与する処理について、はてなでは、正規表現を使っているけど、それを、TRIE木でやったら、高速になるよ!っていうのが、のってますね(ここ

 このTRIE木、文字を頭からTREEを作ってくかんじのやつだと思うんですけど、(こんなかんじ

 ウィリアムのいたずらは、これを使ったのは、おあそびで、ハングル語変換をやったとき。

 ハングルは、ローマ字と同じように、キーボード入力で、2文字、ないし3文字の文字を入力すると、1つのハングルができる(ただし、3文字目まで見ないと、確定できなかった気がする)

 そこで、どうしたかというと、キーボードから入力された文字の順にこのTRIEみたいなのをつくって、それで、2文字目までマッチして、3文字めまでマッチしなかったら、2文字を確定、1文字あまり、3文字目までマッチしたら、その文字で確定という形で作った気がした。

 実際には、Cだったかで作って、ツリーにすんのは、めんどうちっかったので、配列でツリーを表現した気がする。

 でも、すっごーい昔の話で、今は、ハングルなんて、忘れてしまった(なので、具体的な話ができないっす)。でも大丈夫、もはや、韓流ではなく、華流(ふぁーりゅう)の時代のようだ。
 じゃあ、中国語。。。もわからんぞ!
 でも、大丈夫。スペイン語以外は、怖くないから(スペイン語がなぜ怖いかは、ここ


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

エイベックスの「のまネコ問題」と会見の時期について

2005-09-08 17:14:59 | Weblog

 最近話題になっている、エイベックスの「のまネコ問題」について、本家のブログに書きましたが、(ここ)この問題自体の話は、本家のほうに書いてあるとおり。

(ちなみに、この問題は、「恋のマイアヒ」のPVで、AA(アスキーアート)のネコの絵(2ちゃんねる等に出てくる、みんなが使っている)が使われていますが、そのネコのキャラクターを、エイベックスさんが、オリジナルグッズとして販売するのという話)

 ここで、問題にしたいのは、YAHOOの掲示板の書き込みによると、(こことか)週末に、公式会見らしい。

 うーん、株主のことを考えて、すこしでも株価に影響しないため、週末なのかもしれないけど、どーなのかなあ。だって、週末までに、こうやって、ブログとかにいっぱいかかれて、なおさら騒ぎ、大きくなっちゃうと思うんだけど。。。

 やっぱ、会見は、問題おきてから、すぐにやったほうが、いいような気がする。


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