つれづれなる技術屋日記

しがない技術屋。専門は情報工学で、「つれづれ技術屋」って呼んで。

機能要求と非機能要件って、ソフトウェアは与り知らないはず

今日、ネットで調べ物してたら、「機能要求と非機能要件」に関して最近書かれたページも結構多いのに気が付いた。”非機能要件のテスト”で検索しても、ポツリポツリとページがある。

前から思ってたんだけど、ソフトウェアのテストや作成の作業の中で、機能要求と非機能要件を分けるのが理解できない。ちなみに自分の場合、ソフトウェアの開発やテストの議論の際は、2つを分けることの是非は本質的ではないので話として割り込むことはしない。2つを区分する話題の部分を聞き流している。

そもそも作成するソフトに、例えばクラスを別にするなどして2つを区別することはない。テストも同様だ。良くレスポンスタイムの事を非機能要件とするけど、本来の要求事項の処理なども関係しているので、レスポンスタイムを速くする対応が1,2箇所をいじって調整できるほど簡単ではないことがほとんどだ。

むしろ、機能要求をユーザーからの要求とし、非機能要件を自社の都合などと考える方がすっきりするくらいだ。非機能要件として保守性などが挙げられることが多くて、非機能要件は多少のバグならOKとの考え方もあるかもしれない。例えば、サービスマン用の表示やログにスペルミスがあったからと言って、(昨今は)出荷NGにすることは皆無だろう。

レスポンスタイムも非機能要件とすることが多いようで、その範疇に含めても良いかもしれない。ただし、レスポンスタイムは契約なりRFPに書かれることが多くなってきている。そうなると、性能を出すことは必須。トラブルシートでも重要度は高レベルになるだろう。

なので、特にテストにおいては、機能要求と非機能要件を区別する必要はないと言える。むしろ重要度なり対策優先度において、その要求なり要件がどのステークホルダーからのものかを認識できる方が重要だ。(どのステークホルダーからかが明示的にどっかに書かれているか、暗黙に運用しているかは別として。) 機能要求と非機能要件を区別するのは、メトリクス取得メンバーがバグの分布などで利用する程度に考えていた方が良いとも言える。

ただし、非機能要件について書かれている本やホームページで、どんな要件が書かれているかは知っておいて損はない。機能要求は商品やサービスのドメインやユーザごとに異なることが多いが、非機能要件はドメインなどに依存しない項目が記載されていることが少なくない。それらが仕様書に書かれていなかったりテスト項目にない場合は、バグが多かったりバグの発見が遅くなったりすることが考えられるためだ。

非機能要件を仕様書に書かれてない項目と理解する人もいるようだけど、それはおかしい。作成するソフトウェアには非機能要件を実装しておく必要があるので、そのためにはドキュメント化しておくべきだ。該当する市場や装置で、常識的なこととして仕様書に敢えて明記しないケースはあるだろうけど。ただ、昨今のようにオフショアでソフト作成させたりテストさせたりするのなら、ドキュメントに掲載しておいた方がよい。(ちなみに、ドキュメントでなくてユーザーストリーで処理する場合は、非機能要件のユーザーストーリーで処理することになり、ここでのドキュメント記載はそれを含んでのこと。)

なお、”非機能要件”は”非機能要求”と表記すべきなどの意見もあるだろうけど、ここでは広く使われていると考える”非機能要件”とした。

”非機能要件のテスト”と大括りにせず、パフォーマンステストとか保守性テストと具体的なことで議論した方が良いだろう。その方が、それぞれの分野でのテスト技法の確立や効率化に結びつく。あるいは、”仕様書未記載のテスト”として、仕様書に書かれていない事項のテストをどうすべきかの議論をすべきだろう。個人的には、よほどの常識的なこと以外は仕様書に明記すべきと考えるが。 ちょっと気になったので、記載しておく。

©2005-2022 ほんだ事務所(honda-jimusyo) All rights reserved.