ソフトウェア工学

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

6
タスクに複数の人が関与している場合、スクラムタスクのバーンダウンにアプローチする方法は?
私の会社では、1人のユーザーが1つのタスクを完了することはできません。各タスクをQAおよびコードレビューする担当者が別々になります。これが意味することは、各個人がタスクごとに、完了するまでにかかる時間についての見積もりを提供することです。 問題は、どのようにすれば燃え尽きるのでしょうか?時間を一緒に集計する場合、次の推定を仮定します。 10時間-開発時間 4時間-QA 4時間-コードレビュー。 タスクの見積もり= 18時間 毎日の終わりに、タスクを「完了するまでの残り時間」で更新するようにお願いします。ただし、一般的に各人は自分の部分について考えます。彼らは残りの努力をマークし、それに努力の見積もりを追加する必要がありますか?どうやってこれをやってるの? 更新 いくつかのことを明確にするために、私の組織では、ストーリー内の各タスクに3人が必要です。 タスクを開発する誰か。(単体テストを行う、など...) タスクをレビューするQAスペシャリスト(主に統合テストと回帰テストを行います) コードレビューを行う技術リーダー。 間違った方法や正しい方法があるとは思いませんが、これは私たちの方法です...そしてそれは変わりません。私たちはチームとして働き、可能な限りストーリーの最小レベルでも完成させます。開発が完了するまで何かが機能するかどうかを実際にテストすることはできません。また、コードの品質を確認することもできません。そのため、できることは、最小限の機能をテストしてプロセスのできるだけ早い段階でレビューしました。 このように働く人々への私の質問は、彼らがこのようにセットアップされたときに「タスク」を焼き払う方法です。タスクにそれ自身のサブタスクがない限り(JIRAは許可しません)...毎日「残っているもの」を追跡するための最良の方法がわかりません。
12 agile  scrum 

2
ライセンスのコンテキストでのServiceStackベースのソリューションの将来
Demis Bellotが数週間前にServiceStackの商用化を発表したので、次の質問を誰かに明確にしてほしいです。以下のリンクを参照してください。 https://plus.google.com/app/basic/stream/z12tfvoackvnx1xzd04cfrirpvybu1nje54 (ServiceStackまたはSSと言うときは、ServiceStack.Textなどの関連するすべてのSSライブラリを参照することに注意してください。) 現在、ServiceStackを使用して既に開発されたソリューションがある場合、SSバイナリを商用リリースバージョンにアップグレードしなくても、SSが商用になったらライセンスを購入する必要がありますか? SSの以前のバージョン(商用ライセンスの前)は常にオープンソースであり、以前と同じライセンスを使用しますか? 今日、GithubでSSをフォーク(商用ライセンスの前に)する場合、SSが商用になった後にそれを維持することは違法ですか? 質問2の答えが「はい」の場合、商用ライセンスを気にせずにSSが商用になった後でも、以前のバージョンをフォークできます(ソースを維持し、一般に公開する間)。

4
機能の半分を実装するための正しいアプローチをどのように学ぶのですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 開発チームを率いて、できるだけ頻繁に製品をリリースしたい(継続的デリバリー)。 多くの場合、リリース間の時間よりも実装に時間がかかる機能を実装する必要があります。私はまだ人々に毎日コードをコミットしてもらいたい(継続的インテグレーション)。 多くの場合、新しい機能を実装するには、既存の機能を変更する必要があり、もちろん、新しい機能がまだ終了していない場合でも、既存の機能を動作させる必要があります。 開発者が適切なアプローチを使用する場合、既存の機能を慎重に調整でき、上記のすべては問題ではありません。 しかし、実際には正しいアプローチは何ですか?私のプログラミングに慣れた心は、個々のケースごとに何をすべきかを教えてくれますが、さらに学ぶ必要があり、読むことができ、チームメンバーに読んでもらうための読み物が必要です。または、このアプローチを学習する正しい方法を学習する他の方法でも実行できます。 それが問題です。機能の半分を実装するための適切なアプローチをチームメンバーに確実に学習させるにはどうすればよいですか? これに関する戦略を持っていると主張する人々を検索しましたが、トピックについていくつかのランダムな考えを書いている人々を除いて、まだ見つけていません。おそらく、私は正しい検索語を使用していないか、おそらく誰もこれに関する権威あるガイドラインを作成していません。

