ソフトウェア工学

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

2
ユーザーに構成、名前=値のペアの編集を許可するときに空白を処理するためのベストプラクティスは何ですか?
たとえば、悪名高いパス変数をユーザーに定義させます。どのように解釈しapppath = C:\Program Files\Appますか? これは、プログラミング言語がホワイトスペースを無視する慣習を採用しているように見え、読みやすさのために等号の前後に残しますが、アプリケーションではホワイトスペースを含む有効な変数値である可能性があります(サフィックスであると考えてください)。 キーにも空白を含めることができますか? アプリケーションの一般的なベストプラクティスは何ですか?私が持っている場合: key-example = value-example キーの存在"key-example"または"key-example "と値を存在"value-example"またはと解釈する必要があり" value-example"ますか?

3
Git、セマンティックバージョニング、およびそれが(私の)典型的な開発タイムラインにどのように適合するか?
Q&Aシステムに取り組んでいて、現在のアプリケーションに最初の公式バージョン/タグとして「1.0.0」のタグを付けようとしています。ベータテストのために、次に限定されたテスト対象者にロールアウトするところです。この段階で「1.0.0」は正しいですか? また、その段階で多くのバグが見つかることは間違いありません。「1.0.0」のままにしておきますが、リリースされるまでタグを強制的に移動します。または、バグを修正したら、新しいタグ「1.0.1」を付けますか。その後、おそらく「1.0.2」のテストを繰り返します。 したがって、拡張機能(たとえば、新しいメニュー、新しい検索入力フィールドなどの新機能)に取り組む場合、これらは「1.0.0」から「1.1.0」へのように小さな変更でしょうか?

2
Gitにタグがあるのはなぜですか?
私はGitの分岐とタグ付けのベストプラクティスとgitタグ付けのコメント-ベストプラクティスを読みましたが、長い間疑問に思っていたものに対する直接的な回答がありません。 Gitにタグがあるのはなぜですか?(枝だけではなく) 彼らは二流の市民、または少なくとも「異なる」ようです。明示的に指定しない限り、プッシュされません。リモートタグを削除しても、ダウンストリームレポジトリは削除されません。 この最後のポイントは最近問題になりました。誰かが別のリポジトリからの大量のコミットで大量のガベージタグをプッシュしたためです。上流でそれらを削除してコミットをgit push --tagsGCすることもできますが、それは反映されず、次に誰かがでタグをプッシュしたときに、それらのガベージタグとコミットを再プッシュします。そのため、全員が削除したことを確認する必要がありました。 いつ、なぜブランチではなくタグを使用するのですか?

2
パーソナルアシスタントは通常どのように文を生成しますか?
これは、言語学分野におけるNLG研究の方向性に関するこの質問のフォローアップのようなものです。 Siri、Google Now、Cortanaなどのパーソナルアシスタントツールはどのように自然言語生成(NLG)を実行しますか?具体的には、文章テキスト生成部。私は、テキストを音声に変換する部分ではなく、テキスト生成部分だけに関心があります。 その情報がおそらく入手できないので、私はそれぞれがそれをどのように行うか正確に探していません。 その品質の文生成を実装するにはどのような設定が必要なのでしょうか。 データベースにはどのようなデータが必要ですか(高レベル)? 可能なすべての単語とその意味の辞書に加えて、注釈が付けられ、統計的に分析された多くの本/コーパスに辞書を追加する必要がありますか? それは実際に人々が自然な方法で話した(テレビ番組やポッドキャストなどから)録音をしてテキストに変換し、それを何らかの形で "システム"に追加することを必要としますか?(本当に「人間」のような文章を得るために) あるいは、彼らが使用している単純な構文ベースの文パターンだけがあり、巨大な意味論的「意味」データベースがないのですか?誰かが正規表現タイプのものをたくさん書いたところ。 そのような自然に書かれた人間のような文章に使用されるアルゴリズムは何ですか? 質問する理由の1つは、NLG分野がSiriやGoogle Nowなどが成し遂げていることを実行することは非常に遠いようだということです。では、彼らはどんなことをしているのでしょうか?(ちょうど文のテキスト生成部分)。

