TEF-DO -11ページ目

TEF-DO

TEF北海道テスト勉強会「TEF-DO」

『リーンスタートアップセミナー』に行ってきました~。

日 時 :2013/7/09(火) 19:00 - 21:00
開催場所:ACU 大研修室1606 札幌市中央区北4条西5丁目 アスティ45
主 催 :(株)北海道ソフトウェア技術開発機構 

リーンの説明から始まる。
自分の知識は、
“リーン≒トヨタ生産方式”
ぐらいに知識だったので、このセッションは大変たすかった。
#本当は本を事前に読んでいくはずが時間がなかった(いいわけ)

MVP(minimum viable product)というのもなんとなく聞いたことのある単語だったけど、
何かしらのプログラムが必要なのかなぁと思っていたら、
パワポや絵で書いたものもそう呼ぶとは知らなかった。

あと、MVPで作成したソフトの品質は驚くほど低いとか。
最低限、実現したいこと、動くものを保証する程度。
更新しながら品質を上げていく。
#最近、似たような話を聞いたような…、うわさの「ゆるひん」が近い??

その後、2社の事例発表
・「受託開発と自社製品販売の違い~自社製品を売るための長い道のり」
 新井 俊一氏(株式会社もぐら)(以下M社)

・「リコーUCSの開発をリーンスタートアップ的視点でふりかえる」
 山本 陽平氏(株式会社リコー ネットワークアプライアンス事業部)(以下R社)

自分は組み込みのため、R社の話は非常に面白かった。
UCS(ググって)を作る際に、上から売れるものを作れといわれて始まったらしい。
#無茶振り

UCSを作る過程で、ダンボールと紙でモデルを作る。
そこから動作イメージしたり、使用上の問題を見つけたりする。
ハードを伴うと試作はかなりの負担になるし、ハードが出来上がる前に確認できるというのが良いですね。

ソフトの実際の使い勝手を試すために、同等機能を実現するために集めたハードセットもありなんだと言うことも良かった。
#むき出しのマイクにWebカメラとなぞの箱w
#最初から全てがそろってると思ったらいけないですね。


発表2社の特徴を勝手に比較





会社M社R社
規模中小ベンチャー大会社
対象Web系組み込み系
顧客BtoCBtoC


ここで、2社の話の中で共通していたと思うことは、
・小さく試して、方向修正、すばやく世にだす
・ビジョンはしっかりしている

自分が気になったこと、
チームの規模とスタートアップ時の技術の有無
というわけで質問した。

【M社】
・チーム規模は数名。
・新しい技術、ない技術よりも、持っている技術でできることを考える
 →予算が大きい会社と比べて限られているため、低予算で早く出さないといけない
というのがある

【R社】
・プロジェクトの初期から比較的人数はいる
・技術よりも何を作るが先

ちょっと驚いたのが、R社は開始時に必要であろう技術を持ち合わせていなかったこと。
知識を得ながら進めていったと。
#ビジョンがしっかりしていたから、必要な技術は後から追いついてくるのかなぁ。

全体的に面白かった。
あとは、自分が組み込みのBtoBなので、この辺の事例がないかなぁ、と思ったしだい。


蛇足
R社のチームビルディングに「大富豪」をやるは面白しろそう。
その人の性格がわかるらしい。
ちわ!!TEF-DO-ほよこ_前

やったよ!!

書籍
『ソフトウェアテスト技法ドリル』
著:秋山 浩一
$TEF-DO-ソフトウェアテスト技法ドリル

を使った勉強会。


開催日:6/17
内容:
 本の要約解説しながら、参加者同士でディスカッション。
 最後にアル課題を使ってワーク。
範囲:第3章 ドメイン分析テスト、デシジョンテーブル


~面で逃がさない~
入力が系統的にロジックを網羅し、正しく動作することを確認する

まずは「ドメイン分析テスト」を例題に沿って解説。
ドメイン分析と言えば、
onポイント、offポイント、inポイント、outポイント

これらの定義がややこやしい。onポイントなんかが特に。
定義は下記のような感じです。

onポイント :着目している境界値
offポイント:onポイントに隣接する境界値
inポイント :ドメインの内側の値(on/off以外)
outポイント:ドメインの外側の値(on/off以外)

x≧10とx>10の場合は以下のようになる






説明x≧10の場合x>10の場合
on1010
off911
in例:15例:15
out例:5例:5


図で表すとこうなる。
TEF-DO-on-off

かならずしもonポイントが有効な値になるわけではないことに注意。
あと、定義からoffポイント一つではなく二つ存在することになる。
(in-offポイント、out-offポイント)

これらを整理するのに「Binderの分析テストマトリクス」を使います。
TEF-DO-Binderの分析テストマトリクス