3
より高いレベルの言語を読みやすいC ++にコンパイルすることは可能ですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 C ++は多くの点で優れた言語ですが、特にいくつかのことはIDEなしで書くのが面倒です。VIMユーザーとして、S-Expressionsおよび場合によってはLispのようなマクロを使用してC ++を記述できるようにする高レベル言語にアクセスできれば、非常に興味深いでしょう。何回も。 freenodeで尋ねて、ECLやBiglooなどのコンパイラでLisp-> Cをコンパイルするなど、いくつかのアイデアをテストしましたが、特にきれいなCコードは生成されませんでした。 この問題に関する作業はありますか?

1
フリーランスのソフトウェア開発では、締め切りに間に合わなかった場合、企業はどのような罰則を科すべきですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 私は共同開発者と話していました。 彼は、彼が時間通りに配達することを確実にしたかったクライアントを持っています。クライアントは、締め切りを逃した場合の影響を望んでいます。 私はフリーランスの仕事をしていませんが、答えを出すことができませんでした。 だから、私の質問は: (解雇を除いて)成果物の期限を逃した場合、クライアント(フリーランサー)はどのような影響に同意しますか?

4
DVCSで間違ったブランチにコミットする開発者の停止
問題 私は約10人の開発者がいるソフトウェアプロジェクトに参加しており、Mercurialを介してソースコードを共有しています。リリースごとに開発ブランチと本番ブランチがあります。プロジェクトの過程で、1つのブランチ(v1など)からのソースコードが、ソフトウェアの以前のリリース(v2)のパッチブランチとメンテナンスブランチに入りました。 これにより、間違ったコミットのバックアウトに時間を費やしたり、コードが間違ったブランチに入ったことに気付かなかった場合、間違った(おそらくQAdでない)コードが間違ったブランチに到達してデプロイされます。 ブランチとマージの設計/方法 v1-test v1-patch1 v1-patch2 ^---------^-----------^ v1-prod / / \ \ -----------------------/ \ \ v1-dev \ \ \ --------------------------\ v2-dev \ \ \ ^-------^------------- v2-prod v2-test v2-patch1 したがって、準備ができたと判断されるまでリリース開発ブランチに取り組み、すべてのリリースとメンテナンスが行われる単一のテスト/ UAT /生産ブランチに分岐します。タグは、このブランチのリリースをビルドするために使用されます。v1のテスト中に、v2のブランチが作成され、開発者は新しい機能の開発を開始します。 起こりがちなのは、開発者がv2-devブランチの作業をv1-devまたはv1-prodにコミットすることです。さらに悪いことに、v2-devをv1-prodにマージします(または同様のミス)。 ほとんどの開発者は-prodブランチにアクセスしないように指示しますが、コードはまだ潜入しています。 v2は開発を開始したばかりですが、v1には問題を修正するための非常に大きなパッチがまだ残っている可能性があることに注意してください。つまり、v1は単に奇妙な小さなパッチを取得しているだけではありません。 これまでに試したこと ゲートキーパーを備えた、独立した-prodブランチがあります。-prodブランチはその名前を通じて警告を発するはずであり、ほとんどの開発者はそのブランチにいる必要はありません。これは実際に問題を軽減していません。 開発者の間でこの問題に対する意識を高め、彼らをより警戒させようとしました。繰り返しますが、これはあまり成功していません。 開発者が間違ったブランチにコミットする場合に考えられる考えられる理由 ブランチデザインが複雑すぎる 複数のブランチを並行して積極的に開発する。(プロジェクトは、雪崩モデルを使用するという症状を示します。) 開発者はDVCSを十分に理解していない ある程度関連性のある私が読んだ質問 私は間違ったブランチにコミットしないことについてこの質問を読みました。視覚的なキューに関する答えは役に立つかもしれません。しかし、私たちが経験している問題は、より根本的な問題の症状ではないと完全に確信しているわけではありません。 視覚的な手がかりを使って、それらをコマンドラインに簡単に組み込むことができますが、チームの約半数が日食を使用していますが、視覚的な手がかりを組み込む方法はわかりません。 質問 ソフトウェア、プロジェクト管理、またはガバナンスの形で、間違ったブランチへのコミットを減らして(理想的には停止して)時間を浪費したり、デプロイされたコードを汚したりするために、どのような方法を使用できますか? 上記のように貢献していると思われる理由に関する特定のコメントをいただければ幸いですが、これは返信を制限するものではありません。

