ソフトウェア工学

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

4
異なるプロジェクト間でクラスまたはインターフェースを共有する
私はSOまたはここでいくつかの答えを探していましたが、結果なしで、あなたに尋ねる理由です。 アプリのサーバー部分とクライアント部分など、2つの異なるプロジェクトがあると仮定しましょう。私は自分のパートを開発していますが、友人は2番目のパートを作成しています。しかし、私たちの両方のようないくつかの共通のインターフェイスを使用する必要があるUserか、AccountInfoまたはChangableAccount順番に互換性を確保するために何でも...。たとえば、クライアントがユーザーデータをサーバーに送信する場合、サーバーは同じクラスで動作する必要があります。インターフェイスなどでも同じです。さらに、共通のインターフェイスに変更がある場合は、両方のプロジェクトでコードを新しい状況に合わせて調整する必要があります。 私が今見ることができる唯一の解決策は、すべての一般的なものが定義されている1つの余分なプロジェクトを作成することです。私たちと私の友人は、このプロジェクトをメインプロジェクト(クライアントまたはサーバー)への依存関係として追加する必要があります。共有プロジェクトは何らかのバージョン管理システムで管理できるため、常に最新の状態になります。 他にどのような解決策を提案しますか?このような問題はプロのアプリでどのように解決されますか?

4
C ++のようなconstを言語に組み込む際の問題は何ですか?
私はC ++のようなconst特定の実行ではなく(キャストアウトのようなconst)のアイデアに興味があります。 たとえば、C#を考えてみましょう。C++のようなconstがなく、その理由は通常の人と時間です。さらに、C#チームはC ++の実行を見て、constCLRをマーケティングし、この時点で十分でした(c#およびconstパラメーターにconstメンバーメソッドがない理由を参照してください;ありがとうSvick)。ことがあれば、我々はさらにそれよりも移動し、何かありますか? もっと深いものはありますか?例えば、多重継承を考えてみてください-通常、(ユーザーにとって)把握するのは難しいと見られているため、言語に追加されません(ダイヤモンドの問題のように)。 言語にそれを避ける方が良いという問題を引き起こす自然の何かがありconstますか?const深さを浅くするか浅くするかを決定するようなものです(constコンテナがあるため、新しい要素を追加したり、既存の要素を変更したりできません。要素が参照型の場合はどうなりますか)。 更新:私はC#について言及しているため、歴史的な観点constから、言語の潜在的な問題の性質に興味があります。 これは言語の挑戦ではありません。現在の傾向や人気などの要因を無視してください-私は技術的な問題にのみ興味があります-ありがとうございます。

4
実装(HashMap)ではなくインターフェイス(Mapなど)を使用してJavaオブジェクトを定義する理由
ほとんどのJavaコードでは、次のようにJavaオブジェクトを宣言する人がいます。 Map<String, String> hashMap = new HashMap<>(); List<String> list = new ArrayList<>(); の代わりに: HashMap<String, String> hashMap = new HashMap<>(); ArrayList<String> list = new ArrayList<>(); 実際に使用される実装ではなく、インターフェースを使用してJavaオブジェクトを定義する設定があるのはなぜですか?

4
「マルチコア」フレンドリーではないと主張するプログラム
このフレーズまたは類似のフレーズは、時々発生します。一般的に、マルチコアプロセッサを最大限に活用するように設計されていないと主張するプログラムを指します。これは、特にビデオゲームプログラミングで一般的です。(もちろん、基本的なスクリプトなど、多くのプログラムには並行性がなく、それを必要としません)。 どうすればいいの?多くのプログラム(特にゲーム)は本質的に同時実行を使用し、OSはCPUのタスクスケジューリングを担当しているため、これらのプログラムは本質的に利用可能な複数のコアを利用していませんか?この文脈で「複数のコアを活用する」とはどういう意味ですか?これらの開発者は、実際にOSタスクのスケジューリングを禁止し、アフィニティまたは独自のスケジューリングを強制していますか?(大きな安定性の問題のように聞こえます)。 私はJavaプログラマーなので、抽象化やその他の理由でこれに対処する必要はなかったかもしれません。


