ソフトウェア プロジェクトでは形式的な手法を使用する必要がありますか?
質問
私たちのクライアントは、ソフトウェア要件を収集するための Web ベースのリッチなインターネット アプリケーションを構築することを望んでいます。基本的に、これは、利害関係者から要件を取得するための特定のプロセスに従う Web ベースのケース ツールです。私はプロジェクトマネージャーですが、まだプロジェクトの初期段階にいます。
私は、クライアントと開発者の両方にとってツールの要件を明確にするために、形式的な手法を使用することを考えてきました。形式的な手法とは、何らかの形式のモデリング、おそらくは数学に基づいたものを意味します。私が読んだことや検討していることの中には、Z (http://en.wikipedia.org/wiki/Z_notation)、ステート マシン、UML 2.0 (おそらく次のような拡張子を含む) OCL), ペトリネット, 、契約書や事前条件や事後条件などのコーディングレベルのものもあります。他に考慮すべきことはありますか?
開発者は経験豊富ですが、使用される形式によっては、数学を学ぶ必要がある場合があります。
私は、このプロジェクトで形式的な手法を使用する価値があるかどうか、また、そうであるならどの程度まで使用する価値があるかを判断しようとしています。「状況次第」であることはわかっているので、私にとって最も役に立つ答えは、はい/いいえとそれを裏付ける議論です。
あなたがこのプロジェクトに参加していれば、形式的な手法を使用しますか?
解決
私は、クライアントと開発者の両方にとってツールの要件を明確にするために、形式的な手法を使用することを考えてきました。
形式メソッドの経験を持つ開発者はほとんどいません。私が正式なメソッドのトレーニングを受けているクライアントを見たのは、移植時の ZUG のメンバーだけでした。 CADiZ Windowsに。
形式的な手法とは、何らかの形式のモデリング、おそらくは数学に基づいたものを意味します。私が読んだことや検討していることの中には、Z (http://en.wikipedia.org/wiki/Z_notation)、ステート マシン、UML 2.0 (おそらく OCL などの拡張機能を含む)、ペトリ ネット、およびコントラクトや事前条件と事後条件などのコーディング レベルのものです。他に考慮すべきことはありますか?
集合論に基づいた形式的な手法である Z と、いくつかの準形式的な表記 (状態マシン) がタグ付けされた非形式的な表記である UML の間には、非常に大きなギャップがあります。
ソフトウェア要件ツールを使用していると思われる一部の技術クライアントは、UML に非常に慣れています。
ドメインの Z モデルを作成する価値があるかもしれませんし、クライアントとサーバー (またはペトリネット、ただし pi の方がシンプルで強力だと思います) 間のメッセージングの pi 計算モデルを作成することにも価値があるかもしれません。
ドメインの Z モデルが提供するものは、一般的な実装言語の型システムよりも強力に表現される、実装に依存しない型制約のセットです。
メッセージングの正式なモデルが提供するものは、更新を失ったり、競合やデッドロックが発生したりしないように分析を実行する機能です。
UML モデルが提供するものは、大規模なシステムを機能領域に分割するための表記法 (パッケージ図)、それらの領域内のクラスがどのように静的に相互に関係しているかを示し (クラス図)、それらのクラスのインスタンスがどのように動的に関係しているかを示すものです (シーケンス図、アクティビティ図、相互作用図など)、パッケージがどのようにデプロイされるかを示します (コンポーネント図とデプロイメント図)。これらは、チーム内のコミュニケーションやアイデアを少し具体化するのに役立ちますが、非常に高度な分析を可能にする正式に定義されたセマンティクスはありません。
90 年代に私が一緒に働いていた Z の専門家は、Z で CASE GUI を指定するという考えはばかげていると考えていました。このような GUI 用の UML モデルを作成するのは一般的です。
私は正式な契約による設計の事前条件と事後条件を使用したことはありませんが、コメントに追加したり、アサーションに頻繁に追加したり、それらに違反する可能性のある条件を単体テストしたりしています。
他のヒント
ここで聞いて本当の問題は、それらを使用するかどうかではなく、何を得て失われます。
生産性と結果が必要な複雑さと学習を上回るウィル?
一般的に、あなたはチームが快適であるものを使用する必要があります。新しいアイテムで作られたプロセスやミスについての質問があるように起こっていることを意味学習曲線、があるように起こっています。あなたの開発のタイムラインの一部は、これらの問題を修正するために使用され、場合あなたは本当にあなたが何か新しいものを導入することにより、長期的な利益を持っているつもりはない、将来的にこのチームでそれらを使用して計画されていません。変更プロセスは、長い時間と多くの作業を要します。
あなたはこれらの問題を処理するのに十分な時間を推定している場合は、あなたの推定が正しければ、あなたは..... OKかもしれません。あなたはこれらの人々と働いていないことを考えると(少なくとも、それがあなたのポストはのように聞こえるものです)、チャンスはあなたのタイムラインです、それはあなたがプロジェクトを完了するのに十分な時間を割り当てていない可能性を意味するべきな限り正確であることを行っていません一人で新しいプロセスを導入してみましょう。
あなたはあなたの自己を依頼する必要があり、他の質問は、「あなたが実装するプロセスにどのように快適な?」です私がしようとしていないと私は私がしなければならない場合、私はそれを介してチームを引っ張ることができることを知っている限りのプロジェクトに新しいプロセスを導入ありません。随時新しいものを試す良いですが、あなたがタイトな状況の外に移動する方法を知っておくと快適なチームを持っている必要があります。
など、なぜプラットフォーム、FRAMA-Cなどのオープンソースですほとんどがツールの成熟したセットを持っていACSL(ANSI C仕様言語)を使用して、いくつかの成功例があります。 Javaの同様の技術についてJML(Javaのモデリング言語)と呼ばれます。私は両方とも組み込みアプリケーションのための中規模プロジェクトに小規模のために使用されていると思うし、彼らはあなたのコードにいくつかの保証を追加するのに役立つが、仕様の検証を目的とされていません。 Zは絶対にないユーザーフレンドリーれていると、適切なツールのサポート私見を欠いています。
私はB-法に基づいているロダンのプラットフォームになります仕様の段階で使用することができます。
商用ツールの中で後期ここでゲームでいますが、私たちが使用Savaraするを通じてテスト可能なアーキテクチャのようなものを検討するかもしれませんコンポーネント間の通信、または相互作用の優位性がある多くのプロジェクト。これは、ほとんどの場合、ウェブのフロントエンドに任意のSOAバックエンドに見られるます。
これは、正式には、π計算に接地され、あなたがそれを使用するために、π計算を理解する必要はありません。
私はトムと全く同意し、同じ質問を、
生産性と結果が必要な複雑さと学習を上回るウィル?
私の意見では、「安全性が重要な」形式手法は不必要であるように、システム/ソフトウェアを識別できる場合を除きます。
どのようなセーフティクリティカルな平均ます:
コンピュータシステムの障害が、そのような人間の生活、環境への損傷、またはシステム自体への損傷の損失など壊滅的な結果につながることができた場合、このようなシステムは、「セーフティクリティカル」として知られています。
私はトムとAbufardehの両方に同意する - 生産性と結果が必要な複雑さと学習を上回るだろう。
?また、このmethd(両方とも、明確に定義されているAMDこれらの要件を確実にし、テスト可能)開発の前にすべての要件を取得するための良いですか?すべてのrequirmentsを取得する最初のそれは、後にいくつかの要件を取得するには問題ありません常識のように思えるが、プログラムの大部分は、並列思考で物事を行います。要件クリープは悪夢です!映画「ペンタゴンウォーズ」同意しない誰にも目を見張るです。