ソフトウェア工学

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

3
サービス層とDAO層のあるアプリケーションのテストでは、何をモックする必要がありますか?
私のクラスはこの構造に従っています サービス層(InputDTOを作成してDBデータにマップ) DAO層(実際にDB呼び出しを実行します) サービス層のJUnitテストを作成すると、DAO層が呼び出され、実際のDB接続とDBからのデータの取得が期待されます。 DAO層をサービス層から完全にモックする必要がありますか、それともDB接続とDBから受信したデータをモックする必要がありますか? 次に、アプリはキャッシュから特定のデータを期待します。 JUnitランタイムの場合、キャッシュがないので、これをどのように処理する必要がありますか?サービス層メソッドには、詳細を取得するためのキャッシュの検索が含まれます。

4
「オープンソース」が「マイソース」になることはありますか?
必要な機能を備えたオープンソースコードをダウンロードしようとしても、必要なオプションや必要な機能がほとんどない場合...そして、ベースコードはまだオープンソースプロジェクトから残っていますが、多くが変更され、多くが追加されました...そのコードは「オープンソース」ではなく「マイソース」になりますか? 編集: ところで、私は実際にはプロジェクトを考えていません。これは一般的な用語にすぎません-したがって、ライセンスはわかりません。この質問は、自分が改善できるプロジェクトを目にしたとき、たまに気になってしまいます...

3
アレイを拡大するには何枚のコピーが必要ですか?
動的配列の分析を読んでいます(Skienaのアルゴリズムマニュアルから)。 つまり、配列構造があり、スペースがなくなるたびに、元のサイズの2倍のサイズの新しい配列を割り当てます。 これは、アレイのサイズを変更する必要があるときに発生する無駄について説明しています。 これは、(n / 2)+1からnまでが最大で1回移動されるか、まったく移動されないことを示しています。これは明らかです。 次に、要素の半分が1回移動し、要素の4分の1が2回移動する、などと記述すると、移動の総数Mは次のようになります。 これは実際に起こるよりも多くのコピーを追加するように私には思えます。 例えば 以下の場合: array of 1 element +--+ |a | +--+ double the array (2 elements) +--++--+ |a ||b | +--++--+ double the array (4 elements) +--++--++--++--+ |a ||b ||c ||c | +--++--++--++--+ double the array (8 elements) +--++--++--++--++--++--++--++--+ |a ||b ||c ||c …

10
より少ないIDEでより多くの言語で開発する方法
.net、C#、Java、ActionScript、JS / CSS、およびScalaやHaskellなどの関数型言語で開発できるようにコンピューターをセットアップしたいと思います。ただし、これを行うには、フル機能のIDEを最小限に抑えて、/コンピューターのハードドライブ領域を占有するプログラム/複数のIDEを同時に実行するようにしたいと考えています。 学習/使用する必要のあるフル機能のIDEの量を最小限に抑えるために使用できるプログラム。(たとえば、Eclipseがこれらすべてのフレームワークを処理できる場合、それは有効な答えになります) 編集:この質問はまだ何年も後にヒットしているようです。今日(2018年)私はVisual Studio Codeを「emを支配する1つのIDE」として使用しています。
8 ide 

1
SVNでの放棄ウェアの一般的な方法
私は小さなユーティリティ用の一般的なリポジトリを持っています(それは当時、自分のリポジトリを保証するには小さすぎると考えられていました。「それ自体の別の問題」かもしれません)。しかし、私が働く1つのルールは、何も捨てないことです。SVNから削除するということは、実際には削除されないということです。履歴のどこかにあるだけですが、古いものをもう一度見つける必要がある場合に備えて、それはまだ危険な場合があります。 非推奨のアイテムを維持するだけでなく、それらを邪魔にならないようにするための最善の戦略は何でしょうか?
8 svn 

