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

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

SQL Server 2017をインストールするとき注意!SSMSをインストールしないと

2018-09-15 22:09:54 | 開発ネタ
操作できない。

SQL Server 2017 Expressは
https://www.microsoft.com/ja-jp/sql-server/sql-server-editions-express
からダウンロードできて、それをもとにインストールすることができる。
長い時間はかかるけと、そこまでは順調。
で、ここで、SSMSをインストールするか、閉じて終わりにするか、みたいな画面になる。
閉じて失敗した。ここでは、SSMSをインストールするのがいいみたい。


SSMS(SQL Server Management Studio)は、テーブル作ったりする、管理ツール。
OracleでいうSQL Developerみたいなかんじ

もちろんインストールしなくても、コマンドラインからsqlcmdは打てるけど、ユーザーを何にしたらいいかとかわかんない。

なので、SSMSをインストールすべし!

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

Web系、フレームワーク利用時で、関数・メソッドが並んでいる場合の状態遷移表の書き方とか

2018-05-20 08:39:37 | 開発ネタ
状態遷移図・状態遷移表の書き方(基本編)
https://blog.goo.ne.jp/xmldtp/e/10c5e3d633b701a006bb4d615135a11d


で書いたことは、一般的なケース。実際には、以下のような状況がある。
その場合にどうやって状態遷移表を書くかについて




■ケース1:IF文で、プログラムを呼び出しているところがない。

 Web系などである。フレームワークを使うとこうなるので、多くのケースはこちらに属する。

 onClick()等(フレームワークの場合なんとかAction等)の関数が並び、IF文に分かれていない。
 この場合、状態遷移を表す変数すらない時がある。
 関数、メソッドのみが並んでいて、何かのタイミングでこれらの関数が起動されるというもの。

 ★この場合、onClick関数1つ、Actionメソッド1つを1イベントとすると書きやすい※
  そして、状態遷移だが、状態を保持する関数がある場合は簡単だけど、ない場合がある。
  ない場合、1つの状態ならばいいんだけど、そう考えにくい場合もある
  (画面系のフレームワークで、イベントを処理したあと、正常終了なら他画面に遷移することが、
   プログラムのほかに記述されているケース。struts等がこのケースにあたる)

 ★状態変数がない場合、上記で見つかったイベントを2つずつ取り出し(そのイベントをA,Bとする)
   Aのイベント終了後(ないしはイベント処理実行中に)、ほかのイベントを経ないでBのイベントが実行できる場合
      →AとBは同じ状態
   Bのイベントを実行するにはCのイベント(例えば「戻る」ボタンクリック)を経ないと実行できない場合
      →AとBは違う状態
  と見なして、状態を分けることができる。
   ●この結果、画面の場合は、画面ごとに1状態となる。
    (エラー画面も1状態か?とかはビミョーだけど)

※イベントは一般的には、外部割込みであり、外部割込み時の処理関数は別関数として書き、イベント登録時に
 処理関数(のアドレス)も登録するようにしているから






■ケース2:状態変数が2つ(以上)ある

 (1)2つの状態変数の組み合わせで、1つの状態の場合と、
 (2)全く独立している(=無関係な)場合と
 (3)ある変数のときに、さらに詳細に状態をとるとき

が考えられる。(1)のときは、その組み合わせが1状態となる。まとめるときは


SW-1     開始   |      動作中     |    終了
SW-2   ON  | OFF |  ON  |  OFF    | ON   |  OFF       

のような感じで、まとめていく


(2)は変数ごとに別々の図にする。

(3)は、(1)のケースと(2)のケース2通りある。
例えば上記の例で、ON OFFは、動作中しか関係ない場合

SW-1     開始   |      動作中     |    終了
SW-2          |   ON  |  OFF   |

というのもありだし

表1
SW-1     開始   |      動作中     |    終了

とし、別の表で

表2(動作中のとき)
      ON |    OFF

       
とするのもあり(実は(1)の場合でも、別の表にすることがある。
(2)のケースで(1)の書き方をすると、印刷できないくらい広がることがある)






■for,while文があり、何か回っているが、状態を表す変数やイベントを表す表が見つからない
 この場合、テーブルがあることがある。そのテーブルがすでに状態遷移表になっている。

 テーブルのある項目が受け取ったものの一部と一致していたら、そのテーブルに書いてある
 処理を実行するという形になっている。上述の「ある項目」を探し、それらがイベント、状態になる。


とりあえず、思いついたのは、こんなかんじ。

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

状態遷移図・状態遷移表の書き方(基本編)

2018-05-18 09:32:04 | 開発ネタ
新人さん向け




■状態遷移表とは

Wikipediaには、大きく2種類出ている。

(A)縦軸(または横軸)は現在の状態を示し、横軸(または縦軸)はイベントを示す。交差する箇所の各マスには、そのイベントが起きたときに次に遷移すべき状態を記述する(そして遷移に伴う動作があれば記述する)。
(B)縦軸(または横軸)は現在の状態を示し、横軸(または縦軸)は次の状態を示す。交差する箇所の各マスは、その遷移を発生させるイベントを記述する。グラフ理論における隣接行列を拡張したものと言える。

つまりS1→S2へ状態遷移するときにイベントEが起きるとすると
(A)縦軸 S1 横軸 E 交点 S2
(B)縦軸 S1  横軸 S2 交点 E
で表したもの。集計の仕方の違いなので(A) (B)は、変換可能

そして、(A)は、交点に書くものは2種類あることになる
   (1)遷移に伴う動作(=実行プロセス)があれば記述する
   (2)次に遷移すべき状態を記述する
以下、この(1)、(2)の見つけ方について例を使って説明する

(ごめん、ネットが使えない状態でブログ書いていて、今Wikipediaで確認したら、Wikipediaは(1)と(2)の
 順番が逆だった。以下の文を修正するのはめんどくさいので、Wikipediaとは逆の順番で(1)、(2)を振っている)





■例

 たとえば、こんな文があったとする
  まっすぐ行って、交差点を右、そして200m行ったら、今度は左、駅が見えるから駅に着いたらおろしてね。
  でも、料金が1500円になったら、そこでおろして

この場合、状態
   1.現在地通過
   2.交差点通過
   3.交差点から200m先通過

イベント(状態が変わる可能性が起こったOR何かしないといけない)
   あ。交差点につく
   い。交差点から200m行く
   う。駅に着く
   え。料金1500円になる


これの状態遷移表は、こんなかんじ

(1)その時に行う処理を書く場合

            現在地通過    交差点通過       交差点から200m通過 
交差点につく      右にまがる
交差点から200m            左に曲がる
駅に着く                             おろす
料金1500円     おろす      おろす         おろす


(2)次のステータスを書く場合
            現在地通過    交差点通過       交差点から200m通過 
交差点につく      交差点通過
交差点から200m            交差点から200m通過
駅に着く                             終了
料金1500円     終了       終了          終了







■状態遷移表の書き方

●(1)を作成する

(イ)状態を格納する変数を見つける

(ロ)「(イ)の変数」に値をセットしているところを探す。そのとりえる値が状態
   →Cだと#define、Javaだと、static final等(あとenumとか)で定数をとっている場合が多い
    それを探すほうがいいかも