と言ったところで、問題。
【半オリジナル(?)問題】
===================================================================================
あるロールプレイングゲームで攻撃時に相手に与える基本ダメージは次の式で決まります。

基本ダメージ値=(自分の攻撃力÷2)×(武器の熟練度÷10)
        ー(敵の守備力÷4)

自分の攻撃力の最大100
武器の熟練度の最大20
敵の守備力の最大80

ドメイン分析マトリクスを作成しなさい。
解答(省略、考えてみて)
===================================================================================

境界値をBeizerの方法とJorgensenの方法の考え方で
ドメイン分析マトリクスの大きさは変わるかも。
というご意見。
確かに、offポイントをoutのoffだけじゃなくて、in側のoffも考えるとケースが増えますね。
というところで、
開発者による単体テストと第3者によるシステムテストだとテストケースはどう変わる?
を考えてみたら、こんな意見がでてきた。

【単体テスト】
ドメイン分析マトリクスのパターン
各項目に負の値を入れる
各項目に最大値を設定する
各項目に最小値を設定する

【システムテスト】
ダメージが当たるかを確認
乱数を使って連続耐久テスト

システムテスト…、ドメイン分析関係ねぇ~
という感じでした。
ただし、システムテストまでに、単体テストで先であげたものが確認されていること、
というのが前提となります。
ドメインと言うだけあって、用途は単体テストに向いているのかな?


続いて「デシジョンテーブル」
デシジョンテーブルとは?
ドリル本での説明によると
==============================================
・ドメイン分析テストマトリクスの変数は数式
・デシジョンテーブルで取り扱う変数は論理式

論理式とは
AND(∧)、OR(∨)、NOT(¬)
→プログラムの中ではif文やswitch文に相当
==============================================

先のドメイン分析マトリクスとか、いるの?
みたいな意見もあったのですが、
デシジョンテーブルとドメイン分析の説明を並べてみると違いがわかった(気がする)。

まだ本題に入らず
ここでデシジョンテーブルで使われる記号あれこれ
ということで、人や組織によって使用されてる記号が違うよ~、というお話。
==============================================
◆条件の判定
 Y/N(Yes/No)
 T/F(True/False)
 ○/×
◆どちらでも良い時の記号
 ―(ダッシュ、マイナス)
 DC(Don’t Carful)
◆ありえない
 ×(バツ)
 N/A(NotApplicable(該当せず))
==============================================

自分的にはわかりやすければ何でも良いと思います。
ただチーム内で合わせておきましょう。
#自分は○、×派かな


では、例題を使った演習に入ってみた。
=======================================================================
インターネットショッピングで、書籍を1,500円以上購入した場合、
配送料が無料となる。
=======================================================================

これだけでもわかるけど、なんか条件にあいまいさを感じる。
ということで、条件の箇条書きに書き換える。

==============================================
購入対象が書籍
且つ
購入合計金額が1,500以上
配送料が無料
==============================================

ここでは条件が2つなので、これでも十分読み取れる感じ。
でも以下の問題がありそう。
・有料になる場合が明示的ではない。
・要求元も抜けている条件に気づきづらい。
・条件が追加されたら読み取りづらくなる。

じゃあ、どうするの?
ということでデシジョンテーブルの登場
TEF-DO-DT無圧縮


デシジョンテーブルを使いこなすために必要(と思う)圧縮もやってみる

圧縮①
TEF-DO-DT条件圧縮


圧縮②
TEF-DO-DT目的圧縮

①と②の違いますよ~と説明
 ①は条件が処理される順番を知らないと成立しない
 ②どれかひとつでも条件を満たさない場合、無料にならない、という目的のテストならばに対するデシジョンテーブル。
 ちなみに、これは処理順に依存していない(はず)。


圧縮体験したあとは、例題のロジックを書いてみよう!!のコーナー

解答例㋑
if (TYPE_BOOK != goodsType)
{
return false;
}
if (PRICE_1500 > totalPrice)
{
return false;
}
if (TRANSPORT_RITO == transport)
{
return false;
}
return true;


解答例㋺
if (TRANSPORT_RITO != transport)
{
if (PRICE_1500 >= totalPrice)
{
if (TYPE_BOOK == goodsTyp)
{
return false;
}
}
}
return true;

㋺場合、処理順番が異なるため、最初の例①で示した圧縮は不可。

なんでこんなことが起きるか?
を参加者で考えてみた。
・改修、仕様追加が影響
 たとえば、仕様が
 「書籍を1,500円以上購入し、配送先が離島以外の場合、配送料が無料となる」
 と明記されていたとする。
 でも、もともと離島以外で1,500円以上無料という仕様があったところに、
 対象の品物が書籍という仕様が追加されたら、例のようなコードになるかもしれない。
