ソフトウェア工学

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

3
支払いプロバイダーとの統合。適切で堅牢なOOPアプローチ
歴史 現在、私たちはオンライン支払いにいわゆるリダイレクトモデルを使用しています(支払人を支払いゲートウェイに送信し、そこで彼は支払いの詳細を入力します-ゲートウェイは成功/失敗のコールバックページに戻ります)。これは簡単でわかりやすい方法ですが、残念ながら非常に不便であり、お客様を混乱させることがあります(サイトを離れる、別のサイトに追加ログインしてクレジットカードの詳細を変更するなど)。 意図と問題の説明 現在、XML要求と応答の交換を使用する統合アプローチに切り替える予定です。私の問題は、処理中に発生する可能性のあるすべて(またはほとんど)の要求にどのように対応するかです。通常、単純さは堅牢であり、複雑さは壊れやすいことを念頭に置いてください。 例 ユーザーによる中止:ユーザーはクレジットカードの詳細を入力し、送信を押します。プロバイダーのゲートウェイへのXMLメッセージが送信され、応答を待ちます。ユーザーがブラウザで「停止」を押すか、ウィンドウを閉じます。 PHPのignore_user_abort()はオプションかもしれませんが、それは信頼できますか? ユーザーを「お待ちください」ページにリダイレクトすると、接続に依存しない実際のプロセッサへのAJAXまたはその他の要求が開かれます。 データベースがなくなる 非常に複雑に聞こえますが、たとえば、米国のWebサーバーと英国のDBの場合、これは発生し、また発生します。ユーザーが注文を一緒にクリックすると、支払い要求がプロバイダーに送信されましたが、応答をデータベース。個々のステップに応じて、PHPを使用して「トランザクション」のようなSQLを開始し、最後にのみコミットまたはロールバックするアプローチを使用できますか?その後、コミットもロールバックも発生しなかった場合、ユーザーを「ロック」して、ユーザーが再度支払うことを防いだり、不適切に支払いを説明したりしないようにすることができます。 また、技術的に他に何を検討する必要がありますか?たとえば、Worldpay、Realex、SagePayの統合例では、洞察が得られません。また、私の検索エンジンまたは私の検索用語は、これについて他の誰かの考えを見つけるのに十分ではありませんでした。 これにどのように取り組むかについての洞察をありがとうございました!
8 design  php  payment 

3
JavaのファイルI / Oには何が適していますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 三人のうち BufferedReader / Writer バイナリストリーム チャンネル JavaでのファイルI / Oの現実において どちらがより好ましいのですか?それはなぜですか? バイナリデータをファイルに入れたり読み取ったりするためのチャネルと、文字列データ用のBufferedReader / Writerを好みます
8 java  io 

2
検証に実際のテストが含まれていないのはなぜですか?
このトピックについて多くを読んだ後--- 検証と検証、ソフトウェアテストと品質保証に関するこのSoftware Testing Fundamentalsサイトなど --- NaikとTripathyによる理論と実践 ---まだわかりません。検証では、製品を適切に構築していることを証明し、検証では、適切な製品を構築していることを証明します。しかし、検証手法として言及されているのは静的手法(コードレビュー、要件チェックなど)だけです。あなたがそれをテストしない場合、それが正しく実装されているかどうかはどのように言えますか?検証は、製品が指定された要件を満たしていることを保証すると言われています。繰り返しになりますが、機能が何らかの形で機能するように指定されている場合、テストすることによってのみ機能すると言えます。 誰か私にこれを説明してもらえますか?

1
プラグインベースのソフトウェア設計
私はソフトウェア開発者で、ソフトウェア設計のスキルを向上させたいと思っています。ソフトウェアは機能するだけでなく、再利用可能で後の目的に拡張できるようにしっかりしたエレガントなデザインにする必要があると思います。 今、私は特定の問題の良い実践を理解する助けを探しています。実際、私はプラグインを介して拡張可能なソフトウェアを設計する方法を見つけようとしています。 私が持っている質問は次のとおりです。 プラグインはお互いの機能にアクセスできますか?これは私が推測する依存関係をもたらすでしょう。 ビデオと音楽を再生するが、後でビデオのステータスを読み取ることができると言うプラグインを介して機能を追加できるマルチメディアソフトウェアを開発したい場合、メインアプリケーションがプラグインに何を提供する必要がありますか(時間、bps、...)そしてそれを表示します。これは、プレーヤー自体がメインプログラムの一部であり、そのような情報を取得するためにプラグインにサービスを提供する必要があるか、またはプレーヤーをプラグインとして開発する方法もある方法で可能性を提供する必要があることを意味しますかそれと対話するために他のプラグインに? ご覧のとおり、私のソフトウェア開発スキルの向上に努めているため、私の質問は主に学習を目的としています。 ここで助けを見つけて、私の質問に何か問題があれば謝罪したいと思います。

