ソフトウェア工学

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

8
歴史に基づいて公正なチームを分割するための戦略/アルゴリズム
私たちは定期的にフロアボールをしている人々のグループです。すべてのセッションは、チームを分割するという困難なタスクから始まります... では、チームを自動的に選択するアプリケーションよりも優れているのは何でしょうか? したがって、チームの組み合わせと結果の履歴、およびこの特定のセッションに参加する人々のリストを考えると、最適なチームを見つけるための良い戦略は何でしょうか?最適とは、チームが可能な限り平等であることを意味します。 何か案は? 編集:明確にするために、ピッキングの基礎となるデータは次のようになります。 [{ team1: ["playerA", "playerB", "playerC"], team2: ["playerD", "playerE", "playerF"], goals_team1: 10, goals_team2: 8 }, { team1: ["playerD", "playerB", "playerC"], team2: ["playerA", "playerE", "playerG"], goals_team1: 2, goals_team2: 5 }, { team1: ["playerD", "playerB", "playerF"], team2: ["playerA", "playerE", "playerC"], goals_team1: 4, goals_team2: 2 }]

6
5のルール-それを使用するかどうか?
3 のルール(新しいc ++標準の5のルール)の状態: デストラクタ、コピーコンストラクタ、またはコピー割り当て演算子のいずれかを明示的に宣言する必要がある場合は、おそらく3つすべてを明示的に宣言する必要があります。 しかし、一方で、マーティンの「クリーンコード」は、すべての空のコンストラクターとデストラクターを削除することを推奨しています(293ページ、G12:Clutter)。 実装されていないデフォルトのコンストラクタはどのような用途に使用されますか?役目を果たすのは、意味のないアーティファクトでコードを混乱させることです。 だから、これらの2つの反対意見をどのように扱うのですか?空のコンストラクタ/デストラクタを実際に実装する必要がありますか? 次の例は、まさに私が意味することを示しています。 #include <iostream> #include <memory> struct A { A( const int value ) : v( new int( value ) ) {} ~A(){} A( const A & other ) : v( new int( *other.v ) ) {} A& operator=( const A & other ) …

6
特にループで、新しいC ++ 11の「自動」機能を使用する必要がありますか?
auto特にforループでキーワードを使用することの長所と短所は何ですか? for(std::vector<T>::iterator it = x.begin(); it != x.end(); it++ ) { it->something(); } for(std::map<T>::iterator it = x.begin(); it != x.end(); it++ ) { it->second->something(); } for(auto it = x.begin(); it != x.end(); it++ ) { it->?? } マップのイテレータがあるのか、オブジェクトのプロパティを使用するのfirstか、secondまたは単にプロパティに直接アクセスするのかがわからない場合に、イテレータがあるかどうかがわからないようです。 これは、キーワードを使用するかどうかに関するC#の議論を思い出させますvar。私がこれまでに得ている印象は、C ++の世界autoでvarは、C#の世界よりも少ない戦いで人々がキーワードを採用する準備ができているということです。私にとって最初の本能は、変数の型を知りたいので、その変数に対して実行できる操作を知ることができるということです。
20 c++  c++11 


7
「言語に安全な」UUIDを生成する方法は?
リソースのIDには常にランダムに生成された文字列を使用したかったため、次のような短いURLを使用できました。/ user / 4jz0k1 しかし、実際には、/ user / f * ckerなどの実際の単語を作成するランダムな文字列の生成が心配だったため、私は決してしませんでした。これには2つの問題があります。それはユーザーを混乱させたり、不快感を与えたり、SEOを混乱させる可能性があります。 その後、2文字ごとに数字を追加するような固定パターンを設定するだけでいいと思いました。「generate_safe_uuid」メソッドには非常に満足していましたが、実際に生成される単語の割合が増加したため、SEOのみに優れ、ユーザーにはさらに悪いことに気付きました。例:/ user / g4yd1ck5 今、メソッド 'replace_numbers_with_letters'を作成し、それが辞書などに対して単語を形成していないことを確認できると考えています。 他のアイデアはありますか? 追伸 これを書いているとき、複数の言語(英語、フランス語、スペイン語など)で単語をチェックするのは面倒であり、数字のみのIDが再び好きになり始めていることにも気付きました。 更新 誰もが読むべきいくつかのリンク: http://thedailywtf.com/Articles/The-Automated-Curse-Generator.aspx http://blogs.msdn.com/b/oldnewthing/archive/2008/06/27/8659071.aspx
20 random  uuid 

