ソフトウェアの品質を学びまくる

ソフトウェアの品質、ソフトウェアテストなどについて学んだことを記録するブログです。

Open QA4AI Conferenceに参加してきました。#qa4ai

 5/17(金)に、「Open QA4AI Conference」が上野にて開催されました。

qa4ai.connpass.com

 この日に合わせて、QA4AIコンソーシアムによる『AIプロダクト品質保証ガイドライン』も公開されており、セッション1では電通大の西先生がその解説をされています。

www.qa4ai.jp

 各団体の代表の方によるプレゼンテーションも学ぶところが大きかったのですが、最後のパネルディスカッションにおける議論が白熱してとても面白かったので、忘れないうちにメモしておきます。

 その際のトピックは「期待のマネジメント」 (Expectation Management) だったのですが、メディア枠で参加されていた進藤智則さん*1に西先生が、「世の中にAIのシステムの特性を理解してもらうために、メディアはどのような役割を果たすべきか」と無茶ぶりした際の議論です。
 自分の理解の範囲での表現・サマリーなので、誤りがあるかもしれません。

twitter.com

「確率論的」という言葉について

 進藤さんのご指摘は以下の通り。 

  • 「決定論的」 (deterministic) という言葉と「確率論的」 (stochastic) という言葉の使い方が粗く、概念が揺れていると感じる。
  • 「確率論的」という話は、モデル実装時とモデル利用時の2つのフェーズで使われるため、明確に分けるべき。
  • 実装時、たとえばSDG (Stochastic Gradient Descent、確率的勾配降下法) にはランダム性がある。つまり確率論的である。
  • 利用時について、「同じモデルに対して同じ入力を入れれば、得られる出力も同じ」という決定論的な表現があったが、GAN (Generative Adversarial Networks) ではランダムシードを入れるので、確率論的になる。一方CNN (Convolutional Neural Network)では決定論的になる。

 産総研の石川先生はこのご指摘を受け入れたうえで、「さらにもう一つの軸がある」とおっしゃっていました。

  • モデル利用時の出力が決定論的であっても、人間が同じように感じるとは限らない。人間にとっては等価な(しかし実際には別の)入力に対し、モデルが別の出力をすれば、人間は「ふるまいが確率論的だ」と感じるかもしれない。

「確率的」がネガティブな意味を伴うことについて

 進藤さんのご指摘は以下の通り。 

  • 「確率的である」ことが、ネガティブなニュアンスで説明されている。このスタンスは、世の中への啓蒙には適切でない。
  • SDGにはランダム性があり、それによって複雑なポテンシャルを探索して賢くなる。ランダム性・ノイズは機械学習の本質。*2

 パネラーである産総研の大岩さん*3からの回答は以下の通り。

  • 今はランダム性による探索がうまくいっているが、実はなぜそれがうまくいくのかはよくわかっていない状況。将来はランダム探索よりよい探索方法が見つかるかもしれない。
  • いずれにせよ現時点では、サイエンスコミュニケーションを通じて世の中の人たちに確率を理解してもらう必要がある。

 文字にするとあまり長くないのですが、15分くらい話が続いていたと思います。
 「なぜその判断となったか」の説明可能性についてはこれまでもよく聞いていましたが、「確率論的とはどういうことか」も社会全体が広く理解していくべきテーマだということがわかりました。

*1:『日経ロボティクス』編集長の方です

*2:ここでいう「ランダム性」は、モデル実装時の話

*3:にしさんに教えていただきました、ありがとうございます。

境界値分析を行える対象とはどんなものなのか

Boundary

 同値分割と境界値分析は、セットで学ぶことが多い技法です。でも、どんな同値クラスにも境界値があるわけではありません。
 たとえば、世界各国を同値分割することを考えましょう。
 日本を「アジア」、エジプトを「アフリカ」、のように「地域」という切り口で分けていく場合は(「地域」をどうMECEに分割するかという問題はあるにせよ)、各クラスに境界はないでしょう。

 では、どういったケースが境界値分析の対象になるのでしょうか。
 パッとイメージするのは、「分割の対象になる各値が、一本の線の上に乗っている」というものです。数字が一番わかりやすくて、数直線上に乗っています。また、スポーツ大会のメダルは「金」「銀」「銅」と数字ではありませんが、一本の線の上に並べることができるでしょう。

 ちょっとそれっぽく書くと、

  1. 取り得る任意の2つの値aとbを取り出したとき、何らかの基準に基づいて、a>b、a=b、a<b のいずれかであることが一意に決まること
  2. a>b かつ b>c のとき、a>cであること。*1

