KAOS (61) 書き方を定めた自然言語による文書 (4.2.1-2)

引き続き,書式等を定める要求文書記述の方法である.

決定表

複雑な要求を,決定表の形で示す.同一レベルの要求の組合せが多い場合は有効である.列車全制動の例も,決定表を用いることで,明確にすることができる.

テンプレート

ここでのテンプレートは,各要求に記載する内容を,あらかじめ定める方式である.イメージとしては,表計算ソフトウェアにおいて,行がひとつの要求を示す.列には,次の内容を示すカラムがある.

  • 識別子:要求が階層的である場合,識別子も階層化する
  • カテゴリ:要求が,機能要求なのか,品質要求なのか,前提なのか等を記載する
  • 要求仕様:実際の要求である
  • 適合基準:各役割(要求分析者・設計者・テスタ等)の人にとって,どうなれば要求仕様を満たしているのかを示す
  • 要求源:どこ(利害関係者もしくは文書)から,その要求を導き出されたかを示す
  • 理由:その要求が必要な理由.要求の理解と追跡可能性のため
  • 要求関連:補足のような正の関連か,衝突のような負の関係か
  • 優先度レベル:他の要求の比較と,優先度による判断のため
  • 安定性と共通レベル:変更管理のため(6章に詳細あり)

このうち,適合基準は,要求仕様を明確化し,ある種の合理性を担保するために重要である.一般には網羅を意図する余り書かれないことが多いのではと思う.

以下は,図書館システムにおける例である.

文献検索機能は,問い合わせに対して素早く応答を返すこと.

90%の問い合わせに対して,2秒未満.他の問い合わせに対しても,5秒を超えないこと.

最初の文が要求仕様であり,後者が適合基準の例である.

ISO 15504 に基づくプロセス能力(しかし不思議な言葉だ)の評定を行うSPICE(Software Process Improvement and Capability dEtermination)の中でも,乗用車向けの規格Automotive SPICE (A-SPICE)では,検証基準と双方向リンクを強調する.ここでの検証基準は,(検証を行う人にとっての)適合基準に相当する.

(nil)

KAOS (60) 書き方を定めた自然言語による文書 (4.2, 4.2.1-1)

文書の書き方については,これまでも,さまざまな取り組みがなされてきている.最初の紹介は心得である.細かな規則を定めることによって,良い文書とする努力である.先ずは,その内容を紹介する.

  • 誰が読むのかを考えてから,書く
  • 書く前に,何を書こうとしているのかを説明する
  • 動機を最初に書き,まとめは後にする
  • 全ての概念は,使用する前に定義しているかを確認する
  • 次のことを問い続ける「これは読者に理解可能か.読者はこの点で迷わないか.詳細度のレベルは適切か.ここに書いていることは,他の場所の記述と関係していないか.十分に記述したか.違った風に解釈されることはないか.他に単純な言い回しはないか」
  • 一文に,2つ以上の要求・前提・問題領域の特性を記述していないか
  • 文を短くする
  • 規範的文には,「であること(shall)」を用いる.望むことには,「であることが望ましい(should)」を用いる.
  • 不必要な専門用語や略語を避ける
  • 抽象的な文を明確にするために,分かりやすい例をつける
  • 先行する文を詳細化する項目は,中黒付きリストとする
  • 複雑な項目間の関係を示すために,図と説明をつける
  • 視覚的な全体像と,重要な点を説明するために,図を用いる
  • 関連する事実は,表によって示す
  • 量的情報を関連づけるために式を用いる
  • 複雑な(入れ子や曖昧さを持つ)条件を組み合わせることは避ける

正直に云うと,こうした注意事項を書くことができる勇気がうらやましい.おまえはどうなのだ,といわれると困る.

しかし,彼の文章は明快で,とうぜんその資格があると思う.

(nil)

KAOS (59) 要求の仕様化と文書 (4.0, 4.1)

本フェーズの入力は,様々なタイプの多数の合意文である.最上位の目的,システム要求,ソフトウェア要求,環境に対する前提,関連する問題領域の特性と概念定義である.(…)出力は,要求文書(RD)の最初のバージョンである.(p.119)

以前のスパイラルモデルの第4象限にあたるのが,本章である.この章では,形式的・半形式的・自由形式での様々な書き方の紹介がある.ここに深入りすると終わらなくなるので,注意しながら説明していきたい(それでも横道にそれるだろうが).

「制約のない自然言語による自由形式」方式

利害関係者が多数いる場合,自然言語による方法は,形式としてはもっとも障害が少ない.一方で,曖昧さの問題がつきまとう.

以下が例のひとつである.

次の場合に,列車は全制動しなくてはならない.失効した加速指令を受けたとき,または,X m.p.h より速い速度で駅区画に入ったとき,かつ先行する列車との距離がYメータより近くなったとき.

ここでは,「または」と「かつ」が混在しているので,全制動するのがいつなのかが,分かりにくくなっている.次のパターンが考えられるとしている.

  • 失効したコマンドを受け取ったとき,或いは,(駅区画に速い速度で入って)先行する列車と近づきすぎたとき
  • 先行する列車と近づきすぎたとき

今,条件らしきものは三つあって,構造は,A or B and C となっている.これを,A or (B and C) と考えるか,(A or B) and C と考えるかである.

ここで,後者は,なぜ C だけに単純化できるか? ORで繋ぐ2つの条件式は,意味がないというのが,ここでの説明である.但し,Case1とCase2に重なり合う部分がないとする.

if Case1 then <Statement1>  or if Case2 then <Statement1>

この真偽は,次のように変形することで求めることができる.

(not Case1 or Statement1) or (not Case2 or Statement2)  // 含意に対して良く用いる命題論理式の変形

これは,次の様に変形できる.

not (Case1 and Case2) or Statement1 or Statement2

not false or Statement1 or Statement2

ここから明らかに,恒真式となる(not false は true でそれが,OR結合しているから).

従って,中黒の2番目「先行する列車と近づきすぎたとき」のみが残ることになる.

論理式については,別途まとめることになるが,ここでは重要なのは,自然言語を論理式に置き換えることによって,曖昧さを取り除けるかもしれないということである.論理式が自然言語よりすばらしいということではない.

(nil)