2
コマンドにどれだけのロジックを入れることができますか?または別の言い方をすると、コマンドパターンはどのような種類のロジックですか?
私はかなり前からコマンドパターンを使用していますが、実際にExecuteメソッドにどれだけのロジックを入れることができるか本当にわかりません。 コマンドパターンの現在の実装は次のようになります。 public abstract class Command { public static event EventHandler Completed = delegate { }; public bool Success { get; private set; } public Exception Exception {get; private set; } public abstract bool Execute(); protected bool OnCompleted(bool success, Exception ex = null) { Success = success; Exception = ex; …

1
ループ副作用の関数型プログラミング
関数内にローカル変数またはforループがあることが純粋な関数型プログラミングと見なされないのはなぜか、頭を回そうとしています。 この関数を考えると: int as_int(char *str) { int acc; /* accumulate the partial result */ for (acc = 0; isdigit(*str); str++) { acc = acc * 10 + (*str - '0'); } return acc; } 変数accはどのような状況で副作用になりますか?並行環境でも、関数の呼び出しごとに独自のaccのコピーがあります。そのため、関数型プログラミングで許可されていない理由がよくわかりません。

2
なぜGitのstashコミットには2つの親が必要なのですか?
なぜGitのstashコミットには2つの親が必要なのですか? でGitのハッカーの手引き、私はスタッシュのために、このメンタルモデルを参照してください。 ガイドによると、stash @ {0}にはAとBの両方が親として必要です。どうして?stashがCの必要性をなくしてBを指しているのはなぜですか?Gitの理解に何か欠けていると思います。
8 git  concepts 

3
非常に複雑なフォームのフィールド間の依存関係をモデル化する方法
複数の保険商品の申し込みフォームとして使用するWebアプリケーションを作成する必要があります(合計15)。このアプリケーションフォームはフォームウィザードに似ています。4〜10の製品に応じて、複数のページにまたがります。 フォームがレンダリングするすべてのさまざまな要素(入力、選択ボックス)の合計は約250ですが、最も複雑な製品でさえ170を超えることはありません。最も複雑でないものでも約80の要素が必要です。 製品ごとに1つずつ、15の異なるアプリケーションフォームを作成するのではなく、すべての製品で使用される単一のアプリケーションフォームを作成する必要があります。 想像できるように、要素には要素間に多くの依存関係があります。フィールドに値を入力すると、別のフィールドまたはフィールドのセットが(現在のページまたは次のページで)表示または非表示になります。入力した値に基づくその他の依存関係: 要素の値が必要かどうか 選択ボックスの可能な値が変更されます 検証制約が変更されます ご想像のとおり、これのモデリングは非常に複雑です。問題は、これらすべての要素のモデリング(および文書化)、それらの間の依存関係、および検証制約にどのツールを推奨するかです。どのようにモデリングしますか?この場合、データモデルについてはまったく触れません。このモデルは、必要な作業の仕様の一部となり、プロジェクトの完了後の参考になります。モデルを変更しても、申請書は自動的に変更されません。 簡単にできることのいくつか: 特定の要素が依存する要素を確認する 特定の製品のフォームに含まれるすべての要素を確認する 特定の製品に必要な要素を確認する 各要素の検証ルールを定義する 各要素にさまざまな属性を定義する 制限:モデリングを行うのは製品マネージャーと製品所有者です。

1
1つのGitHubリポジトリに、複数のライセンスでリリースされたソースコードを含めることはできますか?
ユーザーの便宜のために、1つのGitHubリポジトリにいくつかのサブプロジェクトを集めたいと思います。しかし、実際には単一のリポジトリにフォルダを作成して、それぞれが異なるライセンスでカバーされているのか(それらはすべてBSDライセンスのバリアントであり、わずかな違いがあります)、またはプロジェクトを複数のリポジトリに分割する必要があるのでしょうか。

4
静的クラスの有効な用途は何ですか?
C#などのオブジェクト指向言語で静的クラスを使用しているプログラマーを目にするたびに、彼らが間違っていることに気づきました。主な問題は明らかにグローバルな状態であり、実行時に、またはテスト中にモック/スタブを使用して実装を交換することの難しさです。 好奇心から、十分にテストされたプロジェクトを選択するプロジェクトのいくつかを見て、実際にアーキテクチャとデザインについて考えようと努力しました。私が見つけた静的クラスの2つの使用法は次のとおりです。 ユーティリティクラス— このコードを今日作成している場合は避けたいものですが、 アプリケーションキャッシュ:そのための静的クラスの使用は明らかに間違っています。MemoryCacheまたはRedis に置き換えたい場合はどうなりますか? .NET Frameworkを見ると、静的クラスの有効な使用例も見当たりません。例えば: File静的クラスを使用すると、代替クラスに切り替えるのが非常に困難になります。たとえば、分離ストレージに切り替えるか、ファイルをメモリに直接格納する必要がある場合、またはNTFSトランザクションをサポートできる、または少なくとも259文字を超えるパスを処理できるプロバイダーが必要な場合はどうでしょうか。持つ共通のインタフェースと複数の実装は、使用して同じように簡単現れるFileコードベース要件の変更のほとんどを書き換えることではないの恩恵で、直接。 Console静的クラスはテストを非常に複雑にします。ユニットテスト内で、メソッドが正しいデータをコンソールに出力することをどのように確認すべきですか?Stream実行時に注入される書き込み可能に出力を送信するようにメソッドを変更する必要がありますか?非静的コンソールクラスは、静的クラスと同じくらい単純で、静的クラスのすべての欠点がないように思われます。 Math静的クラスも適切な候補ではありません。任意精度の演算に切り替える必要がある場合はどうなりますか?それとも、より新しく、より高速な実装ですか?または、単体テスト中にMathクラスの特定のメソッドが実際にテスト中に呼び出されたことを通知するスタブに? Programmer.SEで、私は読んだ: C#で「静的」を使用しないでください。一部の回答は、静的クラスに完全に反しています。他の人は、「静的メソッドは使用しても問題がなく、プログラミングで正当な場所がある」と主張しますが、引数でそれを焼き付けないでください。 シングルトンを使用する場合と静的クラスを使用する場合。ユーティリティクラスには問題があると上記で述べたので、ユーティリティクラスについて説明します。 なぜ、いつクラスを「静的」にする必要がありますか?クラスの「静的」キーワードの目的は何ですか?言及されている唯一の有効な使用法は、拡張メソッドのコンテナです。すごい。 拡張メソッドとは別に、静的クラスの有効な用途は何ですか。つまり、依存性注入またはシングルトンが不可能であるか、設計の品質が低下し、拡張性と保守が難しくなる場合ですか。

5
成功するまで繰り返し、失敗を処理するループを構築する方法
私は独学のプログラマーです。私は約1.5年前にプログラミングを始めました。今、私は学校でプログラミングクラスを始めました。プログラミングクラスは1/2年間ありましたが、今はもう半分あります。 クラスでは、C ++でプログラミングする方法を学びます(これは、始める前に、私がすでにかなりよく使用することを知っていた言語です)。 このクラスでは何の問題もありませんでしたが、明確な解決策を見つけることができなかった問題が繰り返し発生しています。 問題は次のようになります(疑似コード): do something if something failed: handle the error try something (line 1) again else: we are done! これはC ++の例です このコードはユーザーに数値の入力を求め、入力が有効になるまで入力を続けます。cin.fail()入力が無効かどうかを確認するために使用します。ときcin.fail()であるtrue私が呼び出す必要がありますcin.clear()し、cin.ignore()ストリームからの入力を取得し続けることができるように。 このコードはをチェックしないことを知っていますEOF。私たちが書いたプログラムは、そうすることを期待されていません。 これが私が学校での課題の1つでコードを書いた方法です。 for (;;) { cout << ": "; cin >> input; if (cin.fail()) { cin.clear(); cin.ignore(512, '\n'); continue; } break; } 私の先生は、私はこれを使うべきではないbreakとcontinue言っていました。彼は代わりにレギュラーwhileかdo ... whileループを使うべきだと提案しました。 …

1
MVCでは、モデルにサブビューモデルを含める必要がありますか?
背景: 同僚と私はMVCの解釈が異なります。つまり、同じ問題を考えると、根本的に異なる解決策が考えられます。彼はJavaのバックグラウンド出身で、MVCのすべてのコンポーネントが伝統的にオブジェクトをモデル化している可能性があります。私はHaskellのバックグラウンド出身で、OOPの経験はほとんどありません。 問題空間: モデル化しようとしている問題は、デスクトップ環境に少し似ています。ユーザーセッション(おそらくユーザーのログイン、デスクトップの背景)とデスクトップ上のプロセス(iTunes、Finderなど)には、それぞれ独自のモデルプロパティ(最小化など)があるという概念があります。 次の点に同意します。HMVCが最も優れた表現であると考えています。Session(デスクトップ)とProcess(アプリケーション)の2つのMVCオブジェクトがあること、およびProcessの概念Sessionやバックリンクを必要としないことに同意します。 ただし、MVCの中心的な意味と、ユーザーのデスクトップ上のプロセスのリストを保持する場所にどのように影響するかについては、意見の相違があります。 彼の解釈: 彼は伝統的にコードやレンダリングシステムで簡単にモデル化できる非常に有効なポイントを主張しています。彼は、プロセスのリストはProcessControllerオブジェクトのリストである必要があり、SessionControllerその中にモデルが個別のオブジェクトとして内部に含まれていると述べています。状態の、かなりの量の両方の中にあることをこれは意味SessionControllerし、SessionModelどのように関連しているSessionViewレンダリングする必要があります。 これは、簡単な検索でインターネット上で読み取ることができたものと非常に調和しているようです。 私の解釈: 私の解釈は最大のアーキテクチャ変更を必要とし、コードでの実装は難しいようですが、概念的には正しいと思います。なぜこれが当てはまらないのか、またはこの解釈と一致する別のモデル(MVCでない場合)を提示し、両方のパターンの長所と短所を強調して、最も情報に基づいた決定を下せるように誰かに説明してほしい(どちらも持っていない)ソフトウェアアーキテクチャの強力な背景)。 :私は3つの交換部品とトライアドとしてMVCを参照してくださいModel、ControllerとView。これは、私がインターネット上で読むことができるものと一致し、一部のソースは、「同じインターフェースを持つビュー、コントローラー、およびモデルは、異なる効果に交換可能である必要がある」のようなものに沿って物事を言うでしょう。これが機能すると想像する方法は次のとおりです。 モデルを交換すると、データの検証または保存の方法が変わります コントローラを交換すると、ページの動作が変更されますが、ページの一般的なデータコンテンツを変更する可能性があるものは変更されません ビューを交換すると、ページの表示方法が変わります このことから、私は任意の与えられたことを推論Modelし、Viewコントローラだけで行動していないページの「内容」を変更する必要があるため、唯一のコントローラはデータにページを変更しないでくださいスワッピング最初にレンダリングします。これは、鉄道システムの「駅コントローラー」としてのコントローラーの概念的な視覚化、モデルとしての鉄道の計画、および実際の物理的な外観とトラックの外観/感触(異なるフレーバーでは、「ビューとして「リアル」または「バーチャル3D」)。 ここで私たちは反対します: でユーザーに表示されるデータSessionViewはデスクトップ上のさまざまなプロセスによって変更されるため(プロセスは関連データとしてモデル化しています)、にSessionModelはのインスタンスのリストが含まれているはずですProcessModel。つまりSessionController、同じでランダムを使用すると、SessionView概念的に同じデータ(デスクトップ上のプロセス)が表示されるはずです。 彼は、Model別のモデルについて決して知らない方がより意味があると主張しています。つまり、SessionControllerにはのリストがProcessControllerあり、各Controllerオブジェクトにはそのモデルへのリンクがあります。a SessionViewが同じSessionModelでも異なるSessionController場合、ユーザーに表示されるデータは根本的に異なるはずです。 それぞれの解釈について議論し、最も十分な情報に基づいた結果に到達するために私たちを助けてください。 御時間ありがとうございます!

6
クラスでJavaストリームをフィルタリングする場合、instanceofの代わりはありますか?
1つのクラスを拡張するすべての型がJavaコレクションにパックされるプロジェクトで、予期しない状況が発生しました。ただし、そのクラスの特定の拡張のみに追加のメソッドが含まれています。それを「also()」と呼びましょう。他の拡張機能にはないことをはっきりさせておきます。そのコレクション内のすべてのアイテムで1つのタスクを実行する直前に、それを実装するすべてのアイテムでalso()を呼び出す必要があります。 最も簡単な方法はこれです: stuff.stream().filter(item -> item instanceof SpecificItem) .forEach(item -> ((SpecificItem)item).also())); stuff.stream().forEach(item -> item.method()); それは正常に動作しますが、「instanceof」がそこにあるのは快適ではありません。これは通常、コードの悪臭のマーカーです。このクラスを取り除くためだけにこのクラスをリファクタリングする可能性は非常に高いです。しかし、劇的なことをする前に、コミュニティに問い合わせて、StreamsまたはCollectionsのどちらかについてより経験のある人がより簡単な解決策を持っているかどうかを確認したいと思いました。 例(確かに非排他的)として、クラスによってエントリをフィルタリングするコレクションのビューを取得することは可能ですか?

