ソフトウェア工学

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

5
この問題の純粋に機能的な解決策は、命令と同じくらいクリーンであることができますか?
私はPythonで次のような練習をしています。 多項式は、指数によって指数が決定されるような係数のタプルとして与えられます。例:(9,7,5)は、9 + 7 * x + 5 * x ^ 2を意味します 与えられたxの値を計算する関数を書く 最近関数型プログラミングに夢中になっているので、私は書きました def evaluate1(poly, x): coeff = 0 power = 1 return reduce(lambda accu,pair : accu + pair[coeff] * x**pair[power], map(lambda x,y:(x,y), poly, range(len(poly))), 0) 私はそれを読めないと思うので、私は書きました def evaluate2(poly, x): power = 0 result = 1 return reduce(lambda accu,coeff …

2
副作用の多いコードの単体テスト
ロボットを実行するためのC ++コードを書き始めていますが、実際にできる場合は、単体テストを組み込む方法がわかりません。私は、自動的にスケジュールされて実行されるロボットの「コマンド」の作成を可能にするライブラリーを提供されています。これらのコマンドを作成するためのメカニズムは、それらが提供するコマンドの基本クラスをサブクラス化し、仮想実装することでvoid Initialize()、void Execute()、およびvoid End()方法を。これらの機能は、ロボットに対して何かを行う(モーターの実行、ピストンの伸長など)副作用のためにのみ実行されます。このため、ライブラリ全体をモックしてロボットの状態の前後を確認できるようにするまでは、ユニットテストをコードに添付する場所は実際にはありません。過度に負担にならない、これを単体テストする方法はありますか? 編集する ライブラリの機能について誤解を招いていたと思います。ライブラリは、ロボットへのインターフェースのほとんどとコマンド/スケジューリングシステムを提供するため、コマンドの基本クラスをモックするほど単純ではないため、ハードウェアへのインターフェース全体をモックする必要があります。残念ながら、そのための時間はありません。

4
foldの関数引数の名前は何ですか
高階関数に減らす/折りたたみがあれば、機能の引数の、名前は何か? 私は、単純な分析(列の最小値、最大値、平均値など)を生成するために行が折りたたまれているモナディックテーブル処理ライブラリに取り組んでいます。したがって、fold関数の引数の適切な名前と、MLコミュニティ(またはHaskellまたはCommon Lispの2番目と3番目の候補)で確立されている名前が興味深いものを探しています。 のような名前fはfold関数の説明では一般的ですが、説明的ではなく、名詞の方が適しています。

4
ロギングに適した設計パターンはどれですか?
プログラム内のいくつかのイベントをログに記録する必要がありますが、プログラムの実際の機能に関するものではないため、ログコードをプログラムの外部に置いた方がよいでしょう。それで、コードから完全に除外し、オブザーバーとリスナーのみを使用してイベントをログに記録する必要があるかどうかを教えてもらえますか?または、何かをログに記録する必要がある場合はいつでも、次のようなコード行を追加できます。 MyGloriousLogger.getXXXLogger().Log(LogPlace, new LogObject(z1, z2, z3, z4, ..., z99)); Observer設計パターンを使用するのは間違いですか?別のデザインパターンが必要ですか?または私はデザインパターンについて考えるのをやめるべきですか? PS1。リスナーとオブザーバーのみを使用してログを記録したい場合は、プログラムのオブザーバーとリスナーを追加して改善する必要があります。 PS2。Javaにログインするためのさまざまなライブラリがあり、java.utils.loggingを使用していることは確かですが、特別なオブジェクトをログに記録するためのラッパーが必要です。

1
SubversionでGit Flowを使用する際の障害
私の職場のチームは、VCSとしてSubversionを使用して新しいプロジェクトを開始しています(この質問の目的のために、これは固いものと考えることができます)。私たちはまだプロジェクトの初期段階にあり、分岐モデルについて合意しようとしています。以前のプロジェクトは非標準バージョンモデルに基づいていたため、既存のリリースのホットフィックスとパッチを管理するときに問題が発生しました。 さまざまな分岐モデルがかなり複雑であることがわかりましたが、私がかなり明確に理解しているモデルの1つはgit flowです。Subversionでこれのバリエーションを実装するのがどれほど難しい/望ましくないか知りたいです。明らかに、ブランチで協力している人々の点でいくつかの違いがあります。機能ブランチはローカルリポジトリに限定するのではなく一元化する必要がありますが、モデルの他の概念は、私が理解しているようにSubversionで再現可能でなければなりません。 このアプローチの欠点または課題は何でしょうか。私が聞いたのは、SVNではGitに比べて「マージは高価です」ということです。しかし、これが実際に何を意味するのか、それがブランチモデルのようなgitフローを使用する能力にどのように影響するのかについては、完全には明らかではありません。 このアプローチの最大の懸念は何でしょう。Subversionでより自然な同様の明確なアプローチはありますか?
10 svn  branching  gitflow 

2
計算と副作用を分離するとき、「世界に尋ねる」コードをどこに置くのですか?
よるとコマンドクエリ分離原則と同様に、データにおける思考とのClojureとDDD 1は、計算や意思決定から(世界の変更)の副作用を分ける必要があるプレゼンテーションので、両方の部分を理解し、テストするために容易になるという。 これは未回答の質問を残します。境界に対して相対的に、「世界に尋ねる」ことをどこに置くべきでしょうか?一方では、外部システム(データベース、エクステンションサービスのAPIなど)からのデータの要求は参照透過的ではないため、純粋な計算コードや意思決定コードと一緒に置かれるべきではありません。一方で、どのデータを要求する必要があるかが事前にわからない場合があるため、計算部分から切り離して引数として渡すことは問題があるか、おそらく不可能です。

1
一人の開発者のためのエクストリームプログラミング[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 4年前休業。 私は過去2週間、小規模で営利目的のマルチプレイヤーアーケードゲームのために、いくつかの基本的な極端なプログラミングコンセプトを扱ってきました。1週間かけてユーザーストーリーを作成し、リリース計画を作成するための要件を決定しました。また、思いついた最初の反復計画のコーディングと適用に1週間費やしました。私は、1人の開発者にとって明らかに便利な概念のいくつかを特定しました。 継続的インテグレーション 早期に機能を追加しない テスト駆動開発 システムのメタファーを選択 単一の統合ポイントを使用する すべてのバグをテストする 常にリファクタリング 持続可能なペースを設定する シンプルさ 頻繁なリリース 特に、単一の開発者プロジェクトでの作業に適したものがないとしたら、私は興味がありますか? また、シンプルさとテスト駆動開発の考えを踏まえると、この観点から、確立された機能豊富な既製のプラットフォームを使用する方が良いでしょうか? それとも、可能であれば、絶えずリファクタリングし、機能を早期に追加しないなどのルールで提示される問題に遭遇しないように、ゼロから作業する必要がありますか?

4
Javaでの複数の汎用インターフェースの実装
特定の署名を含む特定のメソッドが利用可能であることを保証するインターフェイスが必要です。これまでのところ、彼は私が持っているものです: public interface Mappable<M> { M mapTo(M mappableEntity); } この問題は、クラスを他の複数のエンティティにマップできる場合に発生します。理想的なケースはこれです(javaではありません): public class Something implements Mappable<A>, Mappable<B> { public A mapTo(A someObject) {...} public B mapTo(B someOtherObject) {...} } これを可能な限り「一般的な」ものにするための最良の方法は何でしょうか?
10 java  generics 

3
エンティティフレームワークエンティティ-Webサービスからのデータ-最高のアーキテクチャ?
現在、いくつかのWebアプリケーションでEntity FrameworkをORMとして使用しています。これまで、すべてのデータが単一のデータベースに格納されているため、これが適しています。リポジトリパターンを使用しており、これらを使用するサービス(ドメインレイヤー)があり、EFエンティティをASP.NET MVCコントローラーに直接返します。 しかし、データベース内のユーザーに関連する追加情報を提供するサードパーティのAPI(Webサービスを介して)を利用する必要が出てきました。ローカルユーザーデータベースに、追加情報を取得するためにAPIに提供できる外部IDを保存します。利用できる情報はかなりありますが、簡単にするために、そのうちの1つはユーザーの会社(名前、マネージャー、部屋、役職、場所など)に関連しています。この情報は、単一の場所で使用されるのではなく、Webアプリ全体のさまざまな場所で使用されます。 だから私の質問は、この情報を入力してアクセスするのに最適な場所はどこですか?さまざまな場所で使用されているため、Webアプリケーションで使用する場合は常にアドホックベースでフェッチすることはあまり意味がありません。そのため、この追加のデータをドメインレイヤーから返すことは理にかなっています。 私の最初の考えは、EFエンティティ(EFUser)を含むラッパーモデルクラス、および新しい情報を含む新しい 'ApiUser'クラスを作成することでした-ユーザーを取得すると、EFUserを取得し、追加のAPIからの情報、およびApiUserオブジェクトを設定します。ただし、これは単一のユーザーを取得する場合は問題ありませんが、複数のユーザーを取得する場合は失敗します。ユーザーのリストを取得するときにAPIをヒットすることはできません。 私の2番目の考えは、ApiUserを返すEFUserエンティティにシングルトンメソッドを追加し、必要なときにそれを設定することでした。必要なときだけアクセスするので、これは上記の問題を解決します。 または、最後の考えは、データベースにデータのローカルコピーを保持し、ユーザーがログインしたときにAPIと同期することでした。これは単なる同期プロセスであるため、最小限の作業であり、ヒットのオーバーヘッドはありません。ユーザー情報を取得するたびにDBとAPIを使用します。ただし、これらはデータを2か所に保存することを意味し、しばらくログインしていないユーザーのデータが古くなっていることも意味します。 このようなシナリオを処理するための最善の方法についてアドバイスや提案はありますか?

1
どれだけあざけることが「ちょうどいい」ですか?
「依存する」と確信しているので、冗談めかして質問にタイトルを付けましたが、特定の質問があります。 多くの依存関係の深い層を持つソフトウェアで作業している私のチームは、モックをかなり広範囲に使用して、各コードモジュールをその下の依存関係から分離することに慣れています。 したがって、このビデオでロイ・オセロベが5%程度の時間だけモックを使用すべきであると示唆していることに驚きました。私たちは70-90%のどこかに座っていると思います。他の同様のガイダンスも時々見ました。 私は「統合テスト」の2つのカテゴリーと見なすものを定義する必要があります。これらは非常に異なるため、実際には異なる名前を付ける必要があります。1)複数のコードモジュールを統合するインプロセステストと2)話し合うアウトプロセステストデータベース、ファイルシステム、Webサービスなどに対応しています。私が関心を持っているのはタイプ1で、複数のコードモジュールをすべてインプロセスで統合するテストです。 私が読んだコミュニティガイダンスの多くは、単体テストは正確な場所に関する正確なフィードバックを提供するため、多数の分離された細粒度の単体テストと少数の粗粒度のエンドツーエンド統合テストを優先する必要があることを示唆しています回帰が作成された可能性がありますが、セットアップが面倒な大まかなテストは、実際にはシステムのエンドツーエンドの機能をより多く検証します。 このため、これらの個別のコード単位を分離するには、モッキングをかなり頻繁に使用する必要があるようです。 次のようなオブジェクトモデルがあるとします。 ...また、アプリケーションの依存関係の深さは、この画像に収められるよりもはるかに深くなるため、2〜4層と5〜13層の間に複数の層Nがあることを考慮してください。 ユニット#1で行われている簡単な論理決定をテストする場合、およびすべての依存関係がそれに依存するコードモジュールにコンストラクター注入されている場合、たとえば、2、3、および4は、モジュール1にコンストラクター注入されます。画像では、2、3、および4のモックを1に注入するほうがはるかに便利です。 それ以外の場合は、2、3、および4の具象インスタンスを作成する必要があります。これは、追加のタイピングだけでは難しい場合があります。多くの場合、2、3、および4は、コンストラクター要件を満たし、グラフに従って(およびプロジェクトの現実に従って)、困難な場合があります。Nから13の具体的なインスタンスを構築して、 2、3、4。 この状況は、2、3、または4が特定の方法で動作して、#1の単純な論理決定をテストできるようにする必要がある場合、より困難になります。2、3、または4が必要な動作をするようにするには、オブジェクトグラフ/ツリー全体を一度に理解し、「精神的に推論する」必要があるかもしれません。多くの場合、myMockOfModule2.Setup(x => x.GoLeftOrRight())。Returns(new Right());を実行する方がはるかに簡単です。モジュール2が正しく進むように指示したときに、モジュール1が期待どおりに応答することをテストします。 2 ... N ... 13の具象インスタンスをすべて一緒にテストすると、テスト設定は非常に大きくなり、ほとんどが重複します。テストの失敗は、リグレッションの失敗の場所を正確に特定するのに非常に適しているとは限りません。テストは独立していません(別のサポートリンク)。 当然のことながら、これらのモジュールがそれ以上依存することはほとんどないため、最下層の相互作用ベースのテストではなく、状態ベースのテストを行うことは、しばしば妥当です。しかし、モジュールを一番下より上に分離するために、モッキングが定義上ほとんど必要であるようです。 このすべてを踏まえて、私が欠けているかもしれないものを誰かに教えてもらえますか?私たちのチームはモックを使いすぎていませんか?あるいは、ほとんどのアプリケーションの依存関係の層が十分に浅く、統合されたすべてのコードモジュールをテストすることが実際に合理的である(私たちのケースを「特別な」ものにする)と、通常の単体テストガイダンスに何らかの仮定があるのでしょうか。あるいは、おそらく別の方法として、私たちのチームは私たちの制限されたコンテキストを適切に制限していませんか?