2
.NET 4.5はReactive Extensionsを廃止しますか?
とりわけ、.NETのReactive Extensionsは同時実行管理を簡素化します。 私が聞いたことから、.NET 4.5は、awaitキーワードなどを使用して同時実行管理を簡素化します。 私の質問: .NET 4.5はReactive Extensionsを廃止しますか? または、Microsoftは.NET 4.5の追加を、非同期および並行プログラミングに取り組むための代替手段として売り込む予定ですか?
8 .net 

2
不等式演算子に= / =を使用する言語はありますか?
ウィキペディアは言う: 等しくない 不等式を表すために使用される記号(項目が等しくない場合)は、スラッシュの等号 "sign"(Unicode 2260)です。 ほとんどのプログラミング言語は、ASCII文字セットに制限されており、〜=、!=、/ =、= / =、または<>を使用してブール式の不等式演算子を表します。 これらの演算子のすべてがで見つけることができます。この表離れてから、=/=。私はこのequals-slash-equals をプレーンテキストでフォーマットする方法として使用できますが、プログラミング言語では使用できません。 =/=プログラミング言語の不等式演算子として使用されていますか?


2
アプリケーションのデモ版を維持するには?
プロダクションアプリケーションを見込み顧客にデモできるようにする必要があります。今日のセットアップ方法は簡単です。デモアプリケーションは、現在のクライアントのデータを保護するためにデータベース内のデータが難読化されていることを除いて、運用システムの完全な複製です。アプリケーションの変更を必要としないため、これはうまく機能します。 Bossは本日、潜在的なBOMBSHELLをドロップし、デモシステムには特別なリンクを含める必要があり、デモにのみ表示されると述べました。彼はさらに、将来的にはデモアプリと本番アプリの間には大きな違いがあるかもしれないと説明しました(たとえば、機能の全領域)。私は今何をしますか? 私がやることについて考えたいくつかのこと: デモシステムに固有のSubversionで別のブランチを維持する デモ用の変更を含むインストールパッケージを作成し、本番インストールパッケージを元に戻してビルドする アプリケーションをモジュール化する(方法がわからない) 説明:「ネジを締めてください!私はそれをしません!」(笑) アプリで何らかの条件付きロジックを使用して、それがデモアプリか本番アプリかを判断します。例(URLに「デモ」が含まれている場合は、それ以外の場合は非表示)。 これまでに推測していない場合、これはWebアプリケーションです。 とにかく、私はこのシナリオでどちらが良いか、またはどれも良いものがないかどうかについての経験はありません。誰かが答え、戦略、何かを持っています!?

2
異なるエディターを使用したペアプログラミング
私は特定のプロジェクトや機能のペアプログラミングが本当に好きです。これは、即時の健全性チェックとして機能し、開発チーム全体のコードカバレッジを増やすことができます。そうは言っても、私はいつもエディターに関して問題にぶつかるようです。私は主にRubyをコーディングしており、個人的にはVIMを使用するのが好きですが、チームの他の開発者はEMACS、TextMate、RubyMineを使用しています。その上、2人の開発者が同じエディターを使用している場合でも、テストの実行や特定のファイルの実行には、誰もが異なるマクロを持っているようです。 私の質問はこれです:誰もが異なるエディター設定を持っている場合、どのようにプログラムをペアリングし続けるのですか?2人の開発者が異なるエディターのプログラムをペアリングできるようなソフトウェアや開発方法はありますか?どちらも使用できる共通のエディターに同意する必要があるだけですか?あなたの会社でこの問題をどのように解決しますか?

4
VM言語が一度だけコンパイルされないのはなぜですか?
(最初に、コンパイラと仮想マシン(別名)は私にとってまったく未知のフィールドであることを明確にする必要があります) 私が理解しているように、Java / C#/ ...アプリケーションが実行されるたびにVMが呼び出され、中間コード(バイトコード、CILなど)を機械語命令に変換します。 しかし、なぜこの操作を一度だけしか実行できないのですか?

