ソフトウェア工学

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

1
GrailsアプリケーションをScala Play / Sprayに移行する
PostgreSQL上でGORM / HibernateとHTMLを提供するGSPを使用した中規模のGrails Webアプリケーションと、いくつかのREST APIがあります。Scalaで標準化を進めており、このアプリケーションをPlayまたはSprayに移行し、Slickで既存のデータベースにアクセスしたいと考えています。 Nimbleは現在、認証/承認およびユーザー/ロール/などに使用されています。管理。 ビッグバン移行を回避し、段階的に移行を行うために私たちが取れるアプローチは何ですか? これらは両方ともJVM言語ですが、それらを独立したポートで実行する独立したWebアプリとして扱うことを避ける方法はありますか?

2
「zip」がコレクションのぶら下がり尾を無視するのはなぜですか?
C#、Scala、Haskell、Lisp、およびPythonのzip動作は同じです。1つのコレクションがより長い場合、テールは黙って無視されます。 例外もスローされる可能性がありますが、このアプローチを使用している言語は聞いていません。 これは私を困惑させます。誰かがzipそのように設計されている理由を知っていますか?新しい言語の場合は、他の言語がこの方法で行うため、完了します。しかし、根本的な理由は何でしたか? ここで、事実に基づいた、歴史に基づいた質問をしている。誰かがそれを好むのか、それとも良いアプローチか悪いアプローチなのかではない。 更新:どうすればよいかと聞かれたら、例外をスローします。配列をインデックス化するのとほとんど同じです(「古い」言語はあらゆる種類のマジックを行いましたが、境界外のインデックス、UB、配列を展開する方法、等)。

7
パラメータリスト内のロガーの位置はどうあるべきか[閉じた]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私のコードでは、コンストラクターのパラメーターリストを介して、多くのクラスにロガーを挿入しています ランダムに配置していることに気付きました。リストの最初に表示される場合もあれば、最後に表示される場合もあります。 好みはありますか?私の直感では、一貫性はこの場合に役立ち、私の個人的な好みはそれを最初に置くことです。

4
ファイル名のエンコーディングに関する要件のフレージング
私は要件の仕様を作成していますが、要件の一部をフレージングすることにはジレンマがあります。 シナリオ:Webサイトからファイルをダウンロードし、ダウンロードしたファイルをCMツールのアイテムに添付する必要があります。ダウンロードしたファイルには、ASCII、ISO-8859-1、日本語などの名前が含まれています。 以下の表現では、「非ASCII」はすべての状況をカバーしていますか? ダウンロードしたファイル名には非ASCII文字が含まれている可能性があり、これを処理してもアプリケーションがクラッシュすることはありません

2
なぜCはまだ高レベル言語のカテゴリーにあるのですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 Cプログラミング言語の教科書の多くは、Cが高レベルのプログラミング言語であると言っていますが、オンラインのチューターの多くは、Cは中レベルのプログラミング言語でもあると言っています。なぜそうなのですか?