(ハ)ifやswitchで「(イ)の変数」をもとに 分岐しているところを探す。
   そのIF文またはSWITCH文で、「(イ)の変数:以外の条件等を聞いているとき、
   それはイベントとして考える

  例:
   switch(sts)
   {
   case  現在地通過:
     if (( GPSによる現在地の緯度 == 交差点の緯度) && ( GPSによる現在地の経度 == 交差点の経度))
     {
        右に曲がる
        セーブ移動距離=現在までの移動距離
     }
     break;
   case  交差点通過:
     if((現在までの移動距離-セーブ移動距離) == 200 m)
     {
        左に曲がる
        セーブ移動距離=0
     }
     break;
   case  交差点から200m通過:
     if (( GPSによる現在地の緯度 == 駅の緯度) && ( GPSによる現在地の経度 == 駅の経度))
     {
        終了(降りる)
     }
     break;
   }
    

(二)(イ)の変数の値で(ハ)が成立するとき、することを、表の(イ)、(ハ)の交点に書く

  例:上記の表(1)

    現在地通過 & 交差点につく(GPSうんちゃらの部分)→右に曲がるになっている


●(1)から(2)を作る

(ホ)交点の関数が、「(イ)の変数」を書き換えていたら、書き換えた値を交点に書く
   書き換えていなかったら、表の縦軸の値を書く

 例:右に曲がる関数

 void 右に曲がる(int sts)
 {
   if (sts != 現在地通過 )
{
       エラーメッセージ(”まがるな”);
return;
    }

    // ここにくるのは、現在地通過だけ
    まがる処理(右)
    sts = 交差点通過
 }

→「sts = 交差点通過」で「イの変数」(=sts)が変わるので、「交差点通過」を書く






■状態遷移表から状態遷移図を書く

●(2)の状態遷移表があるとき

(へ)(2)の状態をノードとして書く

(ト)横軸の状態が起点、交点が終点で→を書く。
   その→のところの「イベント」が「ガード条件」




 文字にすると、余計わかりにくくなったので、今度暇なときに図を入れる




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

単体テストの自動化で考えるべきこと

2016-08-15 13:47:37 | 開発ネタ
前に

テスト自動生成で考えるべきこと概論
http://blog.goo.ne.jp/xmldtp/e/a6aaf9ac55d4eced150bcb48ae7544d3

で、「各テストにおける自動生成について書こうと思った」と書いたけど、
その「単体テスト」版について、書いてみた。




【単体テストの種類】

 単体テストと呼ばれるものには2種類ある
(1)ソースコードの中身に基づいて行うもの(ホワイトボックステスト)
 ソースコード中の
   命令すべてをテストする(命令網羅C0)
   if,switch文のすべての分岐をテストする(分岐網羅C1)
   分岐の組み合わせ条件すべてをテストする(条件網羅C2)
 C0,C1は絶対100%、C2は建前100%?を目指してテストする

(2)ソースコードは見ないで、インターフェースをもとに行う(ブラックボックステスト)
   メソッド(ないしは関数)の、引数やアクセスするDB、ファイルの値などを
   変えて、仕様を満たしているか確認するもの

※ブラックボックステストは、ソースを見ないテストのこと。なので
 単体テストだけでなく、結合、総合テストもブラックボックステストとなる。

 
 (1)は、GDBなどを用いて、プログラム中の値をセットしてテストする。
 ということは、もし、コンパイラのIF,SWITCH条件をもとに、命令・分岐・条件の
 テストケースを作成し、そのテスト仕様書を生成、かつ実行するgdbのスクリプトを
 自動生成することは、技術的に可能に思える。しかし、寡聞にして、そのような
 ツールがあるとは聞かない。・・・なにか、理由があるのか?

 とにかく、そんな感じで、今回の話題には取り上げないこととする。

 以降(2)について、説明する。




【テスト対象】

(2)において、テスト対象となるのは、大きく以下の2つ。
   (あ)メソッド(関数)の全引数の境界値テスト
   (い)メソッドの返り値等、結果の同値テスト
 
(あ)について、

●引数の値を入れて調べる(値をいれないでnullで済む場合は、nullの場合も調べる)が、

 そのとき、引数の取りうる値が、男・女など、固定の値の場合は、その値を調べればよいが
 (異常系として、わざと、それ以外の値も調べるが)、整数、実数の場合、20以上とか、
 ある値の前後で動作が異なる時がある。その場合、
    整数値であれば、  その値ー1、その値、その値+1
      を調べる。20以上だったら、19,20、21
    実数の場合、その値は当然調べるが、その値より大きい値、小さい値を適当に調べておく

●返り値については、返り値がいくつかのグループ化ができる場合は、そのグループになる
 テストケースを少なくとも1つは用意する。例えば、20歳以上は大人料金、20歳未満は
 子供料金の場合は、大人料金、子供料金の両方のケースを調べる。


 これは、一見、引数の境界値を調べれば、同値条件すべてが調べれられそうだが、
 (そうなりこともあるが) 調べられないこともある。

 たとえば、引数が会員NOで、関数内で会員DBを会員NOでアクセス、年齢を取得し、
 その年齢をもとに大人料金、子供料金を決める場合、会員NOの境界値はないので、
 大人料金のケース、子供料金のケースが、カバーされるとは限らない(例:すべて大人の
 テストデータを作ってしまった場合)。この場合、DBのテストケース等を工夫して、
 両方のケースができるようにする。




【テスト自動化】

・単体テストに限らず、自動化するときには、なんかものすごいツールをつくるというよりは、
 ゴミプロとか、マクロで小さなプログラムを作って、使い捨てるぐらいの気持ちの方がいい。
 プロジェクトによって、テスト中にDBのテストケースを操作しなくちゃいけなくなったりと、
 いろいろなので、その場にあったプログラムを作り、あとは修正するより新規に作った方が
 速い。

・単体テストで作るべきものは2つ
  仕様書
  JUnitテストスクリプト
 これを、以下の入力から作る
  メソッドの引数・返り値(これは関数・メソッドから抽出できる)
  引数の境界値と返り値の同値(入力してもらう必要有)
 そして、作業中に、予想されるテスト結果も入力する

・これを、以下の手順で作る
(a)メソッドの引数、型、境界値等の入力
(b)テストケースと結果の入力
(c)自動生成
以下、詳細に説明する




■(a)メソッドの引数、型、境界値等の入力
ExcelシートまたはCSVファイルに以下のように

各クラスの各メソッドの引数ごとに1レコードとし、引数名、型、その引数の境界値・取り得る値を入力する
また、返り値がある場合、(引数名をreturnとしているもの)その型と、同値条件を書いておく
ここで、型がenumとあるのは、特定の値しか取り得ないときのもの
引数で何も書いていないのは、境界値がない(たとえば、y=ax+bのx,yのように、xとyの関係が1つ)
値で何も書いてないのは、値が1グループ(たとえば、y=ax+bのx,yのように、xとyの関係が1つ)
  または、返り値なし(void)

ここから(b)を自動生成(ないしは人力生成)する

