web-dev-qa-db-ja.com

ソフトウェアが仕様を満たし、要件を満たしていることをどのように確認できますか?

そのため、エンドカスタマー、事業部門、販売/マーケティングから要件を引き出すのは非常に得意です。これらの要求を満たすために機能を追加/拡張するプロジェクトを計画し、最も収益性の高い順序で期限に間に合うようにタスクに優先順位を付けます。

時間の経過とともに、ソフトウェア製品は成長し、市場は変化し、元の顧客はいくつかの新しい機会に比べて優先順位が低くなっています。

そのため、すべての利害関係者のすべての要件が共存できますが、要件、したがって仕様が変更されました(競合はありません)。

また、開発チームでは、人が上、横、または外に移動することで混乱が生じたため、「最初に」そこにいた人はいません。

これにより、未使用のコードパスのように見えるもの(ロジックは誰にも馴染みのないもの)を削除して、数か月後にたまたまそのロジックをアプリケーションで実行する必要がある顧客を見つけるために、一部の顧客が停止した。

ユニットテストを実行して、動作が偶発的に変化しないことを確認できることはわかっています(上記の例のように)が、これは大きなコードベースであるため、すべてのユニットテストに時間がかかります。

ソフトウェアが(まだ)仕様と要件を満たしていることを確認するために、手動ではない技術/技術/ベストプラクティスを利用できますか?

アジャイル/反復的な支持者が「ユニットテストは仕様です」のようなことを言うのを聞いたことがあります。単体テストを元の要件に合わせるために使用できるものはありますか?


脚注

(私は この他の投稿 を見ましたが、それは検証についてではなく、ユーザビリティテストについてです)

私たちはすでに反復型開発を行っており、2週間以内にリリースしています。

ソースベースは主にUnix上のC++です。 Wiki、Word、チケットシステム、MS Projectに現在文書化されている要件と仕様。

7
JBRWilkinson

あなたが本当にこれを正しくやりたいのなら、あなたは多くの手作業が行われることを受け入れる必要があります。ユニット/システム/統合/回帰テストは不可欠ですが、ソフトウェアがテストに必要な方法で機能することを確認するだけです。要件のトレーサビリティとは、各要件が何らかのIDを取得し、そのIDが開発プロセス全体で追跡可能であることを意味します。要件IDは1つ(または複数)の機能に関連付けられている必要があり、機能は設計に関連付けられている必要があり、設計はテストに関連付けられている必要があります。最終的には、システムの任意の部分を見て、それを前後にたどることができます。テストが失敗した場合、満たされていない要件を確認できます。いくつかのコードを見て、それが必要な理由とシステムのどの部分がそれを使用しているかを確認してください。要件が削除された場合、削除できるコードとテストを特定できます。残念ながら、これに対する優れたツールサポートはありません(FrameMaker、カスタム変更管理システム、および設計ツールを一緒に接続するPerlスクリプトがたくさんありました)。

2
TMN

ここには2つのものがあります。検証と検証です。前者は、コードが仕様と一致することを確認することを扱います。後者は、コードが顧客の期待に一致することを確認することを扱います。ビヘイビア駆動開発とアジャイル手法は、検証と妥当性確認の間の格差を減らすことを目的としています。

検証は、テスターが実行できるシナリオの観点から実行できます。それらは自動化することもしないこともできます。ベータテスターは、顧客が新しいバージョンで遊ぶことができるので、良いセカンドラインです。最後に、ユーザー受け入れテストを実行でき、最後のいくつかのバグを修正することをお勧めします。このサイクル中に迅速な反復時間を解放することは有益です。

これにより、未使用のコードパスのように見えるもの(ロジックは誰にも馴染みのないもの)を削除して、数か月後にたまたまそのロジックをアプリケーションで実行する必要がある顧客を見つけるために、一部の顧客が停止しました。

それは奇妙なことです。コードが実行できないことを証明できない場合(つまり、孤立している場合)、なぜこれを行うのですか?

すべての要件の文書化されたリストがない限り、ソフトウェアが確実に何かを満たしていることを証明することはできません。

0
ozz