みたいな感じになるでしょうか。
 世界各国の同値分割でも、「国名を英語表記にした1文字目(の文字コード)」、「国の首都の経度」*2のような切り口であれば、境界値分析を適応しうるでしょう。

 統計学において、変数の性質を分類する方法として、4つの尺度があります。統計Webというサイトから表を引用します。

分類 尺度 意味
質的データ 名義尺度 他と区別し分類するためのもの 男女、血液型、郵便番号
順序尺度 順序に意味はあるが間隔には意味がないもの 1位/2位/3位・・・、1.好き/2.ふつう/3.嫌い
量的データ 間隔尺度 目盛が等間隔になっているもの 温度、知能指数
比例尺度 原点があり、感覚や比率に意味があるもの 身長、速度

 この4つの尺度のうち、名義尺度以外は上述の条件に当てはまりそうです。
 単純には、「取り得る値同士に順番性がないものには、境界値分析は適さない」といった方が早いかもしれません。

*1:ループの回避。ただこの要件が必要か確信がありません。

*2:『沈黙の艦隊』で、海江田が各国を経度順に読み上げていく名シーンがある。ただし経度の場合どこかを基準にしないとループが発生してしまう。

沈黙の艦隊(1) (モーニングコミックス)

沈黙の艦隊(1) (モーニングコミックス)

  • 作者:かわぐちかいじ
  • 出版社/メーカー: 講談社
  • 発売日: 2012/09/28
  • メディア: Kindle版

ドメイン分析テスト周りの用語の整理メモ

 Twitter上で不定期に議論になる、ドメイン分析テストにおけるOn/Off、In/Outなどについての整理メモ*1です。
 同値分割、境界値分析、ドメイン分析についての概要を知っていることを前提としています。

用語の定義

 『ソフトウェアテスト技法ドリル』でも『はじめて学ぶソフトウェアテスト技法』でも、On/Off、In/Outはドメイン分析テストで導入される概念です。

ソフトウェアテスト技法ドリル―テスト設計の考え方と実際

ソフトウェアテスト技法ドリル―テスト設計の考え方と実際

 ドメイン分析テストでは、あるパラメタの境界値に対し、別のパラメタの「あたりさわりのない値」を組み合わせていきます。これをクリアに整理するために、境界値分析ではなくドメイン分析テストで説明しているのではないかと思います。

On/Off、In/Out

 ドリル本では以下のように定義しています。文章からの抜粋です。

  • On 注目している境界値
  • Off Onポイントに対して境界値分析をしたときに見つかる隣接したもう一つの境界値
  • In ドメインの内側(On/Off以外)
  • Out ドメインの外側(On/Off以外)

 ドメインの内側か外側かというのは排他であり、OnとOffも排他なので、この4つの概念はMECEです。

ドメイン開/閉の定義

 ドメインの開閉は以下のように区別されます。リー・コープランドさんの『はじめて学ぶソフトウェアテスト技法』を参考にしています。

はじめて学ぶソフトウェアのテスト技法

はじめて学ぶソフトウェアのテスト技法

  • ドメイン境界が「=」「≧」「≦」で表現される場合、そのドメインは「閉じて」いる。
  • ドメイン境界が「>」「<」で表現される場合、そのドメインは「開いて」いる。

 ではそれぞれ、絵と一緒に見ていきます。

ドメインが「自然数n≧10」である場合

 これ以降の絵の黒丸●と白丸〇は、有効同値・無効同値の意味ではなく、明示した数字を含む(●)か含まない(〇)かの意味です。

01

 ドメインの定義に使われている「10」がOnになります。境界の逆側すぐそばにある「9」がOffになります。
 ドメインの内側にあるもののうち、On/Offを除く11以上の自然数がInになります。
 ドメインの外側にあるもののうち、On/Offを除く8以下の自然数がOutになります。

ドメインが「自然数n>10」である場合

02

 ドメインの定義に使われている「10」がOnになります。On自体はドメインの内側にないことに注意が必要です。
 境界の逆側すぐそばにある「11」がOffになります。
 ドメインの内側にあるもののうち、On/Offを除く12以上の自然数がInになります。
 ドメインの外側にあるもののうち、On/Offを除く9以下の自然数がOutになります。

ドメインが「自然数n=10」である場合

03

 ドメインの定義に使われている「10」がOnになります。
 この場合、隣り合うドメインは、10の右と左の両側にあるので、境界の逆側すぐそばにある「9」と「11」がOffになります。
 ドメインの内側にある10がInになりそうですが、Onに該当する値はInから除かれるので、この場合Inはありません。
 ドメインの外側にあるもののうちOn/Offを除く、8以下の自然数と12以上の自然数がOutになります。

