4

クライアントは、ソフトウェア要件を満たすためのウェブベースのリッチインターネットアプリケーションを構築したいと考えています。基本的には、Webベースのケースツールであり、ステークホルダーからの要件を取得するための特定のプロセスに従います。私はプロジェクトマネージャーであり、まだプロジェクトの初期段階にあります。ソフトウェアプロジェクトで正式な方法を使用する必要がありますか?

私はクライアントと開発者の両方のためのツールの要件を明確にするのに正式な方法を使用することを考えてきました。正式な方法とは、何らかの形のモデリングを意味し、おそらく数学的なものを意味します。私が読んで検討しているものには、Z(http://en.wikipedia.org/wiki/Z_notation)、状態マシン、UML 2.0(おそらくOCLなどの拡張子を含む)、Petri nets、契約や前後の条件などのコーディングレベルのものがあります。私が考慮すべき他に何かありますか?

開発者は経験豊富ですが、使用される形式に応じて、数学を習得する必要があります。

私はこのプロジェクトで正式な方法を使用するのは価値があるかどうかを判断しようとしています。私は「それは依存している」ことを知っていますので、私にとって最も有益な答えは「はい/いいえ」であり、支持する議論です。

このプロジェクトに参加していたら正式な方法を使用しますか?

答えて

9

私はクライアントと開発者の両方のためのツールの要件を明確にするのに正式な方法を使用することを考えてきました。

フォーマルメソッドの経験がある開発者はごくわずかです。私がCADiZをWindowsに移植するとき、私が正式な方法のトレーニングでクライアントを見たのはZUGのメンバーだけでした。

正式な方法とは、何らかの数学的なモデル化を意味します。私が読んで検討していることのいくつかには、Z(http://en.wikipedia.org/wiki/Z_notation)、状態マシン、UML 2が含まれます。0(OCLなどの拡張機能も含む)、ペトリネット、契約や前後の条件などのコーディングレベルのものが含まれます。私が考慮すべき他に何かありますか?

フォーマル方法、集合論にその基礎を取り、上のタグ付けされたいくつかのセミフォーマル表記(ステートマシン)との非公式の表記であるUML、あるZとの間の非常に大きなギャップがあります。

ソフトウェア要件ツールを使用していると思われるような技術クライアントは、UMLに非常に慣れています。

ドメインのZモデルを作成する価値があり、クライアントとサーバー(またはpetri-net)間のメッセージングのpi計算モデルを作成する価値があるかもしれませんが、piはより簡単で強力)。

あなたのドメインのZモデルは、インプリメンテーションに依存しないタイプ制約のセットで、一般的な実装言語のタイプシステムよりも強力に表現されています。

あなたのメッセージングの正式なモデルとは、更新を失うことなく、競合やデッドロックが発生しないように分析を実行する機能です。

UMLモデルでは、大規模なシステムを機能領域(パッケージ図)に分割し、それらの領域のクラスが静的にどのように関連しているか(クラス図)を示し、クラスは動的に関連し(シーケンス、アクティビティ、インタラクション図)、パッケージの展開方法(コンポーネント図とデプロイメント図)を示します。これらは、チーム内でのコミュニケーションやアイデアを少しはっきりさせるのに役立ちますが、正式に定義されたセマンティクスではないため、非常に洗練された分析が可能です。

90歳で働いていたZの専門家は、ばかげたZでCASE GUIを指定するという考えを考えました。このようなGUIのためのUMLモデルを作成するのが一般的です。

正式な設計契約前後の条件を使用していませんが、コメントや頻繁にアサーションに追加することがあります。

+1

私は正式な方法を研究していませんが、私はそれらが一般に生命に不可欠なシステムで利用されていることを理解しています。もし失敗が死や企業全体の崩壊を招く恐れのあるものを構築していないのであれば、正式な方法の使用は過度のものかもしれません。 –

+0

コミュニケーションも大きな関心事です。たとえあなたが構築しているものが「生命に危険な」ものではないとしても、システムの一部の周りのコミュニケーションを形式化することは依然として役に立つかもしれません。 – Michael

+0

@ThomasOwens Intelは、有名なFDIVバグの後に正式な検証を使用し始めました。最初のCPUエラーではありませんでしたが、1994年に$ 400mで簡単に再現可能で定量化されました。 –

1

ここで実際に質問するのは、それらを使用するかどうかではなく、何が得られて失われたかです。

生産性と結果が複雑さと学習に必要なものよりも重要でしょうか?

1

一般に、チームが快適であるものを使用する必要があります。新しい項目があれば、学習曲線が生まれるでしょう。つまり、プロセスや間違いについて疑問が生じます。開発タイムラインの一部は、これらの問題を修正するために使用されます。将来このチームで使用する予定がない場合は、新しいものを導入することによって長期的な利益を得ることは実際にはありません。変更プロセスには長い時間と多くの作業が必要です。

これらの問題を処理するのに十分な時間を見積もっていれば、推定値が正しい場合は問題ありません。あなたがこれらの人々と仕事をしていないことを考えると(少なくともあなたの投稿が聞こえるようなものです)、あなたのタイムラインは正確ではないので、プロジェクトを終了するのに十分な時間を割けなかった可能性があります新しいプロセスを導入することはもちろんです。

あなたが自己に尋ねなければならないもう1つの質問は、「実装したいプロセスがどれくらい快適ですか」です。私がしなければならないとすれば、チームを引き抜くことができると分かっていない限り、私は決してプロジェクトに新しいプロセスを導入しようとはしません。新しいことを時々試してみるのは良いことですが、あなたが緊密な状況からどのようにナビゲートするかを知るために快適なチームを持つ必要があります。

0

私はトムと完全に同意し、

は、生産性と結果が複雑さを上回るだろうと必要な学習、同じ質問をしますか?

私の意見では、システム/ソフトウェアが「安全上重要」であると特定できない限り、正式な方法は不要です。

何セーフティクリティカルな平均:

コンピュータシステムの障害は、このようなシステム自体への人命の損失、損害、環境への、または損傷など壊滅的な結果につながることができ、このようなシステム「セーフティクリティカル」として知られています。

0

私はTomとAbufardehの両方に同意します。生産性と成果は複雑さと必要な学習を上回るでしょうか?

また、開発前にすべての要件を取得する方が良いでしょうか(これらの要件が明確に定義され、テスト可能であることを確認してください)?すべての要件を最初に取得するのは常識的なようですが、プログラムの大部分がいくつかの要件を後で取得することは問題ではないと考えて、並列処理を行います。要件クリープは悪夢です!映画「ペンタゴン・ウォーズ」は、意見が分かれていない人にとっては目を見張るものです。

1

私はミッションクリティカルなアプリケーションではありませんが、ライフ/セキュリティにとって重要なアプリケーションでは、「軽量」のフォーマルメソッドに対するいくつかのアプローチを検討してきました。いくつかのアイデア:

+0

これは良いリストです。 私はJMLやSpec#のようなコードレベルのものを最近見てきました。これは、Kevinが以前に言ったこととよりインラインである。「一般的には、チームが快適であるものを使うべきだ。チームはすでにコードに慣れ親しんでいるので、より良いコードを書くことができるようになります。 – Michael

1

後期ここでゲームではなくがある場合、あなたは私たちが多くのプロジェクトのために使用testable architecture through Savaraのようなものを検討するかもしれませんコンポーネント間のコミュニケーションや相互作用の優位性これは、WebフロントエンドのSOAバックエンドでよく見られます。

これはpi-calculusに形式的に基づいているため、pi-calculusを理解する必要はありません。

1

なぜプラットフォーム、Frama-Cなどのオープンソースである成熟したツールセットを持つACSL(ANSI C仕様言語)を使用したいくつかの成功した例があります。 JML(Java Modeling Language)と呼ばれるJava類似テクノロジの場合私は両方とも組み込みアプリケーション用の中小規模のプロジェクトに使用されていると思いますし、あなたのコードにいくつかの保証を追加するのに役立ちますが、仕様の検証を目的としているわけではありません。 Zは絶対にユーザーフレンドリーではなく、適切なツールサポートIMHOが不足しています。

仕様段階で使用できる商用ツールのうち、私はB-methodに基づいたRodinプラットフォームを検討します。

関連する問題