ソフトウェア工学

システム開発ライフサイクル内で働く専門家、学者、学生向けのQ&A

2
どの規格が830-1998に取って代わりましたか?
私はソフトウェアプロジェクトをより正式に文書化する方法を検討しており、IEEE 830-1998:ソフトウェア要件仕様の推奨プラクティスについて学びました。ただし、そのリンクからわかるように、このリンクは置き換えられています。 私は、830-1998、そしておそらく830-1993でさえ、おそらく使用に問題がないことを知っています。ただし、他に何もなければ、どの標準がそれに取って代わったかを知りたいと思います。この場合、それは問題ではないかもしれませんが、他の標準がより技術的なものに取って代わられる場合、どこの標準が別のものに取って代わるかをリンクすることは良い考えだと思います(同じ行に別の標準がない場合(830、場合))。 それに言及する価値があります: IEEE Standards AssociationのWebサイトで「Software Requirements Specifications」または「Software Requirements」を検索する際の最新の標準は830-1993です。 SWEBOKの2004(現在)バージョンは830-1993(段落2.5)を参照しています。 このドキュメントのウィキペディアの記事には、この標準が置き換えられたという記述はありません。 TLDR:どの規格が他の規格に取って代わり、どの規格が830-1998に取って代わりましたか。

3
MVVM、DDD、およびWPF階層化アプリケーションプロジェクトの構造ガイダンス
私はVSでアプリケーションの構造を設定しようとしていますが、合理的なレベルに「試して」将来的に証明したいと思います。このアプリケーションは、慣例に従わなかった古いWinformアプリをWPFで書き直したものです。レイヤー、ティア、頭字語などはありません... これはかなり大規模なエンタープライズアプリケーションです。私のDBがそうであるように、Linq To SQLを使用する予定であり、ほとんどの場合、常にMS SQLになります。また、既存のスキルセットがあります。 できる限りMVVMとDDDをフォローしたいのですが、これらを組み合わせるとアプリケーションの構造が混乱します。いくつかの例を使って説明してみましょう。 MVVMに従うと、フォルダー構造は次のようになります。 Views Models ViewModels Helpers しかし、私のプロジェクト構造がこれに似ているかもしれない単純化されたDDD階層化アプローチにどのように適合しますか: MyApp.UI MyApp.Domain MyApp.Data Modelsドメインレイヤーに配置するのPersonですか、それともsayの3つのバージョンがありますか?これは、リポジトリとDBオブジェクトのドメインオブジェクトへのマッピングをどこに配置するかという別の質問につながりますか?私はデータを仮定します... Views私はUIに行くだろうが、ViewModelsまただろうか? 最後に、ビジネスロジックをどこに埋め込むか。 CodePlex、DDD Exampleで以下を見つけましたが、いくらか助けになりましたが、Webアプリのように思えますが、それは問題ではなく、私の無知が輝いています。 誤解しないでください。フォルダをいくつでも持つことができ、好きな名前を付けることができます。私は、これらの場所が必ずしも呼ばれているものではなく、これがスケーラブルになるように、物を置く場所を見つけようとしています。 私の質問の核心はこのように示されるかもしれません。によって生成されたオブジェクト がありtblPersonます*.dbml。これは明らかであり、「データ」レイヤーに属します。 これで、Model、DTO、Domain Model、またはと呼ばれる別のLayer(project?)で呼び出されるものがありPersonます。私はどこに置くべきかわからないことのMapperためPersonに必要になるでしょうtblPerson。 次に、ViewModelをEditPerson取得しPersonます。たとえば、それから取得する独自のプロパティがありますが、それ以上の場合もあります。 最後に、そのViewModelにバインドされたビューがあります。 その段落が私の仮定と推測で満たされていることを明確にするために、誰かが私のために空気をきれいにするのを手伝うか、そこから洞察を提供してくれることを望んでいます。

7
コードのリファクタリング時間を正当化する方法は?
70k LOCを超える非常に大きなプロジェクトがある。 このプロジェクトでは、コアフレームワークやその他の部分でもコードリファクタリングが必要です。プロジェクトの開始時にリファクタリングの時間が設定されていませんでした。しかし、時間の経過とともに40人以上の開発者が共同でプロジェクトを去りました。私の観点からは不可欠です。 適切なソフトウェア開発の原則を主張し、擁護する上であなたの重要なポイントは何ですか?

