ソフトウェア工学

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

7
スクラムガイドにテスターがいないと書かれているのはなぜですか?
私はscrum.orgのスクラムガイドを読んでおり、次のように書いています。 開発チームには、テストやビジネス分析などの特定のドメイン専用のサブチームは含まれていません。 文字通りの翻訳では、これは混乱を招くテスターがいないことを意味します。彼らはどのようにこれを提案できますか?
14 scrum 

2
なぜC ++ライブラリの使用がそれほど複雑なのですか?
まず第一に、私はC ++が大好きで、JavaよりもC ++でコーディングする方が簡単だと思う人の1人です。1つの小さなことを除いて:ライブラリ。 Javaでは、ビルドパスにjarを追加するだけで完了です。 C ++では、通常、ヘッダーファイルとライブラリ自体に複数のパスを設定する必要があります。場合によっては、特別なビルドフラグを使用する必要さえあります。私は主にVisual Studio、コードブロックを使用しましたが、IDEはまったく使用していません。外部ライブラリの使用について話すとき、3つのオプションすべてに大きな違いはありません。 なぜこれに代わるシンプルな代替手段がなかったのだろうか?IDEがビルドフラグを設定するためのすべての作業を行うことができるように、必要なものがすべて1か所にある特別な.zipファイルがあるように。これには技術的な障壁はありますか?
14 java  c++  libraries 

3
Javaの列挙型でシングルトンを実装することの欠点は何ですか?
従来、シングルトンは通常次のように実装されます public class Foo1 { private static final Foo1 INSTANCE = new Foo1(); public static Foo1 getInstance(){ return INSTANCE; } private Foo1(){} public void doo(){ ... } } Javaの列挙型を使用して、シングルトンを次のように実装できます。 public enum Foo2 { INSTANCE; public void doo(){ ... } } 2番目のバージョンと同じくらいすごいのですが、欠点はありますか? (私はそれにいくつかの考えを与え、私は自分の質問に答えます;うまくいけば、より良い答えがあります)
14 java  singleton  enum 

8
CRUD以外のアプローチの例はありますか?
私はプログラマーですが、アーキビストとしても働いています。アーキビストとして、データを保持することが重要です。 データの操作に関しては、同僚と議論することがよくあります。CRUDのUとDはあまり好きではありません。レコードを更新するのではなく、新しいレコードを追加して、古いレコードへの参照を作成することをお勧めします。そのようにして、変更の履歴を作成します。また、レコードを削除するのも嫌いですが、非アクティブとしてマークします。 これに用語はありますか?基本的にデータの作成と読み取りのみですか?このアプローチの例はありますか?

1
{}でオブジェクトパラメータを作成しますか?
私は本からコードをデコードしようとしています: List<Person> people = new List<Person>() { new Person {FirstName="Homer",LastName="Simpson",Age=47}, new Person {FirstName="Marge",LastName="Simpson",Age=45} }; Personは、作成した単純なクラスであり、名前、姓などのフィールドがあります。 私が理解していないのは、中括弧ではないパラメーターをPersonのコンストラクターに送信しないかということです。私はこのコードを複製しようとしましたが、飛べないようです。 入力いただきありがとうございます。
14 c# 

5
「Util」クラスを持つことは懸念の原因ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 私は時々、実際には他の場所に属していないように見えるメソッドと値を保持するのに役立つ「Util」クラスを作成します。しかし、これらのクラスの1つを作成するたびに、「あー、これを後悔するつもりだ...」と思うのは、どこかで悪いことを読んだからです。 しかし、他方では、2つの説得力のある(少なくとも私にとって)ケースがあるようです。 パッケージ内の複数のクラスで使用される実装の秘密 インターフェイスを乱雑にすることなく、クラスを増強するための便利な機能を提供します 私は破壊に向かっていますか?あなたが言うこと !!リファクタリングする必要がありますか?

