ソフトウェア工学

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

4
C ++でのスレッド間の高速メッセージパッシングのためのメモリ管理
2つのスレッドがあり、互いに非同期でデータメッセージを非同期に送信することによって通信するとします。各スレッドには、ある種のメッセージキューがあります。 私の質問は非常に低いレベルです。メモリを管理する最も効率的な方法として何が期待できますか?私はいくつかの解決策を考えることができます: 送信者はを介してオブジェクトを作成しますnew。受信者の呼び出しdelete。 メモリプーリング(メモリを送信者に転送するため) ガベージコレクション(Boehm GCなど) (オブジェクトが十分に小さい場合)ヒープ割り当てを完全に回避するために値でコピー 1)は最も明白なソリューションなので、プロトタイプに使用します。おそらくそれはすでに十分であるということです。しかし、私の特定の問題とは関係なく、パフォーマンスを最適化する場合、どの手法が最も有望かと思います。 特にスレッド間の情報の流れに関する追加の知識を使用できるので、プールは理論的には最高だと思います。でも、それが一番難しいのも怖いです。たくさんのチューニング... :-( ガベージコレクションは後で(ソリューション1の後)非常に簡単に追加できるはずであり、非常にうまく機能すると期待しています。したがって、1)が非効率的であることが判明した場合、それが最も実用的な解決策であると思います。 オブジェクトが小さくてシンプルな場合は、値によるコピーが最も高速な場合があります。ただし、サポートされるメッセージの実装に不必要な制限を強いることを恐れているので、避けたいと思います。

2
馴染みのないコードベースを説明するのに役立つツールやテクニックは何ですか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 5年前休業。 見慣れないコードを手動で検査(確認または変更)するとき、3つのオプションがあるようです。 トップダウン読み取り、ファイル名はそうどのように基本的なことで、それぞれ次のソースファイルを選択し、コードの。 私は通常、ほぼすべてを読むことになります。一部のファイルは2回。 幅優先読み取り、私が見つけ、最小限の理解した上で、呼び出すメソッドのすべてを読み、。次に、関数が呼び出したすべての関数を読み取ります。 私のメンタルスタックは、数回の呼び出しで深くすると、オーバーフローする傾向があります。 デバッガですべてのコードをステップ実行する深さ優先の読み取りでは、これに8分かかるのか8時間かかるのかわかりません。 コードの内容を十分に理解するのに十分なコードを読んだら、基本コードが20%以下である一方で、コードベースの80%以上を読んだことをよく反映します。私は多くの時間を無駄にしました。 なじみのないコードをすばやく把握するには、どのツールが役立ちますか?クリティカルコードパスの「全体像」を示し、特定の部分の詳細にドリルダウンできるツールはありますか?

3
DDDのプレゼンテーションVSアプリケーション層
ドメインドリブンデザインのプレゼンテーションレイヤーとアプリケーションレイヤーの間に明確な線を引くことができません。 コントローラ、ビュー、レイアウト、JavaScript、CSSファイルはどこに配置すればよいですか? アプリケーション層かプレゼンテーション層か? そして、それらが同じレイヤーですべて一緒に行く場合、何が他のレイヤーを含みますか?空っぽですか?

1
深いアーキテクチャのリファクタリングを機能ベースの開発と組み合わせるより良い方法を探しています
問題文: 与えられた: ソース管理としてのTFS アーキテクチャ設計が悪いかほとんどないレガシーコードが大量にある重いデスクトップクライアントアプリケーション。 音質、高速 配信、常にユーザーに不親切なUIに不満を示す新機能を常に必要とするクライアント。 問題: アプリケーションは間違いなく、深いリファクタリングを必要とします。このプロセスは必然的にアプリケーションを不安定にし、専用の安定化フェーズが必要です。 私たちは試しました: マスター(MB)から機能ブランチ(FB)への定期的なマージによるマスターのリファクタリング。(私の間違い) 結果:多くの不安定なブランチ。 私たちがアドバイスされていること: 記事(pdf)へのリンク リファクタリング(RB)のための追加のブランチを作成し、MBからRBへのマージによって定期的にMBと同期します。RBが安定した後、マスターをRBに置き換え、さらにリファクタリングするための新しいブランチを作成します。これが計画です。しかし、ここでは、FBをMBにマージした後、MBをRBにマージすることの本当の地獄を期待しています。 主な利点: ほとんどの場合、安定したマスター。 収益のより良い代替案はありますか?