9
継承のための設計はどのように余分なコストを引き起こすことができますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 だから私はsealed classインシャープから継承したいと思い、やけどを負った。ソースにアクセスできない限り、封印を解除する方法はありません。 それから、「なぜsealed存在するのか」と考えさせられました。4ヶ月前。次のような多くのことを読んだにもかかわらず、私はそれを理解できませんでした。 Jon Skeetの願いは、「クラスは.NETでデフォルトで封印されました。」 継承よりも構成を優先しますか? 「すべてのクラスを封印するべきではありません(...)」 Sealedクラスをどのようにモックしますか? それ以来、すべてを消化しようとしましたが、それは私にとってはやりすぎです。最終的に、昨日私はそれをもう一度試しました。私はそれらすべてをもう一度スキャンし、さらにいくつかをスキャンしました: クラスが「抽象」または「最終/封印」以外のものでなければならないのはなぜですか? 15年以上のプログラミングで、すでにリンクされている質問からの答えのうち、最初にSOLIDを聞いたことがあり、明らかに4ヶ月前にそれをすべて読んでいませんでした 最後に、熟考した後、新しいタイトルに基づいて元の質問を大幅に編集することにしました。 古い質問が広すぎると主観的でした。それは基本的に尋ねていました: 旧称:シールを使用する1つの正当な理由 本文:シールクラスを適切に変更する方法 継承を忘れますか?コンポジションを使用しますか? しかし、今、理解すること(私は昨日なかった)すべてのsealed継承を阻止されず、そして私たちは、実際に使用する必要がありますすることができます継承上の組成を、私は私がした必要なものを実現実用例。 私はここに私の質問は正確に何を(実際には常にされている)であると思いMr.Mindorはチャットで私の提案:どのように余分なコストの原因継承のために設計することができますか?
12 c#  inheritance 

1
オブジェクトの__dict__を変更して、プロパティをPythonicと見なしますか?
データベース(またはMongoDB、CSVファイルなどの別のソース)で見つかった行からオブジェクトを膨らませるクラスがあります。オブジェクトのプロパティを設定するには、self.__dict__.update(**properties)またはのようなことをしますobj.__dict__.update(**properties)。 これはPythonicと見なされますか?これは私が使い続けるべき良いパターンですか、それとも悪い形と考えられますか?
12 python 