・上記に加えて「元のコードをできるだけ変更するな」という裏の事情があるとなりえる

デシジョンテーブルを使ったことある参加者から
「デシジョンテーブルの圧縮のテクニックを覚えると何でも圧縮したくなる」
との声があり。
#自分もそうでした。圧縮する目的を気にしましょう(汗

デシジョンテーブルの圧縮について、注意を整理
・できることなら圧縮せずに全部やる
・圧縮したところにバグが潜んでいることがある
・バグを見つけたいのか?仕様を確認したいのか?目的を明確にした上で圧縮を考える
・テストするタイミングと期間でトレードオフ
 圧縮することによるテストを実施しないリスクを受け入れるかどうかにも検討

ここまで整理したところで、場合によるデシジョンテーブルを圧縮してみた。
・単体テストでは
・システムテストでは
・仕様の確認なら
・バグを見つけるなら
(考えてみてね)


ここまで来て、最後にとっておきのお題

【お題】
給湯ボタンと解除ボタンの操作可能条件をデシジョンテーブルで整理する。

最後は第3章の内容を踏まえて、
SESSAMEの組込みシステム教育教材
『話題沸騰ポット GOMA-1015型』
要求仕様書の給湯機能とロック機能に関する仕様を抜き出したものを課題として、
「デシジョンテーブル」を実施。

デシジョンの条件抽出で、みな手が止まった…


TEF-DO-ほよこ_後したっけ!!



【参考情報】
①組込みシステム教育教材話題沸騰ポット
(http://www.sessame.jp/workinggroup/WorkingGroup2/POT_Specification.htm)
ソフトウェアテスト技法ドリル
JSTQB用語集
ソフトウェアテスト実践ワークブック
はじめて学ぶソフトウェアのテスト技法
~午前の部~
とりあえず、気になった語録を列挙。


【“Demand Technical Excellence” アジャイルにおける技術と品質の重要性】

・焼きなまし(Hardening Sprints)
 最後の品質向上のためのスプリント→消火活動になる
 ↑このスプリント自体はなくすことが大事
・品質を高める、技術を高めることは、バグを潰す事ではなく、バグを出さないこと
・Debug Later Programing(DLP)
 1979年頃からあるプリント文の埋込みデバッグ。
 →今も昔も変わらず。
・どんな馬鹿でもコンパイラが理解できるコードは書ける
 他のプログラマが理解できるコードが大切
・ソフトウェアの価値
 変えられること
・品質を管理する
 いつの間にかバグを管理するという目的に変わっている
・テストを書く時間がない、バグを追いかける時間はある
 →「テストを書く時間がない」事はない
・ものづくりのプロ
 透明性を高めて信頼を築く
 新しい事をやる
・モチベーションを下げるものを取り除けばモチベーションは上がる
 プログラミングは楽しいもの
 プログラムをしてたらモチベーションは上がる


【柔軟心 (にゅうなんしん) と庭園デザインにおけるユーザーエクスペリエンス】

・柔軟心
・一日成さざる者食うべからず
・哲学と禅
 哲学は論理の証明
 禅は行うこと(=行)。"行"を修めるので修行という。
・枯山水
 無駄なモノを極限までそぎ落とす
・簡素の美
・完全を越えた不完全の美
・道とは生き様
・守破離


午後の部
アジャイル札幌のみなさんによるワークショップ

【「感じる × Agile」ワークショップ】

ユーザーストーリー(要求づくり)、計画づくりと見積もり、イテレーティブな開発、ふりかえりなど、体験しながら学ぶワークショップ

ワークの説明
ざっくりいうと紙粘土を使った動物園作り
~要求フェーズ~
①グループ毎に動物園のコンセプトを考える
②コンセプトに対する要求を考え、ストーリーを作る
~開発フェーズ~
③お隣のグループが動物園を開発する
④要求元と開発とのストーリーの内容を確認
⑤それぞれのストーリーをプランニング・ポーカーで見積もる
⑥計画→開発→デモ→振り返りを計3回

このワークを通じて、以下のことを体感。
・お客様との対話の必要性
・イテレーションを重ねるごとに作業がスムーズになる
・振り返りで見積りの妥当性を早めに確認できて、修正ができる
・メンバ同士で得たノウハウをすぐに共有できる

特にお客様との距離と対話ってすごい大事だなぁ。
というのが、身にしみました。

頭も使って、手を動かしたので、ヘトヘトになりました。
良い体験をさせていただいた。

アジャイル札幌の皆様、お疲れ様でした~!!

あとは、これを実践するだけ!!
とは言いつつ、いきなり全部はなかなか難しいですよね。
少しずつ実践できれば良いなぁ。