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

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

「定義」の難しさについてのポエム

WORDS!  #3

 概念の「定義」って難しいなあという気持ちについての雑記。
 きっかけは「testing」という言葉の定義について、ISO/IEC/IEEE 29119 の定義を確認したことです。

 定義は、以下の通り。

set of activities conducted to facilitate discovery and/or evaluation of properties of one or more test items
1つ以上のテストアイテムの特性の発見かつ/または評価を促進するために行われるアクティビティ群

 「ソフトウェアのテスト」と聞いて思い浮かべがちな、quality とか bug とか failure いう単語は、定義には現れないんですね。一方で、testing の定義の中に、test items が来るのはいいのか?という気持ちになる・・。
 そして、この定義を聞いて、ソフトウェアテストを知らない人が「テスト」をイメージすることができるんだろうか、とふと思ったわけです。

 では、言葉の定義に必要なものって何だろうと考えてみると、以下の3つがあると嬉しいのではないでしょうか。

  1. 何であるか(できれば、何でないかも)の簡潔な表明
  2. 関連する他の言葉との関係
  3. 定義に属するものの例

辞書を引いてみる

 デジタル大辞泉である単語を引くと、こんな説明が載っています。

バラ科の落葉高木。

 これだと「植物だな」くらいしかわからないですね。

バラ科の落葉高木。また、その果実。

 情報が付加されて、「果物がなって、その名前でそのまま呼ばれる植物か」と想像できますが、まだまだです。

バラ科の落葉高木。また、その果実。葉は卵円形。4、5月ごろ、葉とともに白または淡紅色の5弁花を開き、のち球状の赤色などの実を結ぶ。

 中間の情報はわたしにとって、対象の絞り込みにまったく役に立ちません。「球状の赤色の実」まできて、「赤い実? これはもしかして」となります。
 全部を引用すると、こうなります。

バラ科の落葉高木。また、その果実。葉は卵円形。4、5月ごろ、葉とともに白または淡紅色の5弁花を開き、のち球状の赤色などの実を結ぶ。甘酸っぱく白い食用部は、花托の発達したもの。ヨーロッパ中部から南東部の原産。日本には明治時代に欧米から紅玉・デリシャスなどの品種が導入され、青森・長野などで栽培。古くは、在来の和林檎などをさした。りゅうごう。《季 実=秋 花=春》「―噛む歯に青春をかがやかす/麦南

 そう、「リンゴ」です。
 この定義は、上述の1~3を備えていますね。

定義を狭めること

 辞書的な定義において「AとはBである」としたとき、A = B ではなく、A→Bという関係になりますよね。
 上のリンゴの定義だと、リンゴであればかならず「バラ科の落葉高木」ではありますが、一方で「バラ科の落葉高木」だからといってそれがリンゴとは限らない。つまり定義は必要条件を提示するにすぎません。Bが粗いとAを絞り込めないので、情報を追加していくことで少しずつ限定していくわけです。
 AやBを集合と考えると、上述の1.は「集合Aを含む集合Bを記述する」ことになります*1

 一方、リンゴの定義において例の上がっている「紅玉・デリシャス」は、「CとはAの一種である」を示しており、C→Aという関係です。
 このCも集合と考えると、上述の3.は、「集合Aに含まれる集合Cを記述する」ことになります。1.と対照的なんですね。

 以下の2つを通じて、Aを少しずつ正確に記述できるようになります。

  • 集合B-Aが空集合になるまで、Aを説明する条件を追加していく。
  • 集合Cが集合Aを埋め尽くすまで、例を追加していく。

 これらは、「定義を狭める」行為だといえるでしょう。

定義を広げること

 一方、「定義を広げる」必要が出てくることもあります。
 たとえば「芸術」を引くと、以下のように定義されています。

特定の材料・様式などによって美を追求・表現しようとする人間の活動。および、その所産。絵画・彫刻・建築などの空間芸術、音楽・文学などの時間芸術、演劇・映画・舞踊・オペラなどの総合芸術など。「芸術の秋」「芸術品」

 では、マルセル・デュシャンの『泉』はどうか。

www.artpedia.asia

 これは美といえるのか。美といえないのであれば、芸術ではないのか。芸術なのだとしたら、「定義を広げる」必要がある。ということになります。「美」という限定的な価値観を一段抽象化し、『泉』を「芸術」の範疇に含めていくわけです。

「品質」の定義では

 単純化しすぎかもしれませんが、「具体的な事物」「モノ」に比べて、「抽象的な概念」「コト」の方が、定義を広めようとする圧力が強い印象があります。

 たとえば「品質」の定義を、秋山さんのブログ記事からコピってみます。

note.com

 Crosby の定義である

要件に対する適合である。

よりも、Weinberg の定義

品質は誰かにとっての価値である。

となっており、一段階抽象化が進んでいるように見えませんか?

 この「広がった定義」のしんどいところは、定義の変遷の経緯や暗黙の前提を備えていない人には、何が何だかわからないということです。
 上述のブログ記事で、秋山さんはこの定義を称賛しています。秋山さんはソフトウェアの品質のプロフェッショナルであり、Weinberg が定義の中で「誰か」という表現を使った意図に思いをはせられるからだと思います。

この定義の素晴らしい点は「誰かにとっての」の部分です。
つまり、品質の良し悪しは誰かが持っている基準によって決まるということです。
言い換えれば、「ソフトウェアの作り手ではなく、受け取り手(誰か)の判断基準によって品質の良し悪しが決まる」ということです。これはとても重要な指摘です。(“誰か”には開発者自身を含むこともありますが、その場合でも客観的な立場をとります。)
なぜなら、この定義を受け入れたら、受け取り手のことを考えざるを得なくなるからです。
誰かが価値を感じてくれたかどうかが唯一の勝負です。ワインバーグの品質の定義を採用するなら、開発もテストも全ての活動は、「受け取り手に価値を提供する」目的にフォーカスされます。

 しかしそうでない人から見ると、Weinberg の定義は「何も言っていないに等しい」ようにも感じられるのではないでしょうか。

「テスト」の定義では

 testing の定義を再掲します。

set of activities conducted to facilitate discovery and/or evaluation of properties of one or more test items
1つ以上のテストアイテムの特性の発見かつ/または評価を促進するために行われるアクティビティ群

 この定義において、たとえば evaluation という言葉から「これは、verification と validation を両方含めた概念かな」などと、定義内の言葉の定義を自動的に呼び出して、簡潔な抽象的な定義を、詳細で具体的なものに展開できる人もいます。でもそうでない人にとっては、「抽象的で衒学的な表現」にも見えてしまいます。

 「定義を広げる」ことは、本質を捉えるために必要な行為である一方、読む人間に「悟り」を求めるという厳しさも伴います。エッセンスを鋭く切り取りながら、読む人の理解を促せるような定義。おそろしく困難な仕事だと思いました。まる。

まとめ

 もう少し書きたいこと書くべきことがありそうなのですが、キリがないのでこれで終わりです。
 特に結論もなく。

 「定義」を考えていく過程で「定義の定義」でググれば、ものすごくエキサイティングな考察が読めそうだなと思ったのですが、現実にはTwitter口喧嘩でした。しんどいわ。

togetter.com

*1:数学に詳しい人のつっこみご容赦。。