ソフトウェア工学

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

1
先物/モナドvsイベント
アプリケーションフレームワークで、パフォーマンスへの影響を無視できる場合(最大で1秒あたり10〜20イベント)、 モジュール間の通信の優先媒体として使用するのに、より保守的で柔軟なものは何ですか?イベントまたは先物/プロミス/モナド? イベント(pub / sub、メディエーター)は疎結合を許可するため、より保守しやすいアプリであるとよく言われます...私の経験ではこれが否定されます。20以上のイベントがあると、デバッグが困難になり、リファクタリングも行われます-誰が、いつ、なぜ使用するのかを確認するのは非常に難しいためです。 約束(私はJavascriptでコーディングしています)は、イベントよりも醜くて気難しいものです。ただし、関数呼び出し間の接続を明確に確認できるため、アプリケーションロジックがより簡単になります。私が恐れていること。ただし、Promiseはそれらとのより強い結合をもたらすでしょう... PS:答えはJSに基づく必要はありません。他の関数型言語の経験は大歓迎です。


3
7月26日の特別な点と、それがExpiresヘッダーの例で頻繁に使用されるのはなぜですか?
7月26日(私の誕生日)はExpires、ヘッダーを使用したhttpキャッシングの防止に関連するさまざまなPHPの例で実際に頻繁に使用されていることに気づきました。 /programming/12398714/cache-issue-with-private-networking-stream /programming/2833305/how-to-expire-page-in-php-when-user-logout http://expressionengine.com/archived_forums/viewthread/81945/ その日には何が特別ですか?
10 php  headers 

5
優れた、迅速なアルゴリズムの更新とは何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 数週間以内にプログラミングのインタビューが来る予定です。少し前にアルゴリズムのクラスを受講しましたが、いくつかの重要な概念を忘れている可能性があります。 スピードを取り戻すためのアルゴリズムに関する非常に短い本(<100ページ)のようなものを探しています。ソートアルゴリズム、データ構造、およびその他の必須要素を含める必要があります。それは本である必要はありません...ちょうど一週間で巻き込まれるための素晴らしい方法を探しています。 簡単なアルゴリズムの紹介や復習に最適なツールは何ですか?

1
gitflowを使用してホットフィックスを機能ブランチに組み込むにはどうすればよいですか?
プロジェクトでgitflowの使用を開始しましたが、未処理の機能ブランチと新しく作成した修正プログラムがあります。gitflowワークフローに従って、ホットフィックスはマスターブランチと開発ブランチの両方に適用されますが、現存する機能ブランチについては何も言われておらず、行われていません。 それでも、修正プログラムの変更を機能ブランチに組み込みたいと思います。これは、できる限り3つのオプションを残します。 変更を組み込まないでください。機能ブランチに変更が必要な場合、それは機能ブランチの一部であるはずです。 マージ開発機能ブランチに戻ります。これはgitflowワークフローに最もよく従うようですが、順不同のコミットを引き起こします。 機能ブランチを開発にリベースします。これはコミットの順序を保持しますが、リベースは一般的なgitflowワークフローには完全に存在しないようです。 ここでのベストプラクティスは何ですか?
10 git  gitflow 

1
内部リリース管理にBit Torrentを使用する
現在、バージョン管理システムを悪用して使用しています...大規模なリリースバイナリ(4 GB以上)を格納するFTPとほぼ同じです。 私たちは、統合とリリースのプロセスを損なう一方で、ますます多くのITリソースを進化させ、引き継いでいるこの恐ろしい慣行から離れることを目指しています。 これに対する解決策は、P2Pファイル共有を使用してこれらのリリースイメージ/バイナリを配布し、ファイルサーバーといくつかの主要なユーザーマシンをシードとして混合することです。 だから私の質問は2つの部分に分かれます: リリースイメージ/バイナリを配布するためにイントラネットでBitTorrentを設定する手段をとった人はいますか?そうでない場合、このアイデアについてどう思いますか(実際にはBTWを採掘したわけではありませんが、すばらしいと思います)。 BitTorrentトラッカーのパブリッシングを処理するためのオープンソースのWebベースのソフトウェアはありますか?それで、新しいリリースがある場合、それを検索してシードとヒルに関してその可用性を表示できますか?(...あなたは私が何を言っているのか知っています) 編集:イントラネットはグローバルです(例:米国、中国、ドイツ、メキシコ)。通常のFTPでも機能しますが、費用対効果はそれほど高くありません。