2
重要な単語を見つけるための言語解析
私は、語彙のトピックにアプローチする方法についてのいくつかの入力と理論を探しています。 文字列のコレクションがあるとします。これは、1つの文または複数の文になる可能性があります。これらの文字列を解析して、最も重要な単語を取り除きたいと思います。おそらく、その単語がどれほど重要であるかを示すスコアが付いています。 私が意味することのいくつかの例を見てみましょう。 例#1: 「キューリグは本当に欲しいけど、買う余裕がない!」 これは非常に基本的な例で、1文だけです。人間として、ここでは「Keurig」が最も重要な言葉であることがすぐにわかります。また、「アフォー」は比較的重要ですが、それは明らかに文の主要なポイントではありません。「私」という言葉は2度出てきますが、実際には何の情報も伝えていないので、それほど重要ではありません。次のような単語/スコアのハッシュが表示されると思います。 "Keurig" => 0.9 "afford" => 0.4 "want" => 0.2 "really" => 0.1 etc... 例2: 「私の人生で最高の水泳練習の1つがありました。うまくいけば、自分の時間を維持して大会に参加できます。防水ではない時計を忘れずに持っていれば」 この例には複数の文があるため、全体を通してより重要な単語があります。例1のポイント演習を繰り返さないと、おそらく「水泳」(または「水泳練習」)、「競争」、および「ウォッチ」(または「防水」という非常に重要な単語が2つまたは3つ出てくると思います。ハイフンの扱い方に応じて、「時計」または「非防水時計」)。 このような例をいくつか挙げて、同様のことをするにはどうしたらよいでしょうか。すでにこれを行っている既存の(オープンソース)ライブラリまたはプログラミングのアルゴリズムはありますか?

1
ScalaのXMLリテラルの何が問題になっていますか?
で、この記事、マーティン(言語の頭本町)が書いています: [XMLリテラル]当時は素晴らしいアイデアだと思われていましたが、今では親指のように突出しています。新しい文字列補間スキームを使用すると、すべてのXML処理をライブラリーに入れることができると信じています。これは大きな利益になるはずです。 私自身、言語設計に興味を持っているので、疑問に思っています。なぜ、XMLリテラルを言語に組み込むのが誤りだったと彼は書いているのでしょうか。この機能に関する論争は何ですか?

5
単体テストと呼ばれる機能テストに対する適切な単体テストの具体的な利点は何ですか
私が取り組んでいるプロジェクトには、適切にモックアウトされなかった多数のレガシーテストがあります。このため、それが持つ唯一の依存関係はEasyMockであり、静的、引数付きのコンストラクターなどをサポートしていません。代わりに、テストはデータベース接続などに依存してテストを「実行」します。これらのケースを処理するためにpowermockを追加することは、それをサポートするために既存のプロジェクトをアップグレードする必要があるため、法外なコストとして撃ち落とされています(別の議論)。 私の質問は、プッシュバックに使用できる適切な単体テストの実際の具体的なメリットは何ですか?いずれかがあります?ユニットテストがうまくいかなくても、ユニットテストが悪いのは悪いことだと私は言っているだけですか?コードカバレッジは同じくらい効果的ですか?

2
コンピュータービジョンアルゴリズム(これはどのように可能ですか?)
私は最近、万引きを自動的に検出してユーザーに警告できるコンピュータービジョンテクノロジーのように見えるものを作成した会社に偶然出会いました。 リンク 同社が提供するビデオや例をいくつか見て、私は完全に困惑し、驚いたことに、いったい彼らがこの機能をどのように実現したのかについて驚いた。 ここで誰もこれがどのようにして達成されたのかを正確に伝えることはできないが、誰もが知っている-そして私に指摘することができる-この分野の研究を調査するか、あるいはこのようなものがどのように実装されるかについての詳細を提供するか、またはどこから始めればよいのか? 私の理解では、コンピュータービジョンアルゴリズムは、この洗練されたものから何年も離れていました。この種のアプリケーションは本当に可能ですか?彼らがこれをどのように達成したかで推測を危険にさらすことをいとわない誰か?



