ソフトウェア工学

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

3
x64レジスタ名の「R」は何を表していますか?
32ビットのレジスタは、拡張を意味する 'E'プレフィックスが付いた16ビットのレジスタのように名前が付けられていました。私はそれが明示的に述べられたことを見たことがなかったが、16ビットから32ビットに拡張されることを意味すると常に考えてきました。 私は「R」が何を意味するのかを見つけようとしていましたが、私のグーグルスキルは私を失敗させました。知ってる?
27 architecture  x86 

6
ユニットテストにどれくらいの時間を費やしていますか?
私が働いていた会社では、経営陣はユニットテストのコードカバレッジが99%以上でなければならないと主張しました。これは、コードよりも多くのテストを書くことになりました。実装に1日かかった単一のクラスのテストを書くのに、文字通り3日かかりました。 しかし、その結果、TDD、テストツール、プラクティスなどについて多くのことを学びました。 私がその後働いた会社では、単体テストは未知のものでした。それは誰かが前に聞いたことがあるかもしれないものでした。単体テストの概念を紹介するのに苦労しましたが、効果はありませんでした。 さて、自営業として、私は疑問に思う-あるどのくらいの時間は本当にユニットテストに費やす必要が?ほとんどがiPhone / Android開発者であるため、コードのどの部分をテストでカバーする必要がありますか?

7
CRCのより高速な代替手段は何ですか?
私はdsPICからPCへのデータ送信を行っており、エラーがないことを確認するために512バイトのブロックごとに8ビットCRCを行っています。CRCコードを有効にすると、約33KB /秒になりますが、それなしでは67KB /秒になります。 チェックアウトする高速な代替エラー検出アルゴリズムは何ですか?

5
データ入力検証-どこ?いくら?[閉まっている]
データ入力の検証は、常に私にとって非常に内部的な闘争でした。 レガシーアプリケーションリライトプロジェクトに実際のセキュリティフレームワークとコードを追加する寸前(これまでのところ、カードキャッスルに強力なレガシーセキュリティコードとデータ検証を保持している)、私はどのくらい検証すべきか、どこなど プロのJava開発者としての5年間で、データ入力の検証とセキュリティ対策のための個人ルールを作成し、改良しました。私は自分の方法を改善したいので、皆さんからいくつかのアイデアを聞きたいと思います。一般的なルールと手順は問題ありませんが、Java固有のものも同様です。 要約すると、これらは私のガイドライン(3層のWebアプリケーションスタイルで公開)であり、簡単な説明があります。 第1層のクライアント側(ブラウザ):最小限の検証、不変のルールのみ(必須の電子メールフィールド、1つのアイテムを選択する必要があるなど)。「6〜20文字」などの追加検証の使用頻度が少なくなります。これにより、変更のメンテナンス作業が増加します(ビジネスコードが安定したら追加できます)。 第1層サーバー側(Web通信処理、「コントローラー」):このルールはありませんが、ここではデータ操作とアセンブリ/解析エラーのみを処理する必要があると考えています(誕生日フィールドは有効な日付ではありません)。ここにさらに検証を追加すると、簡単に本当に退屈なプロセスになります。 第2層(ビジネス層):堅実な検証、それ以下。入力データ形式、範囲、値、メソッドをいつでも呼び出せない場合の内部状態チェック、ユーザーの役割/権限など。できるだけ少ないユーザー入力データを使用し、必要に応じてデータベースから再度取得します。取得したデータベースデータも入力と見なす場合、特定のデータが信頼できないか、DBで十分に破損していることがわかっている場合にのみ検証します。 第3層(データ層/ DAL / DAO):データにアクセスするのはビジネス層のみであるため、ここでは多くの検証が必要とは考えられません(「param1がtrueの場合、param2はnullであってはならない」などの場合に検証します)。ただし、「ここ」を意味する場合、「データベースにアクセスするコード」または「SQL実行メソッド」を意味することに注意してください。データベース自体はまったく逆です。 データベース(データモデル):適切なプライマリキー、外部キー、制約、データ型/長さ/サイズを使用して、DB上の不正なデータや破損データを可能な限り回避するために、十分に考慮し、強力かつ自己強化する必要があります/ precisionなど-独自のプライベートディスカッションがあるため、このトリガーは除外します。 初期のデータ検証は優れており、パフォーマンス面でも優れていることは知っていますが、繰り返しデータ検証を行うのは退屈なプロセスであり、データ検証自体は非常に面倒です。これが、非常に多くのコーダーがそれをスキップするか、途中でやる理由です。また、常に同期されていない場合、重複する検証はすべてバグの可能性があります。これらは、時間、帯域幅、CPU、ケースバイケースで処理される例外を犠牲にして、ほとんどの検証をビジネス層まで許可することを好む主な理由です。 それで、あなたはこれについてどう思いますか?反対意見ですか?他の手順はありますか?そのようなトピックへの参照?寄付はすべて有効です。 注:物事のJavaの方法を考えている場合、私たちのアプリはSpring MVCとMyBatisを使用したSpringベースです(パフォーマンスと不良データベースモデルはORMソリューションを除外します)。Spring SecurityをセキュリティプロバイダーとJSR 303(Hibernate Validator?)として追加する予定です。 ありがとう! 編集:第3層に関する追加の明確化。

