ソフトウェア工学

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

3
XAMLマークアップの推奨されるコントロールの命名規則は何ですか?
WPFまたはSilverlightを使用する場合、コントロールの命名規則をどのように使用すればよいですか?XAMLマークアップでコントロールに名前を付けますか?"selectButton"や "btnSelect"などのコントロール名を持つcodeplexでのプロジェクトのサンプルを見てきました。あなたは何をお勧めします?
10 wpf  silverlight 

6
それはいつやり過ぎになるのですか?
まず、コミュニティスレッドの作成方法がわからないことをお詫びします。誰かが私を助けてください。 開発者として、多くのプラットフォーム、テクノロジー、さらにはインフラストラクチャレベルで。私はいつも自分が質問しているのを見つけます。 私が始めて以来、それは終わりのない学習プロセスでした。私が学んだことの1つは、要件が長期間有効であることがほとんどないということです。そのため、少しの見通しは長い道のりになるかもしれません。 しかし、バランスはどこにありますか、そしてそれを得るのではなく、あなたが時間を失っているときをどうやって知るのですか?

5
PHP、HTML、JavaScript、および優れた実践方法の記述
私と私のチームのために、HTML、JavaScript、およびPHPコーディングに関する規約の仕様を書き留める必要があることに気付きました。 Web開発では、C ++と同じように、私はインデントとコメントのファンです。 それにもかかわらず、私の仕事でHTML + JavaScript + PHPコードに遭遇することが多く、突然頭痛の種になります。 私はコードを読みやすくしようとしていますが、インデントとコメントのために私にとってより良いように見えるものは私のチームメイトを魅了しないようですので、「ハイブリッド"今日のWebページと同じように、日々複雑になるドキュメント。 おそらく今日のWebページのコードの性質が少し複雑であることに気づいていますが、これらの側面に関する良い慣習がすでに存在しているかどうかは疑問です。

2
LGPLがGPLのコピーを含めるために組み合わせ作品を必要とするのはなぜですか?
私はLGPLライセンスを読んでいて、以前は知らなかった要件を見つけました。 セクション4(Combined Works)は次のように述べています。 次のことも行う場合は、結合作業を伝えることができます。 a)ライブラリがその中で使用されていること、およびライブラリとその使用がこのライセンスの対象であることを、結合作品の各コピーに目立つように通知します。 b)結合された著作物に、GNU GPLとこのライセンスドキュメントのコピーを添付します。 c)... LGPLの下でライセンスされたライブラリにリンクするときに、なぜGPLも伝える必要があるのですか?ディストリビューションに両方のライセンスを含めると、どちらを適用するかについてユーザーが混乱するのではないかと心配しています。私はこれを正しく解釈していますか?もしそうなら、この要件の背後にある理由は何ですか?

4
アジャイルでのセマンティックバージョニング
14日間のスプリントの反復があり、新機能、いくつかの改善点、および修正すべきバグのストーリーがいくつかあるとします。また、準備が整ったときにこれらの変更をデプロイします。スプリントの終了を待ちません。 私の問題は、このように開発および保守された製品のセマンティックバージョニングを追跡する方法ですか?14日ごとにリリースされる場合は簡単ですが、バージョン番号を増やし、すべての変更を変更ログに記録します。しかし、変更が継続的にデプロイされるとどうなるでしょうか。何かがデプロイされるたびにバージョンを上げる必要がありますか?または、スプリントが終了するまで待ってから、「再開」して、実際の展開で独立して反復ごとに1回だけバージョン番号を増やす必要がありますか?アジャイルのセマンティックバージョニングのベストプラクティスは何ですか? 編集:私のニーズをよりよく説明するために、私は最初に利害関係者の変更ログを求めています。変更がデプロイされるたびに、変更ログの新しいレコードに関心を持つことはないと思います。

