ソフトウェア工学

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

4
すべての通貨(ドル、ユーロ、ポンドとは異なる通貨も含む)で機能する単一のデータ表現はありますか?
ある通貨で金額を表すために使用するライブラリに関する多くの質問を見つけることができます。そして、なぜ通貨をIEEE 754浮動小数点数として保存すべきではないのかという古くからの問題についてです。しかし、私はこれ以上何も見つけられないようです。確かに、実際の使用での通貨についてもっと知る必要があります。物理的な使用で表現するために知っておく必要があるものに特に興味があります(たとえば、ドルでは、0.01未満の精度はなく、整数のセントとして表現できます)。 しかし、あなたが知っている唯一の通貨が西洋の人気通貨(ドル、ユーロ、ポンドなど)である場合、プログラムがどれほど汎用性があるかを推測するのは困難です。純粋にプログラム的な観点で関連する知識は他に何ですか?私は変換のトピックについて心配していません。 特に、ある通貨で値を保存して印刷できるようにするには、何を知る必要がありますか?


1
文法に基づいてレクサーを作成するときに従う手順は何ですか?
文法、レクサー、パーサーに関する質問Clarificationに対する回答を読んでいると、答えは次のように述べています。 [...] BNF文法には、字句解析と構文解析に必要なすべてのルールが含まれています。 パーサーは文法に基づいているのに対し、これまでは常に字句解析は文法に基づいていないと考えていたため、これはやや奇妙に思えました。レクサーの作成に関する多数のブログ投稿を読んだ後、この結論に至りました。デザインの基礎として1つのEBNF / BNF を使用したことはありません。 パーサーと同様にレクサーがEBNF / BNF文法に基づいている場合、そのメソッドを使用してレクサーを作成するにはどうすればよいでしょうか?つまり、特定のEBNF / BNF文法を使用してレクサーを構築するにはどうすればよいですか? EBNF / BNFをガイドまたは設計図として使用してパーサーを記述することを扱った多くの投稿を見てきましたが、レクサーデザインと同等のことを示すものは今のところ見つかりませんでした。 たとえば、次の文法を取ります。 input = digit| string ; digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; string = '"', { all characters - …

5
円に最も近い最適なものを見つける
以下は、真ん中に白い点のポイントがあり、すべての赤い円がすでに存在する場合に青い円(明らかにそれを配置した場所にある)に最も近い場所を見つけたい場合の画像例です。 。その場所を見つけるにはどうすればよいですか? 私にとってパフォーマンスは、このアプリケーションにとって大きな関心事ではありません。

8
顧客ごとに異なる可能性のある1つのメソッドを持つクラスの適切な設計
顧客の支払いの処理に使用するクラスがあります。このクラスの1つを除くすべてのメソッドは、すべての顧客で同じです。ただし、顧客のユーザーが負う金額を(たとえば)計算するものを除きます。これは顧客ごとに大きく異なる可能性があり、カスタムファクタはいくつも存在する可能性があるため、計算のロジックをプロパティファイルのようなものにキャプチャする簡単な方法はありません。 customerIDに基づいて切り替えるいコードを書くことができます。 switch(customerID) { case 101: .. do calculations for customer 101 case 102: .. do calculations for customer 102 case 103: .. do calculations for customer 103 etc } ただし、新しい顧客を獲得するたびにクラスを再構築する必要があります。より良い方法は何ですか? [編集]「複製」の記事はまったく異なります。私はswitchステートメントを回避する方法を求めているのではなく、このケースに最も適したモダンなデザインを求めています-恐竜のコードを書きたい場合はswitchステートメントで解決できます。そこで提供されている例は一般的なものであり、本質的には「スイッチはある場合には非常にうまく機能し、他の場合には機能しない」と言っているため、役に立たない。 [編集]次の理由から、トップランクの回答(標準インターフェイスを実装する顧客ごとに個別の「顧客」クラスを作成する)を採用することにしました。 一貫性:他の開発者によって作成された場合でも、すべてのCustomerクラスが同じ出力を受け取って返すことを保証するインターフェイスを作成できます。 保守性:すべてのコードは同じ言語(Java)で記述されているため、デッドシンプルな機能を維持するために他の誰かが別のコーディング言語を学ぶ必要はありません。 再利用:コードで同様の問題が発生した場合、Customerクラスを再利用して、任意の数のメソッドを保持して「カスタム」ロジックを実装できます。 親しみやすさ:私はすでにこれを行う方法を知っているので、すぐにそれを完了させ、他のより差し迫った問題に進むことができます。 欠点: 新しい顧客ごとに、新しいCustomerクラスのコンパイルが必要です。これにより、変更をコンパイルおよびデプロイする方法が複雑になる場合があります。 新しい顧客はそれぞれ、開発者が追加する必要があります。サポート担当者は、プロパティファイルのようなものにロジックを追加することはできません。これは理想的ではありません...しかし、サポート担当者が必要なビジネスロジックをどのように書き出すことができるのか、特に多くの例外を伴う複雑な場合(そうである可能性が高い場合)もわかりませんでした。 多くの新しい顧客を追加した場合、うまく拡張できません。これは予期されていませんが、もしそうなった場合、コードの他の多くの部分とこの部分を再考する必要があります。 興味のある方は、Java Reflectionを使用して名前でクラスを呼び出すことができます。 Payment payment = getPaymentFromSomewhere(); try { String …

1
コメント置換として追加のローカル変数を導入
技術的に不要な追加のローカル変数を使用して、何が起こっているのかを説明するのは良いスタイルですか? 例えば: bool easyUnderstandableIsTrue = (/* rather cryptic boolean expessions */); if(easyUnderstandableIsTrue) { // ... } 技術的なオーバーヘッドに関しては、コンパイラがこの追加の行を最適化することを期待しています。しかし、それは不必要なコードの肥大化と見なされますか?私の目には、古いコメントのリスクを減らします。

5
組み込みシステムの単一アレイに膨大な量のスタックを割り当てることには欠点がありますか?
通常、一部のデータをグローバルにするか、静的にするか、スタック上に置くかを決定するのに問題はありません(ここでは動的な割り当てがないため、ヒープを使用しません)。このようないくつかのQ / Aも読んだことがありますが、システムメモリに比べて膨大な量のデータが含まれるため、私の質問はより具体的です。 改善しようとしている既存のコード(設計、考えられる問題、パフォーマンスなど)を扱っています。このコードは、RAMが4KBのみの古い8ビットMCUで実行されます。このコードでは、ほぼ1KBのアレイの使用に直面しています(はい、4KB RAMシステムでは1KB)。この配列の各バイトが使用されますが、それは問題ではありません。問題は、この配列は宣言されているファイル内の静的配列であるため、そのライフサイクルはプログラムの配列と同じである(つまり、無限と見なすことができる)ということです。 ただし、コードを読んだ後、この配列には無限のライフサイクルが必要ないことがわかりました。完全に手続き的な方法で構築および処理されるため、使用する関数でのみ宣言できるはずです。この方法ではスタック上にあるため、この1KBのRAMを節約します。 質問:これは良いアイデアでしょうか?設計の観点から、無限/グローバルライフサイクルを必要としない場合、スタックに属します。しかし、これは4KBのうち1KBですが、このようにRAMの25%を割り当てるという欠点はありませんか?(スタックの50%以上になる可能性があります) 誰かがこの種の状況の経験を共有できますか、または誰かがこの配列をスタックに入れない正当な理由について考えますか?技術的な欠点と設計に関するコメントを探しています。 私が意識している唯一のことは、この関数に入るときに実際に1KBのスタックが空いていることを確認する必要があるということです。多分それは私が世話をしなければならないことすべてであり、多分そうではない。

1
関数がべき等であることを証明することは可能ですか?
関数がor等であることを証明するために静的型または依存型を使用することは可能ですか? GoogleとStackOverflow / StackExchangeのさまざまな場所で検索しましたが、運が悪かったのです。私が見つけた最も近いものは、イドリスに関する次の会話でした:https : //groups.google.com/forum/#! topic/ idris- lang/ yp7vrspChRg 残念ながら、その議論は私の頭の上で少しです。
12 haskell 

3
内部でテストせずにDIを使用するクラスのユニットテスト
1つのメインクラスと2つの小さなクラスにリファクタリングされたクラスがあります。メインクラスはデータベースを使用し(多くのクラスと同様)、メールを送信します。メインクラスが持つようにIPersonRepositoryし、IEmailRepository彼の順番に2つのより小さいクラスに送信する注入しました。 ここで、メインクラスの単体テストを行い、クラスの内部動作を単体テストしないことを学びました。ユニットテストを壊すことなく内部動作を変更できるはずだからです。 クラスが使用するようしかし、IPersonRepositoryとIEmailRepository、私はHAVEのためのいくつかの方法について(モック/ダミー)の結果を指定しますIPersonRepository。メインクラスは、既存のデータに基づいていくつかのデータを計算し、それを返します。それをテストしたい場合、IPersonRepository.GetSavingsByCustomerId戻り値x を指定せずにテストを作成する方法がわかりません。しかし、それから私のユニットテストは、どのメソッドをモックするか、そしてどのメソッドをモックしないかを「知っている」ので、内部動作を「知っている」。 テストは内部を知らずに、依存関係を注入したクラスをどのようにテストできますか? バックグラウンド: 私の経験では、このような多くのテストはリポジトリのモックを作成し、モックに適切なデータを提供するか、実行中に特定のメソッドが呼び出されたかどうかをテストします。いずれにせよ、テストは内部について知っています。 今、私はテストが実装について知るべきではないという理論についてのプレゼンテーションを見ました(以前聞いたことがあります)。第一に、それがどのように機能するかをテストしていないためです。また、実装を変更すると、実装を「知っている」ためすべての単体テストが失敗します。私はテストが実装に気付かないという概念が好きですが、それを達成する方法がわかりません。

4
1対1の関係を凝縮しないことが理にかなっていますか?
テーブルBと1対1の関係を持つテーブルAがある場合、それらを離しておくことは意味がありますか?または、それらを単一のテーブルに結合しても害はありませんか?これらのシナリオ(2つのテーブルと1つの結合されたテーブル)のいずれかが、通常の形式(1NF、2NF、3NFなど)に関して何か影響を与えますか?

4
依存性注入の反対を示す専門用語?
これは、純粋に技術的な質問というよりも、命名法(技術文書)です。私は、アプリケーションでの依存性注入の拡大を中心に、リファクタリングの提案を書いています(そして、それを自分に割り当てます)。Beanの自動配線にSpringを使用していますがMyClass obj = new MyClass(...)、を使用してBeanをインスタンス化するインスタンスがまだあります。私の提案では、エレガントな命名法を使用し、適切な用語でDIの反対のデザインパターンを参照したいと思います。 「密結合」は、DIの反意語として適切な用語ですか?

9
符号なしの数値が実装されているのはなぜですか?
マイクロプロセッサシステムが符号なしの数値を実装する理由がわかりません。より大きい、より小さい、など、符号付きとは異なるアルゴリズムが必要なので、コストは条件付きブランチの数の2倍であると思いますが、符号なしの数値が大きな利点であるアルゴリズムはまだありますか? 私の質問の一部は、コンパイラでサポートされるのではなく、命令セットに含まれる必要がある理由です。
12 numbers 

2
マイクロサービスアーキテクチャの共有ドメインモデル
マイクロサービスアーキテクチャを使用するSpring Bootアプリケーションがあると仮定しましょう。各サービスには独自のドメインモデルがありますが、各サービスはユーザードメインオブジェクトを参照する必要があります。この問題を解決する最善の方法は何でしょうか?各サービスが単にuserIdを持ち、必要に応じてユーザーの詳細をユーザーサービスに問い合わせる方が良いでしょうか、それともすべてのマイクロサービス用の共有ドメインライブラリを持つ方が良いでしょうか?

1
キャプテンケイジャンのフェリーにZoombinisを配置するためのアルゴリズム?
私は最近、ZoombinisのLogical Journeyの再リリースをプレイしており、さまざまなパズルを解決できるコンピューターアルゴリズムを実装しようとしています。キャプテンケイジャンのフェリーボートパズルにアプローチする方法に固執しています。 なじみのない人にとっては、Zoombiniは髪、目、鼻、足の4つの属性を持つクリーチャーです。これらの属性にはそれぞれ5つの可能な値があります。たとえば、Zoombiniの足は、車輪、ローラースケート、スニーカー、バネ、またはプロペラです。乱雑な髪、メガネ、緑の鼻、スニーカーを備えたZoombiniの例を次に示します。 フェリーボートパズルのタスクは、フェリーボートの16席に16個のZoombinisのコレクションを配置することです。配置は、直交する隣接する2つの座席は、少なくとも1つの機能を共有するZoombinisが占有する必要があるという規則に従う必要があります。2 Zoombinisが異なるの髪、異なる目、鼻異なる、持っている場合と、互いに異なる足を、彼らは隣同士に座ってないかもしれません。 座席の配置はレベルによって異なります。具体的には、「非常に難しい」レベルに注目しましょう。このレベルでは、16席が4行4列のグリッドに配置されます。15個のZoombinisが合法的に着席しているが、右のZoombiniと機能を共有しないため、ドックに立つ最後のZoombiniを最後の空いている座席に配置することはできません。 16個あります!およそ21兆のZoombinisの座席への割り当てが可能です。したがって、すべての可能な割り当てを実行して、それが合法かどうかを確認するだけでは実用的ではありません。この問題に賢明にアプローチするために使用する可能性のあるヒューリスティックは何ですか?
12 algorithms 

6
大規模なJavaScriptアプリケーションの構造はどのようになっていますか?
最近、OBIEE Mobile App Developer用に記述されたJavaScriptプラグインと、さまざまなプロジェクト用のカスタムライブラリを紹介しました。 OOPのバックグラウンドから来て、私はこれらのプロジェクトの構造について少し混乱しています。何千行ものファイルが表示されています。私は物事をファイルとクラスに分割することに慣れていますが、これは別のフレームワークであることを理解しています-たとえば、ファイルサイズが問題です-しかし、それをすべて行うより良い方法が必要ですか? スクリプトの長さは、読みやすさと保守性だけでなく、プログラムの動作に関する個人の一般的な理解にも影響します。 大規模なアプリケーションはどのように構成されていますか?このための一般的なOOP設計パターンはありますか?

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