9
コードコメントのピリオド/フルストップについてはどう思いますか?[閉まっている]
私が見た、これはSO居酒屋に尋ねたので、私はここに質問を投稿しています。面白い質問だと思いました。(もちろん、SOに属していませんが、ここでは問題ないと思います。) コードコメントにピリオドを追加しますか(またはOPが書いたように「フルストップ」)。 関連性を保つために、なぜですか?

2
DBテーブル名は単数形であるがRESTfulリソースは複数形である必要があると慣習で規定されているのはなぜですか?
少なくともSQLでは、データベーステーブル名は単数形である必要があるという、かなり確立された規則です。この質問と議論をSELECT * FROM user;参照してください。 また、RESTful APIリソース名は複数にする必要があるという確立された規則です。GET /users/123そして、これをPOST /users見てください。 最も単純なデータベースベースのAPIでは、URLのリソースの名前はテーブルになり、URLのデータ要素と要求/応答本文はDBの列に直接マップされます。概念的には、この理論的なAPIを介してデータを操作することと、SQLを介して直接操作することとの間に違いはありません。そして、そのため、間の命名規則の違いuserとはusers私には意味がありません。 概念的に、REST APIとSQLが同じことをしているときに、複数形の違いをどのように正当化できますか?


1
関数を呼び出して、C#で待機しない
mvc4 Webアプリケーションに、別の関数を呼び出す必要があるアクションがあるコントローラーがあります。その関数で何が起こるか、つまり戻り値は私のアクションにとって重要ではありません。その関数を呼び出して、実行されるのを待つことはできませんか? 私はそれを非同期で行うことができると思いますが、私のポイントはリソースを使用せず、関数を呼び出して、それが起こるまで待つことはありません。 アドバイスをください。
26 c#  .net  asp.net  asp.net-mvc 

2
C ++関数constexprをマークするのは悪いことですか?
非常に簡単な関数を考えると、 int transform(int val) { return (val + 7) / 8; } この関数を関数に変換するconstexprことは簡単で、constexpr変数を定義するときに次のように使用できることは非常に明白です。 constexpr int transform(int val) { return (val + 7) / 8; } 私の想定では、これは厳密に改善されたものです。関数はconstexprコンテキスト以外でも呼び出すことができ、コンパイル時の定数変数の定義に使用できるようになったためです。 私の質問は、これが悪い考えである状況はありますか?たとえば、この関数を作成することによりconstexpr、特定の状況でこの関数が使用できなくなる状況や、誤動作する状況に遭遇することはありますか?
26 c++  c++11 

3
一部のマシンでlong intに12バイトかかるのはなぜですか?
私のマシンでこのコードをコンパイルした後、奇妙なことに気付きました: #include <stdio.h> int main() { printf("Hello, World!\n"); int a,b,c,d; int e,f,g; long int h; printf("The addresses are:\n %0x \n %0x \n %0x \n %0x \n %0x \n %0x \n %0x \n %0x", &a,&b,&c,&d,&e,&f,&g,&h); return 0; } 結果は次のとおりです。すべてのintアドレスの間に4バイトの違いがあることに注意してください。ただし、最後のintとlong intの間には、12バイトの違いがあります。 Hello, World! The addresses are: da54dcac da54dca8 da54dca4 da54dca0 da54dc9c da54dc98 …
26 c  memory  pointers 