1
ファイルまたはデータベーステーブルにログを記録しますか?
ユーザー、ユーザーアカウント、ユーザーライセンス、ライセンス価格、請求書など、さまざまなデータにMS SQLを使用するWebアプリケーションを開発しています。 ユーザーのシステムのリアルタイム使用状況をログに記録し、毎月の請求に使用する必要があります。たとえば、ユーザーが特定のページ/ URLを取得するたびにログを記録し、取得したページ数に基づいて月末にユーザーに請求します。 これらのログイベントをMS SQLデータベースのテーブルに書き込む必要がありますか? これらのログイベントをSQL以外の追加専用ログファイルに書き込む必要がありますか? これらのログイベントをユーザーごとに異なるログファイルに書き込む必要がありますか? これは特に大規模なWebサイトではありません。たとえば、最大10,000ユーザーが1日あたり平均5つのログ記録可能なイベントを行う=> 50,000イベント/日= 30イベント/分= 18,000,000イベント/年。 どちらかのオプションが実行可能と思われ、明確な利点があるかどうかわからないので、私は尋ねています。 請求可能なイベントに関連付けられたデータは単純です。たとえば、次のとおりです。 ユーザーID(SQLのユーザーテーブルとの外部キー関係) 日時 請求可能なページのURL この質問に対する私自身の答えは次のとおりです。 データベーステーブルにログを書き込むことの利点: 関係の整合性:たとえば、ログに記録されたイベントは有効なユーザーIDに関連付けられます(ユーザーIDをテーブル間の外部キーとして定義することにより) 課金のために読みやすい:例えばSELECT COUNT GROUP BY、ユーザーごとのログイベントの数のカウントを取得する ログファイルへの書き込みのいくつかの利点: より簡単なパフォーマンス:SQLはあまり頻繁に使用されません。たとえば、ユーザーのログインイベントにのみ使用され、ほとんどが読み取りにのみ使用されます 管理の簡素化:データベースから削除/アーカイブする代わりに古いログファイルを移動することにより、年末などに古いデータを簡単にアーカイブできます 答えが間違っている場合はお知らせください。または何かの重要性を誇張します。またはいくつかの重要な考慮事項を忘れています。 そして/またはそれが私の答えと異なる場合、あなたの答えが何であるかを教えてください。