2
視覚障害者向けのCSS?
そのため、HTMLを学習しているときにCSSに出会いました。CSSを使用すると、Webページをクールにしたり、より美しくしたりできるため、興味深いものです。しかし、色、デザイン、スタイルなどに関するものなので、CSSコードの結果を知ることはできません。視覚障害のある人として、目が見える人はいつも私よりも優れたWebページをデザインできるのに、CSSを学ぶべきなのはなぜですか? ここにCSSを書く盲目のプログラマーはいますか?どうやってやったの? CSSをすべて無視して、目が見えるプログラマーに任せるべきですか?または、CSSには、ページを見て、デザインが良いかどうかを確認するように頼まなくてもできることがありますか?
17 css 

6
計算上不可能なビジネス上の問題の例は何ですか?
私は、チューリングマシン(および拡張によりフォンノイマンマシン)が、次のような停止問題を解決できないという現実を受け入れることを拒否する同僚がいます。 あなたは十分な時間とお金で何でもできます。 彼はまた、次のことを主張する理論的な問題を嫌います。 私たちの分野では、これらの質問に出くわすことは決してありません。私たちは理論科学者ではなく、アプリケーション開発者です。 彼にこのことを納得させるために使用できる計算上不可能なビジネス上の問題の良い例はありますか?

6
指数関数的なテストケースが必要なTDDおよび完全なテストカバレッジ
クライアントからの非常に特定の要件ごとに、検索結果の順序付けられていないリストのソートを支援するために、リストコンパレータに取り組んでいます。要件では、重要度の順に次のルールを使用してランク付けされた関連性アルゴリズムが必要です。 名前の完全一致 検索クエリのすべての単語の名前または結果の同義語 検索クエリの一部の単語の名前または結果の同義語(%降順) 説明内の検索クエリのすべての単語 説明内の検索クエリの一部の単語(%降順) 最終更新日が降順 このコンパレータの自然なデザインの選択は、2の累乗に基づいてスコア付けされたランキングであるように思われました。重要度の低いルールの合計は、重要度の高いルールの肯定的な一致を超えることはありません。これは、次のスコアによって達成されます。 32 16 8(降順%に基づく2次タイブレーカースコア) 4 2(降順%に基づく2次タイブレーカースコア) 1 TDDの精神で、私は最初にユニットテストから始めることにしました。一意のシナリオごとにテストケースを作成することは、ルール3および5のセカンダリタイブレーカーロジックの追加のテストケースを考慮せずに、少なくとも63の一意のテストケースになります。これは耐えがたいようです。 ただし、実際のテストは実際には少なくなります。実際のルール自体に基づいて、特定のルールにより、下位のルールが常に真になることが保証されます(たとえば、「すべての検索クエリワードが説明に表示される」場合、ルール「一部の検索クエリワードが説明に表示される」は常に真になります)。それでも、これらの各テストケースを書き出す努力のレベルは価値がありますか?これは、TDDで100%のテストカバレッジについて話すときに通常要求されるテストのレベルですか?そうでない場合、許容可能な代替テスト戦略は何でしょうか?

4
Java Stringに静的な文字列操作メソッドがないのはなぜですか?
Javaデザイナーがjava.lang.Stringクラスで文字列操作メソッドの静的バージョンを作成しなかったのはなぜですか?以下のメソッドは私が参照するものですが、質問はクラス内の他の非静的メソッドにも拡張できます。 concat(String) substring(int, int) replace(char, char) toLowerCase() replace(CharSequence, CharSequence) toLowerCase(Locale) replaceAll(String, String) toString() replaceFirst(String, String) toUpperCase() split(String) toUpperCase(Locale) split(String, int) trim() substring(int) これらのメソッドの非静的バージョンのみを使用すると、そのようなメソッドを呼び出さなければならない場所で明示的な nullチェックが強制されます。たとえば、単に呼び出すexample = example.trim()と、NullPointerException ifになりString example = nullます。そのため、プログラマは次の定型的なヌルチェックを行う必要があります。 if (example != null) example = example.trim(); // OR: example = (example==null) ? null : example.trim(); example = (example==null) ? …
17 java  api-design  null 

7
ソフトウェアデザインパターンを使用しない場合はどうなりますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 6年前に閉鎖されました。 ソフトウェアデザインパターンを使用しない場合、どのような問題に直面する可能性がありますか?標準のオブジェクト指向技術を使用して設計にアプローチする際の問題について教えてください。