19
Lispのような構文拡張メカニズムを備えたプログラミング言語[非公開]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 Lispの知識は限られています(暇なときに少し学ぼうとしています)が、Lispマクロを理解する限り、Lisp自体で記述することで、新しい言語構造と構文を導入できます。これは、Lispコンパイラ/インタプリタを変更せずに、新しい構成をライブラリとして追加できることを意味します。 このアプローチは、他のプログラミング言語のアプローチとは大きく異なります。たとえば、Pascalを新しい種類のループまたは特定のイディオムで拡張する場合、言語の構文とセマンティクスを拡張してから、コンパイラにその新しい機能を実装する必要があります。 Lispファミリー以外のプログラミング言語(Common Lisp、Scheme、Clojure(?)、Racket(?)など)以外に、言語内で言語を拡張する同様の可能性を提供するプログラミング言語はありますか? 編集 長時間の議論を避け、答えを具体的にしてください。何らかの方法で拡張できるプログラミング言語の長いリストの代わりに、概念的な観点から、拡張メカニズムとしてのLispマクロに固有のものと、どの非Lispプログラミング言語がいくつかの概念を提供するかを理解したいそれは彼らに近いです。

4
誰がインターフェースを拡張しますか?なぜ?
知る限り、私のクラスのextends親クラスとimplementsインターフェース。しかし、私はを使用できない状況に出くわしますimplements SomeInterface。これは、ジェネリック型の宣言です。例えば: public interface CallsForGrow {...} public class GrowingArrayList <T implements CallsForGrow> // BAD, won't work! extends ArrayList<T> ここでの使用implementsは構文的に禁止されています。最初に、<>内でインターフェイスを使用することはまったく禁止されていると考えましたが、そうではありません。可能ですが、extends代わりに使用するだけ ですimplements。その結果、インターフェイスを「拡張」しています。この別の例は動作します: public interface CallsForGrow {...} public class GrowingArrayList <T extends CallsForGrow> // this works! extends ArrayList<T> 私にはそれは構文上の矛盾と思われます。しかし、Java 6の細かい部分を理解していないのかもしれません。インターフェイスを拡張する必要がある他の場所はありますか?私が拡張するつもりのインターフェースには、いくつかの特別な機能が必要ですか?

7
継続的インテグレーション:どの周波数ですか?
私は常に各コミットの後にビルドを開始しましたが、この新しいプロジェクトでは、アーキテクトは「15分ごとに1つのビルド」に頻度を変更するように頼みました。コミットごとに構築する」。 まず、いくつかの詳細: Objective-C(iOS 5)プロジェクト 10人の開発者 各ビルドには実際に約1分かかり、ビルドと単体テストが含まれます。 統合サーバーはMac Miniであるため、ここでは計算能力は実際には問題になりません。 JenkinsとXCodeプラグインを使用します 私の主張は、コミットするたびにビルドすれば、他の開発者を頻繁に煩わせることなく、今何が間違っているかをすぐに確認し、エラーを直接修正できるということです。さらに、この方法でテスターはUTエラーに悩まされることが少なくなります。彼の主張は、開発者は「ビルドエラー」メール(最初の壊れたビルドのみにメールを送信するように構成できるため、完全に真実ではない)であふれ、頻度が適切な場合にメトリックを実行できないというものでしたビルドの数が多すぎます。 だから、これについてあなたの意見は何ですか?

