ソフトウェア工学

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

4
依存性注入(DI)と制御の反転(IoC)コンテナーを使用したコンポジションルートの許容可能な配置
Mark Seemannの 'Ploeh'ブログを含むいくつかのソースで、IoCコンテナーのコンポジションルートの適切な配置がアプリケーションのエントリポイントに可能な限り近いことについて読んだことがあります。 .NETの世界では、これらのアプリケーションは、一般的にWebプロジェクト、WPFプロジェクト、コンソールアプリケーション、一般的なUIを持つもの(読み取り:ライブラリプロジェクトではない)と考えられているようです。 構成ルートをライブラリプロジェクトのグループの論理的なエントリポイントを表し、このようなプロジェクトグループのクライアントが他の誰かの作業である場合、構成ルートをライブラリプロジェクトのエントリポイントに配置することは、この賢明なアドバイスに本当に反していますか? 、その作者が自分のプロジェクト(UIプロジェクトまたはさらに別のライブラリプロジェクトでさえ)にコンポジションルートを追加できない、または追加しないだろう? 私はIoCコンテナー実装としてNinjectに精通していますが、必要なすべてのバインディング構成を含むモジュールをスキャンできるという点で、他の多くも同じように機能すると思います。これは、バインディングモジュールを独自のライブラリプロジェクトに配置して、メインライブラリプロジェクトの出力でコンパイルできることを意味します。クライアントが構成を変更したい場合(私のケースではありえないシナリオ)、置換DLLをドロップして、バインディングモジュールを含むライブラリ。 これにより、最も一般的なクライアントが依存関係の注入とコンポジションのルートを処理する必要がなくなり、ライブラリプロジェクトグループのAPIが最もクリーンになります。 しかし、これはこの問題に関する従来の知恵に直面して飛んでいるようです。そこにあるほとんどのアドバイスは、開発者が自分のケースではなく、UIプロジェクトの開発にも何らかの調整を行っていることを前提としているだけですか?

3
中央開発サーバー(LAMP)でバージョン管理を管理する
私は最大5人の(ウェブ)開発者がいる小さなチームで働いています。私たちのチームは頻繁に成長しており、複数の人が同じコードで作業しているときに問題が発生したため、VCSをセットアップすることにしました。 現在の状況 現在、中央開発サーバー(LAMP)を使用しています。したがって、すべての開発者が同じコードベースで作業し、コードがテストされてライブサーバーの準備ができている場合は、ftp経由でコードをコピーするだけです。私はこれがanno 1600ワークフローの一種であることを知っていますが、そうです。それが何であるか、そしてこの質問の理由でもあります。 開発サーバーでは、ディレクトリ構造は次のようになります。 /var/www /Project1 /Project2 /Project3 ... さらに、いくつかの小さな非Webアプリケーション-Android / iPhone / Windows 8などのアプリといくつかのC#ツールもあり、これらもVCSに含める必要があります。 目標と問題 私たちの目標は、VCSのクリーンセットアップを取得することです。VCSは、問題追跡ソフトウェアと連携し、コードを上書きせずに同じプロジェクトで同時に作業できるようにし、バージョン管理の利点を提供します。 私たちにとっての最初の質問は、どのテクノロジーを使うべきかということだと思います。私たちの一部は、すでに転覆を経験しています。しかし、gitはある種の「標準」になり、多くの「プロgit」の議論がWebユーザーの間で存在するため、私たちはgitを使用する傾向があります。 不確実性が始まります。git-分散型VCS-を使用する場合、各開発者のコ​​ンピューターで別個の開発サーバーの使用を開始する必要があるようです。それに関する問題は次のとおりです。 ときどき別のコンピューターで作業するため、コードのプッシュを忘れると問題が発生します。 開発サーバーはライブサーバーと同じである必要があるため、仮想マシンで作業する必要があります(これは私たちの環境では強制できないため、不可能だと信じています)。 開発サーバーは通常、「トライアウト」または「プレゼンテーション」サーバーとしても機能し、開発者以外の人が何が起こっているのかを確認できました。 単一の(!)開発サーバーを使用しながらシステムから利益を得ることができるように、gitで別の可能なセットアップはありますか?たぶん、開発者ごとに異なるディレクトリがあります。または、作業中のファイルをロックし、リポジトリにコミットして、同じコードベースで作業することはできますか?それが私たちにとっての要因になった一方で、複数の開発者がアプリケーションの同じ部分で同時に作業することはまだ珍しいと言うことが重要かもしれません。