2
Webアプリケーションのクライアント側に5000の要素を保存[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 ASP.Net開発者向けの電話インタビューがありました。最初の入門的な内容の後、インタビュアーが最初の技術的な質問をしてくれました。 「Webアプリケーションの各ユーザーのクライアント側に5000要素をどのように保存しますか」。 私の答えは、 各要素の平均サイズは?クライアント側にこれだけのデータを保存する必要がありますか?それをデータベースに保持し、これを何らかの方法でユーザーセッション/クライアントIDにリンクすることはできません。 彼の返事は「いいえ、各要素はint / string、通常のテーブル行を含む約8つのフィールドを持つレコードであると考えて、クライアント側でどのように保存するか教えてください」でした。 「セッションで保持することもできますが、セッションは各ユーザーのサーバー側で維持されるため、コストが高くなる可能性があります。または、他のオプションはその量のデータをCookieに保存することです」と私は言っていませんその量のデータをCookieに保存できるかどうかを確認してください。HTML5ストレージオプションはそこにあると述べましたが、私はそれを扱っていません。SQLiteに基づいているため、理論的にはその量のデータを格納できます。 そこに面接官が多少皮肉に言ったので、あなたはウェブ開発で3年の経験があり、面接を終了しました。 何を間違えたのだろうか?または、クライアント側でデータを保存することに関して私が見落としている本当に基本的なものがあります。

2
ロガーの障害をどのように処理すればよいですか?
当社のアプリケーションのいくつかでは、カスタムロガーを使用しています。かなり堅牢ですが、将来NLogのようなものに置き換える可能性があります。ロガーのタスクの1つは、アプリケーションで発生した例外をログに記録することです。 私が常に抱えていた懸念の1つは、ロガー内の例外処理がサイレント障害を許容することです。つまり、ログが特定の例外(ロガーのエラーのため)に書き込まれていない場合、どのようにログを処理し、(どういうわけか)ロガー自体に例外を記録する必要がありますか? WriteLog関数が例外をスローするとします。関数を何回か、または例外がスローされなくなるまで呼び出そうとしますか?スローされた例外をロガーで書き込もうとする必要があります(これにより、例外が発生する可能性が高くなります。最初にカスタムロガーを実装していたときを除いて、この状況に出会えないほど幸運でした。一方で、ロガーがアプリケーションの例外(独自の例外のため)のログに失敗したかどうかを現時点で知る方法はありません。 私はオンラインといくつかのSEサイトで検索しようとしましたが、すべての投稿がロガーのエラー(潜在的な例外とそれらのログ方法ではありません)またはロガー外の例外を扱っているため、これまでのところ無駄です。

2
スーパータイプが期待されるサブクラスオブジェクトを引数として渡すことによるメソッドのオーバーライド
私はJavaを学んでいるだけで、実践的なプログラマーではありません。 私がフォローしている本は、メソッドをオーバーライドするとき、引数の型は同じでなければならないが、戻り値の型は多相的に互換性があると言っています。 私の質問は、オーバーライドメソッドに渡される引数が期待されるスーパータイプのサブクラスタイプになれないのはなぜですか? オーバーロードメソッドでは、オブジェクトで呼び出すメソッドはすべて、オブジェクトで定義されることが保証されています。 推奨される重複に関するメモ: 最初の提案は、クラス階層、どこの機能を置くことを約あるように思われます。私の質問は、言語制限が存在する理由に焦点を当てています。 第二の提案は、私が尋ねるが、いないよ何をする方法を説明し、なぜそれがそのように行う必要があります。私の質問はその理由に焦点を合わせています。

5
連続していないアレイはパフォーマンスが良いですか?
C#では、ユーザーがを作成しList<byte>てバイトを追加すると、スペースが不足し、さらにスペースを割り当てる必要がある可能性があります。以前の配列のサイズの2倍(または他の乗数)を割り当て、バイトをコピーし、古い配列への参照を破棄します。私は、各割り当てが高価であるため、リストが指数関数的に増加することを知っていて、これはそれを制限O(log n)だけ追加配分、10余分な項目ににつながるたびO(n)配分を。 ただし、配列サイズが大きい場合、多くの無駄なスペースが存在する可能性があり、おそらく配列のほぼ半分になります。メモリを削減するために、リストに4MB未満がある場合にバッキングストアとしてNonContiguousArrayList使用する同様のクラスを作成し、サイズが大きくなるとList<byte>追加の4MBバイト配列を割り当てNonContiguousArrayListます。 異なりList<byte>、これらの配列が非連続であるので、周りのデータのないコピー、単に追加の4Mの割り当てはありません。アイテムが検索されると、インデックスは4Mで除算されてアイテムを含む配列のインデックスが取得され、4Mを法として配列内のインデックスが取得されます。 このアプローチの問題を指摘できますか?私のリストは次のとおりです。 不連続な配列にはキャッシュの局所性がないため、パフォーマンスが低下します。ただし、4Mのブロックサイズでは、適切なキャッシングに十分なローカリティがあるようです。 アイテムへのアクセスはそれほど単純ではなく、間接的なレベルが余分にあります。これは最適化されますか?キャッシュの問題が発生しますか? 4Mの制限に達すると線形に増加するため、通常よりも多くの割り当てを行うことができます(たとえば、1 GBのメモリに対して最大250の割り当て)。4M以降は追加のメモリはコピーされませんが、追加の割り当てがメモリの大きなチャンクをコピーするよりも高価かどうかはわかりません。
12 c# 

4
Prologが命令型プログラミングでSQLよりも人気がない理由の歴史的な先例は?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 宣言 的プログラミングSQLは、命令型プログラミングで非常に人気があるようです。ただし、Declarative を記述するPrologことで複雑さを大幅に節約できるようにも見えますが、これはあまり一般的ではありません。 PrologよりもSQLがこのように優先されるという歴史的な先例はありますか? 理由が命令型言語によるネイティブサポートの欠如である場合、言語の作成者がそもそもネイティブサポートPrologが有用であるとは思わなかった理由に答えることは可能ですか? 特定の例を提供するには: 例1 ローンアプリケーションの評価は、ほんの数行のコードでPrologあるSELECT/JOINクエリのように、ほんの数行のコードであるかもしれませんがSQL、利点はそれほど明白ではないようですSQL。 例2 別の問題例とPrologの解決策を次に示します。次の制約論理プログラムは、教師としてのジョンの歴史の簡略化されたデータセットを表しています。 teaches(john, hardware, T) :- 1990 ≤ T, T < 1999. teaches(john, software, T) :- 1999 ≤ T, T < 2005. teaches(john, logic, T) :- 2005 ≤ T, T ≤ 2012. rank(john, instructor, T) :- 1990 ≤ T, …

2
バックエンド開発者として、ソフトウェアテストを学ぶ必要がありますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 ジュニア開発者として、航空業界向けのソフトウェアを開発する会社で働いています。テストチームがあるので、テストソフトウェアを学ぶ意欲はありません。私の友人は、小さな会社でバックエンド開発者として働いています。チームには特定のテストチームはなく、自分でテストを行います。バックエンド開発者はソフトウェアのテストについて学ぶ必要がありますか?
12 testing  backend 

1
iOS / OSXオープンソースプロジェクトの命名規則
常にではありませんが、ほとんどの場合、作成者の姓と名の頭文字で始まる名前のiOSまたはMac OS Xオープンソースプロジェクトがあります。プロジェクトがNick Leblancによって作成される場合、プロジェクトはとして読み取られNLMyProjectます。 例: Rune MadsenによるRMSwipeTableViewCell、 Ezequiel BecerraによるEBCardCollectionViewLayout、 SDiPhoneVersionセバスチャンDobrincuすることにより、 Leo NatanによるLNNotificationsUI。 それはどこから来たのですか?ある人が最初にこのように書いて、それから他のみんながそれに続きましたか? Appleガイドラインでさえ、それについて何も見つけることができませんでした。そのイディオムはどこにでも書かれていますか?

1
注目すべきC拡張には、動作がマシンのワードサイズに依存しない整数型が含まれますか
他のいくつかの言語と比較したCの興味深い特徴は、そのデータ型の多くが、絶対条件で指定されるのではなく、ターゲットアーキテクチャのワードサイズに基づいていることです。これにより、特定のタイプでは困難なマシンでコードを記述するために言語を使用できますが、異なるアーキテクチャで一貫して実行されるコードを設計することは非常に難しくなります。コードを考慮してください: uint16_t ffff16 = 0xFFFF; int64_t who_knows = ffff16 * ffff16; int16ビットのアーキテクチャでは(多くの小さなマイクロコントローラーに当てはまります)、このコードは明確に定義された動作を使用して値1を割り当てます。int64ビットのマシンでは、明確に定義された動作を使用して、値4294836225を割り当てます。int32ビットのマシンでは、-131071の値を割り当てる可能性があります(それが実装定義の動作か未定義の動作かはわかりません)。コードは名目上「固定サイズ」タイプであると想定されるもの以外は何も使用しませんが、標準では、現在使用されている2種類のコンパイラーが2つの異なる結果を生成し、今日の多くの一般的なコンパイラーが3番目を生成する必要があります。 この特定の例は、実際のコードでは2つの16ビット値の積を直接64ビット値に割り当てるとは思わないという点で、多少不自然ですが、3つの方法の整数を示す簡単な例として選ばれました。プロモーションは、固定サイズと思われるサイズの符号なしタイプと対話する場合があります。符号なしの型の数学を数学的な整数演算のルールに従って実行する必要がある現実の状況、モジュラー演算のルールに従って実行する必要のある状況、実際にそうでない状況があります問題ない。チェックサムなどの実世界のコードの多くは、算術に依存しており、少なくとも、未定義の動作をトリガーするのではなく、正確なmod 65536として定義されている結果を取得します。uint32_t算術ラッピングmod2³²におり、任意のを実行できます。uint16_t この状況は明らかに望ましくないと思われますが(多くの目的で64ビット処理が標準になると、より多くなります)、私が観察したC標準委員会は、いくつかの顕著な生産ですでに使用されている言語機能を導入することを好みます環境を「ゼロから」作成するのではなく、C言語には、型を格納する方法だけでなく、可能なプロモーションを含むシナリオでの型の動作をコードで指定できる顕著な拡張機能がありますか?コンパイラー拡張機能がそのような問題を解決する可能性がある少なくとも3つの方法を見ることができます。 特定の「基本的な」整数型を特定のサイズに強制するようにコンパイラーに指示するディレクティブを追加します。 ターゲットアーキテクチャ上の型の実際のサイズに関係なく、マシンの型が特定のサイズを持っているかのように、さまざまなプロモーションシナリオを評価するようコンパイラーに指示するディレクティブを追加します。 添加;(特定の特性を有するタイプに関係なく、基礎となるワードサイズの、MOD-65536ラッピング代数環として振る舞うべきであり、他のタイプに暗黙的に変換すべきではないこと、例えば宣言をタイプを宣言する手段を可能にすることによってwrap32には、int得られるはずが16ビットより大きいwrap32かどうかに関係なく、型の結果。ただしint、にwrap32直接aを追加するwrap16ことは不正です(どちらも他方に変換できないため)。 私自身の好みは3番目の選択肢です。なぜなら、異常なワードサイズのマシンでさえ、変数が2のべき乗サイズの場合と同じように「ラップ」する多くのコードで動作できるからです。コンパイラは、型を適切に動作させるためにビットマスキング命令を追加する必要がありますが、コードがmod 65536をラップする型を必要とする場合、ソースコードを乱雑にするよりも、それを必要とするマシンでコンパイラにそのようなマスキングを生成させる方が良いですまたは、そのようなマスキングが必要なマシンで使用できないため、単純にそのようなコードを持っています。しかし、上記の手段のいずれかを介して、または私が考えていない手段を介してポータブルな動作を実現する一般的な拡張機能があるかどうか、私は興味があります。 私が探しているものを明確にするために、いくつかのことがあります。最も顕著な: 望ましいセマンティクスを確保するためにコードを記述する方法は多数ありますが(たとえば、特定のサイズの符号なしオペランドで数学を実行して、明示的にラップするかしないかの結果を得るために実行するマクロを定義する)、または少なくとも望ましくないセマンティクス(たとえば、a が昇格しないコンパイラーで条件付きで型wrap32_tを定義し、その型が昇格するマシンでコンパイルに失敗する必要があるコードの方が、実行して偽の動作をもたらすよりも優れていると考える)将来の言語拡張機能で最も有利に動作するコードを記述する方法がある場合、それを使用することは、独自のアプローチを考案するよりも優れているでしょう。uint32_tuint32_twrap32_t 多くの整数サイズの問題を解決するために言語をどのように拡張できるかについて、かなり堅実なアイデアがあり、コードが異なるワードサイズのマシンで同一のセマンティクスをもたらすことを可能にしますが、それらを書くのにかなりの時間を費やす前にその方向でどのような努力が既に行われたかを知るため。 私は、C標準委員会または彼らが作成した作業を軽disするような見方を決して望みません。ただし、「自然な」プロモーションタイプが32ビットであるマシンと64ビットであるマシンで、数年以内にコードを正しく動作させることが必要になると思います。言語の控えめな拡張(C99 nnd C14間の他の多くの変更よりも控えめ)を使用すると、64ビットアーキテクチャを効率的に使用するクリーンな方法を提供できるだけでなく、バ​​ーゲンでも標準が歴史的に後方に曲げてサポートするために「異常なワードサイズ」のマシン(例えば、12ビットのマシンを可能にするchar、uint32_tmod2³²をラップする]。将来の拡張機能の方向に応じて、デフォルトの整数型が「期待される」ように動作する今日のコンパイラで使用できるマクロを定義できるようになると期待していますが、整数の将来のコンパイラでも使用できますタイプのデフォルトの動作は異なりますが、必要な動作を提供できる場所です。

5
定義された仕様に合わせてプログラムする方法をマシンに教えることは想像できますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 プログラミングの知識のない友人がこの質問をしてくれたので、面白いと思いました。 問題のテキストを分析し、解決策を考え、それをプログラムできる本当に高度な人工知能が必要になるため、それは不可能だと思います。単純な計算機をプログラムできるマシンについて考えるだけでも、私にとってはかなり進んでいるように思えます。 しかし、私は間違っているかもしれませんが、それについてどう思いますか、主題に関する記事/研究を知っているのか、それがすでに存在するのか、仕様を選択し、この「仕様」に自己プログラムするマシン

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