3
大企業は、製品のソースコードを悪用することなくどのように維持しますか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 5年前休業。 ASP.NETを使用してWebアプリケーションを開発しています。私のプロセスをスピードアップするために何人かの開発者を雇いたいのですが、メンバーが私のコードを受け取って去ったらどうなりますか?大企業が間違った手に渡ることなく自社の製品コードをどのように維持しているのだろうと思っています。例:前に言ったように、私のプロセスをスピードアップするためにスタッフを雇っていますが、すべての人が同じではないことを知っています。一部の人々はほとんど働かないかもしれません、そして、何人かは全体のコードを得て去るかもしれません。 だから私の質問は、マイクロソフト、フェイスブック、ヤフーのような大企業がコードをどのように保護しているのですか? Facebookには現在8,348近くのメンバーがいます(2014年9月)。すべての人が完全なFacebookコードを持っていると私が言った場合、私は正しいですか、間違っていますか? では、プロセスをスピードアップするためにスタッフを雇った場合、どのベストプラクティスに従うべきですか?
8 asp.net 

2
イベントが既に発生した後にアタッチされた場合、イベントリスナーを呼び出す必要がありますか?
イベントがすでに発生した後に接続されている場合、イベントリスナーを呼び出す必要がありますか?イベントが一度だけ発生する場合はどうなりますか? 頭に浮かぶ最初の例は、readyjQuery のイベントです。次のスニペットは、ページが読み込まれた後に評価されると、コールバックを呼び出します。 $(document).ready(function () { console.log("Works."); }); この動作の代わりに、ページが読み込まれたときに設定されるフラグを使用して、APIのコンシューマーに、イベントがすでに発生しているかどうかを確認し、それに応じて動作するように強制することができます。 if (document.readyState == "complete") { console.log("Works."); } else { $(document).ready(function () { console.log("Works."); }); } 上記の例は、ページが完全にロードされた後に何でも(通常は)すべてを実行する必要があるWebページのロードのコンテキストですが、「singleton」イベントを持つアプリケーションの単一のコンポーネントに対して同じ引数を作成できます(load、start、end、など)。単一成分の例は、とマップすることができload、イベント起動マップが読み込まれ、そのように指定すること。 map.on("load", function () { console.log("The map has loaded."); }); 上記の例は、ArcGIS API for JavaScriptからのもので、そのイベントは1回だけ発生します。コンシューマーがマップがロードされた後にマップがロードされるのを「待機」した場合、リスナーは呼び出されません。望ましい結果を得るには、リスナーをアタッチする前にマップの状態を確認する必要があります。 if (map.loaded) { console.log("The map has loaded."); } else { map.on("load", function …

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