201112のエントリ

 山本 修一郎

 

開発文書品質の研究というと耳新しく聞こえますが,開発文書の構文や構造,要求仕様テンプレートなど,研究の役に立ちそうな素材はこれまでに研究されてきた分野の中に転がっています.この連載コラム「山修の開発文書品質入門」では,開発文書に携わる皆さんに役立ちそうなそれらの知識を分かりやすく解説します.

バック・ナンバ

 

開発文書の品質を確認するためには,開発文書を読むための方法が必要です.普通の小説であれば,自由に楽しみながら読めばいいのですから,特別な方法に従う必要はありません.しかし,開発文書の場合には,ただ読むだけでは品質が高いのかどうかわからないものです.本稿では,開発文書を読むための方法を紹介します.

 

■文書から引き出された事実を読む

文書には,何かしらの事柄と,その事柄に基づく一連の出来事が書かれています.開発文書に書かれている内容は,開発の目的と,その目的を達成するためにこれからシステムとして実現すべき事柄です.とすると,開発文書を読むということは,開発の目的がどんなことであるかということと,システムを使う一連の操作によって,その目的が確かに達成できるということの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

  • コメント (0)
  • トラックバック (0)
  • 閲覧 (17372)

山本 修一郎

開発文書の複雑さを計測するにはどうしたらよいでしょうか? 本稿では,開発文書の複雑さを,名詞句の個数に基づいて計測する方法[1]を紹介します.

■文書の複雑さの測定方法

文書を計測すると聞いてまず思いつくのは,ページ数や文字数を計測する方法です.また,文に含まれる単語を計測することもできます.単語には,接続詞や助詞などといった繰り返し出現する語も含まれます.助詞や接続詞は単独では意味を持たないので,これらを省いて名詞や名詞句,動詞だけを計測することもできます.名詞句(「寒い日」など)は,名詞(「日」)が指示する対象の属性や状態(「寒い」)を指定することができます.

基本的に,一つの文には一つの動詞が対応しているので,文の個数が動詞の個数に一致します(名詞句の中に出現する動詞は除く).同じ個数の文を含む複数の文書を比較した場合,動詞の個数は一致しますが,名詞句(名詞を含む)の個数は異なる場合があります.したがって,動詞の個数を計測するよりも名詞句を計測するほうが,文書の複雑さを計測するのに適していると考えられています.

■名詞句の例

例として,前回も参照したNPO法人 組込みソフトウェア管理者・技術者育成研究会(SESSAME)の「話題沸騰ポット 要求仕様書」[2]第7版の要求文に含まれる名詞句を調べてみましょう.

 


[pot-320] 設定されたモードの温度にポット内の水温を保持する.
 

 

この例文には,「設定されたモードの温度」と「ポット内の水温」という二つの名詞句があります.

■名詞句複雑度を定義する

N個の文からなる文書に,M個の名詞句が含まれているとします.同じ名詞句が文書の中で繰り返し出てくることがあります.そこで,すべての名詞句が文書の中で1回しか出てこない場合に対して,同じ名詞句が複数回出てくる場合の方が,文書の複雑さが小さいと考えると,次のように「文の名詞句複雑度」を定義できます.

 

[定義] 文の名詞句複雑度 NPC (Noun Phrase Complexity)
j番目の文に含まれる名詞句が,文書内で出現する回数の逆数の総和を,j番目の文に対する名詞句複雑度と呼ぶ.

 

わかりやすいように,具体例を挙げてみます.なお,こちらも話題要求ポット 要求仕様書の注意書きに一部手を入れて引用しました.

 


  この要求仕様書は,版数により,想定している用途が異なります.第1版~6版は,現実の開発現場でよく見受けられる曖昧さを含んだ仕様書として作成しました.曖昧部分に気づき,要求仕様書はどこまで詳細に分析し,明確に表現すべきかを考えていただける教材と考えています.第7版は,できる限 り曖昧さを無くした仕様書の例として作成しました.なお,私たちは,要求分析の最終段階ではこの記述レベルまで明確にすることを期待しています.
 

 

