ソフトウェア工学

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

2
引数が必要な場合と必要でない場合がある場合に、メソッドの引数としてOptionalを使用しない理由はありますか?
Java 8では、オプション/オプションの使用に関する記事がますます増えています。私は彼らが何を表現しようとしているのか理解しており、それらがリターンとして使用されている多くの例を見ています。ただし、デフォルト/オプションのパラメーターの構文を持たない言語でメソッド/関数の引数として使用されているのはわかりません。 Optional引数が必要かどうかにかかわらず、メソッドの引数として使用しない理由はありますか?ここに私が考えることができる例があります: Optional<Customer> lookupCustomer(String firstName, Optional<String> middleName, String lastName)

3
いつ、どこでJavascriptの巻き上げを使用するべきか[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 6年前休業。 私はJavaScriptが初めてです。Javascriptでの巻き上げの概念を学んでいます。Mozillaウェブサイトの Javacsriptチュートリアルに基づいて、私はこの言葉に出くわしました。それらのチュートリアルによると、JavaScriptの変数は、例外を発生させることなく、後で宣言された変数を参照できるということです。しかし、私の質問は、クライアント側のJavascriptでホイストを使用することが適切なのはどのような状況なのか、またはなぜJavascriptでホイストを使用する必要があるのか​​ということです。その利点は何ですか。hoisting
11 javascript 

3
参照の透明性を壊す副作用
Scalaの関数型プログラミングは、参照の透明性を壊すことに対する副作用の影響を説明しています。 副次的影響。これは、参照の透明性に対する何らかの違反を意味します。 「置換モデル」を使用してプログラムを評価するSICPの一部を読みました。 参照透過性(RT)を使用した置換モデルを大まかに理解しているので、関数を最も単純な部分に分解できます。式がRTの場合、式を分解して常に同じ結果を得ることができます。 ただし、上記の引用が述べているように、副作用を使用すると置換モデルが壊れる可能性があります。 例: val x = foo(50) + bar(10) 副作用がない場合はfoo、どちらの関数を実行しても常に同じ結果がに返されます。しかし、それらに副作用がある場合、それらはレンチを置換モデルに混乱させる/投げる変数を変更します。bar x 私はこの説明に満足していますが、完全に理解していません。 私を修正して、RTを壊す副作用についての穴を埋めて、置換モデルへの影響についても議論してください。

2
.NET MVCプロジェクトアーキテクチャ/レイヤー
中規模のMVC Webアプリケーションのアーキテクチャを計画するとき、レイヤーを可能な限り分離してテストしやすいように実装するにはどうすればよいですか?(基本的にベストプラクティスに従います)データアクセスとして最初にコードを使用しているとしましょう。 「ビジネスロジック」の定義、およびデータレイヤーとのやり取りをどのように定義するかについて、私は苦労しています。車両販売アプリケーションを例にとると、ビジネスロジックは、特定の車両の税帯の計算、ガロンあたりのマイル統計の比較などのタスクを実行するクラスでしょうか。ビジネスエンティティ(例:車、バン、オートバイ)については、これらをDataContextクラスと共にデータレイヤーに配置します。 また、ビジネスとは対照的に、アプリケーションロジックを構成するものは何ですか。セッション/ユーザー入力の検証などを推測していますか? したがって、たとえば、車のコントローラは、タイプと最良のmpgでフィルタされた上位10台の車をリストするアクション/ビューの結果を返す場合があります。たとえば、ICarRepository「リポジトリ」/ DIを使用して「carRepo」をコントローラに注入したとします。アクションメソッドのパラメータから車をフィルタリングします。var cars = carRepo.getCarsByType("hatchback"); したがって、リポジトリを使用してデータアクセスの知識をコントローラーから除外し、ドメインモデルを使用してビジネスロジックをコントローラーから除外しました-var result = new MpgCalculator(cars); -DBからエンティティをロード/フィルタリングするだけではなく、最高の燃料効率を計算するために追加のロジックを実行する必要があるため、電卓クラスが必要だとしましょう。これで、ビューをレンダリングするためのデータセットがあり、リポジトリを使用してデータアクセスレイヤーから取得し、ドメイン固有のオブジェクトを処理して、そのデータに対してビジネス関連のタスクを実行します。 ここで間違いをしていますか?それでもリポジトリパターンを使用する必要がありますか、それともORMを分離してテストするためにインターフェイスに対してコーディングするだけですか?このトピックでは、具体的なデータアクセスクラスdbcontextがデータレイヤーにあるので、インターフェイス定義をドメイン/ビジネスレイヤーに入れる必要があります。つまり、データアクセステクノロジーが変更されても、他のレイヤーは影響を受けません。 これまでに調べたことから、私の構造は次のようになります。 MVCインターネットアプリケーション ->標準インターネットプロジェクト-ここのモデルはViewModelsです ドメイン/ビジネスレイヤー ->コントローラーが関連するビューに渡す前にデータレイヤーからドメインエンティティを処理するために使用できるビジネス固有のクラス/モデル リポジトリの抽象化が必要ですか?->特にORMを使用する場合、これについて多くの議論が聞こえます データレイヤー ->エンティティクラス(Car、Van、Motorcycle)、DbContext-具象データアクセステクノロジーレイヤー

3
いつ入力をトリミングする必要がありますか?
私はインターンとして、学界以外の業界についてたくさん学びます。 今日私が考えたのは、入力のトリミングです。 コインの片側では、入力にスペースが多すぎるためにユーザー/実装者が予期しない結果を常に受け​​取ることを望まないため、すべての関数呼び出しの後にユーザー入力を常にトリミングする必要があります。 しかし、同時に、ここで社内で使用するAPIライブラリを作成している場合、結果の主要な空白が末尾/先頭にあることが重要になる可能性があります。 次に、空白が重要かどうかがわからない場合があります。 私にとっての大きな問題は、コード内のどこにいても.trim()が常に呼び出されていることです。 誰もが特定の状況を処理する方法についてのヒント/経験則または単なる考えを持っていますか?

3
HTTPヘッダーを介してアクセストークンを送信しても安全ですか?
これは最初のRESTful Webサービスであり、セキュリティの問題が心配です。アクセストークンをHTTPヘッダー経由で送信しても安全ですか?例えば: POST /v1/i/resource HTTP/1.1 Content-Type: application/x-www-form-urlencoded Api-key: 5cac3297f0d9f46e1gh3k83881ba0980215cd71e Access_token: 080ab6bd49b138594ac9647dc929122adfb983c8 parameter1=foo&parameter2=bar を介して行われた接続SSL。また、scopeすべての属性として定義する必要があるものaccess token

3
ユーザー権限を持つメニュー項目の保存
PHPとMySQLでメニューシステムを作成しています。いくつかの異なるメニューを用意し、各メニューに一連のメニュー項目を接続します。 サイトでは、別のユーザー権限も持っています。一部のユーザーはすべてのメニューアイテムを表示でき、一部のアイテムは一部のユーザーから非表示になっています。将来、より多くの種類のユーザーを簡単に追加できるように、権限をクリーンな方法で処理する方法に興味があります。 これまでのところ、次のようなものです。 ------------------- |Menus ------------------- |id| |display name| ------------------- ---------------------------------------------------------- |Menu items ---------------------------------------------------------- |id| |menu_id| |label| |link| |parent| |sort| |permission| ---------------------------------------------------------- permission列は、現在のユーザーのアクセス許可IDと照合できるコンマ区切りの文字列のいずれかであると考えています。また、現在存在する権限のすべての可能な組み合わせを定義する他のいくつかのテーブルへの参照である可能性もあります。 1つの解決策は、複数のメニュー項目を単純に格納することでもありますが、唯一の違いは許可ですが、これはストレージの重複を引き起こし、おそらく管理が面倒になります。 これをどのように構成するか、そしてクリーンでダイナミックで無愛想なものと見なすことができるものについての考えを聞いてみたいです。 ありがとう。

1
一般的なリスト処理関数名の由来
リストまたは配列を操作するためのいくつかの高階関数が繰り返し採用または再発明されました。関数map、fold [ l | r ]とfilterは、Scheme、ML、Pythonなど、共通の祖先を持たないように見えるいくつかのプログラミング言語で一緒に見つかります。質問を集中させるために、これら3つの名前を使用します。 名前が普遍的ではないことを示すために、他の言語での同等の機能の名前のサンプルを以下に示します。C ++はい変換するのではなく、マップやremove_ifの代わりに、フィルタ(述語の意味を反転させます)。Lispは持っているでmapcarの代わりに、マップを、削除-IF-ない代わりに、フィルタ、および軽減の代わり倍(一部現代のLispが持っているバリアントマップが、これが表示されますがために派生形。)C#の用途は選択の代わりにマップし、どこの代わりに、フィルター。C#の名前はLINQを介してSQLに由来し、名前の変更にもかかわらず、それらの機能はMLの影響を受けたHaskellの影響を受けました。 map、fold、およびfilterという名前は広く普及していますが、普遍的ではありません。これは、彼らが有力な情報源から他の現代の言語に借用されたことを示唆しています。これらの関数名はどこから来たのですか?

3
TDDモックコール検証-アンチパターンですか?
私は1年前からTDDを行っていますが、TDDにはかなり満足しています。テストスイートなど、すべてが大好きです。しかし、最近私は多くの模擬通話検証を行っていることに気づきました。たとえば、リポジトリが挿入されるサービスがあります-単体テストでは、リポジトリのモックを渡し、テストしているメソッド内で呼び出されていることを確認します。次に、返された結果が正しいかどうかを確認します(別のテストで)。私の単体テストは実装の詳細に非常に結びついているので、これは間違いなく間違いだと感じています。「振る舞い」をテストするべきだと聞いたことがありますが、多くの状況では... emm-不可能ですか?あなたが持っている場合voidたとえば、通常は副作用をテストします。つまり、これを実証できる単純なコード型を簡単に示すことができますが、私見では、私たちが作成する実際のプログラムにはあまり反映されていません。私が間違っているのは何ですか?この種のテストは一種のアンチパターンですか?これについてのあなたの意見をいただければ幸いです。TDDに関しては、まだ初心者です。

2
価格設定製品のデータベーススキーマ(パッケージ、プロモーション、数量ベース、期間限定オファー…)
製品ミックスによって価格が異なる会社の新しいPOSに取り組んでいます。 すべての製品に基本価格があります。 私の問題を説明するために、私は次の情報を使用します: Product Category Price A 1 45 B 1 70 Q 2 20 R 2 27 S 2 15 X 3 17 Y 3 22 Z 3 16 会社にはパッケージがあります(パッケージ「コンボ」など)。製品AまたはBの場合、QまたはRのいずれかを選択し、X、Y、またはZのいずれかを選択すると、20ドルの割引が適用されます。 ケースA:注文時にベース商品に追加する場合があります。たとえば、商品Aではなく、商品Qと商品Pを追加して、割引価格のパッケージを作成します。次に、1つのRと1つのZを持つ1つの製品Bが必要であると追加します。 ケースB: 1 Aと2 B、2 Q、1 S、2 Xと1 Zを追加する場合があります。「コンボ」パッケージで規定されているルールに従って、Sはコンボアイテムではないため、2つのコンボのみが適用されます。 その他のプロモーションは数量に依存するため、Bを2つ購入すると20%オフまたは時間に依存し、午後5時以降または午前10時前の場合は10%オフ前にのみ有効です。別のプロモーションは、最後の購入がいつ行われたか、またはY期間に$ Xを超えて購入したかどうかによって異なります。 私の問題: 1)さまざまな要件を持つさまざまなタイプのプロモーションを追加するのに非常に柔軟な方法で、さまざまなパッケージまたはプロモーションを作成できるように、テーブルをどのように構成しますか? 2)ケースB(またはケースAとケースBの組み合わせ)のように注文した場合、クエリを構造化して、注文に含まれる製品の組み合わせを確認し、それに応じて価格/説明を更新する方法?最終的に、このクエリの最良の結果は、どのパッケージとプロモーションが要件を満たし、その順に顧客に最もメリットがあるかを返します(つまり、注文したものがプロモーション1と3の要件を満たしますが、プロモーション3の方が安価です)。複数のプロモーションで機能する必要があります)。 助けてくれてありがとう! アップデート#1 目前の問題をよりよく説明し、これまでに行った作業を更新して問題を解決するために、問題に影響を与えるエンティティと属性に限定された製品モデルのERDを含めています(つまり、ここでは在庫が機能していないため、在庫はありません)エンティティが存在します)。 この質問に影響を与えるエンティティと属性からのサンプルデータも含めています(データの読み取りを簡単にするために、外部キーの代わりに名前/説明を入れています)。 これは、コンボの例を示すフローチャートへのリンクであり、テーブル構造を理解するための高速で視覚的な方法です。 …