※ここまでの作業、手ですべて入れる必要はない。以下の手順で作業量は減る
・grepでソースファイルから、 publicやprivate等をふくむ行をとりだして
・そのうち、(をふくむ行を抽出し(これで、メソッド(型 引数・・・)の行抽出)
・各行に適当にタブと改行をいれて、CSVファイルを作って読み込ませてもOK




■(b)テストケースと結果の入力

自動生成した結果がこれ

Excelの場合1シート1メソッド(CSVの場合1ファイル1メソッド)にしたほうが、作業はやりやすいはず

●(a)のシートの型と境界値に基づいて、各レコードを作成する
引数がintの場合、境界値があれば、境界値ー1、境界値、境界値+1のレコードを作成し、
  境界値を「対象値」に
  境界値+1等を「テスト観点」に
記入する。
引数がdouble,floatの場合、境界値があれば、境界値より小、境界値、境界値より大のレコードを作成、
引数がenumの場合は、enumのものと、「それ以外」というものを作成
引数が(Arrayや自分で作ったなどの)クラスの場合、nullと、値設定済みを作成
最後に例外ケースを作成する。

対象値のよこに引数を書いていく。その値を設定することになる。
自動設定時は、上記のように分かるところだけを埋めておき、あとは手作業で埋めることになる。

returnは、その引数を設定した場合、取り得る値を書くが、自動生成時はわからないので、空欄
 手作業で埋める

その横にDB操作・その他とあるのは、引数を設定するだけではだめで、DB操作やフラグ操作などが
必要なもの。例外を出す時には必要なことが多いので、自動生成で例外の時にいれておいてもまあいい。
(今回は入れている)




●これで、手作業で値を埋めていく。こんなかんじ

各引数(a,b)とreturnをすべて埋める。この段階で、テストケースを追加したほうがいい場合、
他のテストと一緒にやれるので、ケースを削除する場合がある。たとえば、bのフラグは、
会員(1)、非会員(2)で、
  非会員の場合、20歳未満と60歳以上が170円、それ以外は240円
  会員は何歳でも170円という規定になっているとすると、
境界値が関係するのは、非会員(b=2)の場合なので、2を設定している。
で、そうすると、b=2のケースは調べているので、そのケースを削除している
(b=1をあえて設定して調べている)




■(c)自動生成

ここから(c)を自動生成する。詳しい生成方法は、ケース(=プロジェクト)によって、
ドキュメント、スクリプトが違うだろうから省略する。

ただ、自動生成プログラムにこだわらくてよく、効率的なら、Excelのセルに適当な言葉を
いれて連結してもよい。
というか、小さい規模なら、上記のことを考慮に入れて、手作業でスクリプト、ドキュメントを
作った方が・・・はやいかな(^^;)

また、DBの冷害などを起こすところは、// DB例外 のようにコメントとして出力し、
手作業でコーディングしたほうが早いかもしれない(ただし、この場合、保守に注意)。




単体テストは、こんなかんじ。

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

「超高速開発 Magic xpaを全部見せ」に行ってきた!

2016-07-01 18:22:34 | 開発ネタ

7月1日
どこまでできる?超高速開発 Magic xpaを全部見せ
に行ってきた!ので、メモメモ




■アプリケーションの構築とデプロイのためのよりスマートな方法
Magic xpa Application Platformのご紹介

・会社紹介
 パートナー800社、利用社3万5千

・主な2つのプロダクト
 今日説明 Magic xpa
 EAIツール magic xpi

・超高速開発に求められるのは
 開発ツールにもとめられるのは
  人材不足への対応
  業務部門の要望対応
  開発工数削減
  OS、プラットフォームの変更
  モバイル対応

 メリット
  生産性
  メンテナンス性
  プロトタイプ手法
  品質の均一化

 Magicの生産性評価
 3~8倍?アプリケーションによる
 →保守、メンテナンスがやりやすい
 適用できる

 国内販売実績
 マジックが47%(約半分)→ただし、単年度
  :シェアは、こんなもんじゃない

 パッケージソフト開発での実績
  富士通マーケティング、
  日立システム
   :
  ホテルシステム
   :

 主な業種
  タクシー
  消防署
  酒販小売
   :

・事例
  富士通テン
  セコムテクノサービス
  松本商工会議所
  沖電気
  スパリゾートハワイアンズ
  金融機関向け 渉外支援システム
  サンコー 作業実績管理システム
   →スパイラル開発で
  日本りライアンス
   →SAPをノンカスタマイズで導入
     →中間DBをつくる
    アプリケーション作成
  学研:在庫照会、受注システム
  ある会社:Accessの基幹システムをMagicで
   →画面、帳票同じ

・製品紹介
 Magic xpaとは
  パソコンのアプリケーション
   →Web→スマートデバイス
   ワンソースで作れる

  Magic実行環境(Magicエンジン)がある
  業務処理を書く

 メタデータ・ドリブンの開発と実行
 開発環境→実行環境(XML):メタデータ→Magicエンジン

・2つのひみつ
 リポジトリ
 まじっくえんじん

・リポジトリ
 データリポジトリ
 プログラムリポジトリ
  →Visual Studioでフォーム

 クロスリファレンス機能
 漏れがない

・まじっくえんじん
 機種依存部分の吸収
 DB依存部分の吸収
 共通ロジックを内蔵
  共通部分があり、ビジネスロジックのみ
  10コマンドのみで構築
  150以上のイベント
  500以上の組み込み関数

・インメモリ・データグリッド
  ミッションクリティカルなシステムをノンストップで
   →共
有メモリにメモリを持っていて、開いているソフトで処理する
  これが、デフォルトで入っている




■サンプルデモ

・Yahooでパッケージソフト
  →パッケージソフト.com

・長く使ってもらう→継続性

・MS-DOSの販売管理を持ってきた事例
・もうすこし、画面きれいに RIA
・フロントをブラウザでやる
・モバイルも動きます

■作り方
・開発環境立ち上げ
 環境設定(DB)

・モデルリポジトリ
 項目を定義
 ボタン→共通部品

 クロスリファレンス
 APG:アートプログラムジェネレーター:プログラムをつくる

・プログラムリポジトリ
 1行が1本のプログラム
 CRUDは、入っている

 フォームを複数持たせる
  デバイスごとの画面切り替えができる

 修正




■製品体系とサービス
・製品体系
  開発環境 Enterprise Studio(フル) 60万
  RIA 18万
・実行環境
  クライアントエンジン
  サーバー側エンジン
  RIA
 →価格表を見てね 5ユーザー刻みくらい:同時使用
http://devnet.magicsoftware.co.jp/magicxpa/magicxpa3/magicxpa3purchase/

 スレッドライセンス
 ソフトウェア
 RIAサーバー 同時使用ユーザーライセンス 243000から
 モバイルライセンス やすく
 →価格表を見てね

・支援ツール
 オプティマイザ

 Reports Magic マジックソフトウェアジャパンが作った

・サービス
 トレーニング
   基礎を受けたうえでRIAさらにios,andriod
 プロフェッショナルサービス
 マイグレーションサービス、スクラッチ開発も請けている

 テクニカルサポート
 MOS:まじっくおんらいんせみなー
http://esupp.magicsoftware.co.jp/MOS/Start/MOS_Start.htm

 自習書は無料で、ある
http://devnet.magicsoftware.co.jp/skillup/magicskillup/

 教材:WITソフトウェアさんが出している
 ソース公開パッケージ:それをもとに修正、販売してOK!

 モバイルサンプル:おしえてスマホCRM パートナーがカスタマイズ、販売
  →商奉行むけ OBCさんが販売

 ハンズオンセミナー:無料 手ぶらでOK

 MOS
  →MagicでつくったRIAなアプリケーション

 Magic xpa RIAデモサイト
http://devnet.magicsoftware.co.jp/magicxpa/msj_demomenu

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

IOTのシステムをUMLを使って設計するフロー

2016-06-29 11:56:00 | 開発ネタ
ちょっと話す機会があって、
こんなかんじかしら・・・
って、説明したのをシェアシェア!




(1)いちばん、やりたいことの中心のシナリオをまとめる
 ・人感センサーで、店内の通行量をはかり、30秒おきに、本部に送って結果が見れるようにする

(2)なんについて、何で、何をするか、決める
  →「なんについて」をユースケース、「何で」アクターにすると、ユースケース図が書ける
 ・例「なんについて」:人気スポット集計(いいのか?この名前で)
   「何で」人感センサー、本部、

(3)上記(2)で決めたことを実現する為に、必要なものや事前にやっておくことを
   考えて、ストーリー(シナリオ)を作る

 ・例:人が通ったら、人感センサーがON
   ONになったら、端末で、人数1UP
   端末は、30秒ごとに本部にデータ送信、送信後、カウントを0に
   本部は、端末からデータを受け取り、DB登録
   本部は30秒ごとに店舗交通量表示画面をリフレッシュ

  →ストーリー(上記の例のようなもの)を、ユースケース記述とする

(4)上記(3)で出てきた「もの」を、1レーンとして、ユースケースごとに、業務流れ図を作成する
  このとき、入出力を明確にして書く。
    入力は、通信・DB以外として、センサーと画面がありえる
    出力も、通信・DB以外として、アクチュエーターや画面・帳票・Excel等ファイルがありえる

 ・例:
    人、センサー、端末、本部を各レーンとして、
    業務流れ図を書く
    ※レーンはアクター以外もありえる
    (上記だと、アクターにイベントを起こす「人」や、
     内部の資源である「端末」も入る)

  →業務流れ図がアクティビティ図になる

(5)業務流れ図をもとに、シーケンス図を作成し、
   メッセージ交換内容を明確にする

 ・例:アクティビティ図から、メッセージが発生するのは
    人感センサーと端末:GPIO?ならON/OFF
    端末と本部:時間+場所+人数、これ以外のメッセージ居る?

  →シーケンス図を描きましょう

(6)データ入出力部分の画面や、DBなど、決まっていないものの項目を決める
   画面は、画面定義書(=画面遷移図+画面レイアウト・画面項目定義・アクション定義)
   DBは、DB定義書(=ER図+DBテーブル(項目)定義)
   というかんじで・・

 →画面遷移図は、書く気になれば、状態遷移図で表現できる
  DB定義書は、クラス図で表現できる


(7)上記(4)で作成した、業務流れ図を、レーンごとにみる。そうすると、
   どっかから、「イベントが起こり、一連の処理をして、どっかに飛んでいく」
   という流れの繰り返しになる。

   このとき、「イベントが起こり、一連の処理をして、どっかに飛んでいく」
   を1つの状態とする。
   そうすると、1レーンごとに業務流れ図をみると、
   ・何かの処理をしている状態と、
    何もしていない状態の繰り返しになる。
    各状態の遷移を、状態遷移図であらわす。

 ・例:端末のレーンに着目する
   「センサーからONが入ってきたら、カウンターを1上げる」という状態と
   「30秒ごとに、本部データ送信、カウンターを0に」という状態がある。
   上記状態を「センサーON」、下記状態を「本部転送」とする。

   ただし、ここで、何もしないという状態が問題になる。
   「センサーON」と「本部転送」が独立して起こるなら、何もしない状態は、
   「センサーOFF]と「転送まち」状態になるが、
   「本部転送」中は「センサーON」処理をしないのであれば、何もしない状態は
   「センサーOFF&転送まち」状態の1つとなる。
   これは、仕様により判断する。

 →状態遷移図は、ステートマシン図です。