5
ほとんどのMVC厳格なphpフレームワーク[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 5年前休業。 私は約6か月間、MVCパターンに頭を悩ませてきました。MVCおよびHMVCパターンに関する大量の記事、Q&A、ブログ投稿を読んだことがありますが、100%にはなりません。 広く使用されているPHP MVCフレームワークの1つであるCodeIgniterを使用してMVCを学習してみました。私はそれを使って自社の内部Webサイトをいくつか実装しました。それでも、100%取得することはできません。何かを学ぶための最良の方法の1つは、厳密に定義されたルールに従うことです。 だから私の質問は: MVCパターンの実装方法に関して、最も厳密なPHPフレームワークは何ですか?MVCを完全に取得できるように、モデル、コントローラー、ビューの使用方法を定義するものですか?
8 php  mvc  frameworks 

3
このグラフで最短経路を見つけるには、どのアルゴリズムを使用すればよいですか?
約10億個の頂点を持つグラフがあり、それぞれがランダムに約100個の他の頂点に接続されています。 2点間の最短経路の長さを求めたい。使用される実際のパスは気にしません。 ノート: エッジが切断または追加されることがあります。これは、ルックアップの約500分の1の頻度で発生します。また、パフォーマンスを向上させることができるのであれば、エッジ変更をバッチ処理することもできます。 私がすることができ、グラフを事前に処理します。 6ステップ以上かかる場合は、無限に戻ることができます。 0.01%の確率で間違っていても問題ありませんが、長すぎる長さを返す場合のみです。 すべてのエッジの長さは1です。 すべてのエッジは双方向です。 アルゴリズムを探しています。Psuedocode、英語の説明、実際のコードはすべて素晴らしいです。 A *を使用することもできますが、パスファインディング用に最適化されているようです。ダイクストラのアルゴリズムの 使用を考えましたが、すべての頂点の最短パス検出属性を無限大に設定する必要がある手順があります (ユースケースについて疑問がある場合は、アンダーハンドCコンテスト用です。)

5
エクストリームプログラミングの実践により、アプリケーションはエラーが発生しやすくなりますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 私は、エクストリームプログラミングのトピックと、その実践がアプリケーションのエラーやバグのためのスペースを作ることにつながるかどうかについて、学術的な研究を行っています。 多くの人から集めた経験から、双方に当てはまるコメントがあります。多くの人がそれをサポートし、変化するプロジェクト要件を容易にすることができるダイナミクスでそれを毎日の必要性と見なしています。他の多くの人はそれが次のような多くの問題につながると主張します: プロセスでの顧客との過度の関わりは、ニーズではなく顧客の希望の表現につながります 多くの製品には複数の顧客がいて、ニーズと意見の対立を引き起こし、不要な封鎖を引き起こしています。 多くの製品には外部の顧客がなく、製品は内部で使用するため、または将来的に販売するために作られています。これらのケースでは、チーム自体が開発者だけでなくユーザーも演じているため、プロセスの有効性が失われています。 正式なドキュメントには多くのものが存在しません。この非公式性は曖昧なビジョンにつながり、これが私たちが求めたものではないなどと顧客が言う可能性がある問題を引き起こす可能性があります。 問題は、XPに関してこのような相反する意見が存在する理由です。異なるシナリオの問題ですか?他に何かありますか?(タイトルに書かれている)主張はどの程度真実ですか? ここでXPを使用している、または使用した経験のある人に、学習と実際の経験を提供してほしい。回答を裏付ける事実や参照がある場合は理想的です。

4
C#からCへの相互運用にはどのような状況が適切ですか?
C#にunsafeキーワードがある場合、Cライブラリと相互運用することが依然として有益である状況はありますか? 既存のCライブラリを使用して、非常に高速な数値処理、グラフィカルな操作、または行列演算の必要性を理解できました。しかし、たとえばC99でグリーンフィールドDLLを作成し、C#から相互運用するための使用例はありますか? 必要なパフォーマンス特性を得るには、Cにドロップすることが(金属に近いという意味で)唯一の方法である場合があると思います。
8 c#  c  c99 

2
ユーザーストーリーを小さなストーリーに分割する
私は、システムを介したユーザーワークフローなど、大きなユーザーストーリーを役立つ方法で分割するためのさまざまな手法を読んでいます。私が苦労しているのは、これらの小さなストーリーを実現するために次のステップを促進する場合、どのようにこれらの小さなストーリーを表現するかです。プロセスとユーザーへのアプリケーションの主な利点を提供していません。 たとえば、私の新しいシステムが3つの小さなストーリーに分割されている場合、 オンラインで新しいアカウントを作成する 新しいオンラインアカウントに対して特定のエンティティを作成する 私のモバイルデバイスにこれらのエンティティを私のアカウントに対してクエリさせ、それらに作用させる システムは、すべてのストーリーが完成したときにのみ、エンドユーザーに本当に役立つ機能を提供します。したがって、従来の「[ユーザーとして] [機能]で[メリット]を実現したい」とする場合、最初と2番目のストーリーのメリットは、後続のストーリーを促進するだけであり、ユーザーに主要な機能(叙事詩)。これはこれを行う正しい方法ですか?

3
分散型問題追跡[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 5年前休業。 分散型の問題追跡は、私にとってベルトのような考えのように見えますが、実際に大きな成功を収めたことはありません。その正当な理由はありますか? 気がついた: どこでもバグズ セットアップするには複雑すぎる 要件が多すぎる ある程度成功し、一部の大規模プロジェクトで使用されている 化石 あまりにも多くのものを統合しようとし、最終的にそれらすべてのやや悪いバージョンになります-おそらく、まともな(おそらく私が見た中で最高の)分散型問題追跡部分を除いて 他のいくつかの小さなプロジェクト どれも牽引力を獲得していません 私は自分で作ることを考えていますが、始める前に、他の誰もが大きな成功を収めていない理由を知りたいと思います。 予想される問題:(すべて克服できると思います) 更新された分散問題をマージすることは、コードファイルをマージするのと同様に複雑です。 コメントはいつでも入ってくる可能性があり、おそらく正しいフローではないため、会話の継続性が破壊される可能性があります 最新の問題がある中央サーバーへの期待

2
ソフトウェア要件にラベルを付ける方法は?
SRSのソフトウェア要件にラベルを付けるための適切な戦略は何ですか? 通常、ヘッダーにはアウトライン番号が使用されますが、ドキュメントに新しい見出しが挿入されると、番号が付け直されます。私にとっては、各ソフトウェア要件に対してより安定した指定を目指すことは良い考えのようです。これにより、更新されたSRSがあっても、特定の要件を参照しやすくなります。 これに関するあなたの経験は何ですか?

1
アプリケーションの新しいメジャーバージョンを開始するが、古いバージョンを「有効」に保つ方法
AとBという2つのアプリケーションがあります。これらのアプリケーションの現在のバージョンは7.xです(7.1を実行している顧客もいれば、7.2を実行している顧客もいます)。両方のアプリケーションは、次のように同じ共通フレームワーク(これをCと呼びます)を使用します。 +---+ +---+ | A | | B | +---------+ | C | +---------+ 重要な新規顧客がいるため、AとBの機能を1つの大きなアプリケーションにしたいと考えています。AとBを1つのアプリケーションにマージすることは不可能なので、今はAの機能をBに統合しようとしています。これまでのところ良好ですが、いくつかの問題が発生し始めています。 まず、Bの基本機能のみを使用する顧客は、追加されたAのすべての新機能に関心がない(そして、追加のオーバーヘッドが発生する)。彼らは、新しいWindowsバージョンをサポートしてバージョンBをアップグレードしたいだけで、C(共通フレームワーク)に追加されたすべての優れた機能も望んでいるだけです。 次に、現在アプリケーションAを使用している顧客は、アプリケーションBに直接移動したくありませんが、A + Bの機能を組み合わせることで、長期的には役立ちます。アップグレードを簡単にするために、彼らはAを使い続けたいと思っています。 3番目に、Bで行っているすべての開発は、Bのモジュールのパフォーマンスを向上させるために共通層CEgに影響を与える可能性があるため、Cのモジュールをリファクタリングする必要がありますが、CはAでも使用されているため、もっと多くの仕事をする必要があります。さらに、Aは古い、あまり構造化されていないアプリケーションであり、Cのすべての変更はAをより不安定にする可能性があります。 問題はどのように進めるかです。私は現在、7.xリリースでBを分割することを考えています(必要に応じて、ここでいくつかのマイナーな開発とリリース7.3、7.4を今後数年で行うことができます)、および8.xリリース(すべての新機能が含まれます)。 。共通層の問題を解決するために、Cを古いC(7.x)と新しいC(8.x)に分割することもできます。これにより、次の結果が得られます。 +-------+ +-------+ +-------+ | A 7.x | | B 7.x | | B 8.x | +-----------------+ +-------+ | C 7.x | | C 8.x | +-----------------+ +-------+ アプリケーションAはもう進化せず、7.xバージョンの共通レイヤーCに固執します。 …

4
バグを修正できない場合、どこに問い合わせればよいですか?
答えがわからないときの参考資料を探しています。私はソフトウェア開発者のチームを率いています。私たちは毎月新しいソフトウェアリリースを展開しています。 私のチームが修正できないバグがある場合、それは私にあります。ほとんどの場合、問題を解決できますが、行き詰まることがあります。 残念ながら、私は私たちの会社の最上位です。何かを理解するのに助けや助けを求めることができる人は誰もいません。 このような状況での推奨事項やガイダンスはありますか?

3
文字列なしの最長サブシーケンス
サブストリングとしてYを含まないストリングXで最長のサブシーケンスを見つける動的プログラミングアルゴリズムはありますか?この問題は、最長の共通サブシーケンスや文字列など、他のDP文字列アルゴリズムと非常に似ているように見えます。オーバーラップするYの発生を処理できる必要があります。 これは2状態のDP問題である可能性があります。状態[s_pos、t_pos]は、ストリングT [t_pos..M]をサブストリングとして持たないs_posで始まるストリングSの最も長いサブシーケンスです。Nは文字列Sの長さ、Mは文字列Tの長さです。ただし、私の遷移は正しくありません。S= aaabcおよびT =の場合は取得されませんaabc。問題はelseステートメントにあります -文字が等しい場合に遷移する方法がわかりません。実際、私はifブランチが間違っていると感じています...誰が間違っているのか知っていますか? S = aaabおよびT =の場合も失敗しますaab。失敗する理由を説明できます。solve(0、0)を呼び出すと仮定します。solve(0、0)はsolve(1、1)を呼び出します。solve(1、1)はsolve(2、2)を呼び出します。s [2]!= t [2]なので、solve(3、0)から検索を再開します。ただし、aabは部分文字列であり、これをチェックしたり、このケースを考慮したりすることはありません... int solve(int s_pos, int t_pos) { if (s_pos >= N || t_pos >= M) return 0; if (t_pos == M - 1 && s[s_pos] == t[t_pos]) return 0; int ret = 0; if (s[s_pos] != t[t_pos]) { …

5
DIを使用する場合とJavaで自分を作成する場合
私はさまざまな言語でまともな量のOOPを使用していますが、Javaはかなり新しいものです。 私はクラスのコード内に多数のオブジェクトが作成される多くのチュートリアルを読んでいますが、それらを実行しようとしていますが、チュートリアルでクラスのバージョンを構築します。クラス自体。 しかし、Javaは私が使用した他の言語とは異なり、ほとんどすべてがオブジェクトです。文字通りすべてを注入すると、結果は非常に複雑で追跡が困難になります。 明らかに、あなたはStringオブジェクトをインジェクトしないでしょう、そしてインジェクトしない他のオブジェクトがあると思いますが、行がどこに行くべきかわかりません。どの時点で、DIは正しいことをやめ、いつ負荷がかかり始めるのでしょうか?何を注入し、何をインスタンス化するかを実用的にどのように決定しますか? 参考までに、私が実行しているチュートリアルは、単純なクライアントを構築するためのhttp://edn.embarcadero.com/article/31995およびhttp://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.htmlです。サーバ。私はそれらを行ごとにコピーしていませんが、ベストプラクティスに従う同等のクラスを作成しようとしています

5
文字列は不変ですが、なぜすべてが定数ではないのですか?
stringタイプは不変です。 .NETのような高級言語でconstキーワードを使用できstringsます。'const'についての私の理解は一定を意味します(同じままで、値を変更することはできません)。 strings常にではありませんかconstant(IMOの用語constantは、値のライフタイムを意味するたびに型を再作成する必要がある場合、同じコンテキストでは適用できません)、それは一定でした)? 高水準言語、特に.NET(私もJavaに興味があります)では、これはオブジェクトの一般的なメモリ管理/追跡によるものですか、それとも別の理由がありますか?

2
JavaとPHPのメモリ/ CPU消費
私はPHPベースの会社で働いています。バックエンドサービスを作成するプロジェクトがあります。Javaよりも遅いですが、ここの上級メンバーはPHPを採用しています。彼らの唯一の論点は、メモリとCPU負荷の両方の観点から見ると、JavaはPHPよりも重いということです。 JVMはコンテナー環境に似ています。荷物を多く持ち込むと、それだけ多くの量を消費しますが、ここで話しているサービスは中程度の複雑さになります。だから、それはそれほど厳しいことではないでしょう(またはそれはでしょうか?) 私はこの質問が曖昧に大きく傾いていることを理解していますが、私が考えていることは、それは常に同じケースですか?そのJavaはよりハードウェアを要求しますか?私は、実際のシナリオがどのように見えるかについて、あなたが経験したすべての人々の意見を知りたいです。
8 java  php  memory 

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