2
今日利用可能な主流の汎用非チューリング完全言語はありますか?
非チューリング完全言語は、より分析可能であり、したがってより広い最適化の可能性を提供するため、チューリング完全言語よりも優れた利点を提供します。しかし、それらはほとんど使用されておらず、チューリング完全性は実際に優れた機能として販売されています。 汎用プログラミング用に作成された、今日利用可能な主流の非チューリング完全言語はありますか?

2
MITライセンス:なぜそれがバイラルと見なされないのですか?
ライセンスの最初の部分は、基本的にはそれを使って何でも好きなことができることを意味します(コピー、変更、販売など)。しかし、第2部では、これらの自由はソフトウェアのすべてのコピーに伝播する必要があると述べています。 私の解釈では、ソフトウェアを独自のプロジェクトに組み込むことができますが、その部分は開いたままにする必要があります。ソフトウェアに変更を加えた場合は、そのライセンスを添付したままにして、変更を強制的にオープンソースにする必要があります。 これが、人々がGPLを制限的/バイラルであると考える理由ではありませんか?修正を強制的にオープンソースにするためですか? これはライセンスのコピーです: これにより、このソフトウェアおよび関連するドキュメントファイル(以下「ソフトウェア」)のコピーを取得するすべての人に、使用、コピー、変更、マージの権利を含むがこれに限定されない制限なしでソフトウェアを扱う許可が無料で付与されます。以下の条件に従って、本ソフトウェアのコピーを発行、頒布、サブライセンス、および/または販売し、本ソフトウェアの提供を受けた者がそうすることを許可する。 上記の著作権表示とこの許可通知は、ソフトウェアのすべてのコピーまたは実質的な部分に含まれるものとします。 本ソフトウェアは「現状有姿」で提供され、商品性、特定の目的への適合性、非侵害性の保証に限定されるものではなく、明示または黙示を問わず、いかなる種類の保証もありません。いかなる場合も、著作者または著作権者は、契約、不法行為、またはその他の責任を問わず、本ソフトウェアまたは本ソフトウェアの使用またはその他の取引から生じた、またはそれらに関連して生じた、いかなる請求、損害、その他の責任についても責任を負わないものとします。ソフトウェア。

