
The Rational Edge page1 page2 page3 page4
コーディングの知恵を要件定義で利用する
Jim Heumann
IBM Rational's requirements management evangelist
2005/2/23
Rational Edgeより:コードを書くときにすでに使っているのと同じ多くの原則や概念を用いれば、開発者が事実上要件エンジニアになれる。本稿はこれらの原則を再検討し、優れた要件を作成するに当たって、これらをどのように適用していくのか解説する。
多くのソフトウェア開発チームには、すべての要件を引き出し、記述し、管理する要件エンジニアがいない。これは資源効率の点で理にかなう。開発者は、本格的なコーディング作業が始まる前の余った時間に要件を収集および記述できる。しかしそこには、優れた要件を記述するためのテクニックやツールの使用方法を大半のプログラマが修得していない、という死角がある。その結果、作業に悪戦苦闘し、非効率的となり、場合によっては基準に満たない要件仕様が出てくる場合が多々ある。
|
優れたコードを書くためには、制御構造や呼び出し規則などの基本概念、最低1種類のプログラミング言語に関する文法や構造をはじめとする知識、OSの基本知識、コンパイラ、デバッガ、IDEといった技術の使い方など、開発者は多くのことを知っておかなくてはならない。朗報なのは、優れた要件を書くときにこれらの知識がすべて応用できることだ。コードを書くときにすでに使ったのと同じ原則や概念を多く用いれば、開発者が事実上要件エンジニアにもなれるのだ。
ここからは、開発者が利用できるプログラミングの概念を見ていきたい。
◆ 構造の理解
- - PR -
プログラムと同じように、要件にも特定の構造がある。Cプログラムで書いたコードをすべてメインプログラムに取り込もうとしても解読できないし、保守が不可能だ。同様に、要件仕様が順番もバラバラの単なる巨大なリストだったら、これを使うことはできないだろう。実感していようといまいと、要件を集めたものには常に構造がある。要件の構造化にはタイプごとに整理する方法が最適だ。こうすれば、多くの場合はレベルごとに合致するようになる。
タイプごとの区別を理解するために、保険金請求の申請手続きに必要な4つの要件例を考える。
- 未処理請求を減らす必要がある
- システムは、請求申請書を自動的にチェックし、適不適を判断する必要がある
- 請求者が登録済みであるかどうかは、システムがユーザーの社会保障番号で判断すること
- システムは最大100件の同時請求処理をサポートすること
パッと見ると、要件ごとに何か違うと感じるかもしれない。最初のものはかなり高レベルで、システムに一切言及せずビジネスニーズを明示している。2番目はシステムがすべきことを明示しているが、これもかなり高レベルで、直接コードに変換するのは無理がある。3番目の要件は低レベルで、コードを書けるよう、ソフトウェアがすべきことについて十分な詳細を示している。4番目の要件はかなり詳細だが、システムに対して高い処理速度を求めているだけで、システムが処理しなくてはならないことが示されていない。これらは、ユーザーを含むさまざまな関係者に話を聞いて得られる典型的な要件だ。未分類の巨大なリストにこれらすべてをまとめたら混乱するのもうなずけるのではないか。
要件は、以下のようなカテゴリやタイプに分類するとはるかに便利になる。
- ビジネスニーズ
- 仕様
- 機能関連のソフトウェア要件
- 機能以外のソフトウェア要件
これらは、IBM Rational Unified Process(RUP)で提案されているタイプだ。考えるタイプはこれがすべてではないが、便利なアプローチの一例は表している。どのタイプを利用するかは、プロジェクトの初期段階で判断する。そして、関係者から情報を収集しながら、それがどの要件タイプに当てはまるか判断し、要件を書いていく。
ソフトウェアの機能要件は、宣言形式あるいはユースケース形式のいずれかのフォーマットで指定できることに注意したい。上の3番目の要件は宣言形式で示されている。比較的大ざっぱで、「〜すること」と書かれている。そして、もう1つの形式がユースケースだ。これもシステムがすべきことを明示するものだが、そのままコードを書き始められるほど低レベルだ。しかし、こちらの方がユーザーとシステムが大切な連携を取るときの前後関係がよく分かる(ユースケースの詳細は以下)。プロジェクトの要件を収集するときは、その前に使いたい機能要件のタイプを決めて、後は一貫してそれを使い通すべきだ。
◆ 品質を保証できる手法を使う
コードには良いものも悪いものもあることはお分かりだろう。悪いコードを書いてしまう原因はさまざまだ。かなり抽象的な機能名や変数名を使うことも一因になる。X48、PerformDataFunction、DoIt、HandleStuff、do_args_methodなどといったルーチン名では、手法や手続きの内容について何の情報も分からず、読む方は理解するためにコードの解析を余儀なくされてしまう。悪い例としてはもう1つ、i、j、kといった1文字だけの変数名を使う方法がある。シンプルなテキストエディタではこれらを簡単に検索することもできないし、その機能も分からない。
もちろん、いろいろな意味で悪い要件を書いてしまうこともある。おそらく、最悪はあいまいさだろう。2人の人が異なる解釈をしてしまうような要件はあいまいで明せきさを欠く。例えば、実際の要件仕様であった要件を以下に示す。
| アプリケーションは多数のユーザーが同時ログインした状態でも非常に安定したものでなくてはならない。速度も犠牲にしてはならない。 |
この文章に使用される単語は実にさまざまな解釈が可能である。つまり、この要件はあいまいである。実際、これを明確にするためには、本来は特定の3つの要件に分けて明示する必要がある。
- 平均システム障害間隔は週1件以下であること
- システムは1000人のユーザーを同時にサポートし、全員が同時にデータベースに問い合わせを行ってもクラッシュやデータの消失がないものとする
- システムの平均レスポンスタイムは、最大1000人の同時ユーザー利用時で1秒未満とする
品質要件となると、さらに多くの属性があるため、詳細はIEEEのガイドラインを参照していただきたい[*1]。
|
[*1]Software Engineering Standards Committee of the IEEE Computer SocietyのIEEE Recommended Practice for Software Requirements Specifications。1998年6月25日認定 |
|
1/4 |
|
INDEX |
||
| The Rational Edge コーディングの知恵を要件定義で利用する |
||
| Page1 構造の理解 |
||
| Page2 コメントによる詳細説明 |
||
| Page3 ガイドラインに従う |
||
| Page4 自動化ツールの利用 |
||
|
本記事は「The Rational Edge」に掲載された「Writing good requirements is a lot like writing good code」をアットマーク・アイティが翻訳したものです。 |
| IT Architect 連載記事一覧 |
The Rational Edge
米ラショナルソフトウェアがWeb上で毎月更新するオブジェクト指向開発のための論文集「The Rational Edge」を@ITが厳選して翻訳
- 第1回 要件仕様の決定に時間を割かない結末は?
- 第2回 先駆者に学ぶ「開発プロセス改善の原則」
- 第3回 あるプロジェクトリーダーの成功ストーリー
- 第4回 ソフト開発の変革というWebサービスの可能性
- 第5回 プロダクト・マネジメントを成功に導くには
- 第6回 分散コンピューティング時代のテスト手法
- 第7回 プロジェクトの特性に合わせた要件定義手法の選択
- 第8回 優秀なテスターの育成と訓練方法
- 第9回 「アジャイル」「RUP」「Rational XDE」の融合
- 第10回 Dr.ユースケースの “ユースケース人生相談”
- 第11回 Webサービスのテスト技法進化論
- 第12回 要件定義の考古学
- 第13回 チェスとソフト開発、その相関関係を探る
- 第14回 開発計画が破たんするには理由がある
- 第15回 要件定義の管理技術(Lv0〜Lv5)
- 第16回 オン・デマンドの波をキャッチしろ
- 第17回 オープンソース時代のテスト手法、そのノウハウ
- 第18回 オープンソース時代のテスト手法、テストのロードマップ
- 第19回 オープンソース時代のテスト手法、テストのまとめ
- 第20回 『オープン』の正体 (前編)
- 第21回 『オープン』の正体 (後編)
- 第22回 サブシステムの「なに?」「なぜ?」「どうやって?」
- 第23回 サブシステムとはモデリング概念である
- 第24回 アスペクト指向プログラミング オーバービュー
- 第25回 「プロジェクト管理」を管理するために
- 第26回 レッスン1:何もせずに取り残されるな
- 第27回 レッスン3:相違に注意を払え
- 第28回 大規模プロジェクトにアジャイルを適用する方法(前編)
- 第29回 大規模プロジェクトにアジャイルを適用する方法(後編)
- 第30回 アジャイル開発:成熟期の到来、その道のり
- 第31回 UML 2.0のキホン:コンポーネント図の詳細解説
- 第32回 コーディングの知恵を要件定義で利用する
- 第33回 隣のテストチームが優秀ないくつかの理由(前編)
- 第34回 隣のテストチームが優秀ないくつかの理由(後編)
- 第35回 中国のソフトウェア開発現場はこんなにスゴイ
- 第36回 ソフトウェア開発の「いま」と「近未来」の話
- 第37回 ルネサンスの巨匠たちに学ぶエンジニアリングの技
- 第38回 オブジェクト指向を超えて
- 第39回 ユーザー要件を引出すテクニック
- 第40回 ITプロジェクトを見える化する
- 第41回 ソフトウェアアーキテクチャって何なの?(前編)
- 第42回 ソフトウェアアーキテクチャって何なの?(後編)
- 第43回 ソフトウェアアーキテクトの役割
- 第44回 ソフトウェアアーキテクティングのプロセス
- 第45回 ソフトウェアアーキテクティングのメリット
- 第46回 ウォーターフォールから反復型への移行手順
- 第47回 トランザクション管理の複雑性を克服する パート1
- 第48回 トランザクション管理の複雑性を克服する パート2
- 第49回 汎用グラフィカルモデリング言語「SysML」 パート1
- 第50回 グラフィカルなモデル言語で製品構造を記述
- 第51回 キミのコードが汚い理由
- 第52回 「設計」や「構築」よりも重宝されるスキル
- 第53回 専門家に聞くモデル駆動開発のメカニズム
- 第54回 プロジェクトのはじめに計画を立てるのは無謀
- 第55回 「この開発プロジェクトは中止!」の基準
- 第56回 なるほど! ビジネスユースケース
- 第57回 そうだったのか! システムユースケース
- 第58回 不完全なコードは推敲フェイズで潰しておきたい
- 第59回 ビルドが全滅する原因
- 第60回 初歩の「Perl」「Python」「Ruby」
- 第61回 開発プロジェクトを「統治」するベストプラクティス
- 第62回 開発プロジェクト「統治」のピンポイント解説
- 第63回 反復開発の「ここはぜひカバーしたいポイント」
- 第64回 開発プロセス導入のアンチパターン
- 第65回 プロセスはチャンスが訪れるたびに改善する
- 第66回 自己管理型チームの利点と弱点
- 第67回 人事評価と開発者のモチベーション
- 第68回 鈍重な開発チームは鈍重なシステムを作る?
- 第69回 ソフトウェアが複雑なのは仕方がない?
- 第70回 ソフトウェアの複雑性を手なずける
- 第71回 見積もりの精度 Accuracy of Estimation
- 第72回 アジャイル開発の広範な普及を目指して
- 第73回 アジャイルとシステムテストの新たな関係(前編)
- 第74回 アジャイルとシステムテストの新たな関係(後編)
ホワイトペーパー(TechTargetジャパン)
|
|