4
Webフレームワークがプログラミング言語のように単純でエレガントで楽しいものではないのはなぜですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前休業。 C、C ++、PHP、SQL、JavaScript、Python、ActionScript、Haskell、Lua、Lisp、Javaなど、ほとんどすべてのプログラミング言語について考えるとき、私は素晴らしいと思います。それらの言語の。 しかし、Webフレームワーク(私は主にPHPを使用しています)について考えるとき-Cake、CI、Symfony、Laravel、Zend、Drupal、Joomla、Wordpress、Rails、Djangoなど-私は神のようではありません。 プログラミング言語のようなシンプルで楽しく強力な構造を提供するWebフレームワークがないのはなぜですか?

2
カウントダウン番号の名前の丸め問題-およびアルゴリズムによる解決策?
オーディエンスの非Britsの場合、昼間のゲーム番組のセグメントがあり、そこでは、競技者が6つの数字のセットとランダムに生成されたターゲットの数字を持っています。それらは、算術演算子のみを使用して6つの数値のいずれか(必ずしもすべてではない)を使用して目標数に到達する必要があります。すべての計算は正の整数になる必要があります。 例:Youtube:カウントダウン-これまでで最も異常な数字ゲーム? ウィキペディアに詳細な説明があります:カウントダウン(ゲームショー) 例えば: 応募者は6つの数字を選択します。2つの大きな数字(可能性には25、50、75、100が含まれます)と4つの小さな数字(数字1 .. 10、それぞれプールに2回含まれます)です。 ピック数がされている75、50、2、3、8、7の目標数で与えられます812。 1回の試行は、(75 + 50-8)* 7-(3 * 2)= 813(これは、ターゲットの5以内のソリューションに対して7ポイントを獲得します) 正確な答えは、(50 + 8)* 7 * 2 = 812です(これは、ターゲットと正確に一致する10ポイントを獲得したことになります)。 明らかに、この問題はテレビが登場する前から存在していましたが、ウィキペディアの記事ではそれに名前を付けていません。私が通っていた小学校でも、このゲームがクラス間競技として「Crypto」と呼ばれていたのを見たことがありますが、検索しても何もわかりません。 私はそれに数回参加し、私の父は、ブルートフォースに問題を試みたExcelスプレッドシートを書いて、私は(それが唯一のこと、それが働いたか覚えていませんしませんでしたどのようなExcelの65535行の制限で、仕事)が、確かに問題のアルゴリズム的な解決策がなければなりません。人間の認識と同じように機能する解決策があるかもしれません(たとえば、並列で数値を「十分に近い」数で見つけ、候補を取得して「小さい」演算を実行する)。