(8)上記(7)の業務流れ図には、(4)で入出力を書いた。
  なので、(7)で振った、どの状態のときに、どの入出力を行うかわかる。
  また、(5)のシーケンス図は、(7)の業務流れ図の状態に対応できるはずなので、
  (どちらも同じ(4)の業務流れ図を基に作っているから)
  その状態のときに、どのメッセージを投げるかがわかる。

  そこで、各状態において、どのような入出力と、メッセージが必要かを、
  (4)の業務流れ図と、(5)のシーケンス図をもとに、状態ごとにまとめる。

  例:端末
   case センサーONのときは、
      GPIOから、どこかへ保存
      break;
   case 端末のときは
      保存データを読み込み、(5)で考えたメッセージを作り、本部へ送信
      break;

 →これは、もう言葉で書くかんじなので、UMLつかわない。

(9)実装する
  Arduinoのプログラムで、状態がどのときは。。。とか、コーディングしていく

(10)テストする
 がんばれ!


いじょう・・・

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

バグの信頼度曲線(成長曲線)書いて、予測しておいて…といわれ、途方にくれたあなたへ

2016-03-25 15:29:37 | 開発ネタ
この前のエントリ「バグの成長曲線(ソフトウェア信頼度成長モデル)の係数の意味」で、式の変数の意味がわかると、Excelで求められるって書いておきながら、肝心の求め方を書いていなかった!というので、今日は、バグの信頼度曲線(成長曲線)書いて、予測する方法を書きます。




■お題

 あなたが、残念ながら情報学科とか、データを扱う学科を出てしまったとします。
 上司は、当然のことのように、

 今、バグの実績があるんだけど、
 これを成長曲線って言うの、
 S字曲線って言うのにあてはめて、
 今後、どれくらいのバグがでるのか、
 何時頃収束するのか、予測して欲しい

と、言ってきたとします。
実際には、大学では教えていないかもしれません
(たぶん、教えないと思う。このレベルだと、修士で教えるんじゃないかな?)
でも、「出来ません!」っていうと、

  「おまえ、情報学科出てきたんだろうぶつくさぶつくさ・・・」

といって教えてくれません。
どうしたらいいんでしょう・・・

という状況




■概要

 今回はExcelでやります(Rでも出来るけど、今回はExcel)。

 まず、バグの実績に対して、信頼度曲線をあてはめないといけません。
 当てはめるべき信頼度曲線は、

バグの成長曲線(ソフトウェア信頼度成長モデル)の係数の意味
http://blog.goo.ne.jp/xmldtp/e/5c5bb699055e3c376cf1cf61ece3e7d4

で書いた、指数形、遅延S字形、習熟S字型など。

で、その関数に対して、a,b,cの値を最小2乗法であてはめを行います。
このとき、Excelのソルバーを使います。

a,b,cが決まれば、あとは、日数を延ばしていけば、予測できますよね。




■準備1.ソルバーを入れる。

ソルバーを使います。Excelに入っているか、確認してください。
Excelを立ち上げて、「データ」に「ソルバー」って言うのがなければ、
入っていません。入れましょう。

入れ方は、

第九回 1分で完了! 便利なExcelアドイン「ソルバー」を追加しよう!
http://www.hello-pc.net/howto-excel/solver/