5
戦略パターンにリファクタリングされた関数を単体テストする方法は?
私のコードに次のような関数がある場合: class Employee{ public string calculateTax(string name, int salary) { switch (name) { case "Chris": doSomething($salary); case "David": doSomethingDifferent($salary); case "Scott": doOtherThing($salary); } } 通常、これをリファクタリングして、ファクトリクラスと戦略パターンを使用してPloymorphismを使用します。 public string calculateTax(string name) { InameHandler nameHandler = NameHandlerFactory::getHandler(name); nameHandler->calculateTax($salary); } TDDを使用している場合は、calculateTax()リファクタリングの前にオリジナルで機能するテストをいくつか用意します。 例: calculateTax_givenChrisSalaryBelowThreshold_Expect111(){} calculateTax_givenChrisSalaryAboveThreshold_Expect111(){} calculateTax_givenDavidSalaryBelowThreshold_Expect222(){} calculateTax_givenDavidSalaryAboveThreshold_Expect222(){} calculateTax_givenScottSalaryBelowThreshold_Expect333(){} calculateTax_givenScottSalaryAboveThreshold_Expect333(){} リファクタリング後、FactoryクラスNameHandlerFactoryと少なくとも3つのの実装ができInameHandlerます。 テストをリファクタリングするにはどうすればよいですか?の単体テストを削除して、実装ごとにTestクラスを作成する必要claculateTax()がEmployeeTestsありますInameHandlerか? Factoryクラスもテストする必要がありますか?

5
5人の新しいジュニア開発者と多くの複雑なタスク。今何?
私たちの会社は、私たちの製品開発を手伝うために5人のジュニア開発者を雇いました。残念ながら、新機能と今後のバグ修正には、最近卒業した開発者が通常持っているよりも深い知識が必要です(スレッド化/同時実行、複雑なシステムでのパフォーマンスボトルネックのデバッグなど)。 彼らが(おそらく)解決できるタスクの委任(および計画)、彼らの質問への回答、それらのメンタリング/管理、彼らのコードのレビューは私の時間のすべてを使い果たし、委任プロセス全体がかかるよりも短い時間で問題を解決できると感じていることがよくあります(私の時間のみを数えます)。また、システムの深い知識や高度なスキルを必要とするタスクを解決する時間がないため、近い将来に変更されることはないようです。 それで、今は何ですか?彼らと私の時間を効果的に使用するにはどうすればよいですか?

2
変更されていないGPL(v2 +)プログラムをコア依存関係として使用してソフトウェアをサービスとして実行する:SaaSソースコードをリリースする必要がありますか?
私はオンラインでのみアクセスされるサービスプロジェクトとしてのソフトウェアを設計しています。GNU GPL(v2以降)でカバーされている実行可能ファイルに強く依存している可能性があります。 私のコードは、もしそれを配布するつもりなら、GPL条項にも基づいて配布する必要があることを理解しています。ネットワークを介してサービスを実行しても、コードが伝達/配布されていないことは間違いありません。したがって、私はすべてのコードを開示する必要なしにGPL依存関係を使用できると考えるのは正しいですか? 具体的な例を挙げましょう。Googleドキュメントのようなオンラインドキュメント処理システムで設計しているとしましょう。基本的にすべてのファイルタイプをシステムにアップロードし、それを内部形式に変換できるようにしたいと考えています。コンバーターをスクラッチアウトしようとするのではなく、私が知っている既存のプログラムを使用して、変換を可能にします。このプログラムは、GNU GPL v2(以降)のライセンスが付与された実行可能ファイルです。ソースコードを提供せずに合法的にサービスとしてのソフトウェアを入手できますか?


1
組み込みのPythonモジュールを編集できますか?
私は現在Pythonを学習しており、数学ライブラリの使用についての本の途中です。PythonのWebサイトを調べたところ、ライブラリが少々不足していて、さらに便利な関数をいくつか作成していることがわかりました。たとえば、先に進んで、係数を取得して方程式の根を返す関数を作成しました。本質的には二次式関数です。これをpython Mathライブラリに追加できるかどうか疑問に思っています。そうでない場合は、関数を呼び出すだけで作成した他のPythonプログラムでその関数を使用できるように、どのように保存しますか?

5
コード再利用の哲学に対処する方法は?
新しいプロジェクトを始めるときは、コードの再利用について常に考えています。 コードをどの程度再利用可能にする必要がありますか? これをアプリケーションの範囲に制限する必要がありますか、それともプロジェクトの外部で再利用できるようにする必要がありますか? ときどき、コードの再利用性が単純な設計の邪魔になるように感じることがあります。コードの再利用についてのあなた自身の理解とアプローチを共有してください。

5
TDD:密結合オブジェクトのモックアウト
時々、オブジェクトは密結合される必要があるだけです。たとえば、CsvFileクラスはおそらくCsvRecordクラス(またはICsvRecordインターフェイス)と緊密に連携する必要があります。 ただし、私が過去に学んだことから、テスト駆動開発の主な理念の1つは、「一度に複数のクラスをテストしないこと」です。ICsvRecordつまり、の実際のインスタンスではなく、モックまたはスタブを使用する必要がありますCsvRecord。 しかし、このアプローチを試した後、CsvRecordクラスをモックアウトすると少し毛むくじゃらになることに気づきました。これにより、2つの結論のうちの1つに導かれます。 単体テストを書くのは難しい!それはコードの匂いです!リファクタリング! すべての依存関係をモックアウトするのは不合理です。 モックを実際のCsvRecordインスタンスに置き換えると、状況ははるかにスムーズに進みました。他の人々の考えを探しているとき、私はこのブログ投稿を偶然見つけました。これは上記の#2をサポートしているようです。自然に密結合されているオブジェクトの場合、モッキングについてそれほど心配する必要はありません。 私は道を外れていますか?上記の仮定2の欠点はありますか?デザインをリファクタリングすることを実際に考えるべきですか?
10 tdd  coupling  mocking 

3
OAuth2フロー-サーバーは認証サーバーで検証されますか?
私はOAuth2で頭を悩ませようと何度も読んでいましたが、それでも何か混乱しています。 クライアントがOAuthプロバイダー(Googleなど)を承認し、リソースサーバーがユーザーのプロファイルデータにアクセスできることを理解しています。その後、クライアントはアクセストークンをリソースサーバーに送信し、リソースを返すことができます。 しかし、どのドキュメントでもカバーされていないように見えるのは、クライアントアプリがリソースサーバーにリソースを要求し、それにアクセストークンを渡したときに何が起こるかです。これまでに読んだことはすべて、リソースサーバーが要求されたリソースで応答するだけであると述べています。 しかし、それは巨大な穴のようです。確かにリソースサーバーはアクセストークンを何らかの方法で検証する必要があります。そうしないと、古い要求を偽造して、古い、盗まれた、偽の、またはランダムに生成されたトークンを渡すだけで、それを受け入れるだけです。 これまでに読んだものは不完全だと感じるので、誰でも簡単にOAuth2の説明に従うことを私に向けることができますか?
10 security  oauth2 

1
概念的には、各スレッドが独自のスタックを取得すると言われているのはどういう意味ですか?
私が読んでてきたブライアン・ゲッツにより、実際にJavaの並行処理を し、セクション内のスタック閉じ込め、各スレッドは独自のスタックを取得し、そのローカル変数は、本質的に実行中のスレッドに限られていることを述べています。これらは実行中のスレッドスタックに存在し、他のスレッドからはアクセスできません。各スレッドが独自の実行スタックを持っているとはどういう意味ですか?

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