2
c ++モデルビュープレゼンター:プレゼンターを構築する場所は?
MFCプロジェクトでThe Humble Dialog Boxペーパー(pdf)に記載されているモデルビュープレゼンター(MVP)パターンを使用しています。問題はほとんどのGUIツールキットと同じだと思います。 私を悩ませているのは、プレゼンターだけでなく、プレゼンターが必要とするサービスも作成している具体的なビュー(つまり、ダイアログクラス)です。それは正常ですか?ビューがプレゼンターが必要とするサービスを知る必要があるのはなぜですか?私が考えているのは、プレゼンターをダイアログクラスに依存的に挿入する必要があるということです。 アプリケーションのメインコントロールは、CWinAppから派生したクラスです。では、このクラスでサービスとプレゼンターを作成してから、ダイアログクラスに挿入する必要がありますか? ただし、プレゼンターがコンストラクターでビュークラスへの参照を必要とする場合、ダイアログクラスにプレゼンターを依存性注入するにはどうすればよいですか? MyPresenter(IView *view, MyService *service); また、メインウィンドウがポップアップウィンドウからスポーンした場合、そのウィンドウプレゼンターとサービスの詳細はどこに構築する必要がありますか? これはC ++なので、どんな種類のDIフレームワークにも興味があるとは思いません。 更新 私が持っていた1つのアイデアは、nullビューでプレゼンターを作成し、コンストラクターがプレゼンターをダイアログクラスに挿入し、ダイアログクラスのコンストラクターでSetView(IView *view)プレゼンターのメソッドを呼び出すthis場所thisがダイアログクラスになる場所(IViewから派生)でした。 )。そう: MyApp::Start() { SomeService *service = new SomeService(); MyPresenter *presenter = new MyPresenter(null, service); MyDialog *dialog = new MyDialog(presenter); ... } MyDialog::MyDialog(MyPresenter *presenter): presenter_(presenter) { presenter_->SetView(this); } 少しぎこちないように見えますが、サービスの構築をDialogクラスから除外しています。空のビューは少し危険なようです。代わりの方法は、空のメソッド本体を持つNullViewクラスを実際に作成し、それをプレゼンターコンストラクターに渡すことです。

1
ウォーターフォールのほかに、他の計画主導のソフトウェア開発方法論は何ですか?
私はただバランスの敏捷性と規律を読みました。悪いタイトルはさておき、PSP / TSPを採用していた計画主導のプロジェクトチームと、Extreme Programmingを使用したアジャイルチームとは対照的でした。 著者が計画主導の方法論の例を提供したとき、彼らはパーソナルソフトウェアプロセス/チームソフトウェアプロセスを使用しました。すぐに使用できるこれらは計画主導の方法論ですが、これらはプロセスフレームワークとして使用するようにも設計されており、最終的には実行する処理の種類ではなく、実行する処理の種類のみを指定します。アジャイル環境でも。俊敏でありながらPSPの原則を順守することは可能であり、私はTSPについて十分に理解していません。 本のある時点で、彼らはいくつかの方法論を列挙し、敏捷性の観点からそれらをランク付けしています。スクラム、リーン、クリスタル、XPなどのメソッドが上位にあります。下部(アジャイルの大部分から最小)は、Rational Unified Process、チームソフトウェアプロセス、機能主導開発、CMMI、ソフトウェアCMM、パーソナルソフトウェアプロセス、およびクリーンルームで構成されています。 PSP:ソフトウェアエンジニア向けの自己改善プロセスのワッツハンフリーは、プロセスの定義、特にパーソナルソフトウェアプロセスの変更に関する章を設けています。共通のテーマは、プロセスは規範的(彼らは何をすべきかを言う)であり、記述的(どのようにそれを行うのか)ではないということです。TSPもほとんど同じだと思います。CMMIもアジャイルメソッドと組み合わせて使用​​されており、SEIにはその本(まだ読んでいない)があります。 機能駆動型開発は、プロジェクト管理へのアジャイルアプローチとしてよく宣伝されていますが、著者はそれをアジャイル性の低い方法論としてランク付けすることを選択しています。 RUPは反復フレームワークです。信じられないほど詳しくはありませんが、フレームワークであることから、SW-CMM、CMMI、PSP / TSPとグループ化して、アジャイルまたはプラン主導の方法論として実装できるようになりました。 この本で私が同意する唯一の他の例は、クリーンルームソフトウェアエンジニアリングです。クリーンルームの主要なコンポーネントは、正式な方法の使用、統計的な品質管理、および統計的に適切なテストです。時間とコストのオーバーヘッドが加わったため、これらをアジャイル(反復/増分)メソッドで使用できなかった理由はわかりません。 私が何を求めているかを明確にするために、アジャイルメソッドのファミリーには、スクラムとエクストリームプログラミングの形で抽象的なアイデアの特定の実装が含まれています。これらは、反復的かつ段階的な開発、変化への対応、人(個人とチーム)、頻繁に機能するソフトウェアの提供、顧客との共同作業などの概念を実現します。彼らは、役割、成果物、会議、タイムボックス、およびその他のプラクティスを明確に指定し、「スクラムを実行する」または「エクストリームプログラミングを実行する」とは、パッケージを取ることを意味します。たとえそうであっても、それらは調整可能性と新しいプロセスの作成を可能にします(しかし、あなたは「スクラムをしている」または「XPをしている」ではありません)。しかし、「do X」は見つかりませんでした だから、私の質問:より計画主導のソフトウェア開発方法論の例は何ですか?多くのプロセスフレームワーク(PSP / TSP、SW-CMM、CMMI、RUP)では、計画主導またはアジャイル開発も可能ですが、説明的なものはありません。しかし、たとえばスクラムやエクストリームプログラミングに直接対応するような、真に計画主導の方法論はありますか?

