ソフトウェア工学

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


2
ソースコードまたはバイナリに依存するには?
BがAに依存する異なるチームによって開発された2つの社内プロジェクトAとBがあります。両方のプロジェクトのソースコードはgitに格納されているため、プロジェクトAをサブモジュールとしてプロジェクトBに含め、ビルドシステムを構成しました両方を正しい順序で構築します。別の解決策は、ArtifactoryやNexusなどのバイナリリポジトリマネージャーを介してAを使用することです。 ソースコードに依存するか、バイナリアーティファクトに依存するかの長所と短所について疑問に思います。どちらが他より優れているのですか?これまでのところ、次のような要素を考え出すことができましたが、他の意見を聞くのはとても楽しみです。 ソースコードに応じてより良いです バイナリレポジトリマネージャーがない場合 別のプロジェクトのプレリリースバージョンに依存する必要がある場合 別のプロジェクトにパッチを適用する必要がある場合 IDEで依存関係のソースコードを簡単に参照できるため バイナリに依存する方が良い ビルド時間を最小限にする 別のプロジェクトのビルド環境をセットアップする手間を避けるため


3
gitなどのバージョン管理システムでコミットをグループ化するにはどうすればよいですか
1つの長いフラットなコミット履歴の代わりに、階層がないのはなぜですか。そのため、トップレベルでプルリクエストがあり、レベルを下げてそのPRのコミットを確認できます。PRはgithubに固有のものであると思いますが、あなたはそのアイデアを理解しています。たとえば、いくつかのコミットを機能やバグ修正としてグループ化することを意味します。 確かに、コミット履歴をナビゲートしやすくなります。 この質問には明白な答えがあると思いますが、それを見つけることができないようです。