3
Javaで文字列を連結すると、メモリにいくつの文字列が作成されますか?
Javaの不変文字列について尋ねられました。文字列に多数の "a"を連結する関数を書くことを任されました。 私が書いたもの: public String foo(int n) { String s = ""; for (int i = 0; i < n; i++) { s = s + "a" } return s; } その後、ガベージコレクションが発生しないと仮定して、このプログラムが生成する文字列の数を尋ねられました。n = 3に対する私の考えは 「」 「a」 「a」 「aa」 「a」 「aaa」 「a」 基本的に、ループの各反復で2つの文字列が作成されます。ただし、答えはn 2でした。この関数によってメモリ内に作成される文字列は何ですか?その理由は何ですか?
17 java  strings  object 

3
データアクセスレイヤーのテスト方法
JDBCアクセスにSpringを使用するDAOメソッドがあります。これは、アイテムを販売する売り手の成功率を計算します。 コードは次のとおりです。 public BigDecimal getSellingSuccessRate(long seller_id) { String sql = "SELECT SUM(IF(sold_price IS NOT NULL, 1, 0))/SUM(1) FROM transaction WHERE seller_id = ?"; Object[] args = {seller_id}; return getJdbcTemplate().queryForObject(sql, args, BigDecimal.class); } このメソッドまたはDAOメソッドをJUnitでテストするにはどうすればよいですか?データアクセスロジックをテストするためのベストプラクティスは何ですか?いくつかのデータがロードされた埋め込み可能なデータベースに対してテストすることを考えていますが、RDBMSとスキーマの点で本番環境と同様の統合テストを行うべきではありませんか?

2
単一のVisual Studioソリューション内の複数のアプリケーション[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 私は、すべての.Netアプリケーション(Webアプリケーション、Windowsアプリケーション、およびコンソールアプリケーション)を単一のVisual Studioソリューションに統合したい会社で仕事をしています。 この方法で独自のアプリケーションを構築する開発者、またはこれを行う会社で働く開発者の経験を探しています。これはいい考えですか? アプリケーションごとに個別のソリューションを用意するのではなく、すべてのアプリケーションを単一のソリューションに入れることの長所と短所は何ですか? Visual Studioは20以上のプロジェクトのソリューションを使用してどのくらいの速度ですか? また、ソース管理された同時開発を使用したソリューションファイルはどの程度安定していますか?

3
なぜ関数のタイプクラスがないのですか?
私がいじくり回してきた学習の問題で、適用、作成などの操作を行う関数の型クラスが必要であることに気付きました。理由... 関数の表現を関数そのものであるかのように扱うと便利な場合があります。そのため、関数の適用は暗黙的にインタープリターを使用し、関数の構成は新しい記述を導き出します。 関数の型クラスを取得したら、特別な種類の関数の型クラスを派生させることができます-私の場合、可逆関数が必要です。 たとえば、整数オフセットを適用する関数は、整数を含むADTで表すことができます。これらの関数を適用することは、整数を追加することを意味します。合成は、ラップされた整数を追加することにより実装されます。逆関数では、整数が否定されます。恒等関数はゼロをラップします。定数関数は、適切な表現がないため提供できません。 もちろん、値が本物のHaskell関数であるかのようにスペルする必要はありませんが、アイデアが得られたら、そのようなライブラリは既に存在し、おそらく標準のスペルを使用しているはずです。しかし、Haskellライブラリにはそのようなタイプクラスが見つかりません。 Data.Functionモジュールを見つけましたが、タイプクラスはありません-Preludeからも利用できる一般的な関数がいくつかあります。 だから-なぜ関数の型クラスがないのですか?「ないから」とか「思ったほど役に立たないから」?それとも、アイデアに根本的な問題があるのでしょうか? 私がこれまで考えていた最大の問題は、ループの問題を回避するために、実際の関数への関数の適用はおそらくコンパイラーによって特別に行われる必要があるということです。この関数を適用するには、関数適用関数を適用する必要があり、それを行うには、関数アプリケーション関数を呼び出す必要があります... より多くの手がかり 私が目指しているものを示すためのサンプルコード... {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} -- In my first version, Doable only had the one argument f. This version -- seemed to be needed to support the UndoableOffset type. -- -- It seems …

8
UnitTesting以外の価値がある依存性注入
初期化するいくつかのオブジェクトの異なる実装を使用する必要がないコンストラクターを考えると、DIを使用することは依然として実用的ですか?結局のところ、まだ単体テストが必要な場合があります。 問題のクラスは、コンストラクター内の他のいくつかのクラスを初期化し、使用するクラスは非常に具体的です。別の実装を使用することはありません。インターフェイスにプログラムしようとするのを避けることは正当化されますか?

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