4
引数またはメンバー変数としてのメソッドフラグ?
タイトルは「メソッドフラグを引数として、またはメンバー変数として?」最適ではないかもしれませんが、より良い用語のATMがないため、次のようになります。 私は現在、特定のクラス(プライベート)メソッドのフラグを関数の引数として渡すか、メンバー変数を介して渡すか、この側面をカバーするパターンまたは名前があるかどうか、および/またはこの問題を回避しようとしています。これが他の設計上の問題を示唆しているかどうか。 例(言語はC ++、Java、C#である可能性があり、実際にはIMHOには関係ありません): class Thingamajig { private ResultType DoInternalStuff(FlagType calcSelect) { ResultType res; for (... some loop condition ...) { ... if (calcSelect == typeA) { ... } else if (calcSelect == typeX) { ... } else if ... } ... return res; } private void InteralStuffInvoker(FlagType calcSelect) { …

2
コンピュータ科学者にとって離散数学はどのくらい重要ですか?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 5年前休業。 ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 タイトルの通り、 コンピュータ科学者にとって離散数学はどのくらい重要ですか? 背景:私は、並列計算の分野で働くための優れた基盤を得るために、アルゴリズム、複雑性、計算可能性理論、プログラミング言語などの基礎に焦点を合わせて修士号を取得しています。 もう少し背景:私の大学では、修士号のコースの選択に多くの自由を与えています。正式には「ソフトウェアエンジニアリング」と呼ばれていますが、幅広い選択科目があるため、別の焦点が可能です。興味深いことに、選択科目のどれも数学の講義ではありません!学位として使えなくても、半学期を成功裏に修了する離散数学のコースを考えています。この質問で、私は努力が正当であるかどうかを調べようとしています。

2
APIの要件を体系的に文書化する方法は?
私は現在プロジェクトに取り組んでいます。そこでは、クラウドコンピューティングを使用する2つの特定のITシステムの要件を分析して、クラウドAPIを取得する必要があります。言い換えれば、私はこれらのシステムがクラウドAPIに対してどのような要件を持っているかを分析し、彼らが現在の目標を達成しながら、それを切り替えることができるようにする必要があります。 プロジェクトAの非公式な要件の例を挙げましょう。 APIを介してクラウドで仮想マシンを起動する場合、rootユーザーのメモリサイズ、CPUタイプ、オペレーティングシステム、SSHキーを指定できる必要があります。 仮想マシンごとに1時間あたりのインバウンドおよびアウトバウンドネットワークトラフィックを監視できる必要があります。 APIは、仮想マシンへのパブリックIPの割り当てとパブリックIPの取得をサポートする必要があります。 ... プロジェクトの後の段階で、クラウドAPIを標準化するいくつかのクラウドコンピューティング標準を分析して、現在の標準の潜在的な欠点がどこにあるかを見つけます。特定の標準はリソースの使用状況の監視をサポートしていないため、現在は使用できないという結果がおそらくあります。 現在、体系的に自分の要件を書き留めて分類する方法を模索しています。私が現在それらを書き留めている方法(上記の3つの点のように)はあまりにも非公式です。 私はいくつかの要件エンニーリングとソフトウェアアーキテクチャの本を読みましたが、それらはすべて詳細と実装に集中しすぎています。私は本当にAPI /インターフェースを介して提供される機能にのみ関心があり、UML図などは私にとって正しい選択だとは思いません。現在収集した要件はユーザーストーリーとして説明できると思いますが、高度な要件分析にはこれで十分ですか?たぶん私は「一段深く」行かなければならない...

4
PHPからNode.jsに変更することでメリットがありますか(コンテキスト内)[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 状況:本質的にはロギングサービスをロールアウトしようとしています。PHPはかなり重いので、現在の実装ではそれを使用しています。 約200台のコンピューター(ほとんどが同じネットワーク上にある)があり、それぞれがHTTP POST経由で1日あたり約5000の要求を送信します。各リクエストには約300バイトのデータが含まれます。 受信側はAmazonでホストされており、すべてをデータベースに入れる単純な検証を備えた非常に単純なPHPフォームです。 今、私は最近Node.jsを紹介されましたが、ここのバックエンドに適しているかどうか知りたいです。 これをテストするために何かを簡単に構築できることは確かです。しかし、非同期の方法論を完全に把握していないので、経験のある人に説明してほしい。
8 php  node.js 

5
個人のライブラリにどのように名前を付けますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 私は物事に名前を付けるのがかなり苦手です。 私が一般的に思いつくことができる唯一の名前は「ヘルパー」です。たとえば、パスを操作するための支援関数を含むヘッダーファイルがある場合、それを「ヘルパー」ディレクトリ内に置き、「path-helper.hpp」などの名前を付ける傾向があります。 明らかに、それは悪い命名規則です。:) 自分のヘッダーとライブラリを常に参照するために使用できるフォルダー(および名前空間)に一貫した名前付けスキームを設定したいのですが、入力や覚えやすい名前(などboost)を見つけるのに問題があります...それらの一部を「ヘルパー」や「stdext」などと呼ぶことになってしまいますが、これは素晴らしいアイデアではありません。 覚えやすくタイプしやすく、一般的ではないライブラリの名前をどのようにして見つけますか(「ヘルパー」、「std」、「stdext」など)。 これを行う方法についての提案はありますか?

6
インタビューでCとC ++を混在させることはできますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 インタビューでいくつかのコードを書き留めるように依頼された場合、C ++に完全に固執する必要がありますか、それとも、2つを「混合」して簡単なコードを書くことを頭に入れても問題ありませんか? 説明します。「スタック」データ型を作成するように求められた場合、C ++クラスが最適ですが、一部の文字列を解析する必要がある場合、strtok / sscanfはSTLよりもはるかに簡単です。一方、汎用のコンテナーが必要な場合は、STLとテンプレートが適しています。 すべてはCまたはC ++で実行できますが、インタビューではすべてをコーディングしたり、すべての標準/ STL関数を覚えたりすることはできません。許容できるトレードオフとは何ですか?
8 c++  interview  c 

2
TDDアプリケーションで依存関係を初期化するのは誰ですか?
私はモック/偽のオブジェクトでTDDを実装することを学ぼうとしています。私が持っている質問の1つは、TDDを実装するアプリケーションで依存関係を初期化する方法です。この記事の例 Moq 3でモックを開始すると、次のようになります。 public class OrderWriter { private readonly IFileWriter fileWriter; public OrderWriter(IFileWriter fileWriter) { this.fileWriter = fileWriter; } public void WriteOrder(Order order) { fileWriter.WriteLine(String.Format("{0},{1}", order.OrderId, order.OrderTotal)); } } この例では、コンストラクターがIFileWriterパラメーターを取ります。実際のアプリケーションの場合は実際のファイルライターを、単体テストの場合は偽のファイルライターを提供するためです。私の質問は、実際のアプリケーションでは、誰がこのパラメーターを提供するのですか?このアプリケーションの呼び出し元になると思います。コンストラクタにも依存関係がある場合はどうなりますか?呼び出し元のコードもそれに責任がありますか? たぶん、より良い方法は、ファクトリーを使用することです。この工場はどのように機能しますか?そして、工場はどのように分配されますか?上記の方法のようにコンストラクターパラメーターにありますか?

2
IRepositoryからIQueryableを返す
リポジトリパターンを使用して、一般的な使用のために、データセット(テーブル)のIQueryableを返すことは適切ですか? これは多くの場合に非常に便利です。特に、そのインターフェイスを利用する外部ライブラリ、たとえば、UI要素をソート/フィルタリングしてバインドするプラグインを使用する場合に便利です。 ただし、IQueryableを公開すると、デザインにエラーが発生しやすくなる場合があります。これと遅延読み込みの誤った使用を組み合わせると、パフォーマンスが大幅に低下する可能性があります。 一方、使用方法ごとにアクセスメソッドを用意することは冗長であり、多くの作業(ユニットテストなど)も必要です。

2
進行中の作業をgithub / sourceforge / bitbucket / etcにリリースすることは嫌われますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 端的に言えば、私は過去2年間、まったく新しいキャリアを過ごし、学界からデータアナリストの役割(データサイエンティストに向かって)に移行しました。現在の会社に入る前は、コーディングについてほとんど何も知りませんでした。自分のSQLを数か月にわたって週に数時間学習することを除けば。SQLのほかに、Perlに精通し、PHPをあちこちで使用し、他の言語(主にJavaとC)の学習に少し進んできました。だから、私はまだやるべきことがたくさんあります。 自分自身に教えるために、いくつかのサイドプロジェクトを構築しました"Hello World, my name is $name."。たとえば、Minecraftやデバイスドライバーほど複雑ではありませんが、より複雑です。建設的なフィードバックから学び、履歴書に添えるポートフォリオを構築するために、彼らのためにコードをリリースしたいと思います。ただし、これらの多くは進行中の作業であり、正直に言うと、完全にではなく、100%「完了」し、洗練されているコードをすべて公開することに不安を感じています。 私は何も心配していませんか?そうでない場合、プロジェクトをオープンソースとしてリリースする前に、プロジェクトに必要な最低限の磨きのしきい値はありますか?

2
(車両)トラフィックネットワーク内で最短経路を見つけるためのより良いアプローチはありますか?
プログラマの皆さん、 車両の通行をシミュレートするソフトウェアを開発しています。「割り当て」と呼ばれるプロセスの一部は、ルートへの車両の割り当てに関係しており、ある種の最短経路探索アルゴリズムを使用する必要があります。 伝統的に、人々はダイクストラでこれを行っており、特定の科学文献は、おそらくグラフの性質のために、A *や他の代替案は大幅な改善をもたらさないことを示しているようです。 したがって、ダイクストラも使用しています。小さな問題が発生しました。交通リンク(交差点間の道路のスパン)をエッジとして扱い、交差点をノードとして扱う場合、古典的な単方向グラフを取得できません。交差点に近づくと、頻繁に方向転換できるかどうかは従来のグラフでは、ノードから任意のエッジを取得できますが、 この問題は、リンクと交差のペア(「ラス」と呼ばれます)をノードとして表すことで簡単に解決できました。後続の「ラス」または選択したポイントに到達するにはリンクをたどる必要があるため、エッジがこのトラバーサルとして定義され、典型的なグラフが得られます。 次に、結果は単純なテーブルN x Nに格納されます。ここで、Nは「ラス」の数です。 これは(避けられない?)欠点です。シミュレーションの一般的なネットワークに2000の交差点がある場合、約6000リンク、つまりN = 3Vになります。明らかに、交差(V)で数えると、O(log(3V)*(3V + E))になります。 3(または9)は一定の要素であると主張するかもしれませんが、実際の観点からは、処理速度がかなり遅くなり、ストレージスペースが3V x 3Vに増加します。 これを再構成してパフォーマンスを向上させる方法を誰かが知っていますか?必ずしも別のアルゴリズムである必要はありません。おそらく、他の方法でグラフに合うようにデータ構造を再形成しますか?

7
ソフトウェア会社で「リファクタリング/保守グループ」の役割のようなものはありますか?
したがって、私は組み込みソフトウェア開発を行う会社で働いており、他のグループはさまざまな製品のソフトウェアのコア開発に焦点を合わせており、工場にある私の部門(別の地理的な場所にある)もソフトウェア開発に対処する必要があります、しかしすべての製品にまたがるので、製品のソフトウェアの問題が原因でラインがダウンした場合にも迅速に修正できます。 つまり、私たちはジェネラリストであり、他のグループは各製品に特化しています。 地理的に分散していると、コア開発に参加するのが少し難しくなります(まあ、それはそれほど難しいことではないのですが、リモートで協力するということになると、意図しない文化的/政治的な障壁があるかもしれません) )。 だから、私たちは現在、火を消しているだけで、ややアイドル/サブ活用されているので(新しい部門であるか、それが理由かもしれません)、領域を検出することは、私たちにとって良い役割であると考えましたコードのリファクタリングと再設計の機会、および保守性とモジュール性の管理に関連する可能性のある他のすべての実装。他のグループは、時間がないため積極的な期限があり、コードの品質を損なうため、これに焦点を合わせていません(ソフトウェアプロジェクトの永遠の物語) 私のグループ/部門がこの役割を持つ管理職や他のグループによって公式に認識されることを望んでいるということです、そして私はこの問題のために私たちのグループの良い定義/アイデンティティを思いつくのに苦労しています。 だから私の質問は:この役割はすでに存在するものですか?または私はこのようなものを最初に作成したのですか? 編集:つまり、すべてのリファクタリング作業を自分で行うのではなく、リファクタリングイニシアチブを推進するグループです。オープンソースコミュニティーとオープンソース製品のように、今考えてみると、

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