ソフトウェア工学

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

3
カレー機能と可変機能を同時に使用することはできますか?
動的に型付けされた関数型プログラミング言語でカリー化関数と可変関数の両方を使用可能にすることを考えていますが、可能かどうかは疑問です。 擬似コードは次のとおりです。 sum = if @args.empty then 0 else @args.head + sum @args.tail これはすべての引数を合計することになっています。次に、それsum自体が数値として扱われる場合、結果はになり0ます。例えば、 sum + 1 +数値でのみ機能すると仮定して、1に等しくなります。ただし、sum == 0true であっても、sum引数がいくつ与えられても(したがって、「部分的に適用」と「可変」が同時に)、たとえば g = sum 1 2 3 その後gに等しく6、しかし、我々はまだ、さらに適用することができますg。たとえば、g 4 5 == 15trueです。この場合、オブジェクトgをリテラル6で置き換えることはできません。整数として扱われた場合は同じ値を生成しますが、内部には異なるコードが含まれているためです。 この設計を実際のプログラミング言語で使用すると、混乱やあいまいさが生じますか?

2
16オクテオンを超えるNPathの複雑さは現実的ですか?または、ツールを壊しましたか?
PHPMD(http://phpmd.org/)を使用してPHPコードの大部分(1153行)を測定したところ、コードのNPathの複雑さは16244818757303403077832757824であることがわかりました。 それは私にとってクレイジーに大きな数字のように見え、おそらくPHPMDが何らかの形で壊れていることを示唆しています。人間によって書かれたコードの一部がこのような高いNPath複雑さを持つことさえ可能ですか?循環的複雑度は351です。 おそらく重要な2つの詳細- これはHTMLと混合した手続き型コードであり、PHPMDはオブジェクト指向コードのみを測定します。これを回避するために、単一の関数を使用してファイル全体をクラスにラップしました。これは、ファイルの使用方法を表しています。 このファイルは一連のネストされたswitchステートメントで構成されており、その中には多数のif..elseステートメントがあります。したがって、確かにかなり複雑です。 編集 PHPMDが私に嘘をついているかどうかを疑っていないことを明確にしたい。私は、コードがひどい混乱であることを知っています、私はただ、どんなコードでも本当にそんなに悪いことが可能かどうか疑問に思います。答えはイエスのようです、それは非常に可能です。
13 php  code-quality 

4
1文字の変数の使用が推奨されていますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 Javaでは1文字の変数の使用が推奨されていますか?コードスニペットまたはチュートリアルでは、よく見かけます。コードを読むのが比較的難しくなり、他のプログラミング言語で使用されているのを見たことがないので、それらの使用が推奨されるとは想像できません!

3
GPLは二次的著作物に暗示されますか?
A、B、Cの3つのソフトウェアプロジェクトがあります。 Aは誰にでも公開され、GPLの下でライセンスされています。 BはAを拡張し、公開されていますが、ライセンス情報がないか、LGPLの下で誤ってライセンスされています。基本的に、GPLではないため、Aのライセンスに違反します。Bのソースコードは引き続き利用可能です。 CはBを拡張します。CはGPLで公開できますか?動機は「AはGPLであり、派生物もGPLでなければならないため、BはGPLであり、CもGPLになり得る」です。

2
Antコロニーアルゴリズム
私はコースプロジェクトのためにアリコロニーシミュレーターに取り組んでいる学生です。そのアルゴリズムは(明らかに)蟻コロニーアルゴリズムです。アルゴリズムにはさまざまな形式がありますが、それらはすべて数学的に詳細すぎるため、次のようなアプローチを採用しました。 アリはコロニーで生まれ、コロニーを維持するために源から食物を集めなければなりません。 すべてのアリは似ています。 アリが移動する領域は1000x1000グリッドであるため、すべてのグリッドポイントはアリが占有する有効なポイントとして機能します。今、私が遭遇したすべてのアルゴリズムは、頂点とエッジを別々に処理することを伴いますが、アリの動きを4方向(上下左右)に制限しているので、フェロモンをどこに置くかは関係ないと思います。 上記のグリッドポイントはフェロモンを保存します。 アリは、食物を運んでいる場合にのみフェロモンを落とします。 位置(i、j)のアリの場合、4つの隣接ノードのフェロモン量を単純な確率式で考慮することにより、次のステップでどこに移動するかを決定します。つまり、ノードに移動する確率は(特定の隣接ノードのフェロモン量)/(4つの隣接ノードのフェロモン量の合計)。 アリは、元の位置に戻ることはできません。それができるのは、食物がある場所にいるか、そのコロニーにいる場合だけです。 今、私の懸念は(そしてプログラムで実際に何が起こっているのか)アリFIRSTが食物のある位置に到達し、それを拾うと、アルゴリズムが機能する方法で、どこにでも移動できることです!これは、フェロモントレイルを離れるのは、餌を食べる前ではなく、最初のアリであるため、既存のトレイルがないためです。 アリがどこにでも移動できる場合、食物源に到達したアリは、ほとんどそれに従う傾向があります。コロニーに向かって戻っていない場合でも。これは、アルゴリズム全体の目的に反します。 だから私の質問は 上記の懸念は有効ですか?いいえの場合、なぜですか?はいの場合、どのように対処しますか? 実際に機能させるために、アルゴリズムの基本的な理解を変更する必要がありますか? 私のような初心者がこの場合見逃すかもしれない他の微妙でありながら重要なことは何ですか?

3
企業の内部で使用するのはどのような種類のオープンソースライセンスですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 最近、Microsoft Visual Studio用のいくつかのクールなオープンソースアドオンツールとライブラリについて学びました。ツールは、生産性の向上に役立ちます。ライブラリは企業コードベースにリンクされます。 これらのすべてのクールなツールとライブラリをスプレッドシートにリストしました。それぞれが所有するライセンスの種類を実行します。これまでのところ、私のクールなライブラリの中には、MIT、BSD、Apache License Version 2.0があります。ただし、今後さらに増える可能性があります。 社内での使用と互換性のない(社外に配布しない)人気のあるライセンスをどのように見つけることができますか(または、さらに良いのですが、リストに載せますか)。そして、追加の感謝を述べて、あなたは説明を言ったり指摘したりすることができます。私は弁護士ではないので、これらのライセンスの細かい活字を読むと頭痛がします。 許可されたライセンスを使用しても問題ない理由を説明できるようにしたいと思います。

1
なぜより高い種類が必要なのですか?
いくつかの言語は、(例えば、型パラメータを持つクラスおよび機能を可能にするList<T>場合T、任意のタイプであってもよいです)。たとえば、次のような関数を使用できます。 List<S> Function<S, T>(List<T> list) ただし、一部の言語では、この概念を1レベル上に拡張して、署名付きの機能を使用できます。 K<S> Function<K<_>, S, T>(K<T> arg) K<_>それ自体がそのような型である場合List<_>、型パラメーターがあります。この「部分型」は、型コンストラクターとして知られています。 私の質問は、なぜこの能力が必要なのですか?List<T>すべてList<T>がほぼ同じであるが、すべてK<_>が完全に異なる可能性があるため、次のような型を持つことは理にかなっています。共通の機能をまったく持たないOption<_>とを持つことができますList<_>。

5
あるテストを別のテストの結果に依存させる方法は?
他の多くのクラスがコードのあらゆる場所で使用する一般的な静的メソッドを提供するユーティリティクラスがあるとします。 ユーティリティテストのいずれかが合格しなかった場合にテストが失敗するように、ユーティリティのコンシューマ向けのユニットテストをどのように設計しますか?あなたはそれを行うことができますか、ユーティリティクラスのテストがすべてグリーンであるかどうかを自分で確認する必要がありますか? たとえば、メッセージパーサーによって使用される(またはその出力)メッセージスプリッターユーティリティがあります。メッセージパーサーがテストされる前に、メッセージスプリッターが正しく動作することを確認したいと思います。 両方のテストを作成しましたが、それらをリンクし、1つのテストを他のテストの結果に依存させる方法はありますか? これに適したタグが見つかりませんでしたが、Visual Studioの単体テストエンジンを使用しています。

3
mysqlではなくmongodbなどのnosqlデータベースを使用する場合
私はnosqlデータベースの概念は初めてであり、使用したことはありません。私が読んだことや理解したことを基にすると、外部キーの概念がない場合、データ間で参照を作成できない場合に、それらが特に役立つ方法はまだわかりません。 たとえば、「このユーザーが投稿したすべてのコメントを検索する」、「アルバムエンティティに属するすべての写真を検索する」などの簡単なクエリを実行するにはどうすればよいでしょうか。 nosqlシステムは静的リレーショナルデータモデルから離れますが、そのような参照を追跡できますか?クエリで利用できる外部キーに類似したものはありますか?
13 mysql  nosql 

3
どうすれば引数の数を低く保ちながら、サードパーティの依存関係を分離したままにできますか?
サードパーティのライブラリを使用しています。彼らは私たちの意図と目的のために、おそらく次のように実装されたPOJOを渡します: public class OurData { private String foo; private String bar; private String baz; private String quux; // A lot more than this // IMPORTANT: NOTE THAT THIS IS A PACKAGE PRIVATE CONSTRUCTOR OurData(/* I don't know what they do */) { // some stuff } public String getFoo() { …

3
標準型とユーザー定義型を構文的に区別する意味は何ですか?
ここでは特にC ++とBjarne Stroustrupの命名規則に言及しますが、原則として、人々はあちこちで他の言語にも多少似たルールを使用しているのを見てきました。 そのため、基本的な考え方は、コードを読み取りながら標準タイプとユーザー定義タイプを区別できるようにすることです。たとえば、Bjarne Stroustrupは、 タイプの最初の大文字(例:SquareおよびGraph) それを考慮して C ++言語と標準ライブラリは大文字を使用しません 上記の目標を達成できます。 しかし、なぜそうする必要があるのでしょうか?標準型とユーザー定義型を区別する目的は何ですか? 私はそのことに関するBjarne Stroustrupの推論を見つけることができませんでした。さらに、私自身は正反対に考えています。:DI知っています、「Stroustrupに異議を唱えるのは誰ですか?」しかし、listen、たとえば演算子のオーバーロードなどのC ++言語機能の束は、ユーザー定義型に標準型と同様のレベルの構文サポートを許可する目的に役立ちます。そして、これはすべて異なる命名規則に困惑しています... PS言うまでもなく、1つの単語でクラスに名前を付けるのに十分ではなく、アンダースコアで区切られた大文字で始まる単語はあまりにも異質に見えます。

2
ペイロードにリソースIDを含めるか、URIから派生するには
APIを設計する際に、PUTペイロードに更新対象のリソースのIDを含める必要があるかどうかという疑問に思いつきました。 これは私たちが現在持っているものです: PUT /users/123 Payload: {name: "Adrian"} ルートコードはURIからIDを抽出し、更新を続行します。 APIの最初のユーザーは、ペイロードにIDを許可しない理由を疑問視しています。 PUT /users/123 Payload: {id: 123, name: "Adrian"} 許可しなかった理由は、ペイロードとURIでIDが重複しているためです。 これについてもう少し考えて、リソースをURIに結合しています。 URIにIDがない場合、ペイロードを修正する必要があります。 PUT /no/id/here Payload: {name: "Adrian"} < What user??? しない理由はありますか?
13 rest  resources 

4
この方法でこのコードを書いているのはテスト可能ですが、見落としているコードに何か問題がありますか?
というインターフェイスがありますIContext。この目的のために、以下を除いて、実際に何をするかは重要ではありません。 T GetService<T>(); このメソッドが行うことは、アプリケーションの現在のDIコンテナを調べ、依存関係を解決しようとすることです。かなり標準だと思います。 ASP.NET MVCアプリケーションでは、コンストラクターは次のようになります。 protected MyControllerBase(IContext ctx) { TheContext = ctx; SomeService = ctx.GetService<ISomeService>(); AnotherService = ctx.GetService<IAnotherService>(); } そのため、各サービスのコンストラクターに複数のパラメーターを追加するのではなく(アプリケーションを拡張する開発者にとってこれは非常に面倒で時間がかかるため)、このメソッドを使用してサービスを取得しています。 今、それは間違っていると感じています。しかし、私が現在頭の中でそれを正当化している方法はこれです- 私はそれをあざけることができます。 できます。IContextControllerをテストするためにモックアップすることは難しくありません。とにかくする必要があります: public class MyMockContext : IContext { public T GetService<T>() { if (typeof(T) == typeof(ISomeService)) { // return another mock, or concrete etc etc } // etc …

7
コレクションにアイテムを追加する、より「自然な」方法のパターンはありますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 コレクションに何かを追加する最も一般的な方法はAdd、コレクションが提供する何らかの方法を使用することだと思います。 class Item {} var items = new List<Item>(); items.Add(new Item()); そして、それについて実際に異常なことは何もありません。 しかし、なぜこのようにしないのでしょうか。 var item = new Item(); item.AddTo(items); 最初の方法よりも自然な方法のようです。これには、Itemクラスに次のようなプロパティがあるときにandvantange がありますParent。 class Item { public object Parent { get; private set; } } セッターをプライベートにすることができます。もちろんこの場合、拡張メソッドを使用することはできません。 しかし、おそらく私は間違っており、このパターンはあまり見られないので、これまで見たことがないでしょうか?そのようなパターンがあるかどうか知っていますか? でC#拡張メソッドは、そのために有用であろう public static T AddTo(this T item, IList<T> list) { list.Add(item); return …

2
フィギュアの回転を効率的に計算する方法は?
バイトの行列(ビットマップのような行列)で表されるFigureがあります。例の図はに示されていPicture 1ます。 目標は、特定の図の最適な回転角度を見つけることです。Figureが最適な角度だけ回転すると、X軸とY軸に平行でFigureに内接する長方形の面積が最小になります。 図に内接する長方形は、写真上で薄い灰色で示されています。ではPicture 2、あなたは図の理想的な回転が時計回りに約30度であることがわかります。 今、私はこの角度を見つける方法をアルゴリズムを知っていますが、それは非常に効率が悪いようです。こんなふうになります: 0から45までの角度でループします。 現在の角度について、すべての図形ポイントについて、新しい、回転した、位置を計算します 数字(最小および最大x、y)を含む長方形の境界を見つけ、これまでで最良の一致である場合は登録します 次の角度 これは一種のブルートフォース方式であり、小さな人物に対してはうまく機能し、適度に高速です。ただし、最大1,000万ポイントを含む数値を使用する必要があり、アルゴリズムが遅くなります。 この問題に適したアルゴリズムは何でしょうか?

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