1
Visual Studio 2013でのangularJS開発の推奨セットアップ[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 6年前休業。 AngularJSから始めます。バックエンドはWeb API(これも私にとっては新しい)であり、1つのIDEのみを使用したいので、AngularJS用にVisual Studio 2013でプロジェクトを設定する方法を理解しようとしています。APIとの疎結合を維持する(またはUIをWeb APIから切り離したままにする)ために、個別のプロジェクトとして維持したいと思います。この設定を取得する方法を理解するのに苦労しています。そう.... 純粋なAngularJS(純粋なHTML 5)プロジェクトに最適なプロジェクトタイプはどれですか? Gruntの使用が推奨されていますか?または、MS Buildはビルドタスクを処理するのに優れていますか?ここでは、ファイルを1つの配布ファイルにリント、ミニファイ、連結して、おそらくWebサーバーにコピーしていると思います。 どのようにテストを実行しますか?Jasminテストを実行するプラグインはありますか?Karmaを個別に実行しますか? AngularJSに適したテンプレートはありますか?ngBoilerplateを使用するものはありますか? 任意の助けいただければ幸いです。

2
MVC:私のコントローラーは半分の時間、役に立たないようです。これは問題ですか?
多くの場合、MVCを使用してプログラムを設計すると、コントローラーが半分の時間無駄になります。 つまり、ビューで何かが発生します(ボタンのクリックなど)。次に、ビューはコントローラーに通知します。次に、コントローラーはモデルに直接委任し、何もする必要がないため、他に何もしません。 例えば: ユーザーはボタン「カラーブルー」を押します>ビューはコントローラーに通知しますcontroller.colorBlue()>コントローラーはモデルに通知しますmodel.colorBlue()>モデルの色が何か青いです。 この例では、コントローラーは役に立たないようです。それは何も追加しません。ビューはモデルに直接話しかけたかもしれません。 ただし、残りの半分の時間は、コントローラーがビューとモデルの間で何らかのメディエーションを行います。 私の質問はこれです:これはMVC構造でどのくらい一般的ですか?コントローラの半分の時間が不要であるように見えるのは理にかなっていますか?それともこれは問題ですか?これは一般的ですか?私はこれにどのように取り組むべきですか? 私の質問が十分に明確でない場合は、そのように言ってください。

7
国際化されたUIのコロン
gettextまたは同様のフレームワークを使用する場合、UIのラベルを生成するために翻訳文字列に':'(など"Label:")を含める':'か、UIコード自体に追加する必要がありますか?

6
リアルタイムの単体テスト-または「今すぐモックする方法」
時間に依存する機能に取り組んでいるとき...単体テストはどのように整理しますか?単体テストのシナリオがプログラムの「今」を解釈する方法に依存する場合、どのように設定しますか? 2番目の編集:数日後にあなたの経験を読んでください この状況に対処するための手法は、通常、次の3つの原則の1つを中心に展開することがわかります。 依存関係を追加(ハードコード)する:時間関数/オブジェクトの上に小さなレイヤーを追加し、常にこのレイヤーを通じてdatetime関数を呼び出します。このようにして、テストケース中に時間を制御できます。 モックを使用する:コードはまったく同じままです。テストでは、時間オブジェクトを偽の時間オブジェクトに置き換えます。ソリューションには、プログラミング言語によって提供される本物の時刻オブジェクトを変更することが含まれる場合があります。 依存性注入を使用する:時間参照がパラメーターとして渡されるようにコードをビルドします。次に、テスト中にパラメーターを制御します。 言語に固有の手法(またはライブラリ)は大歓迎であり、例示的なコードが追加されれば強化されます。次に、どのプラットフォームに同様の原則を適用できるかが最も興味深い。そしてはい... PHPですぐにそれを適用できる場合は、より良いよりも優れています;) 簡単な例から始めましょう:基本的な予約アプリケーションです。 JSON APIと、リクエストメッセージと確認メッセージの2つのメッセージがあるとします。標準的なシナリオは次のようになります。 あなたはリクエストをします。トークンを使用して応答を取得します。その要求を満たすために必要なリソースは、システムによって5分間ブロックされます。 トークンで識別されるリクエストを確認します。トークンが5分以内に発行された場合、トークンは受け入れられます(リソースは引き続き使用可能です)。5分以上経過した場合は、新しいリクエストを作成する必要があります(リソースは解放されています。リソースの可用性をもう一度確認する必要があります)。 ここに対応するテストシナリオがあります: お願いします。受け取ったトークンで(すぐに)確認します。私の確認は受け入れられました。 お願いします。3分待ちます。受け取ったトークンで確認します。私の確認は受け入れられました。 お願いします。6分待ちます。受け取ったトークンで確認します。確認が拒否されました。 これらの単体テストをプログラムするにはどうすればよいですか?これらの機能をテストできるようにするには、どのアーキテクチャを使用する必要がありますか? 編集注:リクエストを送信すると、時間はミリ秒に関する情報を失う形式でデータベースに保存されます。 余計ですが、少し冗長かもしれません。ここで、「宿題」をやっていることがわかった詳細について説明します。 私は自分の時間関数に依存して機能を構築しました。私の関数VirtualDateTimeには、新しいDateTime()を呼び出すために使用した静的メソッドget_time()があります。この時間機能を使用すると、「今」の時間をシミュレートおよび制御できるため、「今すぐ21st jan 2014 16h15に設定します。リクエストを送信します。3分先に進みます。確認を行います」のようなテストを作成できます。これは、依存関係を犠牲にしてうまく機能し、「それほどきれいではないコード」です。 もう少し統合されたソリューションは、追加の「仮想時間」機能を備えたDateTimeを拡張する独自のmyDateTime関数を構築することです(最も重要なことは、今、私が望むものに設定することです)。これにより、最初のソリューションのコードは少しエレガントになりますが(新しいDateTimeではなく新しいmyDateTimeを使用)、非常によく似たものになります。独自のクラスを使用して機能を構築する必要があるため、依存関係が作成されます。 でも、DateTime関数をハッキングして、必要なときに依存関係で機能させるようにしています。ただし、クラスを別のクラスで置き換える簡単で便利な方法はありますか?(私はそれに対する答えを得たと思います:下記の名前空間を参照してください)。 PHP環境では、「Runkit」を読んで、これを動的に行うことができます(DateTime関数をハックする)。DateTimeに関する変更を行う前に、テスト環境で実行していることを確認し、運用環境でそのままにしておくことができるのはすばらしいことです[1]。これは、手動のDateTimeハックよりはるかに安全でクリーンに聞こえます。 時間を使用する各クラスの時計関数の依存性注入[2]。これはやりすぎではありませんか?一部の環境では非常に役立つことがわかります[5]。この場合、私はあまり好きではありませんが。 すべての関数の時間の依存関係を削除します[2]。これは常に実現可能ですか?(以下のその他の例を参照) 名前空間の使用[2] [3]?これはかなりよさそうだ。\ DateTimeを拡張する独自のDateTime関数でDateTimeをモックすることができます... DateTime :: setNow( "2014-01-21 16:15:00")とDateTime :: wait( "+ 3 minutes")を使用します。これは私が必要とするもののほとんどをカバーしています。しかし、time()関数を使用するとどうなりますか?または他の時間関数?私はまだ元のコードでの使用を避けなければなりません。または、コードで使用しているPHP時間関数がテストでオーバーライドされていることを確認する必要があります...これだけを実行できるライブラリはありますか? スレッドのためだけにシステム時間を変更する方法を探していました。何もないようです [4]。これは残念です。「このスレッドの2014年1月21日16h15に時間を設定する」ための「単純な」PHP関数は、この種のテストに最適な機能です。 exec()を使用して、テストのシステム日時を変更します。これは、サーバー上の他のものを台無しにすることを恐れていない場合に機能します。また、テストを実行した後、システム時間を戻す必要があります。それはいくつかの状況でトリックを行うことができますが、かなり「ハッキー」に感じます。 これは私にとって非常に標準的な問題のように見えます。しかし、それを処理するための単純で一般的な方法がまだありません。多分私は何かを逃した?あなたの経験を共有してください! 注:同様のテストが必要になる可能性がある他の状況をいくつか示します。 なんらかのタイムアウトで機能する機能(チェスゲームなど) 特定の時間にイベントをトリガーするキューを処理します(上記のシナリオでは、次のように続けることができます。予約が始まる1日前に、すべての詳細をメールでユーザーに送信します。テストシナリオ...) 過去に収集されたデータを使用してテスト環境をセットアップしたい-今のように表示したい。[1] …