4
どのプロパティが値を変更し、どのプロパティが一定のままであるかが明確になるように、どのようにインターフェイスを設計しますか?
.NETプロパティに関する設計上の問題があります。 interface IX { Guid Id { get; } bool IsInvalidated { get; } void Invalidate(); } 問題: このインターフェイスには、2つの読み取り専用プロパティとがIdありIsInvalidatedます。ただし、それらが読み取り専用であるという事実は、それらの値が一定のままであることを保証するものではありません。 それを非常に明確にすることが私の意図だったとしましょう… Id 定数値を表します(したがって、安全にキャッシュできます)。 IsInvalidatedIXオブジェクトの存続期間中にその値を変更する可能性があります(したがって、キャッシュすべきではありません)。 interface IXその契約を十分に明確にするためにどのように変更できますか? 私自身の解決策の3つの試み: インターフェイスはすでに適切に設計されています。呼び出されたメソッドの存在Invalidate()により、プログラマは、同様の名前のプロパティの値IsInvalidatedが影響を受ける可能性があることを推測できます。 この引数は、メソッドとプロパティの名前が似ている場合にのみ有効です。 このインターフェースをイベントで拡張しますIsInvalidatedChanged: bool IsInvalidated { get; } event EventHandler IsInvalidatedChanged; の…Changedイベントの存在は、IsInvalidatedこのプロパティがその値を変更する可能性があることを示し、同様のイベントが存在しないことは、Idそのプロパティがその値を変更しないという約束です。 私はこのソリューションが好きですが、それはまったく使われないかもしれない追加のものがたくさんあります。 プロパティIsInvalidatedをメソッドに置き換えますIsInvalidated(): bool IsInvalidated(); これはあまりにも微妙な変更かもしれません。値は毎回新しく計算されるというヒントになるはずです-定数である場合は必要ありません。MSDNのトピック「プロパティとメソッドの選択」には、次のように書かれています。 次の状況では、プロパティではなくメソッドを使用してください。[…]パラメータが変更されていなくても、操作は呼び出されるたびに異なる結果を返します。 どのような答えが期待できますか? 私は、問題に対するまったく異なる解決策と、上記の試みをどのように打ち負かすかについての説明に最も興味があります。 私の試みが論理的に欠陥があるか、まだ言及されていない重大な欠点があり、解決策が1つしか残っていない(または何も残っていない)場合、どこで間違ったのかを聞きたいと思います。 欠陥が軽微であり、それを考慮した後、複数の解決策が残っている場合は、コメントしてください。 少なくとも、どちらがあなたの優先解決策であり、どのような理由であるかについてのフィードバックをお願いします。
12 c#  design  .net  properties 

3
不変状態でオブジェクトグラフの突然変異を効率的に表現することは可能ですか?
私はC ++で不変オブジェクトの使用を練習しています。私の個人的な目標は、一連の不変グラフで(ヒープ内の)汎用オブジェクトグラフを表現することです。 マルチバージョングラフ自体の作​​成はそれほど難しくありません。問題はパフォーマンスです。ブルートフォースバージョン管理にはグラフの完全なコピーが必要であり、これは受け入れられませんでした。 変更されていないノードを共有しようとしました。しかし、この場合、新しい問題が発生しました。参照。他のオブジェクトへの参照は、グラフ全体で更新する必要があります。これは、新しいグラフバージョンを導出するたびにすべてのノードを訪問する必要があります。また、これによりノードが参照で変更されるため、ノードも(コピーすることによって)派生する必要があります。総当たりコピーよりもパフォーマンスはそれほど良くありません。 私が想像できる限り、オブジェクトグラフの変化を不変状態で表現するための実際の効率的な方法はありません。だから私はこれに関するいくつかのアイデアを求めています。 不変状態でオブジェクトグラフの突然変異を効率的に表現することは可能ですか?

5
思考をC ++からC#に移行する方法
私は経験豊富なC ++開発者であり、言語を非常に詳細に知っており、その特定の機能の一部を集中的に使用しました。また、私はOODの原則とデザインパターンを知っています。私は今C#を学んでいますが、C ++の考え方を取り除くことができないという気持ちを止めることはできません。私はC ++の強みに一生懸命縛り付けたので、いくつかの機能がなければ生きられません。また、C#でそれらの適切な回避策または代替策を見つけることができません。 どのような良いプラクティス、デザインパターン、イディオム C ++の観点から、C#で異なっているあなたは提案することができますか?C#で馬鹿げていない完璧なC ++デザインを取得するにはどうすればよいですか? 具体的には、対処するC#風の良い方法を見つけることができません(最近の例): 確定的なクリーンアップを必要とするリソース(ファイルなど)の有効期間を制御します。これは簡単usingに手に入れることができますが、リソースの所有権が転送されているときに適切に使用する方法[... betwen threads]?C ++では、単に共有ポインタを使用して、適切なタイミングで「ガベージコレクション」を処理します。 特定のジェネリックの関数をオーバーライドすることに常に苦労しています(C ++での部分的なテンプレートの特殊化などが大好きです)。C#でジェネリックプログラミングを行う試みを放棄する必要がありますか?ジェネリックは意図的に制限されている可能性があり、特定の問題領域を除いてジェネリックを使用するのはC#っぽくないですか? マクロのような機能。一般に悪い考えですが、問題の一部の領域では、他の回避策はありません(たとえば、デバッグリリースにのみ送信されるログのように、ステートメントの条件付き評価)。それらを持たないということは、if (condition) {...}定型文を追加する必要があることを意味しますが、副作用を引き起こすという点ではまだ同じではありません。