にありますが、うちのとは、バージョンが違ったので、うちの場合を披露します。

1.新規作成するようなときに出すボタンから、
  下にある「Excelのオプション」をクリック

2.出てきたダイアログ
  アドイン→ソルバーアドインを選択。下で「設定」ボタンをクリック

3.出てくるダイアログで「ソルバーアドイン」にチェックを入れて、OK

4.以下のダイアログが「出てきたら」、「はい」をクリックすると、インストール実行

で、インストール完了




■準備2.データ入力

 準備1は、1回やればいい。今度は、毎回行うこと。
 曲線の元&予測する為のデータを入力します。

 A列に、日数(または、時間数、週数)などを入力します
 日にちではなく、開始日を0として、経過した日数(または、時間数、週数)
 を書きます。

 B列には、実際のバグの数を書きます(A列の日数に対応させて・・・ですよ)

 A,B列は、本当はC,Dでも、F,GでもOKです。
 でも、隣接している列のほうが、やりやすいはずです

 以下、A列に日数、B列に実績値を入れたとして、話します。




■成長曲線の式をきめ、邪魔にならないところにa,b,cをおく

まず、今回あてはめを行う成長曲線の数式を決めます

例えば、指数形の場合式は、a(1-exp(-bt))です。

今回の例は、これにしましょう。

この中で、あてはめを行うのは、a,bです。

なので、a,bの値を、適当なところ(今回は後で示しますが、
aの値をセルB16に、bの値をセル17)におきます。
このとき、値はテキトーでいいです
(本当は多少考えますが、考え方は、失敗した後で説明するので
 今回は適当に・・・)




■理論値と最小2乗の値をおく

C桁には、計算で求めた理論値を書きます。
今、式はa(1-exp(-bt))です。
そしてaはセルB16、bはセルB17にあるので、

●C列のはじめC3は、

=$B$16 * ( 1 - EXP( -1 * $B$17 * $A3 ) )

となります。

●D列は、実績値と理論値の差の2乗を求めます。
2乗を求めるから、最小2乗法です。
たとえば、D3だと、

=(B3-C3)^2

です。

●D列の一番最後で、最小2乗の合計値を求めます。
 D3~D13まで埋めたとすると、D14で、
 =sum(D3:D13)となります。

ここまで行うと、以下のようになります。




■ソルバーの起動

ここで、「データ」タブの「ソルバー」をクリック
(上図で赤く囲ったところ)

出てきたダイアログで、

「目的セル」は
  最小2乗の合計値。今回はD14

「目標値」は
  ”最小2乗法”なので、最小値

「変化させるセル」は
  a,bの値のセルのこと。B16とB17なので、
  そのセルを囲むと、図のように出てくる

今回は制約条件はいれなくていい・・
ので、これで、「実行」ボタンを押して、実行!




■大失敗

そうして出てきた結果が、こちら!

a,bと理論値が変化している
理論値全部26.8って、
一直線やないか!
だめだめ、却下!

このように、テキトーにa,bを入れてしまうと、
そのあたりでよい答え(局所解)に陥ってしまう。
なので、ある程度まじめにa,bを決定しよう。

ちなみに、出てきたダイアログ「キャンセル」をクリックすると、
元の値に戻る




■a,bの値をきめる。

前に書いたとおり、aが収束値なので、収束しそうな値を書く
(はずれてもぜんぜんOK。テキトーに)

bですが、a(1-exp(-bt))なので、図の半分くらいのところに点を打ちたいなら、
1-exp(-bt)=1/2くらい。ここで、exp(-1)=1/2.7位なので、
実績値が真ん中ぐらいにあるときのtの値に対して、-bt=-1位にしたい。
いま、t=1のとき実績値が16で、ちょうどいいかんじなので、
-b*1=-1,b=1

って、ここまで考えるのがめんどくさかったら、テキトーでいいよ。
それがいやな人は、以下の手順で求める

・収束する前(できれば半分くらい)のtの値をもとめる
・そのtの逆数をbとする

こうしたのが、下の図




■グラフかいてみた

で、もう一回「実行」

こんなんでてきました。「OK」で、この値が入る

理論値と実績をグラフにして見ました




■予測する場合
A列をさらに下に伸ばし、
C列を下に伸ばす(フィルする)、ないしは、C列のどこかをコピー、下にペーストしていく




■式を変えたい場合
C列の式をかえる。習熟S字の場合、cがでてくるので、
B19にCの値をいれ、ソルバーのダイアログ、
「変化させるセル」を「$B$16:$B$19」に変える

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

バグの成長曲線(ソフトウェア信頼度成長モデル)の係数の意味

2016-03-24 12:12:16 | 開発ネタ
よく、累積バグ数をかいて、S字カーブとかいうけど、
あのカーブの数式と、その係数の意味がわかっているのか、
意識あわせしたいことがあったので、
ここで、みなさんとシェアしたいと思います!




■そもそも、「ソフトウェア信頼度成長モデル」の式は?

物事を知るには、まずは、Wikipediaだ
(っていうと、大学の先生からは怒られるが、ふつうそうだ)

Wikipediaの信頼度成長曲線によると(以下太字は、上記サイトより引用)


信頼度成長曲線(しんらいどせいちょうきょくせん 英:Software Reliability Growth Curve)とは、横軸に日付、テスト時間、またはテストケース数、縦軸に累積バグ発見数をとったグラフ。S字の成長曲線を描くことが多い。
プロジェクトの進捗状態の確認などに用いる。
決定論的モデルとして、最小二乗法でゴンペルツ曲線やロジスティック曲線に近似したり、確率モデルとして、非同次ポアソン過程モデルなどで表したりすることにより、現在の状況から今後の予想を立て、テスト進捗管理、バグ収束率の予測、残バグ数の予測などに用いることもある。
収束を見る場合に、横軸に日付を使った場合、テストをしていないからバグが出ないのか、テストをしてもバグが出ないのかの区別がつかないという問題がある。

・・・式がない。こまった・・・

式が出ている論文をさがすか・・・

ここ

ソフトウェア信頼度成長モデルに基づく最適リリース問題
http://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/0680-06.pdf


ソフトウェア信頼度成長モデルは4つ知られている。
その式を上記論文から切り貼りして、引用する。

ちなみに、この4つのグラフ、求められるツールがあるみたいなんだけど(このリンク先)
以下の式の変数の意味がわかると、Excelで求められるので、ま、いっか・・




■4つの式のうち、これから説明するもの

まず、指数形がキホン。このa,bの意味をこれから説明する。
その後なんだけど・・・

 修正指数形ソフトウェア信頼度成長モデルは、
  そのΣが、i=1から2(1と2)なので、その式は
  a*( p1(1-exp(-b1t)) + p2(1-exp(-b2t)) )
  となる。つまり、指数形a(1-e^-bt)に確率p1,p2かけているに過ぎない

 遅延ソフトウェア信頼度成長モデルは、
   指数形のexpの係数に(1+bt)をかけて、時間と共に減少率をコントロールしている
   だけで、aとbの意味は変わらない

ので、指数形のa,bのあと、習熟S字のcの値を説明する。




■aの値

指数形: H(t)=a(1-exp(-bt))  (eの-bt乗をexp(-bt)と表現)

指数にマイナスがつくと分数になる(10の-1乗=0.1=1/10)ので

