Twitterで書いた、
id:9292502058
Howには2種類ある。ユーザーが、どんなふうに操作するかということ(業務=機能要件)と、技術的にどのように行うか(外部設計)。後者は書いてはいけないが(書く場合は制約になる)、前者を書かないと文章が成立しない。
について、もう少し詳しく書きます(これ、たぶん、月曜日に書く話の伏線になる)。
■一般に、要求仕様書には、Howを書かないといわれる。
これは、そのとおりなんです。どこの本を見ても、たぶん、現在、こうかかれていると思います。
理由は、実装上の制約になっちゃうから・・・
ただし、ここで、書かないという内容に関しては、2種類あって
・実装する技術を書かない(Apacheでとか、IISでとか、インターネットでとか)
・デバイスとかも書かない
この2つの違いは、前者は、外部設計のフレームワーク以降の技術的要件を書かないという意味。
後者は、業務におけるデバイスまでも書かないということになります。
たとえば、前者のほうを採用して、
画面から入力された受注データを、データベースに出力する
というのを、後者のほうに書き換えると
受注データを入力し、出力する
と、要件がわからないことになります(画面や帳票に出すのと、DBに出力するのでは、要求内容が違う)。
なので、文章にする場合は、前者にしないと、こまります。
つまり、ユーザーにとって、業務をどのような形で実現するかのHowは、書き、
実装する方法論、技術に関するHowは書かないというのが、「普通の」要求仕様書の状態になるとおもいます。
ただし、前者の書き方は、図にすると業務フローWFAに相当し、後者はDFDやアクティビティ図に相当するのですが、DFDしかない要求仕様ってのも、ないことはない(実際に”こう書け”と書いている本があった気がする)。
■ゴール指向要求分析による、WhyとHow
ところが、ゴール指向においては、ゴールをどんどん分解していき、要求分析していきます。
このとき、
ここ http://kaiya.cs.shinshu-u.ac.jp/2007/ms/gora1.pdfの12ページ目(以下の図)
![](https://blogimg.goo.ne.jp/user_image/3b/73/2e5c70ae087d6c869abfd40a84e0726a.jpg)
(http://kaiya.cs.shinshu-u.ac.jp/2007/ms/gora1.pdfの12ページ目より引用)にあるように、
上がWhy、下がHowの関係になると書いてある。
ゴール指向要求分析で分析するのは、要求仕様にかかれるようなことだから、とすると、Howが書かれてしまうように見える。事実、
画面から入力された受注データを、データベースに出力する
っていう時、「画面から入力する」っていうのは、Howだ。
じゃあ、Howを書いているジャンということになる。これは、どういうことなのか?
■要求部分のところを書くので、Whatになる。
これは、ずーっと延長してみると分かる。
![](https://blogimg.goo.ne.jp/user_image/0e/15/53be500f66ca30bfd8b7005ed9deb2f3.jpg)
こんな図になる
つまり、超上流から目的が来る。こいつがWhyになる。そして、それを、どのように実現するか(How)を考えて詳細化する。最終的に、こーすれば実装できそうという、外部設計のトップまで考える(図だとCRMサイトを構築)。
もし、ここで実装方法を考えないと、全く実装不可能な要件が載る可能性がある(結構高い)なので、最低でも、これならできそうという、めどを立てておく。
このとき、ゴール→サブゴールの連鎖ができ、この連鎖をWhy-Howと表記するが、
最初のWhyである、超上流からくる目的と
最後のHowである、外部設計にいく実装方法は
かかない。そして、
超上流から、要求仕様に入ってきたところあたりのゴールが要求仕様の「目的」となり、
要求仕様から、外部設計に出て行くあたりのゴールが、要求仕様の「要求」になる。
そー言う意味で、Howはかかない。
■Howが書かれているように見えるわけ。
ところでこの前、
http://twitter.com/xmldtp/status/9176531275
機能要件を書く場合、「何を」、「どうやって」が必須。「いつ」は順序が分かる程度でよい(それ以上は非機能要件?)「どこで」はあまり重要でない?(=「どこでも」にする)。「だれが」はできれば分かるほうがよい(必須ではない)「なぜ」は、もっと上位の要件(超上流?)・・・たぶん・
とかいた。
「なぜ」を書かないのは、上記に書いたとおり、超上流のWhyは書かないということ。なので、話は通じる。
「どうやって」は、Howなのに、なぜ書くのか?
まず、ここでいう「どうやって」は、「業務をどのような形で実現するかのHow」をさす。「どのように実装するか」のHowではない。
そして、この関係は、
要求仕様 「業務をどのような形で実現するかのHow」(ゴール) ----------------|------------- | 外部設計 | ↓ 「どのように実装するか」(サブゴール)
の関係になる。なので、「業務をどのような形で実現するかのHow」がかかれることになる。
■何がWhatなのか?
いままで、Why-Howという見方をしていたけど、
Why-What-How
という見方もある。3組みで連鎖していると考える。
その分類を超上流・要求仕様・外部設計にあてはめると、超上流がWhy,外部設計がHowなので
超上流 Why
-------------------
要求仕様 What
-------------------
外部設計 HOW
となる。これが、要求仕様書はWhatが書かれるといわれたり、Howは書くなというのに、Howっぽいこと(「業務をどのような形で実現するかのHow」)が書かれるゆえんである。
と、今日はここまで。
次回は、要求仕様書とゴール指向分析、アジャイルとの関係を書こうと思う。