1
リポジトリパターンとファサードパターンの違いは何ですか?
私は自分のアプリケーションで常にリポジトリー・パターンを使用してきました。しかし、多くの人が命名規則にリポジトリではなくファサードを使用しているのを見てきましたが、操作は同じだと思います。なぜこの違いがあるのですか?それらの間には本当の違いがありますか?

6
HSQLDBユニットテストはアンチパターンですか?
HSQLDBは素晴らしいです。また、組み込みモード(専用サーバーは不要)を備えているため、Proof of Conceptsなどの迅速なプロトタイピングが可能になり、さまざまなデータをすばやく簡単に保存できるため、本番環境ですぐに使用できるアプリケーションにも最適です。 ただし、私が過去数年取り組んできたプロジェクトの少なくとも90%は、SQLデータベースを何らかの方法で処理する場合、組み込みHSQLDBを使用するユニットテストを避けられません。 確かに、これらのプロジェクト(ほとんどの場合、標準のMaven構造を使用します)には、大量の「単体テスト」(または少なくとも、ある種のテストがありますが、「単体テスト」領域にあります)があります。いくつかのCRUD操作を実行して結果を確認するために、HSQLDBの1つ以上の埋め込みインスタンスを使用するプロジェクト(「src / test / java」など)の)。 私の質問は、これはアンチパターンですか?HSQLDBは​​簡単に統合でき、組み込みサーバーは非常に軽量であるため、実際のデータベースの「モックアップ」として見過ごされがちですが、そうでない場合はどうでしょうか。(それらのそれぞれは、「何か」で構成されているので、このようなテストは、より統合テストのように扱われるべきではないと、データベース・サーバーとの「何か」の統合という)?または、「単体テスト」定義に何か欠けているのでしょうか。このようにHSQLDBを使用すると、「単体テスト」定義の「依存関係を模擬し、単体のみをテストする」部分に固執すると言えます。

2
AngularJSのソースコードをどこから読み始めればよいですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 この記事を読んだ後、私はプロの開発者としての3年間、「深刻な」ソースコードをまったく読んでいないことに気付きました。 より良い、または-最近、私は私が私の読書を開始することを決めたので、AngularJSを多用して新しいWebプロジェクトを開始したデコード活動を両方挑戦し、専門的に有用である何かから- [ブロガーが書いたように]。 今、私はちょうど正しい方向に向けられる必要があります。私はソースコードの最初から始めるべきですか、それとももっと良い出発点がありますか?

3
名詞が単数と複数の両方であるときに配列またはリストに名前を付ける方法は?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 一般の変数は、単数形で命名されCar car;、配列やplurasを持つリスト:List<Car> cars;またはCar[] cars;しかし、何のような名詞についてfishやmedia、既に複数ありますか*? *クラスを呼び出すために、すでにバトルに敗れましたMedium。
9 naming 

1
ロールバック機能を備えたアプリケーションを設計する方法
私は現在、ロールバック機能を処理する必要のあるアプリケーション(基本的には、ユーザー定義のジョブを実行し、リアルタイムで出力を生成できる一種の実行エンジン)に取り組んでいます。それは奇妙に聞こえるかもしれませんが、アプリケーションでそのようなことをすることは可能ですか?レベル?たとえば、一部のユーザーがジョブJ1を実行しようとし、実行を開始した後、編集/変更したいと考えた場合、つまり、現在実行中のジョブを 強制終了する必要があることを意味します。これまでに実行されたすべてのアクションを元に戻し、再度実行する必要があります。 ジョブJ1を再度実行します 私の頭に浮かぶいくつかのことは、とにかくアプリケーションの状態をどこかで何らかの形で保存または維持してから、以前の保存ポイントと共にロールバックスタッフを呼び出す必要があるということです。私はDBレベルのロールバックに関する記事をいくつか読んでいましたが、リアルタイム環境で作業する必要があるため、シナリオはこの場合には適合しません。 しかし、どのように進めるか、他に何を考慮に入れるべきかについて、適切なアプローチを見つけることができません。これが不明瞭に聞こえる場合はお知らせください。可能であれば詳細をお知らせします。 ヘルプやアドバイスはありますか?
9 design 

4
$ _POST、$ _ GETなどはカプセル化の原則に違反していますか?
グローバルを使用すると、コードのテストが困難になり、バグが発生しやすくなり、安全で予測不可能になります。そのため、関数/オブジェクト内で必要な変数を渡します。だから私の質問は簡単です: $ _POST、$ _ GETなどはカプセル化の原則に違反していますか? これらの変数の制御をオブジェクト指向の方法で維持するには、理想的な解決策は次のような行をコードに追加することだと思います。 // Convert the $_GET array to an object $get = json_decode(json_encode($_GET), FALSE); // stackoverflow.com/a/1869147 // Stop it from being included from anywhere unset($_GET); // Small example of what could be done later on $DB = new PDO(/* ... */); $Person = new Person($DB, $get->id); …


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