1
拡張可能なWebアプリケーションを作成する方法は?
拡張可能なWebアプリケーションをどのように実装しますか?私が考えているのは、プラグインサポートを提供するJenkinsやHudsonに似たWebアプリケーションです。プラグインを見つけてロードする方法は明らかですが、プラグインをアーキテクチャ全体に統合する方法はわかりません。特に以下の点については不確かです。 プラグインはどのようにビューを変更することができますか、例えばフォームに入力要素を追加しますか? 私の最初のアイデアは、プラグインが特定のフォームのパーシャル/フラグメントを登録できるということです。 例:ユーザー登録ビューに表示される典型的なニュースレターチェックボックスフラグメントを登録するニュースレタープラグイン。 プラグインは着信要求にどのように反応しますか? この場合も、直接的なアプローチは、特定の要求またはアクション(/ userへのPOST要求など)のリスナーを提供することです。 プラグインはどのようにしてデータを保持できますか? これは、NoSQLデータストレージソリューションがリレーショナルデータベースよりも優れている状況であると想定しています。 拡張可能なWebアプリケーションに関して、コメント、アイデア、経験(デザインパターンもあるかもしれません)があれば幸いです。

4
電子メールを外部システムへの入力として使用する場合、本文のみの電子メールをトリミングする方法は?
アプリケーションがメールに送信してコメントに返信したり、ToDoを追加したりできるようにする場合、さまざまな標準が存在するため、関連するテキストのみのメールをトリミングすることが問題になります。多くの場合、次のようなものが表示されます。 ジョー、こんにちは。いつ町に戻るか教えてください。 Bobによる投稿、30分前 13日に戻ります。 - よろしくお願いいたします。JosephR . Roberts シニアパートナー この通信は機密情報であり、Whatever Law Firmの所有物です。 Joeによる投稿、10秒前 署名はおそらく取り除くのが最も難しく、引用されたテキストが最も簡単です。トリミングの包括的な戦略は多面的であり、理想的には学習になると思います。私は良いシステムがすべきだと思います: 引用された本文を削除 引用ヘッダーを削除(「10月15日、Joeは次のように書いた:」) 署名を削除する 手動で入力したものはすべて保持します。 これを達成するためにシステムはどのような手順を踏む必要がありますか?また、システムが認識すべき落とし穴は何ですか? この回答は、同様の質問に対する有用な回答の良い例です

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