7
静的解析の落とし穴を避ける方法
私はジョエル・テストで少なくとも11点を獲得する会社で働いています。少なくとも紙の上では。 ただし、実際には、期待どおりに機能するものはなく、プロジェクトはDEFCON 1で半年間使用されています。今、私の同僚のほとんどは、日曜日の午後6時に帰宅できれば幸いです。 動作していないように感じた一見良いプラクティスの1つは、静的分析ツールの使用です。このプロジェクトは、gcc -Wall警告と独自の非常に高価な「C / C ++」ツールの両方を追跡します。 GCCの警告は、実際の(ほとんどの場合、不快ではない)バグを指すことはほとんどありません。 ただし、プロプライエタリなツールは、暗黙的なキャストや文字列リテラルのsizeof'ingなどをリストします。暗黙のキャストもスタイルブックでブラックリストに載っています。 標準的な慣行では、すべての警告を黙らせる必要があります。これにより、主に誤検知である警告が除外されることに注意してください。これは問題ではありません。 結果は次のとおりです。 人々はすべての右辺値とすべての引数に型キャストを追加し、プロセスで実際に問題のある型の不一致を隠します。 人々は1つのバグで紹介するか、別の問題のある言語機能を使用します(sizeofの代わりにstrlen、strcpyの代わりにstrncpyなど)。 警告は沈黙します。 バグレポートが開始されます。 主なポイントは、元のコードが機能しており、言語能力の範囲内で安全に遊んでいた人々によって書かれていたのに対し、修正はそうではなかったことです。 今、私はこの会社が救われるとは考えていません。ただし、「プロ」ツールを使用するためのより良い、できれば機能する方法があるかどうか、または私が将来決定を下す場合にそれらの使用を完全に避けるべきかどうかを知りたいです。 すべてのプログラマーが失敗することのない天才だとは限らないソリューション。なぜなら、そうであれば、そもそもツールを使用する必要がないからです。

6
最初に来たのは、コンパイラーですか、それともソースですか?
コンパイラの誕生に興味があります。プログラミングはどのように始まりましたか?ある特定のコマンドセットを認識するハードウェアを最初に構築したのですか、それとも言語を定義してからその周辺のハードウェアを構築したのですか?また、関連するメモでは、最初のプログラミング言語は何でしたか?

