ソフトウェア工学

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

3
スクラムでは、開発者は顧客と直接対話する必要がありますか(POをバイパス)?
スクラムの製品所有者は、自分がすぐに答えられない、実装している機能に関するチームからの非常に詳細な質問にどのように対処する必要がありますか?開発者が顧客自身と直接話をするのが明らかに高速なソリューションになるのはいつですか? チームと顧客間の直接的なコミュニケーションが製品所有者の役割を損なうのではないかと思います。POは顧客のみを代表するものであるため、要件に関するすべての質問に回答する必要があります。彼を迂回することは彼を弱め、最終的に彼を不必要にさせるようです... スクラムにはベストプラクティスがありますか?

7
インターフェース設計でジェネリックを使用する場合
サードパーティが将来実装する予定のインターフェイスがいくつかあり、自分で基本実装を提供します。例を示すためにカップルを使用するだけです。 現在、それらは次のように定義されています 項目: public interface Item { String getId(); String getName(); } ItemStack: public interface ItemStackFactory { ItemStack createItemStack(Item item, int quantity); } ItemStackContainer: public interface ItemStackContainer { default void add(ItemStack stack) { add(stack, 1); } void add(ItemStack stack, int quantity); } 今、ItemそしてItemStackFactory私は、将来それを拡張する必要のあるサードパーティを絶対に予測することができます。ItemStackContainer将来的に拡張することもできますが、提供されているデフォルトの実装以外では、予測できる方法では拡張できません。 今、私はこのライブラリを可能な限り堅牢にしようとしています。これはまだ初期段階(プレプレアルファ)であるため、これは過剰エンジニアリング(YAGNI)の行為である可能性があります。これはジェネリックを使用するのに適切な場所ですか? public interface ItemStack<T extends Item> { …
11 java  generics 

3
Foreachループと変数の初期化
これらの2つのバージョンのコードに違いはありますか? foreach (var thing in things) { int i = thing.number; // code using 'i' // pay no attention to the uselessness of 'i' } int i; foreach (var thing in things) { i = thing.number; // code using 'i' } または、コンパイラは気にしませんか?違いについて言えば、パフォーマンスとメモリ使用量という意味です。..基本的には単に違いがありますか、コンパイル後に2つが同じコードになりますか?
11 c#  performance  memory 

2
優れた実践における乾燥の原則?
私は、できる限り一生懸命プログラミングのDRY原則に従うようにしています。最近、私はOOPでデザインパターンを学んでいますが、結局、かなりの量を繰り返しています。 永続性を処理するために、FactoryパターンとGatewayパターンとともにRepositoryパターンを作成しました。私はアプリケーションでデータベースを使用していますが、ゲートウェイを交換して、必要に応じて別の種類の永続性に切り替えることができるはずなので、それは問題ではありません。 最終的に自分で作成した問題は、所有しているテーブルの数に対して同じオブジェクトを作成することです。たとえば、これらはテーブルを処理する必要があるオブジェクトになりますcomments。 class Comment extends Model { protected $id; protected $author; protected $text; protected $date; } class CommentFactory implements iFactory { public function createFrom(array $data) { return new Comment($data); } } class CommentGateway implements iGateway { protected $db; public function __construct(\Database $db) { $this->db = $db; } public function …

5
「テクニカルユーザーストーリー」はスクラムで許可されていますか?
技術的なユーザーストーリーはスクラムで許可されていますか?もしそうなら、技術的なユーザーストーリーをスクラムで書くための標準テンプレートは何ですか?同じAs a <user> I want to do <task> so that I can <goal>ですか? 私はいくつかのブログでas-a- de -veloper-is-not-a-user-storyを読んだことがありますが、スクラムはこれらを義務付けていないことも読んでいます。彼らは共有しているいくつかのブログがあるユーザーとしてシステムにユーザーストーリーを、そのようにas a <user who is not end user> i want to <system functionality> so that <some techinical thing>。それで、どれが標準ですか? たとえば、次のようなユーザーストーリーがあります。 レビュー担当者として、ホテルや食べ物の写真をアップロードして、他のユーザーが見たり気に入ったりできるようにします ユーザーとして、写真のコメントを追加して、自分の意見をよりよく説明できるようにします これら両方のユーザーストーリーには、大きな技術項目があります-画像の保存と取得 次の説明とともに、「画像の保存と取得のメカニズム」というタイトルの技術的なストーリーを追加できますか? 開発者として、ユーザーが必要に応じて画像を追加/表示できるように、画像を保存および取得するメカニズムを開発したい

3
クライアント要求なしでサーバーからクライアントにデータをプッシュしますか?
Stack Exchangeの閲覧中に、「3つの新しいメッセージ、クリックして表示」などの動的な通知があることに気付きました。説明しようとしていることに対して、このような動的な更新が必要です。 最近のニュース記事10件のカルーセル/スライドショーを作成したいとします。このカルーセルは、キューで1時間ごとに更新されます。新しい記事は、古い記事をキューから押し出します。私の頭の上の解決策は次のようになります。 ユーザーがクライアントにログオンします。 クライアントは、次の時間マークまでの分数を計算し、その時間に実行するタイマーを設定します。 時間マークで、まだカルーセルに入っていない新しいニュース記事についてサーバーにリクエストを送信します。 応答を処理します。 タイマーをリセットします。 これは受け入れられる戦略ですか?クライアントのリクエストに依存せずにこれを達成できますか?言い換えれば、Stack Exchangeは動的更新をどのように実現していますか?
11 server  client 

2
インスタンスが1つだけのPythonクラス:(単一の)クラスインスタンスを作成するタイミングと、代わりにクラスを使用するタイミング
1回だけインスタンス化されるPythonクラスがある場合、つまり、クラスのオブジェクトは1つだけになります。クラスを直接操作するのではなく、単一のクラスインスタンスを作成する方が理にかなっているのではないかと思いました。 同様の質問がありますが、焦点は異なります。 グローバル変数と関数をクラスにグループ化することです Python固有ではありません。後者は、(Pythonで)クラスもオブジェクトであるという事実を考慮しないことを意味します。 更新: Pythonでは、クラスとオブジェクトの両方で次のことができます。 class A(object): pass A.some_state_var = True # Then later A.some_state_var = False my_a = A() my_a.some_state_var = True # Then later my_a.some_state_var = False そのため、クラスとそのクラスのインスタンスの間の選択が(Pythonで)状態に関するものであるかどうかはわかりません。どちらかで状態を維持できます。 さらに、クラス/クラスインスタンスを作成する動機は、シングルトン要件を強制することではありません。 また、新しいTypeを作成することはそれほど重要ではありません。 動機は、関連するコードとデータをグループ化し、それへのインターフェースを持つことです。これが、最初にクラス図のクラスとしてモデル化した理由です。実装に関してのみ、このクラスをインスタンス化するかどうか疑問に思い始めました。

1
オープンソースのサポートを一時停止するには?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 私は、さまざまなチャネル(Twitter、電子メール、GitHub)でほぼ毎日サポートリクエストを受け取っているオープンソースプロジェクトの唯一のアクティブなメンテナーです。今後3か月間休暇を取りますが、プルリクエストを受け入れるか、問題を解決するのはもちろん、応答する時間が非常に限られています。良い質問をしたり、適切なバグレポートを書いたりするのに時間を費やす人々を失望させないために何ができますか?

2
パフォーマンスのための型システム
プログラムのパフォーマンス特性を形式化しようとする(静的)型システムは存在しますか?私はそのような試みを見つけるように思えません。 型システムは、プログラムに関するステートメントを作成するためのプログラマの武器の(強力な)ツールの1つであり、パフォーマンスが重要な場合が多いため、試行が行われたことを想像するのは遠いことではないようですプログラムのストレージとランタイムの特性について少なくともいくつかのステートメントを作成しようとする型システムを作成します。

5
このシナリオで構成または継承を優先すべきですか?
インターフェイスを考えてみましょう: interface IWaveGenerator { SoundWave GenerateWave(double frequency, double lengthInSeconds); } このインターフェイスは、さまざまな形状の波を生成するいくつかのクラス(SineWaveGeneratorおよびなどSquareWaveGenerator)によって実装されます。 SoundWave生のサウンドデータではなく、音楽データに基づいてを生成するクラスを実装したいと思います。それは音の名前と拍数(秒ではない)の長さを受け取り、内部的にIWaveGenerator機能を使用してSoundWaveそれを作成します。 質問は、「をNoteGenerator含むIWaveGeneratorべきIWaveGeneratorですか、それとも実装から継承すべきですか?」 次の2つの理由から、作曲に傾倒しています。 1- 動的に任意のIWaveGeneratorものを注入できNoteGeneratorます。またNoteGenerator、、などSineNoteGeneratorでSquareNoteGeneratorはなく、1つのクラスのみが必要です。 2-でNoteGenerator定義された下位レベルのインターフェースを公開する必要はありませんIWaveGenerator。 しかし、私はこれに関する他の意見を聞くためにこの質問を投稿しています。おそらく考えていない点です。 ところで:私はそれがsを生成するため、概念的に言うNoteGenerator と思います。IWaveGeneratorSoundWave

5
突然変異法のための独立したインターフェース
私はいくつかのコードのリファクタリングに取り組んできましたが、ウサギの穴を降りる最初の一歩を踏み出したのではないかと思います。私はJavaで例を書いていますが、それは不可知論的であると思われます。 次のようにFoo定義されたインターフェイスがあります public interface Foo { int getX(); int getY(); int getZ(); } そして、実装として public final class DefaultFoo implements Foo { public DefaultFoo(int x, int y, int z) { this.x = x; this.y = y; this.z = z; } public int getX() { return x; } public int getY() { …

5
3つの数値を比較する簡単でわかりやすい方法
if動作するsのシーケンスを含むコードをいくつか持っていますが、面倒です。基本的に、3つの整数のうち最大のものを選択し、選択されたことを示すステータスフラグを設定します。私の現在のコードは次のようになります。 a = countAs(); b = countBs(); c = countCs(); if (a > b && a > c) status = MOSTLY_A; else if (b > a && b > c) status = MOSTLY_B; else if (c > a && c > b) status = MOSTLY_C; else status = DONT_KNOW; このパターンは数回発生し、長い変数名では、それぞれifが正しいことを視覚的に確認するのが少し難しくなります。これを行うためのより良い、より明確な方法があるかもしれないと感じています。誰でも何か提案できますか? …
11 algorithms  c 

1
k組み合わせの高速インデックス作成
少し前に取り組んでいた古い問題を再検討しています。 典型的なシナリオは、「8ビット整数内に3ビットが設定されている」、つまり00000111です。 ネストされたループによって、3セットのビットを持つすべての一意の組み合わせを(順番に)簡単に生成できます。私が興味を持っているのは、マッピングインデックス<->の組み合わせです。つまり、「00001011」が2番目の組み合わせ(またはゼロベースのインデックスでは値「1」)になります。 これまでのところ、すべての組み合わせを実行してテーブルに格納し、ルックアップインデックス->会話をO(1)操作にしました。もう一方の方向はO(ln(n))で、二分探索です。 ただし、欠点は、ドメインを増やすと、これが実行可能でないポイントまで、明らかにメモリに負荷がかかることです。 n番目の組み合わせまたは特定の組み合わせのインデックスを計算する簡単な方法は何ですか?組み合わせの順序はいいでしょうが、必須ではありません。

5
各スプリントの開始時の早期サブタスク
アジャイル/スクラムを使用している新しいチームに参加しました。開発プロセスは次のとおりです。 1)開発者は各スプリントの前に各ストーリーを確認し、重要なことを見逃さないようにします。ワークフローにはそのための正式な状態があります。 2)スプリントのキックオフ中に、チーム全体が各ストーリーにかかるストーリーポイント数の見積もり(ポーカープランニング)を行います。 3)最後に、各スプリントが開始された直後に、各開発者は割り当てられたすべてのストーリーを、各ストーリーを開始する前のサブタスクとは対照的に、時間の見積もりとともにサブタスクに熱心に分解する必要があります。 最後のステップの主な論点は、ストーリーの実装に予想よりも時間がかかるかどうかを発見し、スクラムマスターにスプリント期限の欠落の潜在的なリスクについて警告することです。 しかし、主に次の理由により、この逆効果になります。 目的が大まかな見積もりを提供することである場合、ストーリーポイント(ステップ#2)は仕事をするものです。それ以外の場合、なぜストーリーポイントに悩まされるのでしょうか?-早めにサブタスクを実行します。 目的が正確な推定値を提供することである場合、これは有害と見なされるヒューマンタスクスイッチで説明されている内容の明確な例です。これは、特に、大規模プロジェクトで既存のチームに参加し、何をする必要があるかを理解するのに最大50%の時間がかかる新​​しい開発者の場合に当てはまると思います。ストーリー#1、次にストーリー#2、#3などの詳細を取得する必要があります。これにより、大量の情報が大量に生成されます。 また、そのような慣行は「本による」と言われていますが、これについて議論するつもりはありません。誰でもそのような実践への参照を提供できますか?これがスクラム聖書で明確に定義されているかどうか、および/または多分余分な洞察を提供しますか?
11 agile  scrum 

8
日付に基づいてUI(または他の)機能をオンまたはオフにしますか?
ASP.NET 2.0で書かれたひどいシステムがあり、いくつかの機能を追加する必要があります。問題は、特定の製品には特定の日付以降に開始されたビジネスでオンにする必要がある(および他のサービスがオフになっている)UI機能があり、既存のビジネスではページが同じように表示される必要があることです。 私は本能的に日付ベースのJavaScript UIスイッチのアイデアと、古いビジネスと新しいビジネスのWebコントロールの混合が「だらしない」(より良い言葉が欲しいため) )。 時間ベースのUI機能を持つ慣行は広く受け入れられている慣行ですか?そうでない場合、その行動方針を追求する既知のリスクは何ですか?

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