<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns="http://purl.org/rss/1.0/"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:admin="http://webns.net/mvcb/"
 xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel rdf:about="http://blog.livedoor.jp/prjmng/">
<title>ソフトウェアの品質を学びまくる</title>
<link>http://blog.livedoor.jp/prjmng/</link>
<description>当blogを定期的にフォローしておくことで、ソフトウェアの品質に関する話題を網羅的に把握することができま　　　せん。The quality is remembered long after the price is forgotten.(Sir Henry Royce)
</description>
<dc:language>ja</dc:language>
<admin:generatorAgent rdf:resource="http://blog.livedoor.com/?v=2.0" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
<items>
 <rdf:Seq>
  <rdf:li rdf:resource="http://blog.livedoor.jp/prjmng/archives/52241353.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/prjmng/archives/52239741.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/prjmng/archives/52238599.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/prjmng/archives/52237146.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/prjmng/archives/52236650.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/prjmng/archives/52232016.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/prjmng/archives/52230551.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/prjmng/archives/52228004.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/prjmng/archives/52227930.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/prjmng/archives/52227071.html" />
 </rdf:Seq>
</items>
</channel>
<item rdf:about="http://blog.livedoor.jp/prjmng/archives/52241353.html">
<title>レビュー観点: 反町の「の」の曖昧さの回避の方法</title>
<link>http://blog.livedoor.jp/prjmng/archives/52241353.html</link>
<description>　関係代名詞の「限定用法」と「叙述用法」を覚えていますか。
　例文をコチラから引いてみます。There were few passengers who escaped without serious injury. （重傷を負わない乗客は少ししかいなかった）There were few passengers, who escaped without serious inju...</description>
<dc:creator>prjmng</dc:creator>
<dc:date>2012-01-29T16:34:36+09:00</dc:date>
<dc:subject>SQ3.4-レビューの技法</dc:subject>
<content:encoded><![CDATA[<div class="normal">　関係代名詞の<b>「限定用法」と「叙述用法」</b>を覚えていますか。<br>
　例文を<a href="http://www.eibunpou.net/12/chapter28/28_3.html" target="_blank">コチラ</a>から引いてみます。</div><TABLE class="quote"><TR><TD><ol class=normal><li class=normal>There were few passengers who escaped without serious injury. （重傷を負わない乗客は少ししかいなかった）</li><li class=normal>There were few passengers, who escaped without serious injury. （乗客は少数で、それに重傷者もいなかった）</li></ol></TD></TR></TABLE><div class="normal">　差はカンマの有無だけですが、意味がまったく違ってきます。この「few」について、限定用法の(1)が指しているのは「重傷じゃない乗客」、叙述用法の(2)が指しているのは「乗客」ですよね。<br>
　重要なポイントとして(1)は、<b>「重傷じゃない乗客」という限定が、逆に「重傷である乗客」の存在を暗示している</b>ことです。<br>
　この違いを踏まえたうえで・・・。</div><div class="title2">反町隆史の「の」</div><div class="normal">　この関係代名詞のような表現が、（自然な）日本語にはないので、ややこしいことが起きます。</div><TABLE class="quote"><TR><TD><ol class=normal><li class=normal>「延滞中の新着図書を一覧表示する」</li><li class=normal>「購入から2週間以内の新着図書を一覧表示する」</li></ol></TD></TR></TABLE><div class="normal">　(1)は、一覧表示される条件が　延滞中 ∧ 新着図書 であることが、まあわかる。なぜなら、<b>「延滞中か否か」と「新着図書か否か」とは、直交する条件であると自然に推測できる</b>からです。</div><div class="normal">　(2)はどうか。「購入から2週間以内か否か」と「新着図書か否か」とは、直交するという確信がもてないと思いませんか。どちらも、「購入からの経過時間」に関係していそうだからです。</div><div class="normal">　よって、2つの意味に解釈することができます。<br>
　叙述用法的な意味なら、<b>「新着図書・・・ああ、これは購入から2週間以内の図書を指すんだけどね。それを一覧表示したいんだ」</b>というアメリカ文学みたいな仕様。<br>
　限定用法的な意味なら、<b>「新着図書のうち、購入から2週間以内のものを、一覧表示する」</b>という仕様。</div><div class="normal">　「以内の」の「の」のせいで言いたいことが言えない。そんな「の」はまさに poison のような危険さをもっています。</div><div class="normal">　この曖昧さを回避するための表現方法として、</div><TABLE class="quote"><TR><TD><ul class=normal><li class=normal>叙述的な意味の場合は、「新着図書」のようなシステム用語を、別に定義しておく。定義しておけば、「2週間以内の」とか書くまでもない。むしろ書かない方がいい。</li><li class=normal>限定的な意味の場合は、「新着図書のうち、購入から2週間以内のものを・・」と、<b>「うち」で「限定」</b>する。</li></ul></TD></TR></TABLE><div class="normal">などが考えられます。<br>
　とにかく「の」は危ない。意味が多すぎるんだ。</div><div class="title2">一粒で二度おいしいマーブル模様の仕様書</div><div class="normal">　この「反町仕様書」の派生版が<b>「マーブル仕様書」</b>です。<br>
　例を挙げてみます。</div><TABLE class="quote"><TR><TD>「廃棄済みの書籍（廃棄フラグ=1）は一覧に表示しない」</TD></TR></TABLE><div class="normal">　この仕様には嫌な点が2つあります。<br>
　一つ目は、カッコ内を体言止めにしていること。カッコ内の体言止めは、反町の「の」と同じ、曖昧さをもたらす poison です。<br>
　次の二つの文では、カッコ内の言葉が果たす役割が違います。前者では叙述用法、後者では限定用法ですね。</div><TABLE class="quote"><TR><TD><ul class=normal><li class=normal>カキ（果物）が好きだ。</li><li class=normal>カキ（熟れたもの）が好きだ。</li></ul></TD></TR></TABLE><div class="normal">　もう一つは、<b>外部仕様の話を、内部的なパラメタで補う、あるいは限定している</b>こと。<br>
　次の工程への優しさなのかも知れませんが、たとえば外部仕様書をレビューするお客様にとっては意味のない記述でしょうし、上述のような曖昧さをはらんでいるだけに、あまりよい方法とは思えません。</div><div class="normal">　それでは、外部仕様と内部仕様の「言葉」をどう繋げばいいのか。<br>
　これはまた別の話になりますので、別のエントリーで。</div>
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1721932&name=prjmng&pid=52241353" width="1" height="1" />
]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/prjmng/archives/52239741.html">
<title>IBM細川さんに、レビューのサンプリング技を学ぶ #infotalk</title>
<link>http://blog.livedoor.jp/prjmng/archives/52239741.html</link>
<description>　産業技術大学院大学が主催している、Infotalk というイベントがあります。Webサイトによると、ICT関連の熱い技術，面白い活用等を取り上げ，いろいろと議論したりする場（勉強会&amp;交流会）だそうです。
　その第38回は、日本IBMの細川宣啓さんによる「ソフトウェア品質検査...</description>
<dc:creator>prjmng</dc:creator>
<dc:date>2012-01-21T16:42:50+09:00</dc:date>
<dc:subject>イベント</dc:subject>
<content:encoded><![CDATA[<div class="normal">　<a href="http://aiit.ac.jp/" target="_blank">産業技術大学院大学</a>が主催している、<a href="http://pk.aiit.ac.jp/index.php?InfoTalk" target="_blank">Infotalk</a> というイベントがあります。Webサイトによると、</div><TABLE class="quote"><TR><TD>ICT関連の熱い技術，面白い活用等を取り上げ，いろいろと議論したりする場（勉強会&交流会）</TD></TR></TABLE><div class="normal">だそうです。<br>
　その第38回は、日本IBMの細川宣啓さんによる<b>「ソフトウェア品質検査技術と静的解析～インスペクション技術を中心に」</b>というテーマ。ソフトウェア品質技術者たまねぎ戦士のわたしとしては外せないイベントです。</div><div class="normal">　このエントリーでは、その内容を一部、お伝えしたいと思います。<br>
　なお発表のスライドは（まだ）公開されていませんが、内容の一部は細川さんの別の講演でも紹介されているので、そのスライドをご参照ください。たとえば、<a href="http://qcontokyo.com/pdf/ibm_nobuhirohosokawa.pdf" target="_blank">コチラ（PDF)</a>です。わたしの記事には文章しかないので、わかりづらいと思います。</div><div class="title2">サンプリングの重要性</div><div class="normal">　大きなテーマがいくつかありましたが、わたしが特に気になったのは2つ。ドキュメントのレビューとコードインスペクション、それぞれの対象の選び方です。<br>
　レビュー自体の能力ももちろん重要ですが、その能力を最大限生かすためには、対象を効率よくサンプリングする能力が必要なのですね。</div><div class="normal">　<a href="http://ja.wikipedia.org/wiki/V%E3%83%A2%E3%83%87%E3%83%AB" target="_blank">V字モデル</a>で開発している組織は多いと思いますが、その実態は、設計のある段階からテストのある段階までを外注する、つまり<b>V字の下の部分を自分たちでは行わない「洗面器モデル」</b>。<br>
　その洗面器に入れる「発注時のドキュメント」と、洗面器から出てくる「納品時のプログラム」の品質の見極めが大事であり、そのためにはそれぞれを適切にサンプリングする方法が必要だというお話です。</div><div class="title2">ドキュメントのサンプリング</div><a href=https://www.amazon.co.jp/dp/4274502066/ref=as_li_qf_sp_asin_til?tag=syakaijinngak-22&camp=243&creative=1615&linkCode=as1&creativeASIN=4274502066&adid=0RF3K6BW1DHBFT9T61NC& target="_blank"><img src="https://images-na.ssl-images-amazon.com/images/I/41w2VRy6aYL._SL100_.jpg" align=right class=amazon></a><div class="normal">　まずはドキュメント。膨大なドキュメントからどう、品質的なリスクの高いものをサンプリングするか。</div><div class="normal">　設計工程で得られるデータといえば、見積もり規模、ドキュメントの枚数、レビュー工数、レビュー指摘件数などでしょうか。<br>
　これらを組み合わせて、何がしかのメトリクスを作ることはできます。伝統的な指標については、たとえば<a href="https://www.amazon.co.jp/dp/4274502066/ref=as_li_qf_sp_asin_til?tag=syakaijinngak-22&camp=243&creative=1615&linkCode=as1&creativeASIN=4274502066&adid=0RF3K6BW1DHBFT9T61NC&" target="_blank">『定量的品質予測のススメ』</a>にたくさん載っています。</div><div class="normal">　ですが細川さんの提示された散布図は、これらをなぎ倒すものです。<br>
　この散布図、<b>ドキュメントの最終更新日時</b>の「日付」横軸に、「時刻」を縦軸に持っています。そこにはどんなパターンが現れるでしょう。</div><div class="normal">　たとえば、縦に現れる強い筋。縦ということは同じ日に多くのドキュメントを更新しまくっているということで、つまりは<b>納品直前</b>だったりします。<br>
　さらにその納品日直後に、台形を左に倒したような形（右に長い辺、左に短い辺）。これは、「納品日は早上がりして、<b>酒を飲みにいく</b>。翌日以降は一時的に、出勤時刻が遅く、退勤時刻が早くなるが、納品後のお客様指摘への対応のために徐々に労働時間が長く・・・」ということを意味するとのこと（笑）。</div><div class="normal">　「最終更新日時」なんていう普段は気にもしない属性が、プロジェクトの様子を如実に表していますね。<br>
　このように、グラフが示すパターンから事実を読み取ることを<b>「グラフマイニング」</b>と呼んでいました。特徴的な欠陥パターンの例として、以下のものがあるそうです。</div><div class="title3">・Overnight Work</div><div class="normal">　午前3時にプロットがある。おつかれさま・・・。でも、そんな時間帯に一人で更新すると、すり合わせ不足による矛盾・不統一の欠陥が多いかも知れない。 </div><div class="title3">・2-cluster</div><div class="normal">　外部設計書と内部設計書、それぞれの納品日直前の黒い筋。この間隔に全然プロットがないということは、内部設計書を書き始めてから、外部設計書をほとんど更新していないということ。仕様追跡性の欠如が疑われる。</div><div class="normal">　身につまされるお話。。。<br>
　IBMでは、成果物の品質のリスクになるパターンを10数個に整理しているそうです。それらのパターンをもったあたりを狙い撃ちすることで、危ないところから潰していけるということですね。</div><div class="title2">コードのサンプリング</div><div class="normal">　まず、細川さん謹製の<b>「欠陥の魚群探知機」</b>という散布図。<br>
　上から下が、基底クラスから派生クラス。左から右が、重い欠陥から軽いバグとしてプロットしています。<br>
　たとえば横に強い筋があれば、広くたくさん誤っているということで、人を次ぎ込む必要がある。縦に強い筋が現れていれば、標準化をミスっているため、みんなで間違っているのかも知れない。こんなことが読み取れると言います。</div><div class="normal">　さらに、すべてのソースファイルをスキャンして、「診断」に必要なパラメタを抽出します。行数、コメント率、IFの数、try~catchの数・・・。<br>
　これらのパラメタを組み合わせてメトリクスにして、「2万行のクラス」「コメント率が100%」「ifが数100個なのにelseがほとんどない」といったリスクの高い箇所を絞り込み、サンプリングの対象とします。</div><div class="title2">コードインスペクション LIVE★</div><div class="normal">　そのうえで、さあいよいよコードのロジックを・・・見ない。まず、ファイルを開いて<b>コードをソート</b>する。！ ？<br>
　ソートにより、デッドコピーが1か所に集まってきたり、深すぎるネストの多さが可視化されたりするのです。これだけでも、ざっくり傾向がつかめるというのです。ダイナミック過ぎてすごい。</div><div class="normal">　さらに今度は、書かれた言葉を検索する。「TODO」「TBD」「調整」など・・・。中国の開発においては、「XXX」という隠語が使われることもあるとのこと。<br>
　これらのコメントは、仕様がギリギリまで固まっていないとか、とりあえずの実装をしているといったリスクをはらむ。最悪のコメントして、<b>「// 苦肉の策」</b>なんてものまで紹介されました。</div><div class="normal">　もちろんこれは、下準備。この後に本来のインスペクションがあるわけですが、その前段階としてできることがある、ということです。</div><div class="normal">　なお、この言葉拾いは、わたし自身もドキュメントチェックの際にやっています。当初は、「以上/以下」「こともある」みたいな、間違えにつながりやすい言葉を拾っていましたが、そのうちより人間行動に着目しｗ、そっち系のキーワードを集めました。<br>
　わたしの場合「XX」と「**」をチェックしていますが、細川さんの観点とはちょっと違って、「XXX参照」「＊＊＊に記載」のようにとりあえず書いたまま<b>参照先のネタを作り忘れる</b>ということがあるためです。</div><div class="title2">その他にももっともっと</div><div class="normal">　<b>欠陥マスターDB</b>についての話がありました。これは細川さんが以前から進めていた研究の一つで、欠陥の現象や原因を一般化し、その定義、発生の兆候、検出方法、除去方法、副作用などを整理したものです。<br>
　これらの特性を数値化し、それを「Shape of Defects」として可視化したり、欠陥同士の関連性を見つけたりという<b>欠陥エンジニアリング</b>の研究を進めているそうです。</div><div class="normal">　このようなトピックは、来週開催される<a href="http://jasst.jp/symposium/jasst12tokyo.html" target="_blank">JaSST'12 Tokyo</a>でもお話されるとのこと。JaSST参加予定の方は、ぜひ聞いてみることをオススメいたします。</div><div class="normal">　細川さんはプレゼンの最後に、<b>「日本のソフトウェア開発でもっとも不足しているのは、品質エンジニアだ！」</b>と力説されていました。<br>
　品質とは本当に難しい分野だと思いますが、わたしもその一端を担えるようがんばりたいです。という、小学生の日記のような終わり方ですいません。</div>
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1721932&name=prjmng&pid=52239741" width="1" height="1" />
]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/prjmng/archives/52238599.html">
<title>レビュー観点: 勝手熟語を作ってくれるな</title>
<link>http://blog.livedoor.jp/prjmng/archives/52238599.html</link>
<description>　前回のエントリーで載せた、レビュー形態のマッピングを再掲します。
　昨年から地味に考え続けている(c)チェックリスト、つまり技術的な側面以外のチェック観点について、1つ目のものを書きます。勝手熟語生成問題日本以外全部沈没　「Verpixelungsrecht」というドイツ語...</description>
<dc:creator>prjmng</dc:creator>
<dc:date>2012-01-16T09:44:57+09:00</dc:date>
<dc:subject>SQ3.4-レビューの技法</dc:subject>
<content:encoded><![CDATA[<div class="normal">　前回の<a href="http://blog.livedoor.jp/prjmng/archives/52237146.html" target="_blank">エントリー</a>で載せた、レビュー形態のマッピングを再掲します。<br>
　昨年から地味に考え続けている(c)チェックリスト、つまり技術的な側面以外のチェック観点について、1つ目のものを書きます。</div><img src="http://livedoor.blogimg.jp/prjmng/imgs/7/f/7f5068b5.png" width="249" height="222" border="0" alt="レビューマップ3" hspace="5" class="pict" align="center"  /><BR CLEAR=all><div class="title2">勝手熟語生成問題日本以外全部沈没</div><div class="normal">　<b>「Verpixelungsrecht」</b>というドイツ語があるそうです。googleストリートビューで撮影された自宅やオフィスの画像に対して、モザイク化を求める権利のこと。言葉を簡単に合成してしまうことで有名なドイツ語ならではですね。</div><div class="normal">　この<b>合成語を作り出す傾向</b>が、ソフトウェア開発の設計ドキュメントで顕著に感じられるのはわたしだけでしょうか。</div><div class="normal">　たとえば以下。</div><TABLE class="quote"><TR><TD>検索結果表示状態で複数項目選択時は・・・</TD></TR></TABLE><div class="normal">　中華一番！<br>
　「検索結果を表示した状態で、複数の項目を選択している場合は・・・」と書けばいいと思うのですが・・・。この短縮により何かメリットがあるのでしょうか。</div><div class="note">これは「あるのでしょうか、いや、なかろう」という反語ではなく、疑問です。何かメリットがあるなら教えてください。</div><div class="normal">　さて、勝手熟語が作られるプロセスは2つあり、それぞれ別の問題をもっています。</div><div class="title3">(1)サ変動詞を名詞に戻す</div><div class="normal">　「残業をする」は、名詞+助詞+(サ変)動詞 という構造をもっていますが、「残業する」はそれ自体が1つの動詞です。「サ変動詞を省く」とは、<b>「する」を省略して名詞に戻す行為</b>を指します。</div><div class="normal">　何が問題なのか。<br>
　「する」は動詞であり、動詞は活用を持つ。つまり「する」「される」「した」「された」といった、<b>時制や態を持つのに、その情報をあえて捨てて、時制も態もない名詞に戻している</b>ことが問題です。</div><div class="normal">　たとえば<b>「複数項目選択時」</b>という勝手熟語を考えてみましょう。</div><TABLE class="quote"><TR><TD><ol class=normal><li class=normal>複数項目選択時は、[ctrl]キーを押しながらクリックする。</li><li class=normal>複数項目選択時は、「名前を変更」ボタンが非活性になる。</li></ol></TD></TR></TABLE><div class="normal">　この句点の後の行動・動作のタイミングはそれぞれ、いつなんでしょう。<br>
　(1)は「選択する前」で、(2)は「選択した後」。同じ言葉なのに、タイミングが異なりますよね。<br>
　文脈に応じて時制や態を読み手が解釈しないといけない。つまり、曖昧です。動作の説明をするドキュメントで、その動作が起こるタイミングが曖昧なのは悲しい。</div><div class="title3">(2)助詞などを省く</div><div class="normal">　たとえば<b>(1)「利用者閲覧済み記事」</b>という合成語。この言葉を、<b>(2)「利用者が閲覧した記事」</b>と比べたとき、印象にどのような違いがありますか。</div><div class="normal">　(2)だと、「閲覧」という操作がシステムとしてどういう意味を持つかまでは言及していないのに対し、(1)では、たとえば「閲覧済みフラグが立っている」など、<b>「システムとして明確に特定できる言葉」</b>であるような印象を受けます（よね？）。</div><div class="normal">　合成語はもともと自然界に存在する言葉ではなく、そのシステムでいきなり生み落としているものなのだから、当然そのシステムにおいてクリアに定義された意味を持つべきということになります。そうでないなら助詞を省かず、自然な自然言語を使うのがいいと思います。</div><div class="note">「自然言語」と「自然な言語」も、意味が違いますね。</div><div class="normal">　結論というか、主張は以下です。</div><TABLE class="quote"><TR><TD>動詞や助詞の省略によって、言葉を不必要に3つ以上合成するのはやめよう。合成したらそれは新しい言葉、明確に定義しよう。</TD></TR></TABLE><div class="normal">　さて、この「明確に定義」に関する問題に、<b>「マーブル模様の仕様書」</b>というものがあります。多分次回は、これについて。</div>
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1721932&name=prjmng&pid=52238599" width="1" height="1" />
]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/prjmng/archives/52237146.html">
<title>2012年はレビューにも想いを寄せる</title>
<link>http://blog.livedoor.jp/prjmng/archives/52237146.html</link>
<description>　前回のエントリで書き忘れました。今年もよろしくお願いいたします。
　拙ブログ、今年は1エントリ/10日+αで40本書く。そしていつしか量が質に転化して・・・という展開を目指しています。いつしかっていつだ。レビューへの野望　2011年は「ソフトウェアテスト技法ドリル...</description>
<dc:creator>prjmng</dc:creator>
<dc:date>2012-01-07T07:50:34+09:00</dc:date>
<dc:subject>SQ3.4-レビューの技法</dc:subject>
<content:encoded><![CDATA[<div class="normal">　<a href="http://blog.livedoor.jp/prjmng/archives/52236650.html" target="_blank">前回のエントリ</a>で書き忘れました。今年もよろしくお願いいたします。<br>
　拙ブログ、今年は1エントリ/10日+αで40本書く。そしていつしか<b>量が質に転化</b>して・・・という展開を目指しています。いつしかっていつだ。</div><div class="title2">レビューへの野望</div><div class="normal">　2011年は<a href="http://atnd.org/events/11596" target="_blank">「ソフトウェアテスト技法ドリル勉強会」</a>のおかげで、テスト技法に関する勉強を進めることができました。<br>
　2012年はこれに加えて、<b>「レビューどうやろうか」</b>ってことをじっくり考えていきたいと思っています。昨年末の<a href="http://atnd.org/events/20810" target="_blank">レビュー祭り</a>でアジャイル・インスペクション、「ガイドを用いたサンプリングレビュー」の<a href="http://blog.livedoor.jp/prjmng/archives/52223927.html" target="_blank">話</a>を聞いたことが大きいですね。</div><div class="normal">　<a href="http://gihyo.jp/dev/serial/01/tech_station/0002" target="_blank">レビューは静的テストに分類される</a>のですが、プログラムのテストと大きく違う点があります。<br>
　<b>テストケースがない</b>ことです。<br>
　何をもってよしとするかもよくわからないし、「レビューってどうやるの？」という疑問にも答えがたい。自分自身、システマティックにチェックやレビュー作業をしているとはとても言えない。</div><div class="normal">　<a href="http://twitter.com/#!/yasuohosotani" target="_blank">細谷泰夫</a>さんによる、<a href="http://www.jaspic.org/modules/event/index.php?content_id=20" target="_blank">SPI Japan 2011</a>の発表資料・<b>『産学連携によるデザインレビュー改善事例』</b>を絶賛精読中なわけですが、このスライドp.8のような、レビューのロードマップを、自分なりに持っておきたいですね。</div><div class="title2">レビュー形態のマッピング</div><div class="normal">　さて、スライドp.8の図を参考に、レビュー形態を次の2つの軸でマッピングしてみました。理解が誤っていたらスミマセン。</div><img src="http://livedoor.blogimg.jp/prjmng/imgs/7/f/7f5068b5.png" width="249" height="222" border="0" alt="レビューマップ3" hspace="5" class="pict" align="center"  /><BR CLEAR=all><div class="title3">縦軸: 技術⇔ドキュメンテーション</div><div class="normal">　「技術」はそのまま、技術的に妥当な設計かということを検討するもの。「ドキュメンテーション」（もっと適切な表現がありそう）は、用語の統一、ヘッダー・フッターといったエディトリアルな正しさや、記述の十分性、明確さなどを検討するもの。</div><div class="title3">横軸: サンプリング⇔全数</div><div class="normal">　ドキュメントの一部を対象とするのか、全部を見るのか。</div><div class="normal">　(A)(D)(E)がスライドにあるもの。(B)はレビュー祭りで習ったもの。(C)は今、自分で考えているものです。1つずつ見てみます。</div><div class="title3">(1)ドキュメンテーション×サンプリング の象限</div><div class="normal">　まず、(A)アジャイル・インスペクションです。先の発表スライドにあるように、文書様式、言葉の定義、記述の粒度や深さという部分を見ます。技術的な妥当性は埒外。<br>
　使える道具として、エディトリアルな観点についてはプロジェクトや組織規定のチェックリストがあったり、曖昧さにつながる表現の検出については一部、ツールで機械的にチェックできますよね。</div><div class="normal">　(B)「ガイドを用いたサンプリングレビュー」の守備範囲はアジャイル・インスペクションと重複するものの、真にエディトリアルなところは見ないので、若干上側に。ここで使用する道具は、ガイド。</div><div class="title3">(2)ドキュメンテーション×全数 の象限</div><div class="normal">　(C)チェックリストに基づくレビューってのを考えています。チェックリスト嫌いな人、かたじけない。<br>
　ここでいうチェックリストは、コーディング規約を羅列したようなものとか、過去の失敗事例に基づいて作成したような技術的・各論的なものではありません。開発対象のプログラムの性質にあまり依存しない、汎用的な項目です。</div><div class="title3">(3)技術×全数 の象限</div><div class="normal">　(D)インスペクション。(C)との合わせ技で、<b>技術的な妥当性と、それに伴う記述の十分性・正確性を担保する！</b>というところでしょうか。言うだけなら簡単ですね。<br>
　レビュー担当者の成長パスとして、最初は(C)のチェックリストをたよりにレビューに貢献しつつ、次第に(D)にシフトしていく作戦。</div><div class="title3">(4)技術×サンプリング の象限</div><div class="normal">　(E)ウォークスルーです。<br>
　(D)と(E)については、先のスライドにそれぞれ「自信のない部分を局所的に」「全体を通して」とあることから、この位置にしています。</div><div class="normal">　で、今年よく考えていきたいと思っているのは、太い楕円のもの。<b>(B)の「ガイド」と、(C)のチェック観点の手持ちを増やしたい</b>。<br>
　(B)のガイドについては、レビュー祭りで習った入出力のガイドと、前回書いたキーワードマトリックスで、とりあえず2つ(笑)。<br>
　(C)のチェック観点として考えているものを、今後書けたらと思います。</div><div class="normal">　もしかすると、車輪の劣化再発明を一生懸命やっているのかも知れません。参考になる本や記事などあれば、教えてくださいませ。</div><div class="title2">「技術的なチェックリスト」について</div><div class="normal">　(C)のチェックリストは、技術的な事例の集まりじゃないよと書きましたが、「やりがちな失敗」「設計誤りの経験」みたいなものを、ノウハウとして蓄積していくのは正しいと思っています。<br>
　でもそれをチェックリストの体裁にして、<b>設計後に</b>それに基づくチェックをする/させるというのは、アンチパターンかなと。挿話証拠「そんなチェックリストあるなら先に言ってよ」。<br>
　そういうノウハウは、ドキュメントを書く<b>前に</b>見て、理解しておくべきなんですよね。</div>
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1721932&name=prjmng&pid=52237146" width="1" height="1" />
]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/prjmng/archives/52236650.html">
<title>サンプリングレビューにおける「ガイド」を探した</title>
<link>http://blog.livedoor.jp/prjmng/archives/52236650.html</link>
<description>　昨年11月に開催されたレビュー祭（ブログ記事）で、「ガイドを用いたサンプリングレビュー」というレビュー技法が紹介されました。
　そこで提示された「ガイド」の例が、入出力のガイド。機能を記述した文章で、「入力」「処理」「出力」欄をきちんと埋められるかどうか...</description>
<dc:creator>prjmng</dc:creator>
<dc:date>2012-01-04T18:12:38+09:00</dc:date>
<dc:subject>SQ3.4-レビューの技法</dc:subject>
<content:encoded><![CDATA[<div class="normal">　昨年11月に開催された<a href="http://atnd.org/events/20810" target="_blank">レビュー祭</a>（<a href="http://blog.livedoor.jp/prjmng/archives/52225366.html" target="_blank">ブログ記事</a>）で、<b>「ガイドを用いたサンプリングレビュー」</b>というレビュー技法が紹介されました。<br>
　そこで提示された「ガイド」の例が、入出力のガイド。機能を記述した文章で、「入力」「処理」「出力」欄をきちんと埋められるかどうかで、記述の網羅性を判断します。埋まらない部分、埋めようとしても曖昧な部分が、仕様として不十分な箇所、ということになりますね。</div><div class="normal">　このようなガイド、他にどういうものがあるのでしょう。<br>
　<a href="http://gihyo.jp/magazine/emind/archive/2007/vol5" target="_blank">『Engineer Mind』</a>の連載『エンジニアよ、国語力に目を向けよう』（開米瑞浩氏）で紹介されている<b>「キーワードマトリックス」</b>が、まさにガイドとして使えると感じたので、紹介します。</div><div class="normal">　記事では、Microsoft Windows XP Professional リソースキットの文章を引用しています。以下の引用はその孫引きです。</div><TABLE class="quote"><TR><TD>ユーザープロファイルは、コンピュータにログオンしたユーザーごとに1つずつ作成され、規定の設定ではローカルコンピュータに保存されます。移動用のユーザープロファイルを構成しておくと、ユーザーがコンピュータからログオフしたときにユーザープロファイル内の設定がネットワークサーバーにコピーされ、そのユーザーが次にネットワーク上のどのコンピュータにログオンしても同じ設定が使用できるようになります。</TD></TR></TABLE><div class="normal">　何といいますか、清潔に書かれていますが、シーケンシャルに流れていって、頭にはなかなか入ってこない、そんな文章です。<br>
　開米さんはこの文章を、<b>ステートメント</b>（1つの意味だけを明確に表現した短い文）に解体し、グルーピングせよと教えています。するとこの文章は、(1)ユーザプロファイルの話 と (2)移動用のユーザプロファイルの話 に分けられることがわかります。</div><div class="normal">　キーワードマトリックスは、この再構築が終わった後に使います。<br>
　キーワードとは、上の文章でいう「ユーザプロファイル」「ログオン」など、説明の要となる言葉。さらにこのキーワードたちの、文章における属性を抽出して、マトリックスを作ります。そのマトリックスに、再構築したステートメントの内容を埋めていく。すると・・・</div><table class="sample"><tr><th>用途</th><th>作成の単位</th><th>保存場所</th><th>保存タイミング</th><th>メリット</th></tr><tr><td>(A)</td><td rowspan=2>コンピュータにログオンしたユーザごとに1つずつ</td><td>ローカルコンピュータ</td><td>(B)</td><td>(C)</td></tr><tr><td>移動用</td><td>ネットワークサーバ</td><td>ユーザのログオフ時</td><td>どのコンピュータでも同じ設定が使える</td></tr></table><div class="normal">　このように、「埋まっていない部分」が明確になるというわけです。<br>
　特に(B)は、仕様として明確にしておくべき場所でしょうが、元の文章から、「Bが抜けている」と見ぬくのは難しいですよね。<br>
　また「用途」列でわかるように、「移動用」に対して、<b>「デフォルト」的なモノは、名前が省略されがち</b>と指摘されていました。「ラッパ飲み」という言葉はありますが、「容器から飲み物をコップに注いでから飲む」という動作に名前がないのと同じですね。この名前の省略は、あとあと仕様の曖昧につながっていきます。</div><div class="normal">　入出力ガイドに比べて、自分で属性を抽出しなくてはならない分難しくはなりますが、有効な方法だと思います。色々な要素が長文でダラダラ書かれているような箇所に適用するのがよさそうです。</div><a href=https://www.amazon.co.jp/dp/4798122750/ref=as_li_qf_sp_asin_til?tag=syakaijinngak-22&camp=243&creative=1615&linkCode=as1&creativeASIN=4798122750&adid=0S58GT9F1FTERQ27066B& target="_blank"><img src="https://images-na.ssl-images-amazon.com/images/I/510IK9bGg2L._SL100_.jpg" align=right class=amazon></a><div class="normal">　ところで、開米瑞浩さんにはどんな著作があるのかな？と調べてみたところ、<a href="http://wacate.jp/2011/winter/gaiyo.html" target="_blank">WACATE2011冬</a>の予習本であり、ぼくも購入している<a href="https://www.amazon.co.jp/dp/4798122750/ref=as_li_qf_sp_asin_til?tag=syakaijinngak-22&camp=243&creative=1615&linkCode=as1&creativeASIN=4798122750&adid=0S58GT9F1FTERQ27066B&" target="_blank">『エンジニアのための図解思考 再入門講座』</a>がまさに、それでした。2012年も、毎度毎度の出遅れ感・・・。</div>
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1721932&name=prjmng&pid=52236650" width="1" height="1" />
]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/prjmng/archives/52232016.html">
<title>それでもやはり、品質を「予測」したい #swtestadvent2011</title>
<link>http://blog.livedoor.jp/prjmng/archives/52232016.html</link>
<description>　「Software Test &amp; Quality Advent Calendar 2011」に、12/14(水)担当として参加させていただくことにしました。前日は、goyoさんの「テスト自動化をサポートするDVCS」です。みなさんの素敵なエントリの間に、地味でレガシィな雑談を滑りこませます。　分量の割に内容は薄...</description>
<dc:creator>prjmng</dc:creator>
<dc:date>2011-12-14T00:01:56+09:00</dc:date>
<dc:subject>SQ3.6-品質分析・評価の技法</dc:subject>
<content:encoded><![CDATA[<div class="normal">　<a href="http://atnd.org/events/22833" target="_blank">「Software Test & Quality Advent Calendar 2011」</a>に、12/14(水)担当として参加させていただくことにしました。前日は、<a href="http://twitter.com/#!/goyoki" target="_blank">goyo</a>さんの<a href="http://d.hatena.ne.jp/goyoki/20111213" target="_blank">「テスト自動化をサポートするDVCS」</a>です。みなさんの素敵なエントリの間に、地味でレガシィな雑談を滑りこませます。</div><div class="normal">　分量の割に内容は薄く、要点は以下の2点です。</div><TABLE class="quote"><TR><TD><ul class=normal><li class=normal>由緒ある品質の技法をあらためて召喚するのも面白い</li><li class=normal>現場の足枷にならない、役に立つメトリクスの使い方があるといいね</li></ul></TD></TR></TABLE><div class="title2">「欠陥数予測」のウケの悪さ</div><div class="normal">　ソフトウェアの欠陥の数を予測する話・・・などと口走った瞬間に警戒されますよね。特に「欠陥密度」を嫌う人は少なくないようです。<br>
　なぜ、嫌われるのか。考えてみると、以下のような三つのドグマが、その理由になっているように思います。</div><TABLE class="quote"><TR><TD><ol class=normal><li class=normal>欠陥の数は、ソフトウェアの LOC に正比例するっ・・！</li><li class=normal>その比例定数は、個々のプロジェクトに依存しないっ・・！</li><li class=normal>その予測結果を、摘出の目標とすべきであるっ・・！</li></ol></TD></TR></TABLE><div class="normal">　・・・まあ極端に書いてますし、これを絶対的に盲信している人はあまりいないでしょう。<br>
　一方で、「テストの終わり」の基準として何らかの数字が欲しいのも人情。そのため、これほど極端ではなくとも、どうにもしっくりこない「目標」が独り歩きしてしまうことがありそうです。</div><div class="normal">　欠陥数を予測する技法として、もう少しこのドグマから逃れられるものはないでしょうか。</div><div class="title2">「探針」と、勝手な実験</div><div class="title3">探針とは何か</div><a href=http://www.amazon.co.jp/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E5%93%81%E8%B3%AA%E7%9F%A5%E8%AD%98%E4%BD%93%E7%B3%BB%E3%82%AC%E3%82%A4%E3%83%89%E2%80%95SQuBOK-Guide-SQuBOK%E7%AD%96%E5%AE%9A%E9%83%A8%E4%BC%9A/dp/4274501620/ref=sr_1_1?s=books&ie=UTF8&qid=1323617824&sr=1-1 target="_blank"><img src="https://images-na.ssl-images-amazon.com/images/I/51Cy7SCb8YL._SL100_.jpg" align=right class=amazon></a><div class="normal">　<a href="http://www.amazon.co.jp/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E5%93%81%E8%B3%AA%E7%9F%A5%E8%AD%98%E4%BD%93%E7%B3%BB%E3%82%AC%E3%82%A4%E3%83%89%E2%80%95SQuBOK-Guide-SQuBOK%E7%AD%96%E5%AE%9A%E9%83%A8%E4%BC%9A/dp/4274501620/ref=sr_1_1?s=books&ie=UTF8&qid=1323617824&sr=1-1" target="_blank">『SQuBOKガイド』</a>の知識エリア3.6「品質分析・評価の技法」に、<b>「探針」</b>（Quality Probe）という項があります。<br>
　このエントリを書こうと思い立って改めてネットを調べたところ、すでに<a href="http://twitter.com/#!/akiyama924" target="_blank">秋山浩一</a>さんが、この探針について必要十分な<a href="http://hayst.com/qptest.aspx" target="_blank">記事</a>を書かれていて、目の前が真っ暗になりました。詳細はこちらをご覧いただくとして。</div><div class="normal">　探針とは、ハードウェア製品でいう<b>抜き取り検査</b>のアナロジーです。製品全体から一部を抜き取って、その不良の割合から全体の品質を予測する。<br>
　ソフトウェアでは、「製品」を「テストケース」に読み替えます。<br>
　検査部門が、用意したテストケースから一定の割合の項目を無作為に選び取り、消化する。その結果から、テストケース全体で出るであろう欠陥の数の範囲を予測するのです。</div><div class="normal">　この予測には、<b>区間推定</b>の考え方を使います。「開票が始まったばかりなのに当確が出る」「ほんの一部の世帯しか調べていないのに視聴率が出る」というのと、本質的なところは変わりません。</div><div class="normal">　主な変数は2つだけ。<b>消化したテストケースの数と、摘出した欠陥の数</b>。たとえば、全テストケース5,000件の中から30%選んで消化した結果、欠陥が50件だったとすると、全テストケースでは121～212件の欠陥が出ると予測されます。</div><div class="title3">工程全体ではどうなるか</div><div class="normal">　探針による予測は、テスト工程のどこかの一時点で行うものとされています。でもためしに、テスト工程の進捗の各段階で予測をしたらどんな姿になるか、見てみましょう。</div><div class="note">これ以降の話は本来の「探針」とはまったく関係なく、わたしの個人的な思いつき、実験に過ぎません。</div><div class="normal">　日付を横軸にして、欠陥の摘出がまんま <a href="http://ja.wikipedia.org/wiki/%E4%BF%A1%E9%A0%BC%E5%BA%A6%E6%88%90%E9%95%B7%E6%9B%B2%E7%B7%9A" target="_blank">Gompertz 曲線</a>に乗るような、40日間のテスト工程で試してみます（<b>土日もテストやってる！</b>とか気にしないでください。欠陥数も適当）。</div><img src="http://livedoor.blogimg.jp/prjmng/imgs/4/7/47826bec.png" width="298" height="280" border="0" alt="QP02" hspace="5" class="pict" align="center"  /><BR CLEAR=all><div class="normal">　わー！最初の2週間くらいでもう、最終的な欠陥数の範囲にほぼ収束してる！すごい！<br>
　開始直後はテストケースのサンプル数が少ないので、上下限の幅はとても広いのですが、急速に狭まり、予測が安定していますね！</div><div class="normal">　というのはもちろん欺瞞。このグラフでは、「消化したテストケース数に比例して欠陥が出る」というシミュレーションをしています。<br>
　<b>探針でのサンプリングは、（層別で）無作為</b>が原則です。欠陥のありそうなところから優先度をつけて叩いていく、という戦略のもとでテストを進めている場合は、無作為ではないですね。<br>
　一方、そういう戦略ナシで、各チームが並行に、担当分のテストケースを作った順に消化していくような場合は、ある程度の無作為性があるようにも思います。逆説的ですが、テスト戦略なく進めている方が、うまく理論に乗る、なんてことがありそうです。<br>
　いずれにせよ、技法なりメトリクスなりを適用するには、前提を押さえておくことが肝要ですね。</div><div class="title2">三つのドグマとの関係</div><div class="title3">探針の変数</div><div class="normal">　さて、欠陥密度と同様、探針による予測も素朴なものです。ですが実は、最初に述べた(1)と(2)のドグマからは解き放たれています。</div><div class="normal">　(1)について、ソフトウェアの「大きさ」の概念が出てきません。<br>
　(2)についてはどうでしょう。「テストケース数」と「摘出された欠陥数」という、2つの変数について考えてみます。</div><div class="normal">　当然ながら、ソフトウェアの品質が低ければ欠陥が多く出るでしょうし、テストケースがいまいちなら、出るべき欠陥が出せません。<br>
　つまり「欠陥」は、プロジェクトやソフトウェアの性質、設計・実装チームのスキルといった要素が織り込まれたもの。「テストケース」は、テストチームのテスト戦略、テスティングスキルが織り込まれたもの。<br>
　ものすごい単純化かも知れませんが、<b>探針による予測には、その開発独自の要素が織り込まれており、プロジェクト固有の指標になっている</b>のです！・・・いるのかもしれないのです（言い直した）。</div><div class="title3">区間の捉え方</div><div class="normal">　では、予測した上限・下限をどう使うべきなのでしょう。</div><div class="normal">　探針本来の目的として、『SQuBOKガイド』には、<b>「品質の早期把握と品質向上施策の指針を得る」</b>とあります。保田勝通氏・奈良隆正氏の<a href="http://www.amazon.co.jp/gp/product/4817192631" target="_blank">『ソフトウェア品質保証入門』</a>でも同様です。短絡的に、「この範囲を目標として欠陥を出すのだ！」とは言っていません。(3)のドグマからも自由になれそうです。</div><div class="normal">　ここでちょっと目先を変えて、この区間を、「リスクの幅」と考えることはできないでしょうか。品質的なリスクではなく、<b>テスト工程に要する工数の不確定要素</b>ということです。<br>
　欠陥が多ければ、それだけ改修の人と時間を要する。テスト工程の途中段階で、欠陥数の最良と最悪がざっくりとでも把握できていれば、何やら嬉しさがあります。</div><div class="normal">　また、この区間推定はけっこう、<b>傾向の変化に敏感</b>のようです。ためしに、上のグラフの欠陥数のうち4/16だけ5件増やすと、こうなります。</div><img src="http://livedoor.blogimg.jp/prjmng/imgs/c/9/c997586d.png" width="298" height="280" border="0" alt="QP03" hspace="5" class="pict" align="center"  /><BR CLEAR=all><div class="normal">　2011年4月16日(土)休日出勤中のテストエンジニアの苛立った顔が目に浮かぶようですね。<br>
　このように、テスト工数のリスクと、傾向監視に使うことができそう。とも思います。<br>
</div><div class="title2">おわりに</div><div class="normal">　以上、一般にあまり知られた技法ではない「探針」の紹介と、勝手な実験をしてみました。</div><div class="normal">　テスト工程の状況から欠陥数を予測するといえば、まず<a href="http://ja.wikipedia.org/wiki/%E4%BF%A1%E9%A0%BC%E5%BA%A6%E6%88%90%E9%95%B7%E6%9B%B2%E7%B7%9A" target="_blank">ソフトウェア信頼度成長モデル</a>があり、『SQuBOKガイド』でもちょうど、探針の直前に来ています。この Advent Calender でも<a href="http://twitter.com/#!/oota_ken" target="_blank">太田</a>さんが、Gompertz 曲線はアジャイル開発で使えるかという<a href="http://ootaken.wordpress.com/2011/12/02/%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E9%96%8B%E7%99%BA%E3%81%A7%E3%82%82%E4%BF%A1%E9%A0%BC%E5%BA%A6%E6%88%90%E9%95%B7%E6%9B%B2%E7%B7%9A%E3%81%AF%E6%9C%89%E5%8A%B9%E3%81%8B%EF%BC%9F%E3%83%84/" target="_blank">エントリー</a>を書かれていました。</div><div class="normal">　こんな風に、古式ゆかしい技法を、現代の開発の現場でうまく使えないものかと考えてみるのも、面白いのではないでしょうか。<br>
　机上の空論に終わらない、そして現場の助けになれるような技法やメトリクス。そんなものを見つけていけたらいいなと思い、こんなエントリーを書いてみました。</div><div class="normal">　最後まで読んでいただき、ありがとうございます。<br>
　明日12/15(木)は、<a href="http://twitter.com/#!/shuji_w6e" target="_blank">Shuji Watanabe</a>さんの予定です。</div>
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1721932&name=prjmng&pid=52232016" width="1" height="1" />
]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/prjmng/archives/52230551.html">
<title>ドリル勉強会第7回、状態遷移図</title>
<link>http://blog.livedoor.jp/prjmng/archives/52230551.html</link>
<description>　11/21に開催された、第7回ソフトウェアドリル勉強会。テーマは、ドリル第5章「時間を網羅する」で現れる技法・状態遷移図・状態遷移表でした。主催者である加瀬さんによるtogetterまとめはコチラにあります。いつもありがとうございます。
　状態遷移は設計段階でも使うも...</description>
<dc:creator>prjmng</dc:creator>
<dc:date>2011-12-05T01:17:40+09:00</dc:date>
<dc:subject>SQ3.5-テストの技法</dc:subject>
<content:encoded><![CDATA[<div class=normal>　11/21に開催された、<a href="http://atnd.org/users/19027http://atnd.org/users/19027" target="_blank">第7回ソフトウェアドリル勉強会</a>。テーマは、ドリル第5章「時間を網羅する」で現れる技法・<b>状態遷移図・状態遷移表</b>でした。主催者である<a href="http://twitter.com/#!/softest" target="_blank">加瀬</a>さんによるtogetterまとめは<a href="http://togetter.com/li/217337" target="_blank">コチラ</a>にあります。いつもありがとうございます。<br>
　状態遷移は設計段階でも使うもので、割りと慣れ親しんだつもりでおりましたが、自分のルール無視っぷりを改めて知ることができました。そして、後半はまったくついていけない落ちこぼれぶりをアッピール。</div><div class=normal>　今回の講師は著者ご本人、<a href="http://twitter.com/#!/akiyama924" target="_blank">秋山浩一</a>さんです・・・。何という勉強会。秋山さんは「時間を網羅する」章の執筆で時間との戦いを余儀なくされ、書きたいことを網羅しきれなかったとのこと・・・。</div><div class="title2">4つの視点</div><div class=normal>　状態遷移の話に入る前に、<b>「4つの視点」</b>と称するテストの分類が紹介されました。</div><div class=normal>　テスト技法の分類としては、<a href="http://hayst.com/positioning.aspx" target="_blank">秋山さんのWebサイト</a>で紹介されている<b>「テスト技法ポジショニングマップ」</b>がありますね。<br>
　ポジショニングマップは、ブラックボックス/ホワイトボックス という軸と、網羅的/ピンポイント という軸で作った平面に、各種テスト技法をマッピングしたものです。<br>
　一方「4つの視点」とは、テストの対象や技法を、「構造」「機能」「振る舞い」「並行・並列」の4つに分類したもの。テストの視点が、順にズームアウトしていくイメージでしょうか。</div><div class=normal>　まず、<b>「構造」</b>に対応するテスト技法の代表が、コードカバレッジです。単体テストに対応しますね。<br>
　次に<b>「機能」</b>。「構造」で確認したものを統合してできた、機能の論理を検証します。デシジョンテーブルや原因結果グラフ、HAYST法などが、技法として対応します。<br>
　その機能によって遷移していく状態を確認するのが<b>「振る舞い」</b>。今回の対象である状態遷移表が、その確認のための技法となります。<br>
　さらにその遷移が複数動いているときの挙動を検証するのが<b>「並行・並列」</b>。ハレル図、ペトリネットといった、わたしにとって未知の技法がここにあります。</div><div class=normal>　この勉強会の中で秋山さんが、Boris Beizer 氏の「グラフを見たら、網羅せよ」という言葉を紹介されていました。『Black-box Testing』にある「テストの一般原則」という章にある言葉みたいですね。</div><TABLE class="quote"><TR><TH>Black-Box Testing　P.31</TH></TR><TR><TD>QUSTION: What do you do when you see a graph?<br>
ANSWER: Cover it!</TD></TR></TABLE><div class=normal>　ポジショニングマップも4つの視点にしても、グラフではありませんが、「こう切ってみたが、当てはまる技法は何だろう」とか、逆に「技法があるが、当てはまる象限がない。なぜだろう」みたいに発想が膨らむんですよね。なので、「集まったら、分類せよ」というのも大事だと思います。</div><div class="title2">シンガマジックのオーケストラ</div><div class="title3">まずは状態遷移図</div><div class=normal>　さて、今回の宿題は、<a href="http://www.thesingamajigs.jp/instructions.html" target="_blank">「シンガマジック！」</a>という人形の状態遷移図を描くというもの。なお、以下の図表は<a href="http://astah.change-vision.com/ja/" target="_blank">astah*</a>を使って描いております。</div><TABLE class="quote"><TR><TD>シンガマジック！という人形は、手をおすと３つのモードに順番に変わり、おなかをおすと、<br>
・モード1 の時には、「ハーモニー！」<br>
・モード2 の時には、「おしゃべり！」<br>
・モード3 の時には、「うたいます！」<br>
上記、シンガマジック！の状態遷移図と状態遷移表を書いてください。</TD></TR></TABLE><div class=normal>　リンク先に飛ぶとわかりますが、どのモードでも、おなかを押していると音がなって、離すと止まるという動きのようです。<br>
　「3つのモード」という文言を見て、「じゃあ状態はまず3つだね」と脊髄反射的に作ったのが以下の状態遷移図です。</div><a href="http://livedoor.blogimg.jp/prjmng/imgs/5/f/5f94d199.png" title="stm01" target="_blank"><img src="http://livedoor.blogimg.jp/prjmng/imgs/5/f/5f94d199-s.png" width="350" height="210" border="0" alt="stm01" hspace="5" class="pict" align="left"  /></a><BR CLEAR=all><div class=normal>　いや、初期はもっとひどい、かつ表記ルールも守っていなかったので、思い出を美化しています。<br>
　「バイバイ」というのは上の説明にはありませんが、あるモードで放置すると、「バイバーイ」といって黙りこむという動作をするので、その状態も追加しています。</div><div class="title3">状態からして網羅できていない！</div><div class=normal>　この状態遷移図のダメな点はなんでしょう。・・・ダメな点は複数ありそうなので、「<b>特に</b>ダメな点」としておきましょうか。<br>
　モード「ハーモニー」に注目してください。開始直後、シンガマジックの声は出ていません。次に、腹部を圧迫すると、声が出ます。その「声が出ている」状態は何かというと、ぐるっと回ってやっぱり「ハーモニー」としているのが、上の状態遷移図なんですね。<br>
　「声が出ている」と「声が出ていない」とは、別の状態として定義しないといけません。イベントとしては、「押す」に対して「離す」を入れてやるといいですね。で、描いたのがコレ。</div><a href="http://livedoor.blogimg.jp/prjmng/imgs/8/3/83d5fad9.png" title="stm02" target="_blank"><img src="http://livedoor.blogimg.jp/prjmng/imgs/8/3/83d5fad9-s.png" width="349" height="221" border="0" alt="stm02" hspace="5" class="pict" align="left"  /></a><BR CLEAR=all><div class=normal>　3つのモードからもそれぞれ、電池切れで終了状態に落ちいるようにしました。</div><div class="title3">「開始状態」「終了状態」とは</div><div class=normal>　この「開始状態」「終了状態」というちょっと難しい。正しくはこれを「開始擬似状態」「終了擬似状態」と呼ぶそうです。秋山さんに<a href="http://www.atmarkit.co.jp/farc/rensai/uml_b_l04/uml_b_l04c.html" target="_blank">コチラの記事</a>を紹介していただきました。</div><div class=normal>　状態遷移図の遷移図の「状態」は、オブジェクトが取りうるもの。オブジェクトは時間軸のある時点で生成され、別の時点で消滅します。<br>
　では、生成の前のオブジェクトはどのような状態なのでしょう。答えは、「状態はない」ということになりますね。存在してないのだから、「バイバイ」ですらありません。とはいえ、最初の状態へは、どこからか遷移してこなくてはならない。よって、実際にはオブジェクトがとりえない「開始擬似状態」を定義して、何らかのイベントをトリガーにして最初の状態を取る、ということなんですね。</div><div class="title3">次に状態遷移表</div><div class=normal>　さて、astah*を使うと、描いた状態遷移図から、状態遷移表が自動的に生成されます。これは嬉しいよなあ。<br>
　最初はこんな感じで現れます。空白のセルが多いですね。</div><a href="http://livedoor.blogimg.jp/prjmng/imgs/d/b/db6a55f3.png" title="stm03" target="_blank"><img src="http://livedoor.blogimg.jp/prjmng/imgs/d/b/db6a55f3-s.png" width="346" height="71" border="0" alt="stm03" hspace="5" class="pict" align="left"  /></a><BR CLEAR=all><div class=normal>　状態遷移表のメリットは、このように、考慮されていない状態×イベントが可視化できる点ですね。<br>
　たとえば、「バイバイ」で「腹を押す」とどうなるかが、遷移図にないことがわかりますね。実際には、このアクションでも「モード1」に遷移するとのことです。また、「腹を離す」を定義したのに、「手を離す」って不要なの？とも思い当たります。</div><div class=normal>　たとえ「ありえない」遷移であっても、空白で残すのではなく「N/A」と明示的に判断しておくことが必要になります。<br>
　なお、astah*では「N/A」にあたるものとして、「cannot happen」と「ignore」の2つから選べるようです。「cannot happen」は原理的に起こりえない、たとえば「押した状態で、押す」といったもの。「ignore」は、起こりうるけど、考慮しない。というものと捉えています（未確認）。「ignore」を選ぶのは勇気がいるな。</div><a href="http://livedoor.blogimg.jp/prjmng/imgs/0/3/03aaf879.png" title="stm04" target="_blank"><img src="http://livedoor.blogimg.jp/prjmng/imgs/0/3/03aaf879-s.png" width="349" height="72" border="0" alt="stm04" hspace="5" class="pict" align="left"  /></a><BR CLEAR=all><div class=normal>　「開始状態」は、表にいらない気がするんだけどなあ・・・。</div><div class="title3">網羅性</div><div class=normal>　状態遷移の網羅の考え方として、<b>n-switchカバレッジ</b>があります。n-switchとは、遷移後n回スイッチすることを意味しています。上の状態遷移図でいうと、「モード1→モード2→モード3」は、1-switchの遷移ということになりますね。</div><div class=normal>　遷移する回数nを決めると、状態から状態へn回のスイッチで到達するためのルートは、行列計算で求めることができます。手順的には難しくありませんが、面倒です。<br>
　今回の勉強会では、遷移をツリー状に展開することでスイッチパターンを洗い出す方法を教えていただきました。Togetterには、参加者の方の結果の画像もアップされているので、ご覧ください。</div><div class="title2">さらに話は続く！</div><div class=normal>　さて、この後、直交表を使った状態遷移テストの考え方と、さらにはシーケンスカバリングアレイという、テストパターン削減のための技法についてお話いただいたのですが、全然咀嚼できておらず・・・。<br>
　とりあえず書けるのはこんなところです。シーケンスカバリングアレイは、某MLのやりとりを一度じっくり読んだので、もしかすると、いつか・・・いつか・・・書けるかもしれない。<br>
　ともあれ、いつも充実した内容の本勉強会、主催者・講師のみなさまには感謝でございます・・。</div>
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1721932&name=prjmng&pid=52230551" width="1" height="1" />
]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/prjmng/archives/52228004.html">
<title>『R』勉強会 第2回は、相関分析など - その2</title>
<link>http://blog.livedoor.jp/prjmng/archives/52228004.html</link>
<description>　その1ではずれ値を外してあらためて散布図を描くと、「直線に乗ってるっぽい」結果になりました。相関係数と最小二乗直線　では、x と y の相関の程度を表す相関係数を求めてみましょう。
　直接コマンドを叩くのが速いです。相関係数（coefficient of correlation）を求...</description>
<dc:creator>prjmng</dc:creator>
<dc:date>2011-11-22T16:51:04+09:00</dc:date>
<dc:subject>SQ3.1-メトリクス</dc:subject>
<content:encoded><![CDATA[<div class=normal>　<a href="http://blog.livedoor.jp/prjmng/archives/52227930.html" target="_blank">その1</a>ではずれ値を外してあらためて散布図を描くと、<b>「直線に乗ってるっぽい」</b>結果になりました。</div><div class="title2">相関係数と最小二乗直線</div><div class=normal>　では、x と y の相関の程度を表す<b>相関係数</b>を求めてみましょう。<br>
　直接コマンドを叩くのが速いです。相関係数（coefficient of <b>cor</b>relation）を求めるための関数は、<b>cor</b>。</div><TABLE class="code"><TR><TD></b>> cor(Ans03)<b><br>
          x         y<br>
x 1.0000000 0.8182021<br>
y 0.8182021 1.0000000</TD></TR></TABLE><div class=normal>　行列形式で表示されるので、3変数以上あるときに、すべての変数の組み合わせで、相関係数を見られますね。<br>
　x と y の相関係数は、約0.82とわかりました。</div><div class=normal>　なお、メニューからは、[統計量] - [要約] - [相関の検定] を選択すると、次のようになります。最後の行に、相関係数が。</div><TABLE class="code"><TR><TD><b>> cor.test(Dataset$x, Dataset$y, alternative="two.sided", method="pearson")</b><br>
(一部省略)<br>
data:  Dataset$x and Dataset$y<br>
t = 9.226, df = 42, p-value = 1.175e-11<br>
alternative hypothesis: true correlation is not equal to 0<br>
95 percent confidence interval:<br>
0.6887272 0.8972089<br>
sample estimates:<br>
      cor<br>
0.8182918</TD></TR></TABLE><div class=normal>　相関係数の書かれた最後の行以外は、検定に関する記述なので、ここでは立ち入[りれ]ませんが、「相関がない（相関係数がゼロである）という帰無仮説を棄却し、相関はある、という対立仮説が採択された」ということになるようです。<b>「偶然のバラツキとは思えないほど相関があるように見える」</b>ってことですね。</div><div class="title3">色んな散布の相関係数</div><div class=normal>　<a href="http://blog.livedoor.jp/prjmng/archives/52227930.html" target="_blank">その1</a> で、4つに層別した散布図を見ました。それぞれ特徴のある分布でしたが、これら4つの相関係数はどうなっているでしょう。</div><TABLE class="quote"><TR><TD><ul class=normal><li class=normal>散布図a: 0.8190929</li><li class=normal>散布図b: 0.8149266</li><li class=normal>散布図c: 0.8182021</li><li class=normal>散布図d: 0.8210140<br>
</li></ul></TD></TR></TABLE><div class=normal>　そう、これだけ<b>多様な散らばりなのに、相関係数はほとんど同じ</b>。最小二乗直線を見ても、</div><img src="http://livedoor.blogimg.jp/prjmng/imgs/0/6/06f3f81b.png" width="269" height="278" border="0" alt="gr06" hspace="5" class="pict" align="left"  /><BR CLEAR=all><div class=normal>　わかりづらいですが、右肩上がりの直線でみんな重なっています。相関係数も最小二乗直線も、線形的な関係がどのくらいあるかということを表現しているので、緑△のような二次曲線っぽさは無視されてしまうし、水色×のように一見垂直のように見えても、右上のはずれ値に思い切り引きづられてしまうんですね。</div><div class="title3">最小二乗直線の注意点</div><div class=normal>　最小二乗直線を求めるには、[統計量] - [モデルへの適合] - [線形回帰] 。こんなダイアログが出ます。</div><img src="http://livedoor.blogimg.jp/prjmng/imgs/9/1/91d44279.png" width="342" height="220" border="0" alt="gr07" hspace="5" class="pict" align="left"  /><BR CLEAR=all><div class=normal>　ここで注意。このダイアログでは、目的変数が左、説明変数が右に配置されています。<b>通常グラフで縦軸になる方が、目的変数</b>。散布図を描くダイアログと逆です。</div><div class=normal>　「といっても、y = a*x + b への当てはめなんだから、x と y を逆したところで、x = (1/a)*y - b/a に変換すればいいだけでは？」と思ったら負けです。<b>最小二乗直線を求める<a href="http://ja.wikipedia.org/wiki/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%97%E6%B3%95#.E4.B8.80.E6.AC.A1.E6.96.B9.E7.A8.8B.E5.BC.8F.E3.81.B8.E3.81.AE.E8.BF.91.E4.BC.BC" target="_blank">算出式</a>では、目的変数と説明変数は対照ではない</b>のです。</div><div class=normal>　最初の散布図の、水色×の散布図で、それを確認してみます。下図の左側が、y を目的変数、x を説明変数としたグラフで、右側がその逆のグラフを回転・反転させたものです。傾きが全然違っていますね。</div><img src="http://livedoor.blogimg.jp/prjmng/imgs/8/5/8594c96e.png" width="350" height="180" border="0" alt="gr08b" hspace="5" class="pict" align="left"  /><BR CLEAR=all><div class=normal>　次の第3回は、12/18の予定。第9話・確率と、第10話・確率変数 が対象となりますが、わたしは<a href="http://wacate.jp/2011/winter/gaiyo.html" target="_blank">WACATE2011冬</a>に参加予定のため、残念ながら出席できません。どなたかのつぶやき&<a href="http://togetter.com/" target="_blank">togetter</a>に期待！</div><ul class=item><b class=item>関連リンク</b><br><li class=item><a class=item href="http://togetter.com/li/216508" target="_blank">当日のつぶやきまとめ</a></li><li class=item><a class=item href="http://blog.livedoor.jp/prjmng/archives/52223085.html" target="_blank">『R』勉強会で、統計を学んでいるところです。</a></li><li class=item><a class=item href="http://blog.livedoor.jp/prjmng/archives/52227930.html" target="_blank">『R』勉強会 第2回は、相関分析など - その1</a></li><li class=item><a class=item href="http://blog.livedoor.jp/prjmng/archives/52228004.html" target="_blank">『R』勉強会 第2回は、相関分析など - その2</a></li></ul>
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1721932&name=prjmng&pid=52228004" width="1" height="1" />
]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/prjmng/archives/52227930.html">
<title>『R』勉強会 第2回は、相関分析など - その1</title>
<link>http://blog.livedoor.jp/prjmng/archives/52227930.html</link>
<description>　ヤマハの小池さん主催の「（ソフトウェア品質技術者のための）R勉強会」の第2回が行われましたので、復習をかねてエントリを書きます。なお、当日のつぶやきまとめはコチラにあります。　今回のテーマは、『例題で学ぶ統計的方法』の第7話「散布図と相関係数」、第8話「回...</description>
<dc:creator>prjmng</dc:creator>
<dc:date>2011-11-21T23:51:00+09:00</dc:date>
<dc:subject>SQ3.1-メトリクス</dc:subject>
<content:encoded><![CDATA[<a href=https://www.amazon.co.jp/dp/4794423381/ref=as_li_tf_til?tag=syakaijinngak-22&camp=243&creative=1615&linkCode=as1&creativeASIN=4794423381&adid=0PFCRYYPTW4ZQH8YPH63& target="_blank"><img src="https://images-na.ssl-images-amazon.com/images/I/41E6-Om7BML._SL100_.jpg" align=right class=amazon></a><div class=normal>　ヤマハの<a href="http://twitter.com/#!/koike0125" target="_blank">小池</a>さん主催の「（ソフトウェア品質技術者のための）R勉強会」の<a href="http://kokucheese.com/event/index/20671/" target="_blank">第2回</a>が行われましたので、復習をかねてエントリを書きます。なお、当日のつぶやきまとめは<a href="http://togetter.com/li/216508" target="_blank">コチラ</a>にあります。</div><div class=normal>　今回のテーマは、<a href="https://www.amazon.co.jp/dp/4794423381/ref=as_li_tf_til?tag=syakaijinngak-22&camp=243&creative=1615&linkCode=as1&creativeASIN=4794423381&adid=0PFCRYYPTW4ZQH8YPH63&" target="_blank">『例題で学ぶ統計的方法』</a>の第7話「散布図と相関係数」、第8話「回帰曲線」。「ソフトウェア品質技術者」がもっとも使う道具がこの2つと言えるかも知れません。ともに、基本は知ったつもりでいながら、学んだところが大きかったです。</div><div class="title2">散布図を書いてみる</div><div class="title3">まずは全データで。</div><div class=normal>　何はともあれ、演習で使ったデータセット（<a href="http://sun.econ.seikei.ac.jp/%7Einoue/HPtemp/temp3.htm" target="_blank">Anscombe のデータ</a>）をで、散布図を書いてみましょう。データセットの44点をプロットしたのが、下のグラフ。</div><img src="http://livedoor.blogimg.jp/prjmng/imgs/d/8/d83e4e29.png" width="219" height="209" border="0" alt="gr01" hspace="5" class="pict" align="left"  /><BR CLEAR=all><div class=normal>　「ぼんやり、右肩あがり」程度しか、傾向は見いだせませんね。</div><div class="title3">層別で。</div><div class=normal>　実は上のグラフは4種類のデータをいっしょくたにしたものなので、描き分けてみます。グラフ描画のダイアログで「層別」を選択し、平滑線も入れて出力した結果が、以下。</div><img src="http://livedoor.blogimg.jp/prjmng/imgs/f/c/fcbb696a.png" width="234" height="228" border="0" alt="gr02" hspace="5" class="pict" align="left"  /><BR CLEAR=all><div class=normal>　分けると、傾向が見えました。赤○と青+は、右肩上がり。緑△は2次曲線。水色×は、Y軸に垂直な傾向がありますね。</div><div class="title3">データのサブセットを作る。</div><div class=normal>　では、この青+のみのプロットをしてみましょう。データを絞ってグラフを描く方法は（少なくとも）2つあります。</div><TABLE class="quote"><TR><TD><ol class=normal><li class=normal>データセットに条件を与えて新しいサブデータセットを定義してから、グラフを描く</li><li class=normal>グラフを描くときに、条件を与えて対象データを絞る</li></ol></TD></TR></TABLE><div class=normal>　絞ったデータ自体を何度も使いたいなら、①がいいでしょうね。手順は、メニューの [データ] - [アクティブデータセット] - [アクティブデータセットの部分集合の抽出] から。<br>
　ダイアログは、入力した値を覚えておいてくれないので、一度実行したら、コマンドを直接叩く方が早いでしょう。下のコマンドは、初めに使っていた<b>データセット Ans01 から、変数 layer の値が 「c」であるものを選び、さらに変数 layer 自体は省いたデータセット Ans02</b> を定義しています。</div><TABLE class="code"><TR><TD><b>> Ans02 <- subset(Ans01, subset=layer=="c", select=c(x,y))</b></TD></TR></TABLE><div class=normal>　この Ans02 で散布図、および最小二乗直線を描くと、</div><img src="http://livedoor.blogimg.jp/prjmng/imgs/e/8/e83ad48f.png" width="237" height="237" border="0" alt="gr03" hspace="5" class="pict" align="left"  /><BR CLEAR=all><div class=normal>　不自然なほどきれいな直線に乗っている。が、どうも右上の点は、傾向から外れているように見える・・・。</div><div class="title2">外れ値を除去してみる</div><div class=normal>　さて、全体の傾向から外れているからといって、それが「間違っている」「意味がない」ということにはなりませんが、全体の傾向をより精度よく調べるために、これを外したい。<br>
　ただ、「外す」には何らかの指標がほしいものです。恣意的に外すべきではない。ではどんな方法があるでしょうか。</div><div class=normal>　簡単なのは、<b>トリム平均</b>というものです。最大と最小の付近の値を取り除いてから平均値をとる。Excel だと <b>TRIMMEAN</b> という関数があって、上下何パーセントを除くかを指定することができます。</div><div class="title3">四分位（クオンタイル）点からの判定</div><div class=normal>　野中先生に教えていただいた1つの目安は、<b>「箱ひげ図を見て、四分位範囲の1.5倍を超えたらはずれ値の候補とする」</b>というものです。</div><img src="http://livedoor.blogimg.jp/prjmng/imgs/0/9/093c49bc.png" width="327" height="257" border="0" alt="gr04" hspace="5" class="pict" align="left"  /><BR CLEAR=all><div class=normal>　上の図のように、箱ひげ図は散布図のオプションとして出力できるので、まずはざっくりとはつかめますね。y軸でいうと、箱の上辺が第3四分位、下辺が第1四分位でその幅が四分位範囲です。この幅の1.5倍以上、上辺より上にある、または下辺より下にある場合、はずれ値とみなせるかも、と。</div><div class=note>（2011/11/22）「この幅1.5個分よりメディアンから離れていたら」としていた記述を修正しました。また、以降の「四分位偏差」も「四分位範囲」に修正しました。野中先生ありがとうございます。</div><div class=normal>　四分位範囲の正確な値は、メニューから、[統計量] - [要約] - [アクティブデータセット]。これで数値データセットの基本統計量を出力するコマンドです。</div><TABLE class="code"><TR><TD><b>> summary(Ans02)</b><br>
       x              y        <br>
 Min.   : 4.0   Min.   : 5.40  <br>
 1st Qu.: 6.5   1st Qu.: 6.25  <br>
 Median : 9.0   Median : 7.10  <br>
 Mean   : 9.0   Mean   : 7.50  <br>
 3rd Qu.:11.5   3rd Qu.: 8.00  <br>
 Max.   :14.0   Max.   :12.70 </TD></TR></TABLE><div class=normal>　なお、四分位点を求めるには、以下。</div><TABLE class="code"><TR><TD><b>> quantile(Ans02[,"y"])</b><br>
   0%   25%   50%   75%  100% <br>
 5.39  6.25  7.11  7.98 12.74 <br>
<br>
> quantile(Ans02[,"y"],0.75)<br>
 75% <br>
7.98</TD></TR></TABLE><div class=normal>　今回、y の上の方の外れ値を外すことを考えるので、データセット Ans02 に対する四分位範囲（InterQuartile Range）を求めてみましょう。この表現にたどり着くまでに、試行錯誤で2時間以上かかりました。本当に疲れた。</div><TABLE class="code"><TR><TD><b>> IQR(Ans02[,"y"])</b><br>
[1] 1.75</TD></TR></TABLE><div class=normal>　「第3四分位点から見て、四分位範囲の1.5倍より大きい値」は、</div><TABLE class="code"><TR><TD><b>> quantile(Ans02[,"y"],0.75) + IQR(Ans02[,"y"])*1.5</b><br>
   75% <br>
10.625 </TD></TR></TABLE><div class=normal>　この表現を使って、散布図と最小二乗直線を描いてみます。<br>
　この式を、グラフ作成時のデータ絞り込み条件に使ってもいいし、別の変数に代入して、その変数を絞込み条件に使うこともできます。下のコマンドでは、直接絞り込んでいます。</div><TABLE class="code"><TR><TD><b>> scatterplot(y~x, reg.line=lm, smooth=FALSE, labels=FALSE, boxplots='xy', span =0.5, data=Ans02, subset=y<quantile(Ans02[,"y"],0.75) + IQR(Ans02[,"y"])*1.5)</b></TD></TR></TABLE><img src="http://livedoor.blogimg.jp/prjmng/imgs/a/5/a5e42e48.png" width="237" height="237" border="0" alt="gr05" hspace="5" class="pict" align="left"  /><BR CLEAR=all><div class=normal>　外れ値を除いた曲線を描くことができました。確かに、「直線に乗ってるっぽい」ですね。</div><div class="title3">箱ひげ図の特徴</div><div class=normal>　ところで、はずれ値を除去しても、y軸の箱ひげ図の幅があまり変わっていないことは、大事なポイントです。この<b>「データを多少抜いても、あまり変わらない」箱ひげ図の性質を、ロバスト性という</b>と習いました。<br>
　何故、ロバストか。箱ひげ図はデータの<b>順番</b>を見ているので、データが多ければ、はずれ値を外したところで全体への影響は少ない。一方平均なんかは、<b>値そのもの</b>が計算に効いてくるので、外れ値の影響を思い切り受けるわけです。なるほど・・・。</div><div class=normal>　極端なデータセット(96, 1, 1, 1, 1) を考えてみましょう。<br>
　平均値は20、中央値は1。<br>
　一方、はずれ値「96」を外すと、平均値は1に大きく変化しますが、中央値は依然として1（=(1+1)/2）なのです。<br>
　外れ値の目安を聞いたときに、「外れ値を外すと1.5倍の範囲も変わって、やってもやっても新しいはずれ値が出るのでは？」と思ったのですが、この性質によって、この「タマネギの皮むき」をある程度回避できるのですね。</div><div class=normal>　その2では、求めた最小二乗曲線が「どのくらい妥当なのか」という話と、最小二乗曲線の注意点について、学んだことを書きます。</div><ul class=item><b class=item>関連リンク</b><br><li class=item><a class=item href="http://togetter.com/li/216508" target="_blank">当日のつぶやきまとめ</a></li><li class=item><a class=item href="http://blog.livedoor.jp/prjmng/archives/52223085.html" target="_blank">『R』勉強会で、統計を学んでいるところです。</a></li><li class=item><a class=item href="http://blog.livedoor.jp/prjmng/archives/52227930.html" target="_blank">『R』勉強会 第2回は、相関分析など - その1</a></li><li class=item><a class=item href="http://blog.livedoor.jp/prjmng/archives/52228004.html" target="_blank">『R』勉強会 第2回は、相関分析など - その2</a></li></ul>
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1721932&name=prjmng&pid=52227930" width="1" height="1" />
]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/prjmng/archives/52227071.html">
<title>ド・モルガンの法則、そしてキルアのOR - その2</title>
<link>http://blog.livedoor.jp/prjmng/archives/52227071.html</link>
<description>　今回はキルアとスタンド使いが出てきます。ド・モルガンの法則の適用法則の復習　ド・モルガンの法則とは、以下の2つですね。￢(P ∨ Q) ⇔ ￢P ∧ ￢Q￢(P ∧ Q) ⇔ ￢P ∨ ￢Q　腑に落とすために、次の例文を考えてみましょう。わたしの名はダービーというんだ！ オービ...</description>
<dc:creator>prjmng</dc:creator>
<dc:date>2011-11-18T00:03:46+09:00</dc:date>
<dc:subject>SQ3.4-レビューの技法</dc:subject>
<content:encoded><![CDATA[<div class=normal>　今回はキルアとスタンド使いが出てきます。</div><div class="title2">ド・モルガンの法則の適用</div><div class="title3">法則の復習</div><div class=normal>　<a href="http://ja.wikipedia.org/wiki/%E3%83%89%E3%83%BB%E3%83%A2%E3%83%AB%E3%82%AC%E3%83%B3%E3%81%AE%E6%B3%95%E5%89%87" target="_blank">ド・モルガンの法則</a>とは、以下の2つですね。</div><TABLE class="quote"><TR><TD><ul class=normal><li class=normal>￢(P ∨ Q) ⇔ ￢P ∧ ￢Q</li><li class=normal>￢(P ∧ Q) ⇔ ￢P ∨ ￢Q</li></ul></TD></TR></TABLE><div class=normal>　腑に落とすために、次の例文を考えてみましょう。</div><TABLE class="quote"><TR><TD>わたしの名はダービーというんだ！ オービーでもバービーでもない！</TD></TR></TABLE><img src="http://livedoor.blogimg.jp/prjmng/imgs/d/4/d457042b.jpg" width="80" height="122" border="0" alt="D'Arby" hspace="5" class="pict" align="right"  /><div class=normal>　命題Pを「オービーである」、命題Qを「バービーである」とすると、「オービーでもバービーでもない」という言明は「オービーでない、かつ、バービーでない」、つまり「￢P ∧ ￢Q」ということになります。<br>
　これをド・モルガンの法則第1式で置換すると、「（オービーである、または、バービーである）ということはない」、ということになります。</div><div class="title3">NOT を消す試み</div><div class=normal>　さて、何故こんなことを言い出したかというと、AND、OR、NOT が日常語に現れたとき、<b>最も紛らわしいのはNOT だ</b>と思っているからです。で、ド・モルガンの法則を使えばその紛れを軽減することができるかも知れません。<br>
</div><div class=normal>　たとえば、次のようなちょっとわかりづらい文章を書き換えていきましょう。</div><TABLE class="quote"><TR><TD>休日や19時を過ぎての入店でなければ、クーポンが使用可能です。</TD></TR></TABLE><div class=normal>　この前半部分を論理式に変換しやすいように書くと、</div><TABLE class="quote"><TR><TD>（休日である　または　19時より後）　でない</TD></TR></TABLE><div class=normal>　ド・モルガンの法則を適用して、</div><TABLE class="quote"><TR><TD>休日でない　かつ　19時より後でない</TD></TR></TABLE><div class=normal>　ここで、日常語ならではの変換をほどこします。</div><TABLE class="quote"><TR><TD>平日である　かつ　19時以前である</TD></TR></TABLE><div class=normal>　で、最終的に得られた命題は、</div><TABLE class="quote"><TR><TD>平日の19時以前であれば、クーポンが使用可能です。</TD></TR></TABLE><div class=normal>　最初の命題より、ちょっとだけ人間が理解しやすくなりました。</div><div class=normal>　つまり、<b>命題を結合した論理式全体にかかっていた否定語を、ド・モルガンの法則によって個々の命題に直接くっつけたうえで、日常語の変換をすることで、否定語を消すことができるかも知れない</b>というお話です。特に大小関係は、「以上でない」が「未満」に変換できたりと、簡単です。</div><div class=normal>　ただし、注意点が2つあります。</div><div class="title3">(1)本当に補集合か？</div><div class=normal>　否定語を消して、￢A という表現を B に変換する場合に、<b>B は A の補集合でなければなりません</b>。AとBが、MECE であるといってもいい。<br>
　上の例でいうと、「休日以外」＝「平日」である、つまり、「すべての日は、休日か平日のいずれかである」ことが保証されていないと、ダメです。<br>
　たとえば、これも<a href="http://twitter.com/#!/akiyama924" target="_blank">秋山浩一</a>さんの<a href="https://www.amazon.co.jp/dp/4817193603/ref=as_li_qf_sp_asin_til?tag=syakaijinngak-22&camp=243&creative=1615&linkCode=as1&creativeASIN=4817193603&adid=1DT35R7FX428R3Z0FB5M&" target="_blank">ソフトウェアテスト技法ドリル</a>で学んだことですが、<a href="http://ja.wikipedia.org/wiki/ISO_5218" target="_blank">ISO 5218</a> では、「人の性別の表示のためのコード」として、4つのコードを定義しています。「男性以外」を、そのまま「女性」と変換していいかは、考慮が必要ということですね。<br>
</div><div class="title3">(2)大小関係の表現自体が・・・</div><div class=normal>　そもそも、大小関係に関する日常語、たとえば「以上」「以下」「より大きい」「より小さい（未満）」という言葉自体が紛らわしい、避けろという話もあります。たしかに、不等号で表現する方が、紛れはないですね。</div><div class="title2">英語ではどうなっているのか</div><div class="title3">NOT と OR と、ド・モルガン</div><div class=normal>　英語の事例を見てみましょう。<br>
　下の絵は、<a href="http://ja.wikipedia.org/wiki/HUNTER%C3%97HUNTER" target="_blank">『HUNTER×HUNTER』</a>というマンガのヒトコマです。</div><img src="http://livedoor.blogimg.jp/prjmng/imgs/5/2/52f3e2bb.jpg" width="320" height="120" border="0" alt="Killua'sOR_JP" hspace="5" class="pict" align="left"  /><BR CLEAR=all><div class=normal>　この右の吹き出しのセリフ、<b>「右手を左足を使っていない」</b>という表現は、英語でどう訳されていると思いますか？</div><img src="http://livedoor.blogimg.jp/prjmng/imgs/9/d/9d37a32c.jpg" width="320" height="118" border="0" alt="Killua'sOR_En" hspace="5" class="pict" align="left"  /><BR CLEAR=all><TABLE class="quote"><TR><TD>　He hasn't used his right hand <b>or</b> left leg yet!</TD></TR></TABLE><div class=normal>　「右手<b>も</b>左足<b>も</b>使っていない」と言うことを表すのに or を使うのは、ちょっと違和感がないでしょうか。<br>
　でも、ド・モルガンの法則を使って、こう理解することができます。</div><TABLE class="quote"><TR><TD>　NOT (right hand OR left leg)<br>
　→　(NOT right hand) AND (NOT left leg)</TD></TR></TABLE><div class=normal>　つまり、右手を使っていない、かつ　左足を使っていない、と。<br>
　ここで and を使うとどうなるか。</div><TABLE class="quote"><TR><TD>　NOT (right hand AND left leg)<br>
　→　(NOT right hand) OR (NOT left leg)</TD></TR></TABLE><div class=normal>　つまり、右手を使っていない、または、左足を使っていない。これだと、「どっちも使っていない」という意味にならないですね。</div><div class="title3">Either or と Neither nor</div><div class=normal>　命題AとBについて、次のような対応があります。</div><TABLE class="quote"><TR><TD><ul class=normal><li class=normal>both A and B<br>
　→　A AND B</li><li class=normal>either A or B<br>
　→　A XOR B</li><li class=normal>neither A nor B<br>
　→　(NOT A) AND (NOT B)　⇒　NOT (A OR B)　</li></ul></TD></TR></TABLE><div class=normal>　普通の論理和にぴったり一致する表現は見当たりませんね。<a href="http://scholar.google.co.jp/" target="_blank">Google Scholar</a> で OR を用いると、排他的論理和XORで検索されるそうです。　<br>
　はい、あまり英語のことを書くとボロが出るので控えめにします。</div>
<img src="http://counter2.blog.livedoor.com/c?ro=1&act=rss&output=no&id=1721932&name=prjmng&pid=52227071" width="1" height="1" />
]]>
</content:encoded>
</item>

</rdf:RDF>