3
DDDおよび値オブジェクト。変更可能な値オブジェクトは非Aggrの良い候補です。ルートエンティティ?
ここで少し問題があります 値オブジェクトを持つエンティティーがあります。問題ない。新しい値の値オブジェクトを置き換え、nhibernateが新しい値を挿入し、古い値を孤立させてから削除します。わかりました、それは問題です。 被保険者は私のドメイン内のエンティティです。彼はアドレス(値オブジェクト)のコレクションを持っています。アドレスの1つはMailingAddressです。郵送先住所を更新したい場合、たとえば郵便番号が間違っていたとしましょう。エヴァンス氏の教えに従い、古いオブジェクトは不変なので、新しいオブジェクトに置き換える必要があります(値オブジェクトは正しいですか?)。 ただし、そのアドレスのPKはMailingHistoryテーブルのFKであるため、行を削除したくありません。したがって、エヴァンス氏の教義に従って、私たちはここでかなりねじ込まれています。私がエンティティをアドレス指定しない限り、それを「置き換える」必要はなく、単に古き良き時代のようにその郵便番号のメンバーを更新するだけです。 この場合、私に何を提案しますか?私の見たところ、ValueObjectsは、データベーステーブルの列(nhibernateのコンポーネント)のグループをカプセル化する場合にのみ役立ちます。データベースに永続IDがあるものはすべて、エンティティ(必ずしも集約ルートではない)にすることをお勧めします。これにより、特に深くネストされたオブジェクトの場合は、オブジェクトグラフ全体を再作成せずにメンバーを更新できます。 同意しますか?エバンス氏は可変値オブジェクトを持つことを許可されていますか?または、可変値オブジェクトはエンティティの候補ですか? ありがとう

1
Jenkins Paramerized Trigger + Copy Artifact
リリースビルドを処理するようにJenkinsを設定する作業をしています。リリースビルドは、Linuxでビルドする必要があるいくつかのバイナリを含むWindowsインストーラーで構成されています。 ここに私がこれまで持っているものがあります: Windowsの部分とLinuxの部分は、別々のJenkinsプロジェクトとしてセットアップされます。 Windowsプロジェクトはパラメーター化されており、Subversionタグを使用してビルドおよびリリースされます。 ビルドの一部として、Windowsプロジェクトは(パラメーター化トリガープラグインを使用して)Linuxプロジェクトの同じSubversionタグのビルドをトリガーし、次に(アーティファクトのコピープラグインを使用して)LinuxプロジェクトからWindowsプロジェクトのワークスペースにアーティファクトをコピーします。 Windowsインストーラーに含めることができます。 行き詰まっているところ:現在、アーティファクトのコピーは、最後に成功したビルドをコピーするように設定されています。パラメーター化されたトリガーがトリガーした正確なビルドからコピーするようにアーティファクトのコピーを構成する方がより堅牢に見えますが、それを機能させる方法を理解するのに苦労しています。これを助けることを意図した「ビルドセレクター」パラメーターのオプションがありますが、それがどのように設定されることになっているのか理解できません(そして、ビルドに1時間かかると、さまざまな可能性を盲目的に試すのはやや苦痛です。成功または失敗を見つけるために1つまたは2つ)。 これはどのように設定すればよいですか?ビルドセレクターはどのように機能しますか?

4
プロボノ作業のNDAへの署名を(合理的に)拒否できますか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 7年前休業。 私の友人(彼をJoeと呼ぶことにします)は有望なプロジェクトに取り組んでおり、私に助けを求めてきました。友情の問題として、私は(口頭で)詳細について話し合わないことに同意しましたが、現在彼には、秘密保持契約(NDA)への署名を求めている潜在的な投資家がいます。これまでのところ、私の仕事はすべて無料であると私はジョーに言いました。(厳密に金銭的である必要はありません。私は、わずかな所有権を受け入れるか、コードやドキュメントでクレジットを保証することさえできます。) 私のリクエストは妥当ですか、それとも不必要な複雑さを導入しているだけですか?

5
フォークされたGPLコードを販売できますか?
GPLコードを販売できることは知っていますが、フォークされて変更されたGPLコードを販売できるかどうかを知りたいと思っていました。分岐および変更されたコードは、引き続き使用、変更、および再配布できます。
9 licensing  gpl 

5
オブザーバーパターンに対するデリゲートパターンの利点は何ですか?
でデリゲートパターン、1つのオブジェクトのみが直接、別のオブジェクトのイベントに耳を傾けることができます。でオブザーバーパターン、オブジェクトの任意の数は、特定のオブジェクトのイベントに耳を傾けることができます。他のオブジェクトにイベントを通知する必要があるクラスを設計するときに、オブザーバーパターンよりもデリゲートパターンを使用するのはなぜですか?オブザーバーパターンはより柔軟であると思います。現在、オブザーバーは1人しかいませんが、将来の設計では複数のオブザーバーが必要になる場合があります。

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