=a(1-1/exp(bt))とかける。
ここで、tが大きくなると、
  exp(bt)は、指数関数的に大きくなるはず
    (expは指数関数ですから)
  ってことは 1/exp(bt)は小さくなる・・・小さくな~る、小さくな~る
  (たとえばb=1なら、tが1なら1/e、tが100ならeの100乗分の1)
  →かぎりなく0に近づく

  ってことは、1-1/exp(bt)は、1にかぎりなく0に近い数を引くので、
  1に限りなく近くなる。

  ちなみにはじめは、b=0、t=0なので、1-1/exp(bt)=1-1/exp(0*0)=1-1/1=0

  よって、この曲線は、a*0からa*1に限りなく近くなるまで
  0≦a(1-exp(-bt))<a
  という範囲で動く。aは限りなくその点に近づくがその点にならない、収束ポイント

→ということは、バグの最終的な累積数となる。




■bの値

tは、日数、時間数、いろいろあるけど、結局同じ形になるといっている
 →こうなる理由は・・・bで値を吸収しているから。
  つまり、bの値で曲線の形(収束の速さ)を制御している。

 たとえば、
   a=30(バグは最終的に30個)
   t=10(10日でバグだし)
 が、指数形になるとき、bの値の変化に応じて、どういう形になるかというのを
 Excelで求めてみよう!

 bが桁で、0.1,0.3,0.5,1と変化させている(行はt)
 図を見ればわかるように、曲線の曲がり具合がbに左右している。
 bを低くすると、ゆるやかになる。bを大きくすると、収束が早くなる




■cの値

図をみて?となったんじゃないだろうか・・・
S字でない。

そりゃ~そうですよ、だって

1-exp(-bt)

ですよ、指数関数を、
  横軸tをb倍に拡大、
  マイナスなんで、X=0で反転させて
  expの係数にマイナス付いているから、こんどはY=0で反転させて、
  1ずらして
  a倍するだけですよ、
つまり、指数関数をごにょごにゅしてるだけじゃないですか!
そりゃー指数関数ですよ。
どこに、ぐにゃって曲げる要素がありますか?


ってことで、ぐにゃっと曲げる要素が、cです。
つまり、習熟の場合、

a(1-exp(-bt)) / (1+cexp(-bt))ってことは

指数形/(1+適当な係数c * 時間と共に指数的に小さくなるexp(-bt))

つまり、指数形を時間と共に指数的に影響が小さくなるcで割っているということです。

もすこし具体的に見ると、
  はじめのころは、cの影響で割っているので、小さくなる
    (1を足しているので、1以上の数なので、かならず小さくなる)
  時間がずっとたつと、cの影響力がちいさくなり、ほぼ指数形になる

けっかとして、初めの頃、Cの影響で押さえ込まれ、ぐにゃっとなります。

a=30,b=0.8のとき、cを変えると、こんなかんじ。

C=0.1だと、ほとんど変わらないけど、
C-30とかC=100は、いわゆるS字っぽいでしょ。




a,b,cの意味や、Excelでの図の書かせ方、わかりましたかあ?

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

超高速開発GeneXusとMagicの違いについて

2016-03-18 12:08:29 | 開発ネタ
昨日、

超高速開発のツールと、支援・自動化する工程の一覧表めっけ
http://blog.goo.ne.jp/xmldtp/e/94fb0fa5854e156ffe98c1732075920f

を書いたら、予想外に反響が大きかった。
その一方で、表題の件について、ググってもあんまりでていない。
これは、意外と超高速開発、ニーズがあっても知られていないこと、多いんじゃないかと思って、
意識あわせのために、超高速開発のキホンを書いてみる。




■GeneXusとMagicの根本的な違い

超高速開発には、2種類ある。GeneXusとMagicの根本的な違いはここに起因する。

  ・ソースを自動生成するもの
     例:GeneXusや、富士通InterDevelop
     上記エントリの第一桁が「設計コード生成型」と書かれているものである。

  ・実行環境が提供され、その実行環境上で動かすもの
     例:Magic
     上記エントリの第一桁が「設計・実行エンジン型」と書かれているものである。


ただし、思っている以上、この1つに差はない「かも」しれない。理由は

・たしかに、「設計コード生成型」はソースを生成するので、
 そのソースを修正して、自由に書くこともできるが、
 そうすると、次の生成時、修正部分が書きつぶされてしまい
 保守性が悪くなるのであまりしない。
 つまり、どちらも、自由に書き換えるということはしない。

・「設計・実行エンジン型」はツール開発会社が、エンジンをマルチプラットフォーム
 に対応しないと、他プラットフォームでは動かないことになる。
 それはそのとおりなのだが、じゃ、「設計コード生成型」は生成コードがすべての
 プラットフォームに対応できるかといわれるとわからない。
 ってことで、2つの型の差より、メーカーのサポートの差のほうが大きいかも?

ただ、価格体系は異なる。「設計・実行エンジン型」は開発環境、実行環境わけて
課金が可能である。Magicはそうみたい。(GeneXusはオープン価格)




■守備範囲の違い→生産性

 上記エントリを見るとGeneXusのほうが守備範囲が広い

    や~自動生成の範囲が広くていいね!

 と思うかもしれないが、それだけ、広い範囲を覚えなきゃいけないということでもある。

 というとで、注意していただきたいのだが、
 超高速開発を行うと、生産性が劇的に上がるというのは、クラウドにすると、コストダウンが
 実現すると考えるくらい、危ない考えだ。

 生産性は、上がるかもしれないが、初期の場合、ツール学習コストがかかる。
 また、要求仕様は結局、ツールを入れてもさして変わらないことがおおい。
 そして、要求抽出がクリティカルパスになりやすい。
 そのため、(保守性は上がっても)新規開発では、生産性は劇的には上がらないこともある。

 ということで、学習コストを下げたい場合、わざと守備範囲の狭いツールを使うことがある
 Magicは、こっちむきなのだろうか・・・




■ツール利用者の違い

 ツールの利用者は、
   ・企業の業務担当者
   ・企業の情報システム部
   ・受託会社
 のどれか?が重要。

 後述する本によると、Magicは、ユーザー企業のほうまで含んでいる
 (もちろん、受託会社も含んでいる)
 ただ、GeneXusは、受託会社はもちろん対象だが、情報システム部が、そこまでの
 コストをかけて、学習したほうがいいかどうかは、考慮すべきところ。




■そして・・・

 超高速開発なら、やっぱりこの本でしょう!

超高速開発が企業システムに革命を起こす
http://www.amazon.co.jp/dp/482229627X

上記の「後述する本」は、これ。
Magicの事例(富士通テン)と、ツール説明、
GeneXusの事例(介護事業者)とツール説明のほか、
サピエンス、Xupperなど、著名なツールの紹介と事例が載っている。
まあ、133ページまではお題目として置いておいて、
とくに、199ページからのツール紹介は、価値があると思うよ!

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

超高速開発のツールと、支援・自動化する工程の一覧表めっけ

2016-03-17 14:40:09 | 開発ネタ
JUASの調査の、ここ

ソフトウェア・メトリックス2015年版
~アジャイル,超高速に対象を絞っての調査~