7
ファイルごとにプロジェクトを手動でサーバーにデプロイするのがベストプラクティスですか?
私が今働いている会社は、継続的デリバリーをまだ実装していません。ファイルごとにサーバーにプロジェクトを手動でデプロイします。ベストプラクティスは次のとおりです。展開ごとに1つのプロジェクトアーティファクトを手動で展開するか、ファイルごとの展開を続けますか?

4
ライブラリのC#名前空間とクラスの命名規則
C#でさまざまな小さなユーティリティ関数を使用してライブラリを構築し、名前空間とクラスの命名規則を決定しようとしています。私の現在の組織は次のようなものです。 Company Company.TextUtils public class TextUtils {...} Company.MathsUtils public class MathsUtils {...} public class ArbitraryPrecisionNumber {...} public class MathsNotation {...} Company.SIUnits public enum SISuffixes {...} public class SIUnits {...} これは名前空間とクラスを整理するのに良い方法ですか、それとももっと良い方法がありますか?特に、名前空間とクラス名(Company.TextUtils名前空間とTextUtilsクラスなど)に同じ名前を付けることは単なる重複であり、スキームがより良い可能性を示唆しています。
26 c#  naming  namespace 

7
戻り値の計算とreturnステートメントを1行のメソッドに分割しますか?
私は同僚returnと、ステートメントと、戻り値を2行で計算するステートメントを壊すことについて議論しました。 例えば private string GetFormattedValue() { var formattedString = format != null ? string.Format(format, value) : value.ToString(); return formattedString; } の代わりに private string GetFormattedValue() { return format != null ? string.Format(format, value) : value.ToString(); } コードに関しては、最初のバリアントには値が実際には表示されません。私にとって、後者は、特に短い方法の場合、より明確です。彼の主張は、前者のバリアントの方がデバッグが簡単だということでした-VisualStudioではブレークポイントにより実行が停止したときにステートメントを非常に詳細に検査できるため、これは非常に小さなメリットです。 私の質問は、それでもデバッグを一見するのを簡単にするためだけに、あまり明確でないコードを書くのが有効なポイントであるなら?それ以上の引数があるため、分割計算とを有する変異体returnのステートメントは?

8
「xとyの間」は可換である必要がありますか?
私のアプリケーションには、データのフィルタリングに使用できる定義済みの式テンプレートがいくつかあります。それらの1つは " between x and y"です。QAエンジニアは、「between 100 and 200」とは異なる結果が得られるため、その定義に欠陥があると主張していbetween 200 and 100ます。式は内部的に " value >= x and value <= y"に変換されるため、2番目の境界が最初の境界より低い場合、結果は明らかにありません。同じ動作がSQLにもあることを確認しました-" between x and y"はy> = xであるか、結果がないと仮定しています。これは、少なくともSQLでは演算子が可換ではないことを意味します。 それでは、QAは、「between x and y」が可換であるべきだと思いますか?

5
コードレビューを段階的に導入する方法
私は6人のシニアエンジニアでチームを率いています。私は、すべての標準的な理由でコードレビューを行うことは私たちに大いに役立つと信じています。必ずしもすべての変更ではありませんが、少なくとも背景レビューの着実な流れ。したがって、人々は少なくとも他の人の変更を見て、それらについて話し始めます。 レビューを紹介する良い方法はありますか?チームから大きな不本意を感じています。それはもう1つのことであり、会話が苦痛になる可能性があるからです。少なくとも最初のステップとして、すべての変更をレビューすることは初心者ではないと感じています。量を増やす前に、まず低頻度でレビューを行うリズムと練習を始めてほしい。 誰かがコードレビューを徐々に成功させましたか?どうやって?しかし、「ホットな」ファイルまたはライブラリのレビューを要求することについては考えました。またはランダムに選ぶ。または、「選択」する必要がある変更を確認することを選択します。または、思い切ってすべての変更を行うことが唯一の方法ですか?

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