山本 修一郎
開発文書品質の研究というと耳新しく聞こえますが,開発文書の構文や構造,要求仕様テンプレートなど,研究の役に立ちそうな素材はこれまでに研究されてきた分野の中に転がっています.この連載コラム「山修の開発文書品質入門」では,開発文書に携わる皆さんに役立ちそうなそれらの知識を分かりやすく解説します. バック・ナンバ |
開発文書の作成のために,文書のテンプレートを用意している組織や開発チームもあるかと思います.ルールや形式を決めて,それに当てはまるように記述することは,読み手の解釈の範囲を限定しますから,複数の解釈を避けることにつながります.
本稿では,2つの国際標準機関が取り決めている要求文のテンプレートの例を紹介します.
国際要求工学委員会(International Requirements Engineering Board, IREB)[1]が要求工学専門家を認定するための基礎レベルのシラバスを提供しています.このシラバスでは,要求文書に関連する教育単位(EU)として,次の項目を定義しています.
とくに,「自然言語による要求文書化(EU5)」の基礎レベルのシラバスで述べられている要求テンプレートを解説します.
要求の定式化における言語効果を削減するために,容易に学習でき適用できる方法が要求テンプレートです.高品質な要求を作成する上で,要求テンプレートが要求執筆者を効果的に支援します.IREBは,要求テンプレートによって要求を5段階に定式化しています.
そして,要求文では,「shall」「should」「will」を用いて、義務を定義できます.義務が変化した場合,要求も変化します.
義務の強さは,shall > should > will の順です.
shall : (絶対義務) 絶対に満たすべき要求であることを表す
should : (義務) 絶対ではないが,高い確率で満たすべき要求であることを表す
will: (可能義務) できれば,満たすべき要求であることを表す
日本語で,shallとshouldの区別は難しいと言えます.しかし,日本語でも,要求の義務の強さによって,「shall」「should」「will」に対応して,次のように書き分けることを意識してみてはいかがでしょうか.
(絶対義務) システムは, 処理を 絶対に行う必要がある
(義務) システムは, 処理を 行う必要がある
(可能義務) システムは, 処理を 可能であれば行う
また,日本語では,英語のように使用する用語の違いで意味を書き分けることが,難しい場合もあります.副詞の有無や文末だけの記述の違いで,要求の違いを明確に示すには限界もあるかもしれません.そういったときに,属性を付与することも1つの方法と言えます.たとえば,上記の [絶対義務], [義務], [可能義務] などを属性として,各要求に付与することを決めれば,要求文に補助情報を付けて,より明確化することになります.属性の例としては,他に,[必須要求](なくてはならないの意), [可能要求](あったほうがよいの意), [期待要求](なくてもよいの意)なども挙げられます.
こういった属性の記述は,自由度の高い自然言語の表現にある制約を付けて,意味を限定しようとする
このように要求のテンプレートを決めることは,その使用を強制するわけではありません.テンプレートに合せて記述する訓練の機会を得ることによって,要求テンプレートを補助的なツールとして活用できるのではないでしょうか.
ISO/IEC/IEEE 29148:2011内「5.2.4 Requirements construct」では,下記のように3種類の要求構文の型を例示しています.この要求構文も要求テンプレートの例です.なお,日本語構文に合わせるために,助詞を補うとともに,語順を入れ替えています.
(構文の型1) [条件] [主体] が[対象]を[制約] [活動]する必要がある.
例:信号x を受信したとき, [条件]
システムが, [主体]
信号 xの受信ビットを [対象]
2秒以内で [制約]
設定する [活動]
必要がある
(構文の型2) [条件] [活動 または 制約] は[値]である必要がある.
例:海の状態が 1のとき [条件]
レーダーシステムが目標を検知すべき範囲は, [活動または制約]
100 nautical マイルである [値]
.必要がある.
(構文の型3) [主体]が [値条件]で[活動] する必要がある.
例:請求書システム が [主体]
昇順で, [値条件]
支払いが保留中の顧客請求書を表示する [活動]
必要がある.
たとえば,IREBによる義務の強さと,ISO/IEC/IEEE 29148:2011による要求構文を適用して,要求文を書いてみます.
(絶対義務)
例:[主体] 交差点の信号機システムは,
[値条件] 一方の信号機を赤に切り替えてから,
[活動] 他方を青に切り替えることが,
絶対に必要である
(義務)
例:[主体] 交差点の信号機システムは,
[値条件] 一定時間,
[活動] 両方の信号機を赤にすることが,
必要である
(可能義務)
例:[条件] 両方の信号機が赤である時の一定時間は,
[値] 3秒間とする
(注)上記は、信号機システムの要求の一部のみを例示しています.要求として完全な記述ではありません.
このように,要求テンプレートを利用して,自然言語の記述の中で定型化できる箇所を整理し記述することは,読み手に対して要求を明確に伝える助けとなります.それ以上に,要求執筆者にとって,要求を整理し定義する際の1つの手立てとなります.
山本 修一郎
開発文書品質の研究というと耳新しく聞こえますが,開発文書の構文や構造,要求仕様テンプレートなど,研究の役に立ちそうな素材はこれまでに研究されてきた分野の中に転がっています.この連載コラム「山修の開発文書品質入門」では,開発文書に携わる皆さんに役立ちそうなそれらの知識を分かりやすく解説します. バック・ナンバ |
開発文書の品質を確認するためには,開発文書を読むための方法が必要です.普通の小説であれば,自由に楽しみながら読めばいいのですから,特別な方法に従う必要はありません.しかし,開発文書の場合には,ただ読むだけでは品質が高いのかどうかわからないものです.本稿では,開発文書を読むための方法を紹介します.
文書には,何かしらの事柄と,その事柄に基づく一連の出来事が書かれています.開発文書に書かれている内容は,開発の目的と,その目的を達成するためにこれからシステムとして実現すべき事柄です.とすると,開発文書を読むということは,開発の目的がどんなことであるかということと,システムを使う一連の操作によって,その目的が確かに達成できるということの2つを理解することでもあります.
もし,開発文書を読んで,システムが開発の目的を達成できると確認できれば,開発文書の信頼性は高いといえるでしょう.これに対し,開発文書を読んで開発の目的を達成できないことが確認できたとしたら,開発文書の信頼性は高いとはいえないでしょう.
システムが開発の目的を達成できるのかできないのかを読み取るためには,開発文書から引き出された「事実」に基づいて,それらから生じる可能性のある一連の出来事によって目的が達成できるかどうかを客観的に明らかにしていくような開発文書の読み方が必要になります.この過程では,期待や憶測を排除することが大切です.そうしないと,文書に記載されていない事柄に基づいて判断してしまうことになるからです.
文書に記述された事実に基づいて「システムを操作すると,どのようなことが生じるのか」を確認する方法を,「事実に基づく読解法」と呼ぶことにします.この方法はあえて名前を付けるほどでもないくらい単純なものなので,ソフトウェア工学の教科書にも出てきません.このコラムで初めて使った名称です.
それでは,このコラムでいつもお世話になっているNPO法人 組込みソフトウェア管理者・技術者育成研究会(SESSAME)の要求仕様書「話題沸騰ポット」[1]の要求文を,事実に基づいて読解してみましょう.
読解に使う要求文を表1にまとめました.
表1 話題沸騰ポットの要求文の一部
この要求文[pot-220]を読むと,このポットが沸騰行為を行うためには,蓋を閉じた際に水位が条件に合う(水量が異常でない)という事実が必要だと分かります.また,[pot-280-11]を読むと,満水センサがonだと水量異常と判断されるという事実が分かります.さらに[pot-110-12]を読むと,満水センサのデフォルトがonだと分かります.
さらに,満水センサがoffになる契機を探すと,どこを読んでも出てきません.したがって,常に満水センサはonである(水量異常である)という事実が判明します.
これを整理すると,以下の一連の事実が明らかになります.
(事実1)満水センサのデフォルトはonである[pot-110-12]
(事実2)蓋センサがonになって3sec経過した時点で,満水センサはonを検出する.すなわち,このポットの許容上限を超えている(水量異常)と判断される[pot-280-11]
(事実3)蓋が閉じられても,水量が異常な場合,状態はアイドルのままである[pot-220-31]
(事実4)一つでも条件を満たしていなければ給湯できない[pot-260-11]
これらの事実から,以下の2つの結論を導くことができます.
(結論1)話題沸騰ポットはいつまでたっても沸騰しないポットである
(結論2)話題沸騰ポットは給湯ボタンを押しても給湯できない
表1に示したのは話題沸騰ポットの要求文の一部にすぎませんが,満水センサがoffになることについては,話題沸騰ポットの要求文のどこにも記載がありませんでした.したがって,満水センサは永久にonであることが,話題沸騰ポットの要求文から導かれる事実なのです.
ここで示した話題沸騰ポットの要求仕様書(第7版)は,「できる限り曖昧さを無くした仕様書の例として作成された」とのことです.この例から分かるように,開発文書の曖昧さをなくしたとしても,開発文書に欠陥がないわけではありません.曖昧さが無くても,入れた水を沸騰できず,給湯もできないポットになっています.話題沸騰ポットを開発する目的が,水を沸騰できるポットを実現することだとすると,この仕様書には明らかに欠陥があります.
ここまで,「事実に基づく読解法」によって開発文書を読む方法について解説してきました.ここでは要求文について議論しましたが,事実に基づく読解法は,さまざまな開発文書に適用できます.なお,要求文書をレビュする方法は,ここに紹介したやり方以外にもたくさんの方法があります.これらのレビュ手法についてもっと知りたい方は,要求工学連載の第37回[2]をご覧ください.
参考文献
[1] 組込みシステム教育教材 話題沸騰ポット GOMA-1015型 要求仕様書,http://www.sessame.jp/workinggroup/Wo ... up2/POT_Specification.htm
[2] 山本修一郎, 要求工学連載第37回,要求レビュ,http://www.bcm.co.jp/site/youkyu/youkyu37.html
山本 修一郎
開発文書の複雑さを計測するにはどうしたらよいでしょうか? 本稿では,開発文書の複雑さを,名詞句の個数に基づいて計測する方法[1]を紹介します.
文書を計測すると聞いてまず思いつくのは,ページ数や文字数を計測する方法です.また,文に含まれる単語を計測することもできます.単語には,接続詞や助詞などといった繰り返し出現する語も含まれます.助詞や接続詞は単独では意味を持たないので,これらを省いて名詞や名詞句,動詞だけを計測することもできます.名詞句(「寒い日」など)は,名詞(「日」)が指示する対象の属性や状態(「寒い」)を指定することができます.
基本的に,一つの文には一つの動詞が対応しているので,文の個数が動詞の個数に一致します(名詞句の中に出現する動詞は除く).同じ個数の文を含む複数の文書を比較した場合,動詞の個数は一致しますが,名詞句(名詞を含む)の個数は異なる場合があります.したがって,動詞の個数を計測するよりも名詞句を計測するほうが,文書の複雑さを計測するのに適していると考えられています.
例として,前回も参照したNPO法人 組込みソフトウェア管理者・技術者育成研究会(SESSAME)の「話題沸騰ポット 要求仕様書」[2]第7版の要求文に含まれる名詞句を調べてみましょう.
|
この例文には,「設定されたモードの温度」と「ポット内の水温」という二つの名詞句があります.
N個の文からなる文書に,M個の名詞句が含まれているとします.同じ名詞句が文書の中で繰り返し出てくることがあります.そこで,すべての名詞句が文書の中で1回しか出てこない場合に対して,同じ名詞句が複数回出てくる場合の方が,文書の複雑さが小さいと考えると,次のように「文の名詞句複雑度」を定義できます.
わかりやすいように,具体例を挙げてみます.なお,こちらも話題要求ポット 要求仕様書の注意書きに一部手を入れて引用しました.
|
この文書は五つの文で構成されています.1番目の文には「要求仕様書」,「版数」,「想定している用途」という名詞句が含まれています.「要求仕様書」が文書内で出現する回数は2回なので,その逆数は1/2です.「版数」と「想定している用途」はそれぞれ文書内で1回ずつしか出現しないので,逆数もそれぞれ1です.つまり,1番目の文の名詞句複雑度は,2.5となります.ここでもし,2番目の文に含まれる「仕様書」を「要求仕様書」に変更すると,1番目の文の名詞句複雑度は2.3になります.
ここで,文についての複雑度の定義を基に,文書についての複雑度を示す指標として「文書の名詞句複雑度」を定義できます.
例えば,N個の文からなる文書に名詞句が1個しかない場合(同じ名詞句を繰り返しており,動詞だけが異なる場合など),この文書の名詞句複雑度は1になります.一方,N個の文からなる文書にM個の名詞句があり,名詞句がそれぞれ1回ずつしか出現しない場合,この文書の名詞句複雑度はMになります.
したがって,文書の名詞句複雑度は,名詞句が文書内でどれだけ繰り返し出現するかによって減少するような尺度であるということができます.
それでは,話題沸騰ポット 要求仕様書 第7版に含まれる要求文を見ながら,この文書の複雑度を計測してみましょう.以下が,要求文の一覧となります.
|
話題沸騰ポットの要求文の個数は18個です.この要求文には41個の名詞句があります.この中に,1回しか出現しない名詞句が35個,2回出現する名詞句が4個,3回出現する名詞句が2個ありました(図1の青い実線を参照).したがって名詞句の出現回数は49です.
ちなみに,2回出現する名詞句は,「蓋」「タイマボタン」「カルキ抜き」「保温行為」.3回出現する名詞句は「沸騰行為」と「タイマ」です.なお,名詞も修飾語のない名詞句として数えています.
上述した方法で,話題沸騰ポットの要求文18個に対する文書の名詞句複雑度を計算すると約41となり,名詞句の個数である41に近い結果になりました.したがって,名詞句複雑度から見ると,かなり複雑だということになります.
話題沸騰ポットの要求文に含まれる名詞句には類似するものもあるので,表現を見直すことにより,名詞句ごとの出現頻度を向上できる可能性があります.たとえば,繰り返し出現する名詞句を増やすことができれば(図1の赤い点線を参照),この要求文書に対する文書の名詞句複雑度を減らすことができます.
参考文献
[1] Chao Y. Din, Requirements Content Goodness and Complexity Measurement Based On NP Chunks, VDM Verlag Dr.Muller, 2008
[2] 組込みシステム教育教材 話題沸騰ポット GOMA-1015型 要求仕様書,http://www.sessame.jp/workinggroup/Wo ... up2/POT_Specification.htm
山本 修一郎
開発文書では,「分からないものを書く方が悪い」という姿勢が大切です [1].後続工程の開発者が先行工程の開発文書を読んでも分からなかったら,自分の想像によって補うことになります.これでは,後続工程で先行工程の活動をやり直すことになってしまいます.
分かりやすい文章の第1条件は,文が短いことです.文が長くなればなるほど,分かりにくくなります.
日本語の短文に含まれる平均文字数の目標は約50字だそうです [1].試しに,NPO法人 組込みソフトウェア管理者・技術者育成研究会(SESSAME)がサンプルとして提供している要求仕様書「話題沸騰ポット」の要求文に含まれる平均文字数を数えてみると,約26字でした.この要求仕様書は,短文性が高いと言えます.
文が短くても,開発文書に含まれる表現が多様だと分かりにくくなることがあります.
「表現」と「意味」という関係から構文をとらえると,「異なる表現が同じ意味を持つ場合(表現の揺れ)」と,「同じ表現が異なる意味を持つ場合(意味の揺れ)」があります.どちらも,文書を理解する上で,問題があると思います.分かりやすい文章を作成するためには,表現の揺れと意味の揺れを減らす必要があります.
表現の揺れと意味の揺れは,「用語」と「構文を構成する要素」の両方に対して発生します.用語に対する揺れは,用語集を作成することにより解消できます.以下では,構文を構成する要素 に対する揺れについて説明します.
「で」と「は」という助詞には,複数の意味があります.「で」には,「手段」と「状態」,「場所」を示す場合があります.「は」には,「主語」と「対象範囲」を示す場合があります.複数の意味を持つ助詞は,書く方からすれば使い勝手が良いものです.しかし,どの意味なのかを読み手が判読する必要があるため,理解しにくい面があります.このため,「で」と「は」をできるだけ使わないようにすることにより,分かりやすい文になります.
手段や目的,関係を表現するためには,「ことで」,「ことにより」,「によって」,「して」,「たら」,「と」などが用いられます.開発文書では,あえて異なる助詞を使い分ける必要があるとは思えないので,統一することが望ましいでしょう.
例えば,先ほど例に挙げた話題沸騰ポットの要求仕様書の記述[2]では,18個の要求文の中に8個の手段記述があるのですが,この8文の中で6種類の手段表現が使われています.もし手段表現を「により」に統一すれば,使用単語数を削減できます.
システムや対象物の状態を表現するためには,「に」,「で」,「たら」,「ときは」,「場合は」,「ならば」などが用いられます.状態表現を統一することにより,使用単語数を削減できます.
機能表現にも揺れが発生します.話題沸騰ポットの記述[2]では,次の8種類の表現が出現します.①「~を~する」,②「~できる」,③「~させる」,④「~をする」,⑤「~をさせる」,⑥「~を行う」,⑦「~機能を付ける」,⑧「~しない」.
さらに,それぞれの機能表現が2~3回ずつしか使われていません.これらを1つの機能表現に統一することにより,文書作成だけでなく文書理解も容易にできます.
分かりやすい文章を書くためには,文を短くすることと,表現の揺れや意味の揺れを減らすことが重要であると述べました.試しに,開発文書に含まれる単文の文字数を測定してみてください. また,単語の出現頻度と意味種別を測定してみてください.実際に,自分たちが作成している開発文書を測定し,見直してみることにより,短文性が向上し,表記揺れを減らすことができます.
なお今回は,構文を構成する要素についても,単語間の関係やパラグラフ内の論理構造,パラグラフ間の関係などについては触れませんでした.これらについては,次回以降,考察していく予定です.
[1] 下村耕平,これからの技術文書,国際化時代の技術者・翻訳者必携,競争に勝つドキュメンテーションの論理と方法論,アルカ,1987
[2] 組込みシステム教育教材 話題沸騰ポット GOMA-1015型 要求仕様書,http://www.sessame.jp/workinggroup/Wo ... up2/POT_Specification.htm