8
クライアント側またはサーバー側の処理を重視する間の長所/短所
多くの処理サーバー側でWebアプリを作成するのはなぜですか? 私にとって、クライアント側でプログラムを作成することは、最小限の処理でクライアントにデータを送信するだけでよいため、サーバーの負荷を可能な限り軽減できるため、大きな利点です。 サーバー側で記述し、クライアント側をビューとしてのみ扱う以外に、web-appsの記述はほとんどありません。なぜこれをしたいのですか?私が見る唯一の利点は、私が好きな言語で書くことができることです(http://www.paulgraham.com/avg.html)。

3
Unixソケットの簡単な説明
私は検索することができ、ウィキペディアのエントリや他の場所をすでに見てきましたが、プログラミングの経験はありますが、概念を実際には把握していません。私を10歳のように扱い、ソケット通信について明確な説明をお願いできますか?
20 unix  sockets 

7
純粋なJavaで書かれたJava IDE?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 6年前に閉鎖されました。 Javaで書かれたJava IDEはありますか? 今日、学校で9年生のDETラップトップを手に入れたばかりで、あらゆる種類の制限が設定されています。やや面倒なことに、システムに既にインストールされている実行可能ファイル以外の実行可能ファイルは実行できません(何らかの理由で、コマンドプロンプト、PowerShell、または奇妙なことにregedit の使用を無効にしていません)。Javaの実行可能ファイルを実行できるので、学校で私のくだらないラップトップでプログラムできるようにするための唯一の方法だと思いました(すべての作業を自然に終えたとき):D 編集: Javaで記述されているということは、プログラムの実行に使用される実行可能ファイルのファイル拡張子が「.jar」であるため、JVMで実行されることも意味します。 編集2: DrJava IDE を試してみましたが、うまくいきました、ありがとう(プログラムをコンパイルして実行できます)!コマンド「java -jar "C:/ Users ... / org.eclipse ..."」を使用してコマンドラインからEclipseを実行することについて。これにより、ファイルを言うログを生成するエラーが発生します。主なエラーは次のとおりです。 メッセージバンドルorg.eclipse.ui.workbenchを自動的にアクティブ化しているときにエラーが発生しました(182)。 このエラーを修正するにはどうすればよいですか(他のIDEよりもEclipseで作業するほうがはるかに適切です)。 編集3: 私の最後の編集に関しては、無視してください:D。Eclipseの最新バージョンをダウンロードして問題を修正しました。

3
効率的なグラフクラスタリングアルゴリズム
大きなグラフ(約5000の頂点と10000のエッジを持つ)でクラスターを見つけるための効率的なアルゴリズムを探しています。 これまでは、JUNG javaライブラリに実装されたGirvan–Newmanアルゴリズムを使用していますが、多くのエッジを削除しようとすると非常に遅くなります。 大きなグラフのより良い代替案を提案してもらえますか?

3
ユニットテストで同等の二重値を適切に比較するにはどうすればよいですか?
私は最近、時系列が本質的にある時系列モジュールを設計しましたSortedDictionnary<DateTime, double>。 次に、このモジュールが常に機能し、期待どおりの結果が得られることを確認するための単体テストを作成します。 一般的な操作は、時系列のポイント間のパフォーマンスを計算することです。 したがって、私が行うことは、たとえば{1.0、2.0、4.0}(いくつかの日付)で時系列を作成することであり、結果は{100%、100%}になると予想しています。 問題は、値{1.0、1.0}を使用して時系列を手動で作成し、(各ポイントを比較することにより)等しいかどうかを確認すると、実数のバイナリ表現で作業するときは常に不正確になるため、テストは合格しません数字。 したがって、次の関数を作成することにしました。 private static bool isCloseEnough(double expected, double actual, double tolerance=0.002) { return squaredDifference(expected, actual) < Math.Pow(tolerance,2); } そのような場合に対処する別の一般的な方法はありますか?

3
PHP Webアプリケーションのアーキテクチャ/設計[終了]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 PHPでWebアプリケーションを開発する新しい仕事に真っ先に投げ込まれました。私は決してPHPの初心者ではありませんが、以前に大規模なアプリケーションを開発したことはありません。将来の問題に備えて自分自身をセットアップすることを避けるために、開発をどのように構成するのか疑問に思っています。機能とパフォーマンスの観点から時間をかけてスケーリングできるように、アプリケーションを適切な方法で設計および設計するにはどうすればよいですか。私は次のようなことを考えています: バックエンドとフロントエンドの分離 ディレクトリ構造 持続可能な方法で大規模なPHP Webアプリケーション開発にアプローチできるようにする、アーキテクチャおよびアプリケーションの設計パターン、フレームワーク、およびメソッドへのポインターをいただければ幸いです。

11
プロジェクトを計画して開始するにはどうすればよいですか?
この質問はして移行され、それがソフトウェア工学スタック所に答えることができるので、スタックオーバーフローから。 7年前に移行され ました。 プロジェクトを開始するたびに、重要な瞬間にコアクラスを完全に変更し、あいまいなエラーに巻き込まれることにします。高度な計画を立てて、通常は良い足でスタートしますが、別の日に行き、「別の方法」でそれをやりたいと思います。 クラスのマッピングや単体テストの開始などのプロジェクトを開始するときに、標準のようなものはありますか?中規模プロジェクトを計画および開始するときの良い慣習は何ですか。 最後のプロジェクトと開始されたのは、発射体の動きのシミュレーターでした。

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