ソフトウェア工学

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

8
.Netブックがスタックとヒープメモリの割り当てについて説明しているのはなぜですか?
すべての.netブックは、値型と参照型について述べており、各型が格納されている状態(ヒープまたはスタック)を(多くの場合は誤って)示すようにしています。通常、最初の数章にあり、非常に重要な事実として提示されます。認定試験でもカバーされていると思います。スタックとヒープが(初心者).Net開発者にとっても重要なのはなぜですか?ものを割り当てると、それは機能します。
36 .net 

8
Linqが.NETプログラマーに気のめいるような影響を与えていますか?
私たちの多くは、jQueryを使用してクエリ文字列を取得するなどの非常に正気でないことを行う方法を尋ね始めた約1年前に、jQueryでこの現象を見始めました。ライブラリ(jQuery)と言語(JavaScript)の違いは、多くのプログラマーで明らかに失われ、多くの不適切で複雑なコードが必要のない場所に書き込まれます。 たぶんそれは私の想像だけかもしれませんが、ソートされた配列の範囲を見つけるなど、人々がLinqで同様の非常識なことをするように求めている質問の数が増えていると確信しています。Linq拡張機能がその問題を解決するのにどれほど不適切であるかを克服することはできませんが、さらに重要なことは、著者が理想的な解決策が実際にそれについて考えずにLinqを含むと仮定したという事実です(私が知る限り)。私たちは歴史を繰り返しており、言語(C#/ VB.NET)とライブラリ(Linq)の違いがわからない新世代の.NETプログラマーを育てているようです。 この現象の原因は何ですか?誇大広告ですか?カササギの傾向?Linqは魔法の形としての評判を獲得しましたか?実際にコードを書く代わりに、正しい呪文を発声するだけでいいのでしょうか?私はそれらの説明にはほとんど満足していませんが、他に何も考えられません。 さらに重要なのは、それが本当に問題なのか、もしそうなら、これらの人々を啓発するための最善の方法は何ですか?

10
switch文またはlong if…elseチェーンを使用する必要がありますか?
多くの場合、switchステートメントについて聞いたとき、長いif ... elseチェーンを置き換える方法として先送りされています。しかし、switchステートメントを使用する場合、if ... else以外の場合に書くよりも多くのコードを書いているようです。また、すべての呼び出しのすべての変数を同じスコープに保持するなど、他の問題もあります。 ここに私が通常書くフローを表すいくつかのコードがあります(diamのおかげで) String comment; // The generated insult. int which = (int)(Math.random() * 3); // Result is 0, 1, or 2. if (which == 0) { comment = "You look so much better than usual."; } else if (which == 1) { comment = "Your work …

30
コードを紙に印刷するのは一般的ですか?[閉まっている]
次の理由から、コードの行を80文字以下に抑えるのが好きです。 水平スクロールをする必要はありません。 この制限を超えると、おそらく行が複雑すぎます。そして 紙にきれいに印刷されます。 後者については、実際にコードを印刷して見る人(私もそのうちの1人)に会ったことがあります。それで、コードを印刷するのはどれくらい一般的ですか?

11
単体テストに合格するための最小限のコードを書く-不正行為なし!
TDDを実行して単体テストを作成する場合、テストする「実装」コードの最初の反復を作成するときに、「チート」という衝動にどのように抵抗しますか。 例: 数値の階乗を計算する必要があります。次のような単体テスト(MSTestを使用)から始めます。 [TestClass] public class CalculateFactorialTests { [TestMethod] public void CalculateFactorial_5_input_returns_120() { // Arrange var myMath = new MyMath(); // Act long output = myMath.CalculateFactorial(5); // Assert Assert.AreEqual(120, output); } } このコードを実行すると、CalculateFactorialメソッドが存在しないため失敗します。そこで、テスト対象のメソッドを実装するためのコードの最初の反復を記述し、テストに合格するために必要な最小限の コードを記述します。 実は、私は次のように書き続けたいと思っています。 public class MyMath { public long CalculateFactorial(long input) { return 120; } } これは、技術的には、それで正しいです、本当に最低限のコードをするために必要とされている特定のテストパス作るそれは本当にさえいないので、それは明確に「チート」ですが、(緑行く)を試みる階乗を計算する機能を実行します。もちろん、今では、リファクタリングの部分は、実装の真のリファクタリングではなく、「正しい機能の記述」の演習になります。明らかに、異なるパラメーターで追加のテストを追加すると失敗し、リファクタリングが強制されますが、その1つのテストから開始する必要があります。 だから、私の質問は、「テストに合格するための最小限のコードを書く」ことと、機能を維持しつつ、実際に達成しようとしていることの精神とのバランスをどのように得るかということです。
36 unit-testing  tdd 

3
統合テストはすべての単体テストを繰り返すことを意図していますか?
関数があるとしましょう(Rubyで書かれていますが、誰でも理解できるはずです): def am_I_old_enough?(name = 'filip') person = Person::API.new(name) if person.male? return person.age > 21 else return person.age > 18 end end 単体テストでは、すべてのシナリオをカバーする4つのテストを作成します。それぞれはPerson::API、スタブ化されたメソッドmale?とでモックされたオブジェクトを使用しますage。 次に、統合テストを作成します。Person :: APIはもうm笑されるべきではないと思います。したがって、Person :: APIオブジェクトをモックせずに、まったく同じ4つのテストケースを作成します。あれは正しいですか? はいの場合、単体テストを書く意味は何ですか、自信を与える統合テストを書くことができたら(スタブやモックではなく、実際のオブジェクトで作業している場合)?

3
マージされたブランチを再利用しますか?
現在、アプリケーションに新しい機能を追加するたびに新しいブランチを作成していました。 機能が完成して機能するようになったら、それをmasterブランチにマージします。 しかし、後で、この機能を更新する必要がある場合(改善など)、新しいブランチを作成する方が良いですか、マスターで以前のものをリベースする必要がありますか?更新してから再度マージしますか? たとえば、Ruby on Railsアプリケーションにmodeling-memberというブランチがあります。後で、メンバーモデル(このブランチで作成された)にいくつかの属性を追加する必要があります。私は何をすべきか?このブランチをマスターでリベースし、モデルを更新して再度マージするか、単に新しいブランチを作成しますか?
36 git  branching 

3
キーがすべて文字列であるときにES6マップを使用する点はありますか?
プレーンオブジェクトキーは文字列でなければなりませんが、a Mapは任意のタイプのキーを持つことができます。 しかし、私はこれを実際にはほとんど使いません。ほぼすべての場合、とにかく文字列をキーとして使用しています。そして、おそらくnew Map()よりも遅いです{}。それではMap、単純なオブジェクトの代わりにを使用する方が良いかもしれない他の理由はありますか?



3
データベースのテキスト列にvarcharを使用する理由はありますか?
あるvarcharだけで残りは以前からtext周囲に来た、またはあなたが考えケースが使用されたい使用するにはvarchar?(またはcharそのことについて..) (私は毎日PostgresとMySQL(MyISAM)を使用しているので、それらは私が最も興味を持っているものですが、他のデータベースへの回答はもちろん歓迎です。^ _-)

5
ソフトウェアの成功/失敗率の書き換えに関する実際のケーススタディはありますか?
私は、アプリケーションの書き直しが悪いことについての複数の投稿、プログラマに関するここでの人々の経験、およびこのテーマに関するJoel Spolskyによる準備ができた記事を見ましたが、確固たる証拠や事例研究はありません。Joelが提供した2つの例とここの他の投稿以外に、悪いコードベースで何をし、実際の研究に基づいてどのようにそれを行うかを決定しますか? 適切な例として、私が知っているクライアントは2つあり、どちらも古いレガシーコードを持っています。彼らは、書き直しが惨事であり、費用がかかり、コードを大幅に改善することが実際にはできなかったため、彼らはそれに合わせてリンプを続けています。リライタがすぐに見つけたように、その顧客は非常に複雑なビジネスロジックを持っています。 どちらの場合も、これらは企業にとって多くの収益をもたらすミッションクリティカルなアプリケーションです。書き直そうとした人は、将来のある時点でレガシーソフトウェアがアップグレードされなければ、レンガの壁にぶつかると感じていました。私にとって、この種のリスクは、成功する道を確保するための研究と分析を必要とします。 これを調査した実際のケーススタディはありますか?実際の研究に基づいたいくつかのベストプラクティス、落とし穴、成功を知らずに、大規模な書き直しを試みたくありません。 あとがき: さて、さらに検索した結果、ケーススタディに関する3つの興味深い記事が見つかりました。 書き換えまたは再利用。彼らはJavaに変換されたCobolアプリの研究を行いました。 もう1つは、ソフトウェアの再利用:開発者の経験と認識に関するものでした。 再利用または書き換えメンテナンスと書き換えのコストに関する別の研究。 最近、このテーマに関する別の記事を見つけました:The Great Rewrite。そこで、著者は主要な問題のいくつかにぶつかったようです。これに加えて、提案された新しいテクノロジースタックを使用し、開発者がそれを拾った速さを測定することによるプロトタイピングのアイデアがありました。これはすべて書き直しの前奏曲であり、素晴らしいアイデアだと思いました!

1
btreeとrtreeのインデックス作成の違いは何ですか?
MySQLWorkbenchで、デザインをフォワードエンジニアリングする前にインデックスを保存する方法を選択できることに気付きました。ストレージタイプは次のとおりです。 BTREE RTREE ハッシュ これを調査して、頭上にある情報を見つけたので、これらの違いや、なぜ選択する必要があるのか​​、あるいはその両方に関する実用的な情報を探しています。 また、ストレージタイプを選択したことがないため、MySQLがデフォルトのストレージタイプ(BTREE?)を選択していると思います。

8
すべてのgitコミットはプロジェクトを動作状態のままにする必要がありますか?
一般的なベストプラクティスが何であるかを知りたいです。プロジェクトが動作状態(適切にビルド、すべてのテストに合格など)になるようにgitコミットを強制するか、壊れたコードをコミットしても問題ありませんか? たとえば、この要件を放棄した場合、コミットにより柔軟に対応できます(アプリが動作状態にない場合でも、論理チャンクとして使用します)。ただし、それを強制すると、特定のコミットを後で選択できる柔軟性が得られます...
36 git 

11
オクタルはどこで役立ちますか?[閉まっている]
PHPのまったく奇妙なバグを見て、20分ほど頭をテーブルにぶつけたところ、8進数に気づきました。<%(*&#> 8進数。 要するに、コードが整列されるように、いくつかのリテラルにゼロをパディングしました。大きな間違いです。オクタルを忘れました。 問題は、ファイルパーミッション以外にオクタルを使用する人はいますか?(個人的には好みですchmod ugo+rwxが、プログラムで生成する必要がある場合は、オクタルを使用すると便利であることを理解しています。)しかし、他の状況では役立ちますか?
36 octal 

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