正則これまで、業務システムの要件定義に関するコラムをいくつか書いてきた。今回は、既存システムの再構築ではなく、世の中に存在しないシステムのスクラッチ開発の要件定義と、ツールを用いた要件定義の効率化について記載する。仕様を創造するということ世の中に存在しないシステムを作ることの最大の難点は、当たり前ながら、詳細な仕様の定義であり、そのインプットとなる具体的かつ網羅的なユースケースの洗い出しである。ユースケースは、システムを使った作業手順であり、人の作業が時系列に進むことを考慮すると、UMLのようなユースケース図ではなく時系列的要素を含むWFA(業務フロー図)の方が、より具体的で望ましい。システムの要件定義においては、まず機能ありきではなく、まずユースケースありきである。運用を時系列に、詳細に想定していきつつ、システムの要件を定義する必要があるが、ここは経験と想像力に頼らざるをえない。システムの機能が明確になることにより、運用も明確となり、それに伴い新たな要件あるいは、既存の要件に制約をつける、という事象が発生する。単純な要件は、UMLの教科書に出てくる人形を使ったユースケース図である。この段階では、あたりまえすぎてなんの問題も矛盾も生じない。ここから段々とユースケースが階層的に複雑化していくのが普通である。この意味で、要件定義は、スパライルに進む。要件定義のあと設計というきれいなフェーズの切り分けは本質的に難しいのであり、これを見越した設計・開発計画が必要となる。ひとつ難しいのは、ある要件と別の要件が矛盾する場合がありえるが、そのことが最初は、わからないことである。ここは、(1)ユースケースの想定、(2)機能の想定、(3)機能の矛盾の想定、というステップを踏んで要件を定義していかなくてはならない。同時に、要件の変更管理、変更による他の機能の影響・副作用の洗出しを必ずやる必要がある。この要件を矛盾を整理しつつ、しっかり定義し、変更管理を行っていかなければシステム完成後に、使い勝手の悪いシステムになってしまう。ウォーターフォールVS.アジャイルシステム構築を行う業界では、未だウォーターフォールは健在である。システムの規模が大きくなればなるほど、仕様はどこかで確定・凍結しなければならないからである。前述のように、所詮、人間は不完全であり、予め完璧に詳細にユースケースを描き、要件を定義することなどできない。スパイラルな工程により、要件が円熟化することの方が普通であろう。あれば、アジャイルな開発が最適なのか、というとそう単純なものではない。少人数の精鋭により短期の開発を繰り返すということ自体は、効率的な手法であるが、一方、大規模なシステム開発では、開発側にとっては、開発者のリソース管理が重要となるため、開発自体をスパイラルにまわすのは、リスクが高い手法といえる。ゆえに、現実的な方法は、最初にできるだけ詳細にユースケースを描き、要件を固め、さらにその要件をユースケースにフィードバックし、新たなユースケースや既存の要件への制約が出た場合は、副作用を検討しながら、さらに要件へフィードバックするということになろう。要件定義のためのツール要件定義とは、小説を書くように、文章にこだわるというものではない。世の中に「○○できること」という文章の羅列の要件定義書が多数存在するがその多くは、発注者の意図を十分に受注者に伝えられているか疑問である。文章表現に頼るとともすれば趣味的な世界に入るという危惧がある。要件定義とは、システムの定義であるから、システマティックに構造と整合性をもって進めなければならない。そのために、ツールを活用するのは必須であろう。WFAには、処理とデータの流れとユースケースが混在している。WFAの機能を集約したものが機能リストであり、DFD上のすべての機能と一致していなければならない。同様にWFAの帳票・台帳を集約したものがデータリストであり、DFD上のすべてのデータと一致していなければならない。これは、画面についてもいえる。機能には、オンラインとバッチがあり、機能の入力には、画面とデータがあり、出力には、画面、データ、紙があり、それぞれに入出力項目がある。要件定義とは、このようなシステムの構造を明確に意識しながらシステマティックに記述すべきものである。このような整合性を維持するために、ツールがおおいに役立つ。有名であり、ドキュメントの大まかな整合性をチェックできる。このEXCELを再度インポートすることもでき、要件定義の整合性チェックを効率化できる。内部統制テンプレート(Microsoft)次回は2020年1月下旬に更新予定です。Easyは創刊以来週刊でお届けして参りましたが、2012年4月からは隔週とさせて頂きます。2018年10月にサイトデザインをリニューアルし、SSL対応いたしました。引き続きご愛顧のほどよろしくお願いいたします。