の中に、
超高速開発のツールと、
それらツールが支援・自動化する工程の一覧表がある。
GeneXusとか、Magic(むかしのDBマジック)とか、富士通InterDevelopの範囲ものってる。

こんなかんじ。上記3つは、●しておいた

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

VDMとXUnitと契約による設計の関係

2016-03-02 11:30:56 | 開発ネタ
VDMの講義をここと、ここで聴いてきたわけだけど、
これ、VDMを全く知らない人には、一番肝心な
 VDMは、どんな部分に分かれていて、
 これをやると、なにがいいの?
 何がもとで、どこに繋がるの?
っていうのが、まったくわかんないので、講義の意味がさっぱりだと思う。

そこで、その部分を、書いておこうと思う




■何がもとで、どこに繋がるの-契約による設計がもと。XUnitへ繋がっていく

 仕様を決めるのに、検証しやすく、間違いが少ない方法は?
 と聞かれたら、多くの人は「契約による設計」を挙げると思う

 事前条件(つまり入力)が、これこれだったら
 処理を行うことによって
 事後条件(つまり出力)が、こうなっていなければならない

 その際、事前条件、事後条件ともある規則(不変条件)を満たさなければならない

 この事前条件、事後条件、不変条件だけをきめて、あとは、処理をがんばってね!
 とするのが、「契約による設計」


●「契約による設計」を実装レベルで確認できるのがJUnitなどのXUnitでした。
 JUnitで、
   事前条件を満たす具体的な値をセットし、
   処理を呼び出し
   処理結果をassertでチェックすることにより、事後条件を満たすことを保証する
   ついでに不変条件もassertしてね(厳密には処理前と後でassertするけど、そこまではしてない?)

 全部OKなら、実行時、緑になる。

 ただ、これは実装レベルでの確認。


●「契約による設計」を、要求仕様、設計レベルで実現するのが、VDM。つまり、VDMは、
  処理(operationsやfunctions)に対して
    事前条件(pre)と
    事後条件(post)をかいて
  処理の外に(typesやinstance variables)
    不変条件(inv)をかいて
  これを、具体的な値を使って確かめることにより

 (JUNITで実装が確かめられたように)
  要求・設計仕様の正しさが確かめられます

 →ただし、VDMは、これ以外に、証明による正しさを確認することも出来ます。




■これをやると、なにがいいの?

 要求レベルで、契約による設計の正しさが確かめられる。


 さらに、VDMで正しさを確かめるのに、テストケースを使うけど、
 そのテストデータとVDMのソースを元に、
 JUnitで実装内容を確かめることができる

 具体的には、
   JUnitで確認したい処理を呼び出すための設定を、
     VDMのテストデータを使ってかいて
   処理を呼び出し
   VDMの事後条件をJUnitのassertで確かめる

 こうすると、

   設計が間違っていたのか→VDMのテストケースがおかしい
   設計OK,実装NGなのか→VDMのテストOK,JUnitがNG

 と、設計、実装の問題点の切り分けが出来る

 トレーサビリティ抜群!




■VDMは、どんな部分に分かれているの その1:2種類のソース

これを、はっきり言っていないから、たぶん、混乱するんだよね。

まず、VDMには、VDM-SLとVDM++がある。

  VDM-SLは、クラスになっていない
  VDM++はクラスになっているので、オブジェクト指向と相性がいい

ってことが、大きな違い。以下VDM++について説明する。

上記の話から
  仕様を書くVDMと
  テストをするVDMがある
という雰囲気はつかめたと思う。

あの演習問題サンプル
http://sec.ipa.go.jp/users/seminar/seminar_tokyo_20160229-02.zip

でいうと、(解凍すると、いつかはFare0.zipが現れ、それを解凍すると現れる)
拡張子vdmppがVDM++のソースコードのうち、

仕様を書くVDM
  Fare0.vdmpp  :運賃計算のクラス
  FareTable.vdmpp:運賃表のクラス
テストをするVDM
  Fare0_testspec.vdmpp:テストデータをいれて確かめている
  UseFare0.vdmpp:組み合わせテスト用

という分類になっている。
ただし、こう分けなきゃいけないというわけではなく、
一つのクラスの中に、2つを混ぜ混ぜして書いても、いけないわけじゃない
(けど、わからなくなるのでやめよう)
また、テストを何回もやらないのであれば、VDMToolを使う場合、
実行ウィンドウから、
p mk_なんとか(パラメータ)
って感じでやってもいい。

なお、仕様を書くのと、テストするのは、陰仕様、陽仕様とは、「直接」関係ない
(結果として・・・)




■VDMは、どんな部分に分かれているの その2:仕様を書くソース

まず、全体像は、

Hello, VDM++
http://www.hcn.zaq.ne.jp/no-ji/vdm&fm/A1_class.html

をみてください。

【仕様を書くVDMの構造】

class クラスがあります

--------------
--型定義
--------------
types
public 識別子 = 型 inv 不変条件を書いてね!


--------------
--操作の定義
--------------
operations
public 操作名 : 引数の型{*引数の型を続けて} ==> 返り値の型、要らなければ()
操作名 == 陽仕様の場合、いろいろ操作を書く
pre
  事前条件を書く
post
  事後条件を書く
  RESULT = 返り値があるときは、返り値

っていう構造になる。これは雰囲気を書いただけなので、
正しい文法は、上記サイト参照




■VDMは、どんな部分に分かれているの その3:テストをするVDM

同様に構造をかいてみる

【テストをするVDMの構造】

class テストクラス名 is subclass of テスト対象クラス
-- こうしないと、テスト対象クラスを参照できないので

---------
-- 定数定義
-- JUnitでテスト前にセットしておきたいような値をかく
-- ただしVDMでは、値セットを以下に書くoparationsの中で
--   するんだけど
----------
values
 セットする対象、つまりパターン = 値

---------
-- テストケース
---------
operations
public run : () ==> seq1 of bool --簡易回帰テストを行う
run() ==
return [t1(), t2(), t3()];

---t1()の操作