各要素の関係

 On/Off/In/Out、ドメインの開閉、ドメインの内外で、単純には組み合わせが16パターンありそうですが、以下の制約があるために実際には8パターンしか現れません。

  1. 開いている ∧ On ⇒ 当該ドメイン外*2
  2. 開いている ∧ Off ⇒ 当該ドメイン内
  3. 閉じている ∧ On ⇒ 当該ドメイン内
  4. 閉じている ∧ Off ⇒ 当該ドメイン外
  5. In ⇒ ドメイン内
  6. Out ⇒ ドメイン外

 Boris Beizerさんはこの2個目と4個目を、「COOOOI (Closed Off Outside, Open Off Inside)」と称しているそうです。

ドメインの内外と、クラスの有効無効

 さて、ここまで「有効同値クラス」「無効同値クラス」という言葉を使っていません。最初の例がもし、「10以上の自然数のみを受け入れる」というものであれば、9以下の自然数は無効クラスになります。よってドメイン内は有効同値クラスに相当し、ドメイン外は無効同値クラスに相当することになります。

 一方、「10歳以上は有料とする」という仕様を対象にするテストであれば、10以上も9以下も有効同値クラスです。この閉じた境界仕様で「9歳」はOffにあたりますが、無効同値クラスではありません。
 ドメインの内外と、クラス有効無効を混同しないというのも注意点の1つかなと思います。

コープランドさんの定義

 さて、コープランド本も確認しておきましょう。

はじめて学ぶソフトウェアのテスト技法

はじめて学ぶソフトウェアのテスト技法

 On/Off、In/Outは以下のように定義されています。

  • Onポイント 境界上の値
  • Offポイント 境界上になく境界に隣接する値
  • Inポイント すべての境界条件を満たすが境界上にはない値
  • Outポイント いずれの境界条件も満たさない値

 ドリル本と、Offの定義が違うように見えませんか?

  • Off Onポイントに対して境界値分析をしたときに見つかる隣接したもう一つの境界値

 ドリル本では、Offを「もう一つの境界値」としている。コープランド本では、Offを「境界上にない」としている。
 この違いはどこから生まれるのかいろいろ考えたのですが、「境界」に対するイメージの違いなのかなと解釈しています。

 ドリル本だと、境界はこの斜線部分の両端です。物理的なパーティションと同じように厚みがあり、その表面がそれぞれ「境界」です。

04

 コープランド本だと、境界はあくまで「10」上の、厚みのないものです。よってOffは境界上にないことになります。

05

 この例ではnを自然数としていますが、値が連続値の場合はどうなるでしょう。パーティションの厚さはどんどん薄くなり、最終的には、そして数学的にはゼロになりそうです。

 ソフトウェアの場合はどうでしょう。
 精度が無限に高いということはなく、どこかの桁で止まることになります。パーティションは有限の厚さ(ドリル本でいう「d」にあたる)を持つことになります。と考えると、イメージとしてはドリル本の定義の方がしっくりくるように思います。

 同値分割に関する湯本さんの記事に、以下のようなお話がありました。

境界値に仕切り板は1枚なはずですが、同値クラスの箱で考えると隣接する複数の仕切り板があるように考えられてしまいます。けど、そんなことテストケースの洗い出しで考えられないです。仕様からちゃんと境界値、つまりOnPointを分析しなければならないのはそう言う理由だと思います。

 この「複数の仕切り板」というのが、「有限の厚みをもつ壁の両端」に当たるのではないかなあと思います。

*1:この記事は、以下のスレッドなどで秋山さんや辰巳さん に教えていただいたことを自分なりに表現したものです。いつもありがとうございます。

*2:ドリル本では「隣接ドメイン内」と呼んでいます。

同値分割の「partition(ing)」という単語についてのメモ

 同値分割に関する湯本さんのnoteを読んでの、単なるメモです。

note.mu

 そもそも、part、partition、partitioning と、英単語の時点でややこしいんですよね。以下、Oxford Dictionaryからの引用ですが、適宜はしょっています。

part

An amount or section which, when combined with others, makes up the whole of something.

 日本語でいう「部分」ですね。他の「部分」と合わせることで、「全体」を為す。ちょっと哲学的な言い回しです。

partition

 こちらは、名詞と動詞の両方の意味があります。

(n.)1. the action or state of dividing or being divided into parts.
部分に[分割する|される][動作|状態]。

 4つの組み合わせがありますが、JSTQBの文脈では「分割された状態・結果」が近そうです。なぜなら、「equivalence partition」が以下のように説明されている*1ためです。  

Equivalence partition
A portion of the value domain of a data element related to the test object for which all values are expected to be treated the same based on the specification.

 名詞の方はもう一つあります。

(n.)2. A structure dividing a space into two parts, especially a light interior wall. 空間を2つの部分を分割する構造、特に軽量な室内用壁。

 これは日本語でいう「パーティション」に相当しますね。

 次に動詞。