1
Guiceの@ImplementedByアノテーションの背後にある動機は何ですか?
最近@ImplementedBy、Google Guiceで利用できるアノテーションについて読みました。プログラマーは、依存関係注入で将来使用するために、インターフェースとその実装の間のバインディングを指定できます。これは、ジャストインタイムバインディングの例です。 次の構文を使用して、モジュールで明示的なバインディングを定義することに慣れています。 bind(SomeInterface.class).to(SomeInterfaceImplementation.class); ドキュメントによると、これは次の@ImplementedByアノテーションの使用と同等です。 @ImplementedBy(SomeInterfaceImplementation.class) public interface SomeInterface { //method declarations } ここでわかる唯一の利点は、コードがわずかに短いことです。同時に、このアプローチには、同じドキュメントで正しく指摘されている欠点があります。 @ImplementedBy慎重に使用してください。インターフェイスからその実装にコンパイル時の依存関係を追加します。 そのような依存関係は多くの場合問題にはならないかもしれませんが、私は個人的にそれをコードのにおいとして見ています。 @ImplementedByアノテーションを使用する価値のあるユースケースは何ですか? 1つの可能な方法は、ライブラリまたはフレームワークのコードで使用することです。ドキュメントで説明されているように、アノテーションは明示的なバインディングによって簡単にオーバーライドされるデフォルトのバインディングを提供できます。 タイプがbind()(最初の引数として)ステートメント内にあり、@ImplementedBy注釈がある場合、そのbind()ステートメントが使用されます。このアノテーションは、バインディングでオーバーライドできるデフォルトの実装を提案しています。 このようにして、ライブラリの開発者として、クライアントコードのどこかでカスタマイズできるすぐに使えるバインディングをユーザーに提供できます。 これが注釈が存在する唯一の理由ですか?それとも私が見逃しているものはありますか?ライブラリ/フレームワークを拡張するのではなく、いくつかのビジネスロジックを処理するアプリケーションだけのコードでそれを使用することで何かを得ることはできますか?

4
クラスの複雑さを軽減する
私はいくつかの回答を見て、Googleで検索しましたが、役立つ情報は見つかりませんでした(つまり、厄介な副作用はありません)。 私の問題は、要約すると、オブジェクトがあり、それに対して長い一連の操作を実行する必要があることです。自動車をつくるような組み立てラインのようなものだと思います。 これらのオブジェクトはメソッドオブジェクトと呼ばれると思います。 したがって、この例では、ある時点でCarWithoutUpholsteryがあり、その上でinstallBackSeat、installFrontSeat、installWoodenInsertsを実行する必要があります(操作は相互に干渉せず、並列で実行されることもあります)。これらの操作はCarWithoutUpholstery.worker()によって実行され、CarWithUpholsteryとなる新しいオブジェクトを生成します。このオブジェクト上で、おそらくcleanInsides()、verifyNoUpholsteryDefects()などを実行します。 単一フェーズでの操作は既に独立しています。つまり、私はすでに、それらのサブセットを任意の順序で実行できるように取り組んでいます(前部座席と後部座席は任意の順序でインストールできます)。 私のロジックは現在、実装を簡単にするためにリフレクションを使用しています。 つまり、CarWithoutUpholsteryを取得すると、オブジェクトは、performSomething()と呼ばれるメソッドについてそれ自体を検査します。その時点で、これらのメソッドをすべて実行します。 myObject.perform001SomeOperation(); myObject.perform002SomeOtherOperation(); ... エラーやものをチェックしながら。操作の順序は重要ではありませんが、結局、何らかの順序が重要であることがわかった場合に備えて、辞書式順序を割り当てました。これはYAGNIと矛盾しますが、コストはごくわずか(単純なsort())で、大規模なメソッドの名前変更(またはメソッドの配列など、テストを実行する他のメソッドを導入すること)を節約できます。 別の例 車を製造する代わりに、誰かに関する秘密警察の報告書を編集し、それを私の悪の支配者に提出しなければならないとしましょう。最後のオブジェクトはReadyReportです。それを構築するために、基本的な情報(名前、姓、配偶者...)を収集することから始めます。これは私のフェーズAです。配偶者の有無に応じて、フェーズB1またはB2に進み、1人または2人の性別データを収集する必要があります。これは、ナイトライフ、ストリートカム、セックスショップの売上レシートなどを制御するさまざまなEvil Minionsに対するいくつかの異なるクエリで構成されています。などなど。 被害者が家族を持たない場合、私はGetInformationAboutFamilyフェーズに入ることさえしませんが、そうする場合、私が最初に父親、母親、または兄弟(もしあれば)をターゲットにするかどうかは関係ありません。しかし、FamilyStatusCheckを実行していない場合はそれを行うことができません。したがって、これは以前のフェーズに属します。 すべてうまくいきます... 追加の操作が必要な場合は、プライベートメソッドを追加するだけです。 操作がいくつかのフェーズに共通している場合、スーパークラスから継承させることができます。 操作はシンプルで自己完結型です。ある操作の値が他の操作で必要になることはありません(実行する操作は別のフェーズで実行されます)。 作成者オブジェクトがそもそもこれらの条件を検証していなかった場合、それらは存在することさえできなかったため、将来のオブジェクトは多くのテストを実行する必要はありません。つまり、ダッシュボードにインサートを配置し、ダッシュボードをクリーニングし、ダッシュボードを確認するときに、ダッシュボードが実際にそこにあることを確認する必要はありません。 簡単にテストできます。私は簡単に部分オブジェクトをモックして、その上で任意のメソッドを実行でき、すべての操作は確定的なブラックボックスです。 ...だが... 問題は、メソッドオブジェクトの1 つに最後の操作を1つ追加したときに発生しました。これにより、モジュール全体が必須の複雑度インデックス(「N未満のプライベートメソッド」)を超えました。 私はすでにこの問題を2階で取り上げており、この場合、豊富なプライベートメソッドは災害の兆候ではないことを示唆しています。複雑さはあるが、しかし操作はので、それがありますされ、複雑な、そして実際に、それはすべてが複雑ではない-それだけだ長いです。 Evil Overlordの例を使用すると、私の問題は、Evil Overlord(別名拒否されるべきではない彼)がすべての食事情報を要求したことです。所有者など、そして悪(サブ)オーバーロード- 否定されるべきではない彼としてよく知られている-は、GetDietaryInformationフェーズで実行するクエリが多すぎると不平を言っています。 注:私はいくつかの観点からこれがまったく問題ではないことを認識しています(考えられるパフォーマンスの問題などを無視します)。起こっていることは、特定の測定基準が不幸であるということだけであり、それには正当化の余地があります。 何だと思い、私が行うことができます 最初のものを除いて、これらのオプションはすべて実行可能であり、防御可能だと思います。 私はこっそりできることを確認し、メソッドの半分を宣言しますprotected。しかし、私はテスト手順の弱点を利用しているので、捕まったときに自分自身を正当化することは別として、私はこれが好きではありません。また、それは応急措置です。必要な操作の数が2倍になった場合はどうなりますか?可能性は低いですが、それではどうでしょうか。 このフェーズを任意にAnnealedObjectAlpha、AnnealedObjectBravo、AnnealedObjectCharlieに分割し、各ステージで3分の1の操作を実行できます。これは実際には複雑さを増す(N-1クラス増える)という印象の下にあり、テストに合格する以外に利点はありません。もちろん、CarWithFrontSeatsInstalledとCarWithAllSeatsInstalledは論理的に連続したステージであると私は考えることができます。後でAlphaがBravoメソッドを必要とするリスクは小さく、うまく使えばさらに小さくなります。それでも。 リモートで類似したさまざまな操作を1つの操作にまとめることができます。performAllSeatsInstallation()。これはあくまで暫定的な措置であり、単一操作の複雑さが増します。操作AとBを異なる順序で実行する必要があり、E =(A + C)とF(B + D)内にそれらをパックした場合、EとFをアンバンドルしてコードをシャッフルする必要があります。 ラムダ関数の配列を使用して、チェックを完全に回避できますが、それは不格好です。ただし、これはこれまでのところ最良の代替手段です。それは反射を取り除くでしょう。私が抱えている2つの問題は、仮説だけでなく、すべてのメソッドオブジェクトを書き換えるように求められることです。これはCarWithEngineInstalled非常に優れたジョブセキュリティですが、それほど魅力的ではありません。また、コードカバレッジチェッカーにはラムダに関する問題があります(これは解決可能ですが、まだ問題です)。 そう... あなたは、どちらが私の最良の選択肢だと思いますか? 私が考慮していないより良い方法はありますか?(たぶん、私はきれいに来て、それが何であるかを直接尋ねた方がいいですか?) この設計にはどうしようもない欠陥があり、私は敗北と溝掘りを認めるべきです-このアーキテクチャは完全にそうですか?私のキャリアには良くありませんが、長期的には、設計が不適切なコードを書く方が良いでしょうか? 私の現在の選択は実際にはOne True Wayであり、より良い品質のメトリック(および/またはインストルメンテーション)をインストールするために戦う必要がありますか?この最後のオプションについては、参照が必要です...つぶやいているときに@PHBで手を振るだけでは、これらは探しているメトリックではありません。いくらでもやりたい

2
Scalaコンパイラーがシールされていないクラス/トレイトに対してパターンマッチング警告を出せないのはなぜですか?
非シールtraitまたはabstract classScalaを使用してからパターンマッチングを使用する場合、コンパイラーはこの特定のパターンマッチのコンパイル時に、このトレイト/クラスの可能な実装が何であるかを知りませんか?だから、もしそうなら、可能性のあるすべての依存関係/インポートをチェックすることによって、使用できるタイプを知っているのでtrait/ abstract classがシールされていなくても、パターンマッチの警告を出せないでしょうか? たとえば、私がに対してOption[A]パターンマッチングを行っているSome[A]が、に対してNoneは行わない場合、Optionはシールされているため、コンパイラは文句を言うでしょう。 コンパイラがそれを認識/解決できない場合、なぜ彼はそれができないのですか?そして、コンパイラーが(理論的に)それを実行できる場合、それがScalaで使用されない理由は何ですか?そのような動作をサポートする他の言語はありますか?

4
条件付きに副作用があっても大丈夫ですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 アメリカの誰もが聞いたことのある大学でCS MSプログラムに参加するための前提条件として、中間データ構造コースを受講しています。クラスで記述された1行のコードが私の目に留まりました。 if (a > 33 | b++ < 54) {...} これは私の職場でのコードレビューに合格しません。インタビューでこのようなコードを書いた場合、これはあなたに対する重大なストライキとなるでしょう。(副作用のある条件付きであることに加えて、それは明快さを犠牲にして賢いです。) 実際、副作用のある条件式を見たことがなく、グーグルもあまり現れません。授業後も別の学生が留守にしていたので、変だと思ったのは私だけではありません。しかし、教授はこれが許容できるコードであること、そして彼がそのようなものを職場で書くことになることをかなり断固としていた。(彼のFTの仕事は、ご存知の会社のプリンシパルSWEです。) このコード行が受け入れられる世界は想像できませんが、望ましいことは言うまでもありません。私が間違っている?これでよろしいですか?より一般的なケースはどうですか?副作用のある条件付き?それらは大丈夫ですか?

6
特定のドメインがユーザーによって所有されていることを検証する方法は?
主に企業で使用されるソフトウェアを書いています。 次に、特定のドメインのメールに登録するすべてのユーザーが自動的に会社グループに入れられるように、メールドメインを登録する方法を企業に提供するというアイデアがありました。 私はSlackがこのようなことをして機能することを知っていますが、いくつかの問題があります...たとえば、「live.it」(Microsoftによるlive.comイタリア語版)を登録したばかりです。 ユーザーが特定のドメインでメールを検証した場合、同じdomain_mailを持つすべてのユーザーを同じグループに入れても安全だとは思いません。 たとえば、me @ gmail.comで登録した場合、ユーザーが「gmail.com」に独自のドメインを登録できるようにしたくありません。 「ドメインのルートにhtmlファイルを置く」、「TXTレコードを設定する」などの方法の使用を避けたいので、どうすればよいか迷っていました。

7
なぜインターネットプロトコルの作成者は、IPアドレスを使用して特定のコンピューターを識別することにしたのですか?[閉まっている]
休業。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善してみませんか?詳細を追加し、この投稿を編集して問題を明確にしてください。 5年前休業。 なぜインターネットプロトコルの作成者は、IPアドレスを使用して特定のコンピューターを識別することにしたのですか? 製造時に各コンピューターに一意のIDを割り当てて、そのIDをコンピューターの識別に使用するのはなぜですか。

4
意図的に例外を発生させてキャッチを使用する
if...else例外処理でラップされた通常の場合、次の例のようなものはコードの重複を避けるための推奨される方法ですか? try { if (GetDataFromServer()) { return ProcessData(); } else { throw new Exception(); } catch(Exception ex) { return null; } の代わりに... try { if (GetDataFromServer()) { return ProcessData(); } else { return null; } } catch(Exception ex) { return null; } パフォーマンスにわずかな影響があることは知っていますが、これが許容できるプラクティスであると考えられるかどうか疑問に思っています。私は現在、2番目の方法(特に、特定の例外を異なる方法で処理する必要がある場合)を実行していますが、最初の方法が単純なケースに適しているかどうか疑問に思っていました。

2
Websocketクライアントから送信する場合、マスキングは本当に必要ですか
現在のWebsocket RFCでは、Websocket クライアントが送信時にフレーム内のすべてのデータをマスクする必要があります(ただし、サーバーは必須ではありません)。プロトコルがこのように設計された理由は、フレームデータがクライアントとサーバーの間の悪意のあるサービス(プロキシなど)によって変更されるのを防ぐためです。ただし、マスキングキーはまだそのようなサービスで認識されています(各フレームの先頭でフレームごとに送信されます)。 フレームを次のポイントに渡す前に、そのようなサービスがキーを使用してコンテンツのマスクを解除、変更、および再マスクできると仮定するのは間違っていますか?私が間違っていない場合、これはどのようにして想定される脆弱性を修正しますか?

1
「C ++テンプレート:完全ガイド」(c)2002 — C ++ 11で最新ですか?
『C ++ Templates:The Complete Guide』(c)2002は非常に魅力的に見えますが、12歳なので、古くなっているのではないかと心配しています。最近1年前の非常に好意的なAmazonレビューがいくつかあり、C ++テンプレートに他の最近のタイトルはありません。2002年に発行されたテンプレートに関する本(特にSTLに関する本ではなく)に、たとえばC ++ 11によって置き換えられたり、追加されたりした構文や概念があるかどうかは誰にもわかりますか? 以下はアマゾンの本の説明からです: テンプレートはC ++の最も強力な機能の1つですが、無視されたり、誤解されたり、誤用されたりすることがよくあります。C ++テンプレート:コンプリートガイドは、テンプレートを使用して、よりクリーンで、より高速で、よりスマートなソフトウェアをより効率的に構築および維持する理由、時期、および方法を明確に理解することをソフトウェアアーキテクトおよびエンジニアに提供します。 C ++テンプレートは、基本的な概念と言語機能に関する洞察に満ちたチュートリアルから始まります。本の残りの部分は、最初に言語の詳細に焦点を当て、次に幅広いコーディング手法に焦点を当て、最後にテンプレートの高度なアプリケーションに焦点を当てた包括的なリファレンスとして機能します。本全体で使用されている例は、抽象的な概念を示し、ベストプラクティスを示しています。 読者は学ぶ テンプレートの正確な動作 テンプレートに関連する落とし穴を回避する方法 イディオムとテクニック、基本的なものから以前に文書化されていないものまで パフォーマンスや安全性を脅かすことなくソースコードを再利用する方法 C ++プログラムの効率を上げる方法 より柔軟で保守可能なソフトウェアを作成する方法
10 c++  templates 

12
ある値を他の2つ以上の値と比較する機能を備えた言語がないのはなぜですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 以下を検討してください。 if(a == b or c) ほとんどの言語では、これは次のように記述する必要があります。 if(a == b or a == c) これは少し面倒で情報を繰り返します。 上記のサンプル構文は少し不格好ですが、アイデアを伝えるためのより良い方法があると確信しています。 より多くの言語がそれを提供しないのはなぜですか?パフォーマンスや構文の問題はありますか?

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