public t1 : () ==> bool
t1() == (
let wテスト対象クラス = new テスト対象クラス(v定数定義した集合) in
return wテスト対象クラス.テスト対象操作(引数,引数・・・) = assertしたい値

--以降、t2(),T3()とつづく。
--テストケースを増やしたい場合は、runのreturnをふやし、操作を記述する

ってかんじ。。これは雰囲気を書いただけなので、
正しい文法は、上記サイト参照




ここまでわかって、演習のソースをみたり、資料をみると、わかると思う。

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

富士通の要求分析Tri-Shapingを聞いてきた!

2016-02-05 12:39:32 | 開発ネタ
富士通の要求分析手法、Tri-Shaping
について、ウィンターワークショップ2016で
話を聞いてきたのでメモメモ




Tri-Shapingの紹介
・お客様の橋渡し→要件定義
 満足していない48%
・要件定義
  形式品質:書き方、サンプルドキュメント

内容品質:考え方、コツ、進め方
2011年 Tri-Shaping

要件定義手法
 要求の形成:経営や業務に貢献
 業務の形成:新しい業務
 業務仕様・システム要件の形成
  要求の管理

要求系政治の解決ポイント
  要求を構造的に整理
  ステークホルダー要求
  採否
 →ゴール指向の考え方
   経営
   業務
   ICTシステム
  →十分性、妥当性の検討

要求構造図:サンプル

非機能要件
 ビジネス要件:非機能要件が決まってくる

ステークホルダー要求を明確にする
 体系的に構造化することにより、要求の内容品質を高める

業務の形成(しぇーぴんぐBP)
・業務要求実現の検討
  データのモデル
  機能のモデル
  相互作用モデル
・シンプル化、柔軟性向上の検討
  幹の分析
   かなめのものごと
  葉
   業務バリエーション

業務仕様形成時
 ・文章:機能、データ
 ・文章を表で表現
非機能要件の抜け漏れ
 要求層
 制約:非機能要件グレード+富士通独自
   →関連
 要件層

要求マネジメント時の解決ポイント
 3方向のステークホルダーを認識する

適用事例

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

IBMのFDLのお勉強

2016-02-01 01:47:14 | 開発ネタ
2ちゃんでよく出てくるFDL(Fで得る)
FlowMark Definition Language (FDL)のことで
IBMのソース自動生成のもの
(富士通の場合のInterDevelop(iでぶ))
ってことはわかってるけど
  ・どーいうツールを使ってFDL読み込み→自動生成するのか
  ・どういうツールを使ってFDLをつくるのか
がよくわかっていない。

ので、参考になりそうなサイトを調べたので
メモメモ(自分用です)

●プロセス・モデルからプロセス管理コンピュータ・プログラムを生成するための方法及びコンピュータ・システム
http://astamuse.com/ja/published/JP/No/1997511859

●WebSphere MQ Workflow から IBM Integration Designer へのマイグレーション
http://www-01.ibm.com/support/knowledgecenter/SSFPJS_8.0.0/com.ibm.wbpm.imuc.doc/topics/tmqwf.html?lang=ja

●今すぐ始めよう SOA
http://www.devfesta.jp/2004/pdf/A-4.pdf
11シート目IBM WebSphere Business Integration Modeler v5.1


●WebSphere Business Modeler
http://www.crnarupa.singidunum.ac.rs/valjevo/2008-2009/Projektovanje%20Informacionih%20Sistema/Predavanja/PredavanjaSOA/13%20-%20WebSphere%20Business%20Modeler.pdf
8シート目– WebSphere MQ Workflow

●プログラム自動生成ツールによるWebアプリケーションシステムの開発とその評価
https://www.oki.com/jp/Home/JIS/Books/KENKAI/n193/pdf/193_R20.pdf

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

Astahでシナリオを元に作成したクラス図があっているか確認する方法(オブジェクト図作成)

2016-01-22 15:12:52 | 開発ネタ
忘れないうちにメモ!

クラス図があっているかどうかを確認したい場合、シナリオを使うことがある。
シナリオは、具体的な値(インスタンス)が指定されるので、
その値に対する属性が、クラス図内に入っているかどうかを使って確認する。

Astahを使うと、それが確認できるんだけど、その方法を忘れないうちにメモ

【お題】

6月6日にJAL231便にのる。JAL231便は、以下のとおり


【手順】

1.クラス図を作成する
2.オブジェクト図を作成し、値設定
3.設定できない値があったら、クラス図を修正する

【詳細】

■1.クラス図を作成する
図の「クラス図」を選択し、

こんな感じでクラス図を作成する

なお、クラスを作るかどうかの判断だけど、

<<属性の型を設定するとき>>

・Astahで、クラスの「属性」タブの「型」を見たとき、
 そのプルダウンメニューに型があったら、それを選ぶ
  →このとき、クラスを作らないで済む

・日付、時間等、ここにはないけど、一般的なものは、
 型をStringにしておいてしまおう
  →クラスをつくらない(本当は作ってそれを選んだほうがよい)

「型」にないものを選びたい場合(この例だと、便を作っている
 ときの「空港」や「飛行機」)新規にクラスを作成し、
 作成後、「型」のプルダウンメニューから作成したクラスを選ぶ
  →このとき、クラスをつくる

■2.オブジェクト図を作成し、値設定
オブジェクト図も「クラス図」で作れる。
そこから、「インスタンス仕様」を選択

適当に置くと、オブジェクトが出来るので、
クリックして属性を見る。

ベースクラスを設定すると、下のスロットに
クラスの属性が出てくるので、「値」のところに
シナリオに書かれている値を入れる

■3.設定できない値があったら、クラス図を修正する

もし、シナリオに、オブジェクトにない属性が出てきて、
値を設定しないといけなくなったら、クラスの属性を追加
する

そうすると、オブジェクトのほうにも、属性が追加される
ので、値を設定する。

シナリオの値がオブジェクトに全部設定できたら、
クラスの属性はOKっていうこと。


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

概念モデリングについて

2016-01-19 15:40:29 | 開発ネタ
「概念モデリング」のお話を聞いてきたので、メモメモ



概念モデリング
 データ駆動型
   名詞を元に分析
 シナリオ駆動型
   ユースケースだと荒いけど、もっと細かく→オブジェクト

 ものの意味を捉える:名前付け
  用語辞書より構造を与えるという意味(クラス図)

要求工学のプロセス
 要求抽出・獲得
  ステークホルダー分析
  課題抽出
  ネゴシエーション

 要求記述
  要求のモデル化→概念モデリング
  仕様化

 要求検証
  インパクト分析・技術要素分析・リスク分析
  テスト・実行

 要求管理
  変更管理、追跡
  再利用

要求プロセスを取り巻く環境
 モデルにかかれていない用語、構造を使ってはいけない

概念モデルと要求
 シナリオはかこ、現在、未来を説明する手段
   キャロルなど:しなりおマネジメント

  現在のシステム→現在のしなりおー(リバースマネジメント)→現在のモデル
 
  現在のモデルー(変更仕様)→将来のモデル

  将来のモデル→求めるシナリオー(変更の実装)→将来のシステム

 モデルでできないこと(スコープ外のこと)が説明できるか?
  →できることを説明しても、すばらしいシステムで終わる

ドメイン知識
 ドメイン=対象とする世界、領域
 現状システムの理解には、ドメイン知識が不可欠
 ドメイン知識の例・・・

要求、ドメイン知識、現実世界、そして要求仕様
 要求+ドメイン知識+現実世界→要求仕様

■データ駆動型
 関連クラス
 未定義なもの:重要
 当たり前なものを疑う

概念とは
 ものの意味を表すため、ほかのものとの関係を用いて表現

概念モデルとは
 ドメインを的確に理解するためのモデル
 分析者の理解を他社に知らせるためのモデル
 クラス図など(関係を示せる図)で表す

概念モデルでは
 ものとものとの関係を把握するための多面的な分析を行う
 アクティビティ図、状態図、オブジェクト図、シーケンス図など

用語辞書か概念モデルか
なぜ概念モデルを
なぜ概念モデルをレビューする?
 質問に対する受け答え

概念モデル技術者の心得
・現実世界を説明するモデルを作る
・読者に合わせた抽象度を選択することも技術者の役割
・どのモデルを見せても、モデルを構成している概念を
 常に理解していなければならない

  アナリシスパターン:

■演習
 酒屋問題
 航空機のチケット問題

■とき方
 データ駆動型
  名詞を抽出する
    集約構造があるとしか示されていない
    同じ集約でも、意味が違う(持っている、入っている)

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