5
開発者ごとにリモートブランチを持つことは良い習慣ですか?
プロジェクトの個々の開発者ごとにリモートブランチを用意することは良い習慣と考えられますか? 次のブランチでGitを使用しています。 主人 解放する 発展させる 各開発者が独自のブランチを持っている場合、彼らはコードを自分のブランチにプッシュし、他の開発者はこれらの変更を独自のブランチにマージできます。

2
特徴の交差の扱い
最近、フィーチャー交差に関するこの記事で説明されているものと同様の問題がますます多く見られます。私は通常、これらの問題を可能な製品構成の形で遭遇するのに対して、私はこれらを実際には異なる製品に帰する傾向があるものの、製品ラインと呼ぶこともあります。 このタイプの問題の基本的な考え方は単純です。製品に機能を追加しますが、他の既存の機能の組み合わせにより、どういうわけか物事は複雑になります。最終的に、QAは、これまで誰も考えていなかった機能のまれな組み合わせの問題を発見し、単純なバグ修正であったはずのものが、大きな設計変更が必要になることさえあります。 この機能の交差問題の側面は、驚くほど複雑です。現在のソフトウェアバージョンにN機能があり、1つの新しい機能を追加するとします。また、各機能をオンまたはオフにすることしかできず、2^(N+1)考慮できる機能の組み合わせがすでにあると言って、説明を簡略化しましょう。表現や検索用語が不足しているため、これらの組み合わせの存在を特徴の交差問題と呼んでいます。(より確立された用語のリファレンスを含む回答のボーナスポイント)。 ここで私が苦労している問題は、開発プロセスの各レベルでこの複雑な問題にどのように対処するかです。明らかなコスト上の理由から、それぞれの組み合わせに個別に対応することは、ユートピア的なところまでは非現実的です。結局のところ、私たちは正当な理由で指数関数的な複雑さのアルゴリズムに近づかないようにしていますが、開発プロセスそのものを指数関数的なサイズのモンスターに変えることは、まったくの失敗につながるはずです。 では、予算を爆発させず、まともな、有用な、専門的に受け入れられる方法で完全な体系的な方法で最良の結果を得るにはどうすればよいでしょうか。 仕様:新しい機能を指定する場合、他のすべての子とうまく機能することをどのように保証しますか? 既存の各機能を新しい機能と組み合わせて体系的に検査できることがわかりますが、それは他の機能とは切り離されています。一部の機能の複雑な性質を考えると、この分離されたビューはすでに非常に複雑であることが多いため2^(N-1)、他の機能によって引き起こされた要因はもちろん、それ自体が構造化されたアプローチを必要としています。 実装:機能を実装する場合-すべてのケースでコードが適切に相互作用/交差することをどのように保証しますか。 繰り返しますが、私は純粋な複雑さについて疑問に思っています。2つの交差する機能のエラーの可能性を減らすためのさまざまな手法を知っていますが、妥当な方法で拡張できる手法はありません。ただし、仕様中の優れた戦略により、実装中は問題を回避できると思います。 検証:フィーチャーをテストする場合、このフィーチャーの交差スペースの一部しかテストできないという事実にどのように対処しますか? 単一の機能を分離してテストしても、エラーのないコードの近くには何も保証されないことを知るのは十分に困難ですが、これを2^-N数分の1に減らすと、何百ものテストがすべての海洋の1滴の水をカバーしていないように見えます。さらに悪いことに、最も問題のあるエラーは、フィーチャの交差に起因するエラーであり、問​​題につながるとは予想されませんが、そのような強い交差が予想されない場合、これらのエラーをどのようにテストしますか? 他の人がこの問題をどのように扱っているかを聞きたいのですが、私は主にこのトピックをより深く分析する文学や記事に興味があります。そのため、個人的に特定の戦略に従う場合、対応するソースを回答に含めるとよいでしょう。