1
コードセクションがテキストセクションと呼ばれるのはなぜですか?
コードを含む実行可能ファイルのセクションは、.textセクションと呼ばれることもあります。セグメント化されたメモリアーキテクチャでは、コードとしてマップされたセグメントは、テキストセグメントと呼ばれることもあります。UNIXエラーメッセージ「text file busy」(ETXTBSY)は、「このファイルは実行中のプログラムです」を意味します。 テキストはどのように実行可能(マシン)コードを意味するようになりましたか? 理想的な答えは次のとおりです。単語とその意味の関係を説明します。用語の起源または少なくとも歴史の引用を提供する; どのコミュニティがそれを使用しているのかを考えてください。

4
テンプレート方式と戦略の組み合わせ
私のソフトウェアエンジニアリングクラスの課題は、特定のゲームでさまざまな形式でプレイできるアプリケーションを設計することです。問題のゲームはMancalaです。これらのゲームのいくつかはWariまたはKalahと呼ばれます。これらのゲームはいくつかの面で異なりますが、私の質問では、ゲームが以下の点で異なる可能性があることを知っておくことが重要です。 移動の結果が処理される方法 ゲームの終了が決定される方法 勝者が決定される方法 これを設計するために最初に思いついたのは、戦略パターンを使用することでした。アルゴリズムのバリエーション(ゲームの実際のルール)があります。デザインは次のようになります。 それから私は、マンカラとワリのゲームで勝者が決定される方法はまったく同じであり、コードが複製されるだろうと思いました。これは、定義によって、「1つのルール、1つの場所」またはDRY原則の違反であるとは思わない。マンカラのルールの変更は、Wariのルールも自動的に変更されることを意味しない。それにもかかわらず、教授から得たフィードバックから、私は別のデザインを見つける印象を受けました。 それから私はこれを思いついた: 各ゲーム(Mancala、Wari、Kalahなど)には、各ルールのインターフェイスのタイプの属性があります。つまりWinnerDeterminer、Mancala 2.0バージョンがあり、Mancala 1.0と同じ場合は、勝者が決定される方法を除きます。 Mancalaバージョンを使用します。 戦略パターンとしてのこれらのルールの実装は確かに有効だと思います。しかし、本当の問題は、さらに設計したいときに起こります。 テンプレートメソッドパターンについて読んで、すぐにこの問題に適用できると思いました。ユーザーが移動したときに実行されるアクションは常に同じであり、同じ順序で、すなわち: 穴に石を置く(これはすべてのゲームで同じであるため、テンプレートメソッド自体に実装されます) 移動の結果を決定する 前の動きのためにゲームが終了したかどうかを判断する ゲームが終了したら、誰が勝ったかを判断する これらの最後の3つの手順は、すべて上記の私の戦略パターンに含まれています。これら2つを組み合わせるのに苦労しています。私が見つけた1つの可能な解決策は、戦略パターンを放棄し、以下を行うことです: 戦略パターンとこれの間のデザインの違いは本当に見られませんか?しかし、テンプレートメソッドを使用する必要があることは確かです(ただし、戦略パターンを使用する必要があることは確かです)。 また、誰がTurnTemplateオブジェクトの作成を担当するかを判断することもできませんが、戦略パターンでは、抽象的なファクトリパターンを使用して簡単に作成できるオブジェクトのファミリ(3つのルール)があると感じています。私はそれからだろうMancalaRuleFactory、WariRuleFactoryなどと彼らは私がバックアップ規則や手の正しいインスタンスを作成することになりRuleSet、オブジェクトを。 戦略+抽象ファクトリパターンをRuleSet使用し、3つのルールのアルゴリズムを持つオブジェクトがあるとします。これでテンプレートメソッドパターンを使用できると感じる唯一の方法は、このRuleSetオブジェクトをに渡すことTurnTemplateです。そのとき表面化する「問題」は、の具体的な実装を必要としないことでありTurnTemplate、これらのクラスは時代遅れになります。の保護されたメソッドでは、TurnTemplate単に呼び出すことができますruleSet.determineWinner()。結果として、TurnTemplateクラスは抽象的ではなくなりますが、具体的になる必要がありますが、それでもテンプレートメソッドパターンですか? 要約すると、私は正しい方法で考えているのですか、それとも簡単な何かを見逃していますか?順調に進んでいる場合、戦略パターンとテンプレートメソッドパターンをどのように組み合わせるのですか?

