********************************************************************** 分科会1 S1-b テーマ:ワークショップによるプロセス 振り返り コーディネータ:木元峰之 氏 日時:2007/08/30 20:30〜22:30 参加者数:20人程度 ********************************************************************** 概要 開発生産性には、チームがうまく機能しているかどうかが大きく影響します。 しかし、その影響をわかりやすく体験する機会はなかなかありません。 この分科会では、参加者で作るチームがいくつかの演習をおこないます。 演習はワインバーグの本で紹介されているものをベースにしており、チーム内の さまざまなダイナミズムを実体験できるようになっています。 ---------------------------------------------------------------------- 今回は2種類の教材が用意されていて、 ・ブラックボックス 数値を入れると違うものが出る(ブラックボックス回路) 4つ数字(2桁)を入れると、4つ数字(±3桁)が出てくる。 中でどのような計算がされているか推測する。 ・間違い探し A4の紙に印刷された間違い探しを行う これらの作業をチームで行う。 4チームに別れてください (3人×3チーム、2人×1チームに分かれた) 各チームにメモ用のノートと機材(10キーと液晶の付いた木本さん手製の機器)を配る Enter長押しで Menu Code : (問題コードを入力) 3922 ->Input Menu Input? 上 押すと -48 下 押すとログ 01020304と押すと数字が4つ(01,02,03,04)が入ったことになる。 +002+006+002+002 と4つの数値(±3ケタ)が出力される 50回以内10分以内に、アルゴリズム(入出力を繋ぐ関数)を推測する。 ○1回目(3922) (機械に慣れてもらう優しい問題) (途中から議事録 書き手も参加) チーム2の途中経過、 いくつか数字を入力し、入力と出力の関係から In Out a -- A b -- B c -- C d -- D Aは dの値? Bは bそのまま Cは c のニ倍 4は aの値のニ倍 ? を推測、その後いくつか数字を入れた後、 A=d B=b C=2c D=2a で間違いないなさそうということに。 ○2回目 (0647) in 01 01 01 01 out 02 07 02 07 最小値?を入力 in 02 02 02 02 out 004 006 003 007 in 03 03 03 03 out 006 005 004 007 in 04 04 04 04 out 008 004 005 007 Aは2a?、Dは7 固定値? in 20 20 20 20 out 40 -12 21 7 in 0 0 0 0 out 0 8 1 7 in 84 85 86 87 out 168 78 81 1 Dの出力が7じゃなくなった。 in 99 99 80 77 out 198 -78 138 73 ここでもDが7じゃない。 in 50 50 50 50 out 100 -42 51 7 50くらいが閾値になっているのでは? in 65 78 51 51 out 130 -43 94 88 結局解決できず。 4チームの解法 0,0,0,0 0,8,7,7 最小値 99,99,99,99 2,7,2,7 最大値 1,1,1,1 2,7,-2,1 4,3,2,1 8,6,9,13 0,0,0,1 0,8,1,4 0,0,0,2 0,8,1,1 0,7,0,0 0,8,1,70 A = 2a B = -c + 8 C = 3a - 2c + 1 D = 3b - 3d + 7 こう解けばいいんじゃないという方法は? 中身が数式なら、4元の連立方程式なので、解けそう? 条件式が入ってるんじゃないと勘ぐったチームもある。 疑いをもつことも大事 (数式じゃないかもしれないし、もっとひどい問題も入っているらしいです。 ここで2つの選択肢あります。ブラックボックスにするか、間違い探しにするか。 -> 全員一致で間違い探しを選択 木本さん 「間違い探しと言えば分かると思いますが、左右にほぼ同じ絵があり、 異なっている箇所が含まれています。間違った箇所に印をつけてください。 それではスタート。 間違いは14コあります」 漫画風の絵の間違い探し 入っていたチームは漫画のコマごとに役割分担を行った。 2分くらい経った時点で10個、ここでしばらく停滞し始める。 (とても細かい間違い箇所があったりする) テーブルで向かいあった状態で作業しているので、絵を反転させては? との意見が出る 木本さんが各テーブルを回り 「何個正解しました?あと何分くらい掛かりそうですか?」 と聞いて回りメモを取っていた チーム3が全部発見 14分30秒でチーム2 が全部発見 この後チーム1も発見 -- 20分くらいで打ち切り ここから答え合わせ、各チーム1個ずつだいたい見つけた順で。 ホワイトボードに回答(間違い箇所の位置)をマークしていく 木本さんが一定時間ごとに各チームの正解数をメモしていたらしい このメモを使って、正解数×時間をグラフにしてみると、 (縦軸:正解数、横軸:時間) どのチームもプロットすると、最初発見数が多い、最後の1つに一番時間掛かってた 最初に急激に上がり途中で平坦になる。 ○この演習の本質は? 社会人の方は仕事でも間違い探しに似た作業を行っているかと思いますが、 実はこの曲線は バグ検出曲線(プロットした図がほぼ類似)です。 バグも見つかり易いものから見つかり、見つかりにくいものにはずっと時間が掛かる。 さて、ここで話合うテーマが2つあります、どちらも切実なテーマです。 1.どうすれば作業を少なく出来るか 2.いかに工数を見積もるか 次に同じような問題を扱うなら、どのような戦略を立てますか? ・役割分担を行う ・作業区域をしっかり区切る(メッシュ状に切り分ける) ・向きを変更する ・立体視する テストの自動化と似てるかもしれないね 見積もりを正確にするには? ・12面のサイコロと30面のサイコロを振る。 1/365であたるかも? ソフトウェア業界では? ・バグを全部取りきらない。 今は比較的長時間だったけど、 より短時間(5分程度)でやるには? ・作業人数を増やす ->人海戦術 ->βテスト (βで出荷してしまう) ・役割をしっかりと分担する。 ・裏技的なことを行う ブラックボックスの例では、リバースエンジニアしちゃう。 ・ソフトウェアのテストでは、間違い数はいくつあるか分からない。 他の人・チーム(宴会部屋の方々とか)と競うときにどうすればいい? ・練習しておく (内容はソフトウェアと関係ないようだけど、プログラミングに活かせるかも?) ○最後に自己紹介で締め 木「 本当は今回のテーマは私がやりたかった内容。(元ネタは英語の本) 海外でやるよりは、日本で主催してやれば、いずれ他の人がやってくれるかも。 という期待を含めて。来年もやるかもしれません。」 以下各自の感想 ・MLで見て参加してみました。実際面白かった ・難しさもちょうどよかった ・演習問題楽しかった ・参加型のイベントで楽しかった さっきの問いへの解決策としては、金を出してバイトを雇う。 懸賞金を掛けたら正答数 ・間違い探しをグラフにしたものがバグ曲線と同じになったのは新鮮だった ・いい感じに酔いがさめる難しさでした ・こういう形で楽しくやれたのは良かったと思います ・LSIの設計手法をやっている。どちらかというと自動でやる機械を 作りたくなった ・佐藤さんの方へ行こうかと思ってたが、出来上がってたのでこちらへ。 バグ曲線は、飽和したように見えても、1つバグが見つかると芋づる式に 増える(総数自体が) ・バグ曲線の理論は分かるが本当にそうなるのか疑問だったが、今回の演習で 体験することで実感できた。 ・いかにバグ(エラー)を探すことも大事かなと思った ・次回はハードウェアの作成から参加してみたいと思った ・ワークショップはとても濃い時間を過ごすいい機会。 もっともっとできていければいいのではないか。 --感想ここまで 木「来年もやって欲しいという意見があり、 今回できなかったこともあるのでいろいろやっていきたい。 バグ曲線の体験は、会社にもどってもできます。 ストップウォッチと問題があればできるので、 是非、周りを巻き込んでやって頂ければ大変嬉しく思います。 今日はありがとうございました」