1
フォントのレンダリングは実際にはどのように機能しますか?
コンピューターでフォントがレンダリングされる方法については、基本的に何も知らないことに気づきました。 私が観察できることから、フォントのレンダリングは通常、システム全体で一貫した方法で行われています。たとえば、DEコントロールパネルで構成したサブピクセルフォントのヒンティング設定は、ウィンドウの境界線、ブラウザー、テキストエディターなどに表示されるテキストに影響を与えます。(私はいくつかのJavaアプリケーションが顕著な違いを示すことを観察する必要があるので、それらは異なるフォントレンダリングメカニズムを使用していると思います)。 上記から得られるのは、フォントのレンダリングを必要とするすべてのアプリケーションが、OS(またはDE)全体のライブラリを利用しているということです。 一方、ブラウザーは通常、レンダリングエンジンを介して独自のレンダリングを管理し、特定のフロールールに従って、テキストを含むさまざまなアイテムの配置を処理します。 これら2つの事実がどのように互換性があるのか​​はわかりません。ブラウザはOSに特定の位置にグリフを描画するように要求する必要があると思いますが、グリフがどのくらいのスペースを取るかを事前に知らずに、テキストのフローを管理するにはどうすればよいですか?グリフのサイズを決定するための個別の呼び出しはありますか?これにより、ブラウザーは、文字がOSによって後で入力される小さなボックスであるかのようにフローを管理できますか?(ただし、これはカーニングを処理しません)。または、OSはテキストフローを含むテキスト領域全体を描画する責任がありますか?OSはレンダリングされたグリフをビットマップとして返​​し、それをアプリケーションに残して画面に描画しますか?

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