5
同僚にExcelを超えるデータベース+アプリケーションソリューションの利点を示すために利用できる方法は何ですか?
私はどこにでもExcelスプレッドシートがある会社で働いています。私の同僚はプログラマーではないので、彼らは自分のデータを管理するより良い/簡単/生産的な方法があるかもしれないとは考えていなかったと確信しています。当然、さまざまなスプレッドシートに現在配布されているさまざまなワークフローのニーズに合わせて調整された、リレーショナルデータベースおよびインタラクティブフロントエンドにある機能を活用できる種類のアプリケーションを提唱しています。 私が抱えている問題は、そのようなシステムのメリットをさまざまな関係者に説明しようとしたことですが、実際にゼロから書くのではなく、それらを納得させるのに苦労しています。一般に人々はExcelを理解しています(パワーユーザーでなくても)が、「データベース」という単語が表示されたり、「コード」について話し始めると、すべてが曖昧になる可能性があります。 スプレッドシートから実際のアプリケーションに切り替えることでワークフローがどのように改善されたかを示す証拠とともに、誰かが方法を提案できますか?

4
C#最小SQLデータベース
私は、CSVのようなものでは処理が効率的でなく、SQL / MySQLサーバーが多すぎるほど十分なデータを保存する必要がある小さなプロジェクト(本番ではない)に取り組んでいます。.Netには、単一のファイルを読み込んで処理するのではなく、サーバーを管理および接続することなく、クエリ機能を使用して、データの複数のエントリを効率的に保存する方法がありますか。
12 c#  database  sql 

6
Cの変数と関数に使用される命名規則[非公開]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 CIで大規模プロジェクトをコーディングする際に問題が発生しました。さらにコードを書き続けると、コードを整理するのが難しくなることがあります。プログラムのさまざまな部分の関数と変数の命名が混同されているように見えるかもしれません。 それで、Cの変数と関数に使用できる便利な命名規則があるかどうかを考えていましたか? ほとんどの言語は命名規則を提案しています。しかし、Cについては、これまで読んだ唯一のことは、コードの読みやすさを説明する名前でなければならないということです。 編集: 推奨される命名規則のいくつかの例の例: PythonのPEP 8 Javaチュートリアル Javaの命名規則をどこかで読みましたが、どこにあるのか覚えていません。
12 c  naming 

8
ソフトウェアを書くのは、最初から読んで理解するよりも簡単ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 私と私の友人は、昨日、大規模なC ++ソフトウェアを書くことと、それを新規採用者として理解することとの違いについて話し合っていました。 ソフトウェアは一度に1行ずつ実行され、このプロセスは私たち(人間)が物事を学び、別の物の上に物事を構築する方法に似ているので、大きなソフトウェアを書くことは実際にそれを読んでそれが何をするかを理解するよりも簡単です(コードをステップスルーすると役立ちますが、複数のクラス/ソースファイルを一緒に覚えておく必要があります。それらが何のために書かれているのかさえ知らない、マルチスレッドコードは悪意のあるポイントを追加します)? これは最初は奇妙に聞こえますが、少し考えた後、合理的であるように見えました

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