この文書は五つの文で構成されています.1番目の文には「要求仕様書」,「版数」,「想定している用途」という名詞句が含まれています.「要求仕様書」が文書内で出現する回数は2回なので,その逆数は1/2です.「版数」と「想定している用途」はそれぞれ文書内で1回ずつしか出現しないので,逆数もそれぞれ1です.つまり,1番目の文の名詞句複雑度は,2.5となります.ここでもし,2番目の文に含まれる「仕様書」を「要求仕様書」に変更すると,1番目の文の名詞句複雑度は2.3になります.

ここで,文についての複雑度の定義を基に,文書についての複雑度を示す指標として「文書の名詞句複雑度」を定義できます.

 

[定義] 文書の名詞句複雑度
文書に含まれる,文ごとの名詞句複雑度の総和を,文書の名詞句複雑度と呼ぶ.

 

例えば,N個の文からなる文書に名詞句が1個しかない場合(同じ名詞句を繰り返しており,動詞だけが異なる場合など),この文書の名詞句複雑度は1になります.一方,N個の文からなる文書にM個の名詞句があり,名詞句がそれぞれ1回ずつしか出現しない場合,この文書の名詞句複雑度はMになります.
したがって,文書の名詞句複雑度は,名詞句が文書内でどれだけ繰り返し出現するかによって減少するような尺度であるということができます.

■要求文の複雑度を計測する

それでは,話題沸騰ポット 要求仕様書 第7版に含まれる要求文を見ながら,この文書の複雑度を計測してみましょう.以下が,要求文の一覧となります.

 


[pot-210] コンセントの抜き差しで,ポットを利用できない状態/利用できる状態にする.
[pot-220] アイドルの状態で,蓋を閉じたら、水位を確認し,条件に合えば沸騰行為をする.
[pot-221] 蓋をあけたら(開いていたら),ロックは解除され,温度制御行為はしない.
[pot-230] 保温行為中で,沸騰ボタンを押すと,沸騰行為をさせる(沸騰できる).
[pot-240] 3種類の保温の温度に設定できる.
[pot-250] 給湯に対するロック/ロック解除機能を付ける.
[pot-260] 給湯ボタンを押すことによって給湯口から給湯する.
[pot-270] タイマボタンを押すことで,時間を分でセットし,タイマを起動できる.
[pot-271] タイマボタンを長く押すことで,タイマをリセットし,タイマを停止できる.
[pot-272] ユーザーが指定した時間がきたら,ブザーを鳴らして知らせる.
[pot-280] ポット内の水量をインジケータで表示する.
[pot-310] 水を沸騰させる.
[pot-311] カルキ抜きをする.
[pot-312] カルキ抜きが終わったら,保温行為をする.
[pot-320] 設定されたモードの温度にポット内の水温を保持する.
[pot-330] 沸騰行為も保温行為もできないときは温度制御はしない.
[pot-400] ヒータをon/offすることにより水温を制御する.その制御方式は制御周期と操作量(%)により行う.
[pot-500] 想定外の高温状態になった場合はエラーを検知し,ヒータ機能を停止する.
 

 

話題沸騰ポットの要求文の個数は18個です.この要求文には41個の名詞句があります.この中に,1回しか出現しない名詞句が35個,2回出現する名詞句が4個,3回出現する名詞句が2個ありました(図1の青い実線を参照).したがって名詞句の出現回数は49です.

ちなみに,2回出現する名詞句は,「蓋」「タイマボタン」「カルキ抜き」「保温行為」.3回出現する名詞句は「沸騰行為」と「タイマ」です.なお,名詞も修飾語のない名詞句として数えています.

 

図1 話題沸騰ポットの名詞句数と出現回数

 

上述した方法で,話題沸騰ポットの要求文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
 

  • コメント (0)
  • トラックバック (0)
  • 閲覧 (22986)

メニュー

サイト内検索

カテゴリ一覧

ログイン

ユーザ名:

パスワード:

次回からIDの入力を省略



パスワード紛失