ソフトウェア工学

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

2
テストと仕様の違い
私はこの時点でコンセプトの問題があり、テスト(UnitTestなど)と仕様(Rspecなど)の違いに関する情報を見つけることができません。 私の知る限り、仕様は統合テストにあり、テストはUnitTestにありますが、それだけです。 違いは何ですか?

2
プログラムはどのくらい正確にデバイスドライバーと通信しますか?
プログラマーがコンピューター上のデバイスとどのように話しているのか、私は混乱しています。今、私は大きなアイデアを話していません。さまざまなプログラムがその機能を使用できるように、ハードウェアの上にあるデバイスドライバーがあることを知っています。 しかし、一般的に誰がドライバーと正確に話しますか?アプリケーションの作成者は、ドライバーの関数を呼び出す責任がありますか?または、プログラマーは、ドライバーへの呼び出しを処理するオペレーティングシステムを介して関数を呼び出しますか?
12 hardware  drivers 

4
メソッドのパラメーターを再利用するのは悪い習慣ですか?
メソッド自体からメソッドに渡される値を変更する必要がある場合があります。例として、このメソッドのような文字列をサニタイズします: void SanitizeName(string Name) { Name = Name.ToUpper(); //now do something here with name } Name引数は参照渡しではないため、これはまったく無害です。ただし、何らかの理由で、将来開発者がすべての値をrefで渡すことにした場合、文字列のサニタイズはメソッドの外部の値に影響を及ぼし、有害な結果を招く可能性があります。 したがって、引数自体に再割り当てする代わりに、常に次のようなローカルコピーを作成します。 void SanitizeName(string Name) { var SanitizedName = Name.ToUpper(); //now do something here with name } これにより、値が渡される方法を変更してもメソッドの外での進行に影響を与えないことが保証されますが、これについて過度に妄想を立てているのではないかと思います。

2
分散型のイベントソースシステムで一貫性を維持するためのパターンですか?
私は最近イベントの調達について読んでおり、その背後にあるアイデアが本当に好きですが、次の問題にこだわっています。 コマンド(Webサーバーなど)を受信し、結果としてイベントを生成し、それらを中央ストアに格納するN個の並行プロセスがあるとします。また、ストアからイベントを順番に適用することにより、すべての一時的なアプリケーションの状態が個々のプロセスのメモリで維持されると仮定します。 ここで、次のビジネスルールがあるとしましょう。各個別のユーザーには一意のユーザー名が必要です。 2つのプロセスが同じユーザー名Xのユーザー登録コマンドを受信した場合、両方がXがユーザー名のリストにないことを確認し、ルールは両方のプロセスを検証し、両方とも「ユーザーXの新しいユーザー」イベントをストアに保存します。 現在、ビジネスルールに違反しているため、一貫性のないグローバル状態に入りました(同じユーザー名を持つ2人の異なるユーザーがいます)。 従来のNサーバー<-> 1 RDBMSスタイルのシステムでは、データベースは、このような不整合の防止に役立つ同期の中心点として使用されます。 私の質問は、イベントソースシステムは通常、この問題にどのように対処するのかということです。すべてのコマンドを順番に処理するだけですか(たとえば、ストアに書き込むことができるプロセスの量を1に制限するなど)。

3
依存関係の重要な機能が壊れて開発が妨げられた場合はどうすればよいですか?
昨日、私はRails 5 APIプロジェクトに取り組んでいました。このプロジェクトでは、タグ付きのacts-as-taggable-onライブラリを使用して、タグを付けることができます(SEの質問など)。Rails 5は現在、アルファ版をサポートしています。現在、マスターにマージされるのを待っているバグを修正するためのPRがあります。このバグにより、機能ブランチが完了の途中で停止しました-ロードが壊れたため、ライブラリの機能を実装できませんでした。 簡単な修正として、レポジトリを複製し、PRと同じコードで問題を修正し、バグ修正が最終的にマスターにマージされるまで、Gemfile(依存バージョン管理ファイル)を自分のGithubフォークに向けました。 修正が簡単だった(そして誰かがすでにそれを行っていた)ので幸運に思ったので、問題を回避することができました。しかし、このライブラリがアプリケーションの開発にとって重要だったらどうでしょうか?私の開発を止めていたバグ修正が他の人々に広まっている問題ではなかったので、今回のようにすぐに修正が反映されなかった場合はどうでしょうか? この機能は、他の依存機能の開発の前に完了する必要があると想像してください-その状況で何をしますか?私にとって、タグ付けが他のすべてが依存している次の開発フレーズにとって絶対に重要だった場合、どうすればタグ付けの依存関係が私の構成にバグを起こすのでしょうか?依存関係の重要な機能が機能の開発を妨げる場合、何をしますか? そして、確かに、数時間または数日間のオフィスチェアでの剣闘は選択肢ではありません...

2
C 2011で可変長配列がオプションになったのはなぜですか?
VLAがC 1999で導入されたとき、私はそれが言語の大きな革新だと思っていました。しかし、C 2011でオプションになったことを知ったので、ステータスの変化につながったのはなぜか、そしてそれが機能が実際に陳腐化に向かう​​ことを意味するのかどうか疑問に思っています。もしそうなら、それを置き換えると考えられている動的にサイズ変更されたデータの自動管理の同等の概念がありますか? C 2011の理論的文書を見つけようとしましたが、まだ公開されていないようです。

1
ここで「このコードをコピーして貼り付けないでください」と言うとき、Googleはどういう意味ですか?
以下は、Googleのrecaptcha API(https://www.google.com/recaptcha/api.js)のコードからの抜粋です。 /* PLEASE DO NOT COPY AND PASTE THIS CODE. */ (function() { if (!window['___grecaptcha_cfg']) { window['___grecaptcha_cfg'] = {}; }; if (!window['___grecaptcha_cfg']['render']) { window['___grecaptcha_cfg']['render'] = 'onload'; }; window['__google_recaptcha_client'] = true; var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://www.gstatic.com/recaptcha/api2/r20160314182818/recaptcha__it.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); …


5
継承とnull値の追加プロパティ
オプションのフィールドを持つクラスの場合、継承またはnull許容プロパティを使用する方が良いでしょうか?この例を考えてみましょう: class Book { private String name; } class BookWithColor extends Book { private String color; } または class Book { private String name; private String color; //when this is null then it is "Book" otherwise "BookWithColor" } または class Book { private String name; private Optional<String> color; //when isPresent() …
12 java  inheritance  class  null 

3
コンピューターの前に座っているときに問題を解決できない場合でも大丈夫ですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 3年前に閉店しました。 私は趣味のプログラマーであり、初心者です。ほとんどの場合、コンピューターの前に座っている間は問題を解決できません。たとえば、ある数字が別の数字の力かどうかを調べようとしていました。ペンと紙をつかんで問題を分析するまで、解決策がわかりませんでした。およそ3分でそれを解決し、Pythonでスクリプトを作成しました。 コンピューターの前に座って問題を解決できる場合もありますが、苦労します。それは大丈夫ですか?

2
未知のパラメーターを許容する必要がありますか?
私はRESTful APIを設計していますが、タイトルの問題に直面しました。 クライアントが認識されないパラメーターを送信した場合、高速で失敗する必要がありますか?例えば、 http://example.com/api/foo?bar=true&paula=bean 上記でbarは、は有効なパラメーターですがpaula、APIによって指定されていません。したほうがいい クライアントにエラーを警告する 早く失敗する それを無視します クライアントに警告する場合、最初のパラメーターに対して警告を発行できるのは、ほぼ無限の数のパラメーターを送信している可能性があり、サーバーにはおそらくより良いことがあるからです。同様に、失敗すると、最初の無効なパラメータのみが問題として指定されます。 警告を出すよりもプログラマーに強制的に行動を起こさせるよりも失敗を好む。そうでなければプログラマーは問題を無視してリソースを浪費し続けるかもしれない。その点で何もしないのはさらに悪いことです。 私の議論は理にかなっていますか?そのようなことに関して受け入れられている慣行はありますか?
12 rest  api-design 

6
データベーステーブルに「レコードステータス」列を持つことは悪い習慣ですか?
最初に、ステータス列は、テーブル内のレコード(行)で表される実際のアイテムのステータスを反映するものではないことを明確にする必要があります。むしろ、レコード自体のステータスを表示することを目的としています。 これは、アクティブ/非アクティブとして、単純なようであるかのように複雑なことができます承認/削除された/ロック/保留/拒否などのステータスがマッピングで、ブール/短整数の列または単一文字列に保存することができるようにtrue/ 1=アクティブまたはA=承認済み。 基本的な考え方は、アプリケーションでごみ箱/ゴミのような回復をサポートすることです(データベースでシミュレートします)。ユーザーがレコードを「削除」できると思われるフロントエンドGUIまたはその他のインターフェイスがある場合、テーブル内のレコードは実際には削除されず、単にレコードのステータスが非アクティブまたは削除済みに変更されます。インターフェイスがレコードをフェッチするとき、ステータスがアクティブまたは承認済みであるという条件にのみ一致するレコードを常に取得します。 ユーザーがミスを犯し、「ユーザーの観点から」「削除された」レコードを回復する必要がある場合、DBAはレコードを簡単に修正してアクティブまたは承認済みに戻すことができます。そこ。または、インターフェイス自体で、ユーザーが削除されたレコードを別のビューで表示し、必要に応じてそれらを復元したり、完全に削除したりすることもできます(実際のレコードを削除します)。 私の質問: これは良い習慣ですか、それとも悪い習慣ですか? データの正規化に影響しますか? 潜在的な落とし穴は何ですか? 同じ目標を達成する代替方法はありますか?(ノートを参照してください) 特定のステータスのデータに対してのみデータベースに一意の制約を適用するにはどうすればよいですか(ただし、他のステータスの重複をいくつでも許可します)。 データベースがネイティブで「ごみ箱」のような機能やテーブルトラッキング/リカバリを提供しないので、心配せずにインターフェイスで実際のレコードを削除できます。 注:別の履歴テーブルを維持することについて読みましたが、ストレージの観点からは悪く、トリガーを生成し、追跡テーブルのスキーマでトリガーを最新に保つ必要があるようです。

2
Haskellが3n + 1問題を解決する方法
:ここではSPOJから、簡単なプログラミングの問題であるhttp://www.spoj.com/problems/PROBTRES/が。 基本的に、iとjの間の数値に対して最大のCollat​​zサイクルを出力するように求められます。(数$ n $のコラッツサイクルは、最終的に$ n $から1に到達するためのステップ数です。) 私は、JavaまたはC ++のパフォーマンスと比較してパフォーマンスを解決するHaskellの方法を探しています(許可された実行時間の制限に収まるように)。既に計算されたサイクルのサイクル長をメモする単純なJavaソリューションは機能しますが、Haskellソリューションを取得するためのアイデアの適用に成功していません。 Data.Function.Memoizeと、この投稿/programming/3208258/memoization-in-haskellのアイデアを使用して、自家製のログ時間メモ化手法を試しました。残念ながら、メモ化は実際にはcycle(n)の計算をさらに遅くします。減速はHaskellウェイのオーバーヘッドによるものだと思います。(解釈する代わりに、コンパイル済みのバイナリコードで実行してみました。) また、iからjへの単純な反復処理にはコストがかかる($ i、j \ le10 ^ 6 $)と思われます。そこで、http://blog.openendings.net/2013/10/range-trees-and-profiling-in-haskell.htmlからのアイデアを使用して、範囲クエリのすべてを事前計算しようとしました。ただし、これでも「Time Limit Exceeding」エラーが発生します。 このために、きちんとした競争力のあるHaskellプログラムに知らせるのを手伝ってもらえますか?

3
メソッド呼び出しまたはメソッド自体を保護する方が良いですか?
私はアプリケーションを書いていますが、このポイントに到達しました: private void SomeMethod() { if (Settings.GiveApples) { GiveApples(); } if (Settings.GiveBananas) { GiveBananas(); } } private void GiveApples() { ... } private void GiveBananas() { ... } これは非常に簡単です。いくつかの条件があり、それらが真である場合、メソッドが呼び出されています。しかし、私は考えていました、このようにするのがむしろ良いですか? private void SomeMethod() { GiveApples(); GiveBananas(); } private void GiveApples() { if (!Settings.GiveApples) { return; } ... } private void GiveBananas() …

1
多くの非同期呼び出しとAPIの単一呼び出し
特に、JavaScriptを介してHTML5フロントエンドで使用されるREST APIを開発しています。このアプリケーションは組織内で使用するためのもので、通常は約300人のユーザーがいますが、1000ユーザー程度までスケールアップしたいと考えています。 通常、APIへの接続はLAN内で行われるため、接続の品質と遅延は良好になりますが、3G / 4Gを介した接続が遅く、遅延が発生する可能性のあるインターネットでの時折の使用は除外されません。 私たちが考えた2つのオプションは次のとおりです。 フロントエンドは、APIに対して複数の非同期呼び出しを同時に行い、インターフェイスのさまざまなコンポーネントをロードします。 長所:シンプル。 短所:サーバーへの接続が増えます。 フロントエンドのコントローラーは、オブジェクトを取得する必要があるパラメーターとして渡すAPIを1回呼び出します。 長所:サーバーへの接続は1つだけですが、サーバーはデータベースに複数の接続を作成します。 短所:フロントエンドとAPIの両方のメカニズムが必要です。設計が複雑になります。 詳細な説明:さまざまなリソース... / Product ... / Locationsなどがあります。これらのリソースは単独で取得できますが、別の抽象的なリソース... / screen?Product&Locationsが1回の呼び出しで両方を取得します。
12 rest  api  ajax 

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