ソフトウェア工学

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

6
ユニットテストフレームワークは本当に必要ですか?
現在、私の仕事では、C ++アプリケーション用の単体テストの大規模なスイートを用意しています。ただし、単体テストフレームワークは使用しません。それらは、基本的にassertとcoutをラップするCマクロを単に利用します。何かのようなもの: VERIFY(cond) if (!(cond)) {std::cout << "unit test failed at " << __FILE__ << "," << __LINE__; asserst(false)} 次に、次のような各テストの関数を作成します。 void CheckBehaviorYWhenXHappens() { // a bunch of code to run the test // VERIFY(blah != blah2); // more VERIFY's as needed } CIサーバーは「ユニットテストに失敗しました」を選択し、ビルドに失敗し、開発者にメッセージを送信します。 また、セットアップコードが重複している場合は、本番環境にある他の重複コードと同じようにリファクタリングします。ヘルパー関数の背後にラップし、いくつかのテストクラスをラップして、頻繁に使用されるシナリオを設定します。 CppUnitやboostユニットテストのようなフレームワークがあることは知っています。これらはどのような価値をもたらすのだろうか?これらがテーブルにもたらすものを見逃していますか?それらから得ることができる何か有用なものはありますか?私たちが持っているものは非常にシンプルでうまく機能しているように見えるので、特に本当の価値を追加しない限り、依存関係を追加することをmしています。

8
友達にC ++
私は今学期に大学でc ++コースを使用したオブジェクト指向プログラミングを行っており、友人の機能について学習していました。 カプセル化とデータの隠蔽が提供するセキュリティをバイパスする能力があるため、私は彼らを本能的に嫌い、インターネット上のいくつかの記事を読み、一部の人々はそれがいくつかの合法的な使用で良いアイデアだと思いました。 OOPの専門家は、C ++のフレンド機能について何と言いますか?ざっと目を通すだけですか、それとももっと学ぶ必要がありますか?

4
ほとんどの言語が最大ヒープ実装ではなく最小ヒープを提供するのはなぜですか?
何かに気付いたばかりで、その理由はあるのでしょうか。C ++(std :: priority_queueは最大ヒープ)を除いて、最大ヒープを提供する他の言語は知りません。 Pythonのheapqモジュールは、リストの上にバイナリの最小ヒープを実装します。 Javaのライブラリには、min-priority-queueを実装するPriorityQueueクラスが含まれています。 Goのライブラリには、互換性のあるデータ構造の上に最小ヒープを実装するコンテナ/ヒープモジュールが含まれています。 AppleのCore Foundationフレームワークには、最小ヒープを実装するCFBinaryHeap構造が含まれています。 最大ヒープは最小ヒープよりも直感的であり、技術的には実装の違いは比較演算子を変更するだけの問題だと思います。本当の理由はありますか?ほとんどのアプリケーションでは、最大ヒープではなく最小ヒープが必要ですか?前もって感謝します

8
最初のエラーの後、CまたはC ++のコンパイルエラーを読みますか?
CおよびC ++コンパイラがエラーから回復して解析を続行しようとする理由を理解できませんでした。ほとんどの場合、最初のエラーは偽のエラーのストリームを生成し、最初のエラーが修正されるとすぐに消えます。数年の経験の後、私はすべてのファイルの最初のエラー以外のエラーを見ることを止めました。コンパイラを再実行し、エラーがなくなるまでもう一度実行します。それは一般的な習慣ですか?

6
「悪」のライセンスを「無料」に書き換えるにはどうすればよいですか?
私は弁護士のSEサイトを見つけられなかったので、ここに投稿するのがベストだと思いました。 /* * ...subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * The Software shall be used for Good, not Evil. * * THE SOFTWARE IS PROVIDED "AS IS"... …

17
なぜ私たち全員がまだモデル駆動型開発をしていないのですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 私はモデル駆動開発を真に信じており、生産性、品質、予測可能性を高める可能性があると思います。MetaEditを見ると、結果は驚くべきものです。オランダのメンディックスは非常に急速に成長しており、素晴らしい結果をもたらしています。 私は多くの問題があることも知っています ジェネレータ、テンプレート、フレームワークのバージョン管理 モデル駆動型開発に適していないプロジェクト(繰り返しが不十分) より高いリスク(最初のプロジェクトが失敗した場合、従来の開発で得られるよりも結果が少なくなります) 等 しかし、それでもこれらの問題は解決可能であるように思われ、必要な労力を上回る利点が得られるはずです。 質問:モデル駆動型開発を考慮しない最大の問題は何ですか? これらの回答は、自分自身の理解だけでなく、執筆予定の一連の内部記事のソースとしても使用できます。

4
C#でポインタを実際に使用していますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 ポインターを使用することが良いまたは必要なオプションであるC#でコーディングしているときの状況は何ですか?安全でないポインターについて話している。
19 c#  pointers 

6
ビット演算を使用する利点は何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 最新のCodeProjectニュースレターを読んだ後、ビットごとの操作に関するこの記事に出会いました。興味深い読み物になります。整数が偶数か奇数かをチェックすることの利点は確かにわかりますが、n番目のビットが設定されているかどうかをテストしますか?これの利点は何でしょうか?

3
データ重複のないマイクロサービス
最も単純なマイクロサービス設計であっても、データの重複や共有データベースを回避するのが難しいと感じているため、何かが足りないと思っています。これが私が直面している問題の基本的な例です。誰かがWebアプリケーションを使用して在庫を管理していると仮定すると、2つのサービスが必要になります。1つはアイテムと在庫数を管理する在庫管理用、もう1つはユーザーデータを管理するユーザーサービス用です。データベースの在庫者の監査が必要な場合、在庫サービスのデータベースにユーザーIDを最後に在庫された値として追加できます。 アプリケーションを使用して、不足しているすべてのアイテムと、前回アイテムを在庫していた人のリストを確認して、再度在庫を補充するよう依頼することができます。上記のアーキテクチャを使用して、在庫サービスにリクエストを行い、数量が5未満のすべてのアイテムのアイテム詳細を取得します。これにより、ユーザーIDを含むリストが返されます。次に、インベントリサービスから取得したユーザーIDのリストのユーザー名と連絡先の詳細を取得するために、ユーザーサービスに対して別の要求が行われます。 これは非常に非効率的なようで、複数のデータベースクエリを作成するさまざまなサービスAPIに対して複数のリクエストを行うまで、これ以上多くのサービスを必要としません。別の方法は、インベントリデータにユーザーの詳細を複製することです。ユーザーが連絡先の詳細を変更した場合、他のすべてのサービスを通じて変更を複製する必要があります。しかし、これは、マイクロサービスの限定されたコンテキストの考えに適合しないようです。また、単一のデータベースを使用してこれを異なるサービス間で共有し、統合データベースのすべての問題を抱えることもできます。 これを実装する正しい/最良の方法は何ですか?

3
Dockerイメージにテストを含める必要がありますか?
テストに関しては、2つのオプションが考えられます。 テストとアプリケーションの両方を1つのイメージに入れます。 イメージにはアプリケーションコードのみを含めます。メインイメージの後にビルドし、いくつかのレイヤーを追加するテスト固有のコンテナーを作成します(テストコード、依存関係など)。 最初のオプションでは、コンテナをテストし、テストしたとおりに出荷できます。明らかな欠点は、不要なコード(および潜在的にテストデータ)がイメージに含まれることです。 2番目のオプションでは、出荷されるイメージはテストされるイメージとまったく同じではありません。 どちらも悪い戦略のように見えます。3番目のより良い戦略はありますか?

2
Pythonのクラスとモジュール
Pythonにはre、特定のアクションセットを実行する多くのモジュール(など)があります。このモジュールの関数を呼び出して結果を取得することができ、モジュール全体としてその背後にある考えがあります(この場合、正規表現を処理します)。 クラスはほとんど同じことを行うように見えますが、モジュールよりもかなり多くのプロパティを使用するようです。 モジュールとクラスとの違いは何ですか?(私はモジュールをサブクラス化できないことを知っていますが、それはそれですか?)モジュールの代わりにクラスを使用する必要があるのはいつですか?
19 class  modules 

2
「フィクスチャ」の異なる意味は何ですか?
「フィクスチャ」の概念を理解するのに多少の困難があります。テストスイートとは何か、テストケース、テスト実行は知っていますが、「フィクスチャ」とは正確には何ですか?パラメーター化されたテストケースですか? 「フィクスチャ」という用語の意味またはセマンティクスは、プログラミング言語またはテストフレームワークによってわずかに異なる可能性があるように思えますか?私はphpunitフィクスチャだと思う 「ワールドを既知の状態に設定し、テストが完了したときに元の状態に戻すコード。この既知の状態は、テストのフィクスチャと呼ばれます。」 「フィットネスフィクスチャ」とは少し異なります 「フィクスチャは、Wikiページとテスト対象の実際のシステムであるテスト対象システム(SUT)の間の橋渡し役です。」 この質問に答えることができるソフトウェアテストの専門家がここにいますか?他のプログラミング言語への参照は大歓迎です。

7
慣用句とは何ですか?
「イディオム」は、特定の言語では整数インクリメントなどのコア言語構文によって単純化されない一般的な操作またはパターンであると理解しています。 i = i + 1; C ++では、このイディオムは演算子によって簡素化されます。 ++i; しかし、誰かが「イディオマティック」という用語を使用するとき、どのようにそれを理解するかわかりません。コードの一部を「イディオマティック」にするものは何ですか?
19 c++  idioms 

3
ポインターが危険と見なされるようになったのはいつですか?
プログラミング言語でのポインターの使用については、ポインターが危険であると一般に受け入れられるようになった(完全な「悪」または類似の拡大ではない場合)と考えられるようになったようです。 この考え方の変化の歴史的発展は何でしたか?特定の独創的な出来事、研究、または他の開発がありましたか? たとえば、CからC ++、Javaへの移行を表面的に振り返ると、ポインタを参照で補完し、完全に置き換える傾向が見られるようです。しかし、実際のイベントチェーンはおそらくこれよりもはるかに微妙で複雑であり、それほど連続的ではありません。それらを主流言語にした機能は、おそらくずっと前に他の場所で生まれた可能性があります。 注:ポインター対参照対他の実際のメリットについては質問していません。私の焦点は、この明らかな変化の理論的根拠にあります。
18 history  pointers 

1
単体テスト:Linqによるアサーションの遅延
このような遅延アサーションを追加しても大丈夫ですか var actualKittens = actualKittens.Select(kitten => { Assert.IsСute(kitten); return kitten }); どうして?そのため、たとえば実体化されたコレクションを期待するステートメントでも、一度だけ反復できます。 CollectionAssert.AreEquivalent(expectedKittens, actualKittens.ToList()); また、Selectだけでなく、イテレータが定義され、多くのチェックとロジック(たとえば、いくつかのカウントとフィルタリング)を持つメソッドでもあります。 疑いの種は、テストが失敗した場合にそのようなコードを読み取り、デバッグする複雑さです。

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