(v.)1. Divide into parts.
部分に分割する。

 「分割する」という動詞ですね。
 「区画する」という言葉もぴったりするかもしれません。

 ただJSTQB的には、「partition」は(n.)1的な意味で使って、動詞っぽさを出す時には、後述する「partitioning」を使っているのかも。また、(n.)2的な意味で使うと混迷が深まりそうです。  

partitioning

 これは動名詞であり、「分割すること」と捉えていいでしょう。
 Equivalence Partitioning は「同値(クラスに)分割(すること)」と補うと自然ですね。

 以上、特にスルドイ考察、深い見解はありません・・・・・・。

*1:湯本さんの記事からの孫引き・・・

【読書メモ】世界の「かつて」と「今」を正しく捉えるための『FACTFULNESS』

FACTFULNESS(ファクトフルネス) 10の思い込みを乗り越え、データを基に世界を正しく見る習慣

FACTFULNESS(ファクトフルネス) 10の思い込みを乗り越え、データを基に世界を正しく見る習慣

  • 作者: ハンス・ロスリング,オーラ・ロスリング,アンナ・ロスリング・ロンランド,上杉周作,関美和
  • 出版社/メーカー: 日経BP社
  • 発売日: 2019/01/11
  • メディア: 単行本
  • この商品を含むブログ (1件) を見る

 『FACTFULNESS』は、「人間の正解率がランダム以下」になってしまう「チンパンジークイズ」でも話題になったようです。最近の『東洋経済』でも、「統計的な事実を知らない人々」という文脈で紹介されています。 factquiz.chibicode.com

 しかし『FACTFULNESS』を「統計に関する本」と分類してしまうと、大きく外してしまうことになります。

 確率や統計を面白く語った本は、これまでもたくさんありました。
 たとえば、人間の行動の不可思議さを、統計を使って説明するダン・アリエリー氏の著作。

ずる 嘘とごまかしの行動経済学

ずる 嘘とごまかしの行動経済学

 ここでいう統計は主にインタビューの結果であり、そこから得られるのは「設問に答えに対する真実」よりもむしろ、「人々がどう振る舞うかの真相」でした。たとえば、「祖母が亡くなる確率」は、中間試験の前は10倍、期末試験の前には19倍に跳ね上がる。成績が芳しくない学生は、そうでない学生に比べて、「祖母を亡くす」確率が50倍も高い、のだそうです・・・。

 あるいは、『リスク・リテラシーが身につく統計的思考法』。こちらは、統計から得られる結論が時に非常にミスリーディングなものになることを教えてくれます。

www.kzsuzuki.com

 『FACTFULNESS』は、このどちらとも違います。
 数字は容易に手に入るもの。そこから読み取れる「事実」も、シンプルなもの。しかし人々はそもそも、単純な統計から得られるそれらの事実を知らない。賢い人も含めて多くの人が、世界の現在を正しく把握できていない、というのです*1

 「過去と現在の世界のありよう」を正しく理解しするには、「正しい統計を正しく見る」必要があります。世界の状況についての「正しい統計」を手に入れることがそう困難ではない一方、「正しく見る」ためにはいくつかの注意が必要であることを、本書は教えてくれます。

 それでもなお、この本は「統計に関する本」ではないと言いたい。

 それぞれの物語に裏にある数字を見ようとすることは大切だ。でもそれと同じくらい、数字の裏にある物語を見ようとすることも大切だ。数字を見ないと、世界のことはわからない。しかし、数字だけ見ても、世界のことはわからない。(第5章 過大視本能 より引用)

 世界は決して最善ではないけれど、確実に善くなっている。「先進国」のわたしたちが「あの人たち」と分断しがちな国の人々の暮らしは、わたしたちがそう遠くない過去に克服してきた暮らしなのだ。統計と、その背後にある事実を正しく理解すれば、あるべき方向に向かうことができる。世界はこれからも善くなっていける

 それが本書のテーマなのだとわたしは受け取りました。

 400ページというそれなりの厚さ、扱っているのは「世界」と「統計」、にもかかわらず、著者(たち)の一貫した強いパッションが伝わってきてグイグイ読み進めてしまう、意欲的でとってもフェアな、素晴らしい本でした。
 そしてついでに、「お、このバブルチャートは仕事にも使えそうだな・・」と、「世界」とまったく関係ないことにも思いを巡らせたのでした・・・。

 ちなみにこの本を読んで、糸井重里さんの有名な以下のツイートを思い出しました*2。  

*1:その「誤解」の内容が本書の読みどころでもあるので、内容を書いてしまうと読む楽しみを損ねてしまうので、書けないのですが。

*2:このツイートのツリーにも、思った以上に悪意がぶら下がっていて驚いた・・・。