9
面接のコーディングに失敗した場合に答えを出すべきですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新することがありますので、上のトピックソフトウェア工学スタックExchange用。 4年前に閉鎖されました。 上級レベルの面接候補者に、FizzBu​​zzの質問のニュアンスに失敗させました1 2。 私は、本当に、まったく、完全に、質問に失敗したことを意味します。 私も彼をコーチループを使用する方法について、その考え方に通過3して5いた本当に特別な例として検討する価値。 彼はそれを吹いた。 QAのためだけに、3人のチームメイトにまったく同じ質問をしました。彼らに5分を与えました。そして、彼らの擬似コードを収集するために戻ってきました。 それらのすべてがそれを釘付けし、前に質問を見ていませんでした。2人はトリックが何であるか尋ねました... 別の論理演習で、候補者は、使用することを選択した言語(C#)内で使用可能な機能のいくつかについて理解を示しました。そのため、彼がコード行を一度も書いたことがないというわけではありません。しかし、彼の論理はいまだに悪臭を放ちます。 私の質問は、論理的な質問に対する答えを彼に与えるべきだったかどうかです。 彼はそれらを吹き飛ばすことを知っており、インタビューの後半でそれを認めた。 一方、彼は答えや私が何を期待しているのかを決して尋ねなかった。 コーディング演習を使用して、障害の候補を設定できることを知っています(もう一度、上記の2番目のリンクを参照)。そして、私は本当に質問の核心に答える上で彼を家に助けようとしました。しかし、これは上級レベルの候補者であり、Fizz-Buzzは、面接のジッターを考慮した後でも、率直に言って途方もなく簡単です。 彼が少なくとも経験から学ぶことができるように、彼に問題を解決する方法を示すべきだと感じました。しかし、再び、彼は尋ねませんでした。 その状況に対処する正しい方法は何ですか? 1 さて、それは実際のFizzBu​​zzの質問へのリンクではありませんが、FizzBu​​zzについてのP.SEの良い議論であり、さまざまな側面へのリンクです。 2 明確にするために、これは私が尋ねたFizz-Buzzのニュアンスであり、Project Eulerの最初の問題からのものです。代替印刷フィズ| 数字を合計するためのバズと同じ基本的な質問があります。 If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of …
14 interview 

2
IT以外の人とプログラミングビジネスロジックのペアリング[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 コーディングプロセス中に非IT担当者がプログラマーと連携する経験はありますか? それはペアプログラミングのようなものですが、一人はビジネスについて多くのことを知っている非ITの人です。おそらく、物事の計算方法を知っており、非慣用的な手続きコードを理解できる数学のバックグラウンドを持つプロセスエンジニアです。 PL / SQLのような手続き型のドメイン固有言語は、IT以外のエンジニアでも非常に理解しやすいことがわかりました。これらの人物は最終的にコードの共著者となり、式、要因などの正確性を保証します。 この種のペアプログラミングは非常に生産的であり、この種のエンジニアリングタイプのユーザーは、コードの「所有者」および「作成者」であると感じ、コミュニケーションプロセスの誤解を最小限に抑えます。テストケースの設計にも役立ちます。 この慣習は一般的ですか? 名前はありますか? 同様の経験がありますか?

4
確率的挙動のプログラムをテストするためのベストプラクティスは何ですか?
研究開発の仕事をしていると、私は自分の行動にある程度のランダム性があるプログラムを書いていることがよくあります。例えば、私が遺伝的プログラミングで働いているとき、私はしばしば任意のランダムなソースコードを生成して実行するプログラムを書きます。 そのようなコードのテストに関する問題は、バグが頻繁に断続的に発生し、再現が非常に困難になる可能性があることです。これは、ランダムシードを同じ値に設定して実行を開始するだけではありません。 たとえば、コードはカーネルリングバッファからメッセージを読み取り、メッセージの内容を条件付きでジャンプします。当然、後で問題を再現しようとすると、リングバッファーの状態が変更されます。 この動作は機能ですが、予期しない方法で他のコードをトリガーする可能性があるため、多くの場合、単体テスト(または人間のテスター)が見つけられないバグを明らかにします。 この種のシステムをテストするためのベストプラクティスは確立されていますか?もしそうなら、いくつかの参照は非常に役立ちます。そうでない場合は、他の提案を歓迎します!

5
クラスの一意のインスタンスを確保する方法は?
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細がない回答は、編集または削除できます。 特定のクラスの各インスタンスが一意に識別可能なインスタンスであることを保証するさまざまな方法を探しています。 たとえばName、フィールドを持つクラスがありますname。John Smithに初期化されたNameオブジェクトを取得したら、John Smithという名前でもname別のNameオブジェクトをインスタンス化することはできません。インスタンス化が行われる場合は、元のオブジェクトへの参照を返す必要があります。新しいオブジェクトより。 これを行う1つの方法はMap、現在のすべてのNameオブジェクトを保持する静的ファクトリーを使用することであり、ファクトリーは、John Smithを名前として持つオブジェクトが存在しないことを確認してから、Nameオブジェクト。 私の頭の外で考えることができる別の方法は、Nameクラスに静的なマップを持ち、渡された値がname別のオブジェクトで既に使用されている場合にコンストラクタを呼び出して例外をスローするときに、例外をスローすることを知っていますコンストラクターでは一般的に悪い考えです。 これを達成する他の方法はありますか?

1
継承階層でリスコフ置換原理を検証する方法は?
この答えに触発された: リスコフの代替原則では 、 サブタイプでは前提条件を強化できません。 サブタイプでは事後条件を弱めることはできません。 スーパータイプの不変式は、サブタイプに保存する必要があります。 履歴制約(「履歴ルール」)。オブジェクトは、そのメソッド(カプセル化)によってのみ変更可能と見なされます。サブタイプはスーパータイプには存在しないメソッドを導入する可能性があるため、これらのメソッドの導入により、スーパータイプでは許可されないサブタイプの状態変更が可能になります。これは履歴制約により禁止されています。 これらの4つのポイントに違反するクラス階層を誰かが投稿し、それに応じてそれらを解決する方法を誰かが投稿することを望んでいました。 階層内の4つのポイントのそれぞれを識別する方法と、それを修正する最良の方法について、教育目的で詳細な説明を探しています。 注: 私は人々が作業するためのコードサンプルを投稿したいと思っていましたが、問題自体は障害のある階層を特定する方法に関するものです:)

2
UUID / GUIDの形式がなぜですか?
グローバル一意識別子(GUID)は、セキュリティ上の理由があると思われる特定の形式のグループ化された文字列です。 GUIDは、最も一般的には、次のような5つのグループに分けられた16進数のシーケンスとしてテキストで記述されます。 3F2504E0-4F89-11D3-9A0C-0305E82C3301 GUID / UUID文字列がXバイト長の16進数を使用してエンコードされたランダムバイトだけではないのはなぜですか? このテキスト表記には、ハイフンで区切られた次のフィールドが含まれます。 | Hex digits | Description |------------------------- | 8 | Data1 | 4 | Data2 | 4 | Data3 | 4 | Initial two bytes from Data4 | 12 | Remaining six bytes from Data4 UUID標準にはいくつかのバージョンもあります。 バージョン4 UUIDは通常、128ビットの生の配列として内部的に保存され、通常は次のような形式で表示されます。 uuid:xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
14 uuid 

6
サーバー側セッションはRESTに違反しますか?
Roy Fielding(HTTP仕様の主要著者の1人)によると、RESTについて議論する際に、彼の独創的な論文Architectural Stylesで次のように言及しています。 [E]クライアントからサーバーへの各リクエストには、リクエストを理解するために必要なすべての情報が含まれている必要があり、サーバーに保存されているコンテキストを利用することはできません。 「保存されたコンテキスト」とは、次のページのページ番号が何であるかなどのアプリケーションの状態と、データストア、イメージなどのリソースの状態を指します。 純粋な休憩(上記の論文に準拠する実装として定義されている)のほとんどの試みは、サーバー上のセッションデータの保存に依存しているために失敗しなければならない(永続的またはその他)と言っても過言ではありませんか? セッションの概念は、特にWeb開発者にとっては一般的ですが、上記の定義に従ってRESTfulですか?
14 rest 

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