7
顧客情報レコードの事実上の標準[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 現在、一般的な顧客情報(ユーザーID、パスワード、姓、名、電子メール、住所、telfnrなど)のデータベースを作成する新しいプロジェクトの可能性を評価しています。この時点で、要件は大まかにのみ定義されています。 顧客DBは、何百万ものレコードに含まれていると予想されます。DBサイジングのためのいくつかの裏側の数値を計算し、潜在的なDBオプションとアーキテクチャを評価するために、これらの種類のレコードの事実上の標準を探しています。特に、すべてのフィールド(名、姓、住所など)の標準サイズ、または単純な顧客レコードの一般的な平均は素晴らしい情報です。 非常に多くのeコマースWebサイトがあるため、再利用でき、車輪の再発明を避けることができる、ある種の典型的な構成が必要です。 何か案は? ----編集---- 答えは、標準の顧客レコードを採用するのではなく、独自のレコードを設計することに向かっているようです。この質問の焦点は、顧客オブジェクトのフィールドサイズの参照を見つけることであり、それを自分で理解することを避けることであることを強調したいと思います(元のテキストの部分を強調しました- 今は太字にしています)。

4
「UMLはMDDにとってこれまでで最悪の事態です。」
ウィリアムクックはツイートで次のように書いています。 「UMLはMDDにとって最悪の事態です。幸いなことに、多くの人々がこれを認識しています...」 私はその主張の背後にある理由を知りたい(明らかに、彼の個人的な意見に言及していない)。 私は、世の中の多くの人々がUMLをそれほど好きではないことに気付きました。また、UMLが効果的な設計とモデリングの聖杯である学界にいることを言及する価値があります。
17 design  uml  mdd 

2
リポジトリと作業ユニットの関係
リポジトリを実装します。リポジトリのコンシューマは複数の操作を実行でき、一度にコミットしたいので、UOWパターンを使用したいと思います。 問題に関するいくつかの記事を読んだ後、他の方法で行われている記事によっては、この2つの要素を関連付ける方法がまだわかりません。 UOWはリポジトリの内部にある場合があります。 public class Repository { UnitOfWork _uow; public Repository() { _uow = IoC.Get<UnitOfWork>(); } public void Save(Entity e) { _uow.Track(e); } public void SubmittChanges() { SaveInStorage(_uow.GetChanges()); } } そして時々それは外部です: public class Repository { public void Save(Entity e, UnitOfWork uow) { uow.Track(e); } public void SubmittChanges(UnitOfWork uow) { SaveInStorage(uow.GetChanges()); …

3
OpenGLのグラフィックコードで最も効果的な自動テストをどのように単体テストまたは実行しますか?
C ++でOpenGLの上にゲームとそれに付随するグラフィックエンジンを書いています。また、優れたコーディングプロセスと自動テストのファンでもあります。出力は多くの場合視覚のみであるか、非常に視覚指向であるため、グラフィックスコード+テストは非常に混同しにくいようです。 たとえば、画面にバイト単位でレンダリングされる生の画像ストリームを分析することを想像してください-比較するテストデータが必要で、作成/取得が難しく、レンダリングされた画像はしばしば同じではありません異なる時間に実行する場合のバイトレベル-アルゴリズムの小さな変更は、このアプローチを完全に破壊します。 視覚的な単体テストスイートを作成することを考えています。基本的に、さまざまなテストシーンをレンダリングし、シャドウマッピング、アニメーションなどのようなものを表示できます。CIの一部として、これらのシーンはビデオにレンダリングされます異なるメトリックのファイル(または実行可能ファイルとして残すこともできます)。ビデオファイルの手動検査が必要になりますが、少なくともある程度自動化および標準化されます。 どう思いますか?もっと良い方法がありますか?

4
C ++での移動コンストラクターの動機付けと使用
私は最近、C ++の移動コンストラクターについて読んでいます(たとえば、こちらを参照)。それらがどのように機能し、いつ使用するかを理解しようとしています。 私の知る限り、移動コンストラクターは、大きなオブジェクトのコピーによって引き起こされるパフォーマンスの問題を軽減するために使用されます。ウィキペディアのページには、「C ++ 03の慢性的なパフォーマンスの問題は、オブジェクトが値渡しされたときに暗黙的に発生する可能性のある、コストが高く不必要なディープコピーです。」 私は通常そのような状況に対処します オブジェクトを参照渡しすることにより、または スマートポインター(boost :: shared_ptrなど)を使用してオブジェクトをやり取りします(オブジェクトの代わりにスマートポインターがコピーされます)。 上記の2つの手法では不十分で、移動コンストラクターを使用するほうが便利な状況は何ですか?

5
存在しない場合にgetで何かを作成するのは悪いコーディング習慣ですか?
だから私はgetAccountそれがそれを取得した場合、アカウントに識別子を返すようなものを持っているウェブサービスを持っている、そうでなければ例外をスローします。クライアントは、取得と同じ情報で例外がスローされた場合、常にアカウントを作成したいと思うでしょう。 クライアント用の便利なライブラリを作成しています。このライブラリは、内部ですべてのWebサービス呼び出しを処理するため、呼び出しを自分で行う方法を知る必要はありません。 私が疑問に思っているのはgetAccount(accountName)、アカウントが存在する場合にアカウントを取得するものを作成し、それを作成して情報を返さない場合、それは悪いことですか?例外を処理するためにクライアントに任せるか、単にgetOrCreateAccountのような名前を付ける必要がありますか?それは重要ですか? get操作で何かを作成するのは悪い習慣ですか?

2
ハイパーメディア(HATEOAS)の利点は何ですか?
(人間がAPIを直接参照するのとは対照的に)プログラムによる使用を目的としたAPIのHATEOASの利点を理解していません。確かに、顧客はURLスキーマにバインドされていませんが、私の考えでは同じデータスキーマにバインドされています。 たとえば、注文のアイテムを表示する場合、注文のURLをすでに発見または知っていると仮定します。 HATEOAS: order = get(orderURL); item = get(order.itemURL[5]); 非HATEOAS: order = get(orderURL); item = get(getItemURL(order,5)); 最初のモデルでは、注文オブジェクトにitemURLフィールドがあるという事実を知る必要があります。2番目のモデルでは、アイテムURLを作成する方法を知っている必要があります。どちらの場合も、事前に何かを「知る」必要があるので、HATEOASは実際に何をしてくれますか?

3
なぜ木は下に成長するのですか?
なぜコンピューターサイエンスで木が下向きに成長するのですか? 私はそれがプリンタに戻って、木を横断するプログラムが最初にルートを印刷し、遭遇するかもしれない再帰の無限のレベルを表現するために底なしの紙の束の概念を使用していると感じています。 参照: 木は下に向かって成長し、根はページの上部にあり、葉は下にあります 聖なる戦いと平和のための場所から。 慣例により、木は下向きに成長して描かれます ツリーデータ構造に関するWikipediaの記事から。 本物の木は根から空に向かって成長しますが、コンピューターサイエンスの木は根から下に向かって成長します David Schmidtの講義ノートより。

1
C#-4.0はオープ​​ンスタンダードですか?
Ecma-334(ISO / IEC 23270:2006)標準は、言語のバージョン2.0に対応しています。 バージョン4.0の仕様はMicrosoftから無料で入手できますが、Microsoftの公開仕様リストにはEcma(バージョン2.0)バージョンのみがリストされています。 では、後のバージョンで追加されたすべての優れた機能(LINQ、ラムダ関数など)はどうでしょうか?それらをコンパイラに実装できますか?
17 c#  legal  standards 


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.