6
オプションのセミコロン
ほとんどの場合、汎用の命令型言語では、ステートメント区切り文字としてセミコロンが必要か、完全に禁止されています(CやPythonなど)。 ただし、JavaScriptなどの一部の言語では、ステートメントをセミコロンで区切らずに、他の区切り文字(改行など)を優先できます。 この背後にある設計上の決定は何ですか?同じ行に複数のステートメントを記述する場合、セミコロンが不可欠であることを理解していますが、セミコロンを必須にする別の理由があります(以下のCを除く)?

7
ネストされたエンティティとリーフエンティティプロパティの計算-SQLまたはNoSQLアプローチ
メニュー/レシピ管理という趣味のプロジェクトに取り組んでいます。 これは私の実体とそれらの関係がどのように見えるかです。 AにNutrientはプロパティがCodeあり、Value のIngredientコレクションを持っていますNutrients A RecipeにはコレクションがIngredientsあり、時々他のコレクションを持つことができますrecipes Aは、Mealのコレクションを持っているRecipesし、Ingredients A MenuのコレクションがありますMeals 関係は次のように表すことができます いずれかのページで、選択したメニューについて、その構成要素(食事、レシピ、成分、および対応する栄養素)に基づいて計算された有効栄養素情報を表示する必要があります。 現在、SQL Serverを使用してデータを格納しています。メニューの各食事から始めて栄養素の値を集計して、C#コードからチェーンを移動しています。 この計算はページがリクエストされ、構成要素が時々変更されるたびに行われるため、これは効率的な方法ではないと思います。 MenuNutrients({MenuId, NutrientId, Value})と呼ばれるテーブルを維持し、コンポーネント(食事、レシピ、成分)のいずれかが変更されたときに、このテーブルに有効な栄養素を追加/更新するバックグラウンドサービスがあることを考えていました。 GraphDBはこの要件に適していると思いますが、NoSQLへの私の露出は限られています。 特定のメニューの栄養素を表示するというこの要件に対する代替の解決策/アプローチは何ですか? シナリオの説明が明確であることを願っています。

12
「メソッドを変更せずに再利用する場合は、メソッドを基本クラスに配置し、それ以外の場合はインターフェースを作成する」というのは良い経験則ですか?
私の同僚は、基本クラスとインターフェイスのどちらを作成するかを選択するための経験則を考え出しました。 彼は言う: 実装しようとしているすべての新しいメソッドを想像してみてください。それらのそれぞれについて、このことを考慮してください。この方法は、内の複数のクラスによって実装されます正確にせずに、このフォームの任意の変化?答えが「はい」の場合は、基本クラスを作成します。他のすべての状況では、インターフェースを作成します。 例えば: クラスを検討catしてdogクラスを拡張し、mammal単一の方法を持っているがpet()。次に、alligator何も拡張せず、1つのメソッドを持つクラスを追加しslither()ます。 次に、eat()それらすべてにメソッドを追加します。 実装した場合eat()の方法は、のためにまったく同じになりcat、dogそしてalligator、私たちは、基本クラス(LETだと言う、作成する必要がありanimal、このメソッドを実装します)。 ただし、実装がalligator少しでも異なる場合は、IEatインターフェースを作成して作成mammalおよびalligator実装する必要があります。 彼はこの方法がすべてのケースをカバーすると主張しますが、私には過度に単純化しているようです。 この経験則に従う価値はありますか?

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