タグ付けされた質問 「development-process」

ソフトウェア開発のプロセスに関する質問。

1
開発スタックのスライス-対角線?
新しいプロジェクトが進行中です。現時点では、開発者はチームAとチームBの2つのチームに分かれています。このプロジェクトには、開発スタック全体での開発が必要な2つの部分があります。以下に示す非常に単純化されたスタックのサンプル: プロジェクトの各部分はスタック全体にわたる開発を必要とするため、通常はチームB内で作業を分解し、異なる部分間の相互作用を設計および実行するフルスタック開発者アプローチを期待します。 しかし最近、チームAがスタックの特定の部分を担当することを望んでいることを学びました。チームは、2つのチームの分割を提案しています。チームBからの開発はありません。分割は次のようになります。 私にはこれは非常に不自然に感じます。各チームには、これらを達成するための異なる明確な目標とタイムスケールがありますが、チームBは機能を実装するためにチームAに依存します。提案された解決策は、共通のインターフェイスが事前に定義されていることです(おそらくプロジェクトには2年のタイムスケールがあり、多数になる可能性があります)。チームAは、独自の目標を設定しているにもかかわらず、これらのインターフェイスに必要なビットを早期に開発し、チームBは、すぐに短期間のすべての呼び出しをスタブして、進行できるようにします。 私はこのアプローチについて懸念があります: インターフェイスは変更される可能性があり、チームAは変化する要件に対応するための帯域幅または時間がない場合があります。 チームAのコードのバグにより、チームBの進行が妨げられる可能性があります。また、チームAが異なる優先順位キューを持っているため、これらを修正する優先事項ではない可能性があります。 チーム全体に広がる知識の欠如-チームBは、内部で何が起こっているのかを完全に理解していない可能性があり、そのために設計上の決定が下される可能性があります。 業界の多くの企業にはサブチームがあり、これに対処できる必要があることが示唆されています。私の理解では、一般的に、チームは当初の予想方法(フルスタック)に分割されるか、以下のようにテクノロジースタックを分割します。 ですから、私は他の業界が何をしているかを知りたいと思っています。ほとんどの分割は垂直/水平ですか?対角線分割は意味がありますか?対角線の分割が発生した場合、私の懸念は有効であると思われ、チームBが懸念すべきことは他にありますか?私はおそらく、チームBの成功または失敗の責任を負うことに注意してください。

1
コードのどの部分が最も頻繁に実行されるかを確認するにはどうすればよいですか?
何千行ものソースコードの中で最も頻繁に実行され、最も時間がかかるコードを確認したいと思います。これの目的は最適化のためです。 最適化には、コードのどの部分が最も頻繁に実行されるかを確認できることが重要です。これらの部分は、高速化のために焦点を合わせる必要があるためです。同時に、一部のコードは非常に頻繁に実行されますが、実質的に時間はかかりません。そのため、どのコードに最も時間がかかるかを確認することも重要です。 両方の長所は、実行されたすべての時間を含めて、コードにかかる時間を合計するプログラムになると思います(そのため、コード全体が最も遅くなる原因を見つけます)。これには一種のツールがありますか?

3
統合テストを継続的統合(CI)に含める必要がありますか?
Webアプリケーションを開発しており、Hudsonがコンパイル、単体テスト、静的コード分析などの典型的な仕事をしていると仮定します。 ただし、注意が必要なのは、Hudson がアプリケーションサーバーを展開して起動し、統合ジョブを実行してから、以前のジョブが完了したことです。 これは、データベース接続、3番目の部分のアプリケーション接続、ソケットポートのリスニング、環境変数、サーバーの起動失敗の処理など、いくつかの困難なことを意味します。さらに悪いことに、統合テストは統合テストを簡単に破ることができます。 統合テストを継続統合(CI)に含める必要があると思いますか?手動でできますか?または統合テストを簡素化しますか?

3
選択した少数のユーザーのみに機能を展開する方法
私が質問しようとしていることの良い例は、Facebookの新しいタイムライン機能です。最初は、タイムラインへのアクセスが許可されたのは一部のみでした。機能の動作がより強固になり、バグが修正されたため、追加のユーザーが機能へのアクセスを許可されました。後日、大規模なユーザーグループがこの機能へのアクセスを許可されましたが、現在では、すべてのユーザーに対する一般的な機能です。開発チームはこのタイプの機能の展開をどのように管理しますか? コード内の構成ファイルと条件付きifステートメントを介して、テストまたは実稼働中に何かが存在する場合、構成設定を使用してアクセスを選択的に制御するというアイデアを試しました。単純な機能ではこれで問題ありませんが、より大きな機能セットでこれを実装しようとすると、管理できなくなると思います。 この方法で機能のロールアウトを管理する最良の方法は何でしょうか?

5
開発ブランチはいつ作成する必要がありますか?
プロジェクトのチームを単一のメイン/トランクブランチから、メインに定期的にマージする必要がある複数の開発/ワークブランチに移動しています。この記事とTFS分岐ガイド(TFSとVisual Studio 2010を使用しています)に基づいて新しいプロセスを作成しています。 現在、1人から5人の人々がプロジェクトに取り組んでいます。Mainは必要に応じていつでもリリースできるようにするため、常に安定している必要があります。スプリントは修正されていません-少なくともまだ-現時点では1〜2週間ごとにリリースしています。 この時点で、各ユーザーはアプリケーション全体のバグを修正しています。数週間以内に、アプリの新しい大きなコンポーネントの開発を開始します。 私たちが見つけている一つのこだわりのポイントは、いつ開発ブランチを作成すべきかということです。開発者のスキルセットに応じて、複数のユーザーストーリーを並行して実装します。開発者ごとにブランチを作成することを考えましたが、それは意味がありません。作業の一部で常にコラボレーションが必要になるからです。他の作業が完了している間にMainにマージするため、単一の開発ブランチでは対応できません。 誰にもこれに関するガイダンスがありますか?

8
大規模プロジェクトを開発する際の最大のボトルネックは何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 私の会社がMS Wordのレプリカを開発することだったとしましょう(例として)。開発プロセスのボトルネックは何でしょうか。無限の現金とMicrosoftのような組織があると仮定するとどうなりますか?言い換えれば、そのようなソフトウェアを迅速に開発する際の最も一般的な障害は何ですか?すべての仕様が整っており、組織が完全に機能していると仮定しましょう。そのため、製品の出荷準備が整うまでソフトウェア開発に専念します。-コードの作成-テストの作成-最終製品の手動テスト-設計の不備によるコードの再作成-コードの設計-経験豊富な開発者によるコードレビュー-GUIの設計-アルファに基づくGUIの再設計/ beta-user feedback-ユーザーからのフィードバックの処理-alpha / beta-userフィードバックを待っています 回答に参考文献を使用するか、主題に関する経験を述べてください。

3
確立されたエンタープライズ環境に新しいJVMプログラミング言語を導入する
現在の職場がJavaショップだと想像してください。Java言語については多くの知識が蓄積されており、すべてをスムーズでアジャイルな方法で処理するための包括的なビルドおよび展開プロセスが用意されています。 ある日、たとえばRubyで書かれようと叫ぶプロジェクトが始まります。上級開発者のみがRubyについての手がかりを持っていますが、JVMにはJRubyが存在するため、既存のインフラストラクチャを引き続き使用およびサポートできるという一般的な考え方があります。また、JRubyは、より少ないコードで現在のアプリケーションを実装するより良い方法への道を示すことができるため、これは継続的な移行を表すことができます。 JRubyは単なる例であり、Clojure、Groovy、またはJVM上で実行される他のすべてのものであることを忘れないでください。 問題は、このような変更をどのように導入するかです。

4
複数のプログラミングプロジェクトを並行して実行している場合、タスクに優先順位を付ける方法は?
5人の顧客がいて、それぞれに2つまたは3つの異なるプロジェクトを開発するとします。各プロジェクトにはX iタスクがあります。 各プロジェクトには2〜10週間かかります。 リソースが少ないため、管理オーバーヘッドを最小限に抑えることが望まれます。 このシナリオの2つの質問: オーバーヘッドを最小限に抑えながら、タスクに優先順位を付けて完了を追跡するためにどのツールを使用しますか? 主な目的がスループットの向上である場合、次の利用可能なリソースに割り当てるタスクを決定するためにどの基準を考慮しますか(時間単位ごとに終了するプロジェクトが多く、この目的は、1つのプロジェクトを開始して終了し、次に進むと競合します)次))? アイデア、管理手法、アルゴリズムは大歓迎です

4
「時期尚早の抽象化」とは何ですか?
私はフレーズが乱れているのを聞いたし、私には議論が完全に正気ではないように聞こえます(ここでわざわざ言っているとすみません、それは私の意図ではありません)。 一般的なケースがわかる前に抽象化を作成したくない場合は、(1)属していないものを抽象化に入れるか、(2)重要なものを省略します。 (1)私にはこれはプログラマーが十分に実用的ではないように聞こえます、彼らは最終的なプログラムには存在しないものがあると仮定しているので、抽象化のレベルが低い状態で作業していますが、問題はありません時期尚早な抽象化、それは時期尚早な結着です。 (2)重要なことの省略は1つです。後で重要になることが仕様から省略されている可能性があります。これに対する解決策は、独自の結論を導き出してリソースを無駄にすることではありません。間違っていると思います、それはクライアントからより多くの情報を取得することです。 これは、抽象化から具体化に至るまで常に作業する必要があります。これは、最も実用的な方法であり、その逆ではないためです。 そうしないと、クライアントを誤解し、変更が必要なものを作成するリスクがありますが、クライアントが独自の言語で定義した抽象化のみを構築する場合は、このリスクにぶつかることはありません(少なくとも、いくつかの具体的な暗闇の中でのショット)、はい、クライアントは詳細について考えを変える可能性がありますが、本来彼らが望むものを伝えるために使用していた抽象化は依然として有効である傾向があります。 以下に例を示します。クライアントがアイテムバギングロボットの作成を希望しているとします。 public abstract class BaggingRobot() { private Collection<Item> items; public abstract void bag(Item item); } 私たちは、クライアントが使用した抽象化から何かを構築していますが、わからないことについては詳しく説明していません。これは非常に柔軟性があり、「時期尚早な抽象化」と呼ばれるのを見てきましたが、実際にはバギングがどのように実装されたかを想定するのは時期尚早です。複数のアイテムを一度にバギングすることをクライアントと話し合った後、 。クラスを更新するために必要なのはシグネチャを変更することだけですが、ボトムアップを始めた人にとっては、大規模なシステムのオーバーホールが必要になる可能性があります。 時期尚早な抽象化などはなく、時期尚早な結集だけです。このステートメントの何が問題になっていますか?私の推論のどこに欠陥がありますか?ありがとう。

1
異機種混合の開発環境に利点はありますか?
私は、どのハードウェアとソフトウェアを実行するかを選択できる開発者のチームと協力しています。このシナリオでは、テストを実行する前に、さまざまなターゲットシステムを確認できます。私たちの経験では、問題が発生してすぐに、さまざまなブラウザーやオペレーティングシステムで多くの奇妙な問題が見つかりました。しかし、それはただ1つのグループの経験です。 このようなさまざまなシステムは、インフラストラクチャチームやセキュリティチームにとって困難であるため、問題となることがよくあります。 開発者のチームに同種または異種の開発環境を用意する方が有益ですか?

1
「電車」ベースの開発とは?
開発方法論の別の新しい用語に出くわしましたが、その定義を見つけることができませんでした。具体的には、「電車ベースの開発」と呼ばれています。 ここに私がこの用語を見た場所のいくつかの例があります。 今週の初めに、私はエンジニアリングリーダーとリリースマネージャーにWindows MetroバージョンのFirefoxを廃止するよう依頼しました。(ジョナサン・ナイチンゲール) https://blog.mozilla.org/futurereleases/2014/03/14/metro/ MozillaのキャリアWebサイトから: アジャイル開発方法論とトレーニングベースの開発/ QAチームの両方での作業経験。 Mozillaのコンテキストだけでなく、以前に「トレーニング」について聞いたことがあります。しかし、ネット上でそれに関する良い情報を見つけることができませんでした。 「電車ベースのソフトウェア開発」をググると、検索結果にほとんど情報が見つかりませんでした。列車をワゴンから分離するために私が掘り出すことができる最も近いのは、「列車」はスケジュールに従って定期的にリリースすることです。しかし、「電車」は一種の具体的なQA設定のようでもあります。 では、「電車ベースの開発」とは何でしょうか?

3
XMLコメントは必要なドキュメントですか?
私はかつて、ドキュメントにXMLコメントを要求するファンでした。それ以来、私は2つの主な理由で考えを変えました。 優れたコードのように、メソッドは自明でなければなりません。 実際には、ほとんどのXMLコメントは無意味なノイズであり、付加価値はありません。 多くの場合、GhostDocを使用して一般的なコメントを生成しますが、これは役に立たないノイズとは次のことを意味します。 /// <summary> /// Gets or sets the unit of measure. /// </summary> /// <value> /// The unit of measure. /// </value> public string UnitOfMeasure { get; set; } 私には、それは明白です。とはいえ、含める特別な指示がある場合は、XMLコメントを絶対に使用する必要があります。 私はこの記事からのこの抜粋が好きです: 時々、あなたはコメントを書く必要があるでしょう。しかし、それは規則ではなく例外であるべきです。コメントは、コードでは表現できないものを表現している場合にのみ使用してください。エレガントなコードを記述したい場合は、コメントを削除し、代わりに自己文書化コードを記述してください。 コードがそれ自体で説明するのに十分でない場合にのみXMLコメントを使用すべきだと思うのは間違っていますか? これは、XMLコメントによってかなりのコードが見苦しく見える好例です。それはこのようなクラスを取ります... public class RawMaterialLabel : EntityBase { public long Id { get; set; } …

5
ソフトウェアの脆弱性に対する攻撃/ツールのソフトウェアライフサイクルの固有の側面は何ですか?
私の地元の大学には、約20人の学生からなる小さな学生向けコンピューティングクラブがあります。クラブには、モバイル開発、ロボット工学、ゲーム開発、ハッキング/セキュリティなど、特定の分野に重点を置いた小さなチームがいくつかあります。 ユーザーストーリー、タスクの複雑さの見積もり、バージョン管理と自動ビルド/テストの継続的な統合など、いくつかのチームにいくつかの基本的なアジャイル開発コンセプトを紹介しています。 ウォーターフォール、スパイラル、RUP、アジャイルなど、いくつかの基本的な開発ライフサイクルに精通していますが、セキュリティをハッキング/侵害するためのソフトウェア開発ライフサイクルのようなものがあるのだろうかと思っています。確かに、ハッカーはコンピュータコードを書いていますが、そのコードのライフサイクルは何ですか?いったん違反が発見されてパッチが適用されると、その違反を悪用したコードは役に立たなくなるので、彼らがメンテナンスにあまり関心を持つことはないと思います。 ライフサイクルは次のようになると思います: セキュリティのギャップを見つける セキュリティのギャップを悪用する ペイロードの調達 ペイロードを利用する 製品の目的がセキュリティ違反である場合、ソフトウェアの開発ライフサイクルにはどのような違いがありますか(ある場合)?

9
.NETポートフォリオの自動ビルドプラットフォーム-最良の選択?[閉まっている]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ソフトウェアエンジニアリングスタック交換のトピックになるようにします。 6年前休業。 .NETアプリケーションのかなり大きなポートフォリオの維持に携わっています。また、ポートフォリオには、他のプラットフォーム(ネイティブC ++、ECLIPSフォームなど)の上に構築されたレガシーアプリケーションがあります。 NAntの上に、これらのすべてのアプリケーションのビルドを管理する複雑なビルドフレームワークがあります。ビルドフレームワークはNAntを使用してさまざまなことを行います。 Subversionからコードを引き出し、Subversionでタグを作成する MSBuild for .NETまたは他のプラットフォームの他のコンパイラを使用してコードをビルドします AssemblyInfoファイル内を調べてバージョン番号を増分する ビルド/リリースに含めるべきではない特定のファイルを削除する コードをリリースフォルダにリリース バックアップ用にZipコードを作成 Windowsサービスを展開します。それらを開始および停止する 等。 それらのほとんどはNAntだけで実行できますが、NAntが環境に固有のいくつかのことを実行するための拡張タスクをいくつか作成しました。また、上記のプロセスのほとんどは汎用化されており、さまざまなアプリケーションビルドスクリプトの多くで再利用されているため、ロジックを繰り返さないでください。したがって、これは単純なNAntコードではなく、単純なビルドスクリプトでもありません。ビルドを実行するために一緒に来るNAntファイルは数十あります。 最近、私はいくつかの理由でNAntに不満を感じています。(1)構文がひどい-XMLの上にあるプログラミング言語を維持するのは本当に恐ろしいです。(2)プロジェクトは蔓延してしまったようです。最近は大量の更新が行われておらず、実際には誰も舵を取っていないようです。.NET 4で動作するようにしようとすると、このアクティビティがないためにいくつかの問題が発生します。 それで、その背景のすべてを片付けて、ここに私の質問があります。上記のリストに基づいて達成したいことがいくつかあり、私は主に.NETショップにいるが、.NET以外のプロジェクトもビルドする必要があることを考えると、NAntに代わる代替案がありますか?に切り替えますか? 私のレーダー上のものが含まPowerShellの(の有無にかかわらずpsake)、MSBuildのを自分自身、そしてによって熊手。これらにはすべて長所と短所があります。たとえば、MSBuildは十分強力ですか?私はそれを何年も前に使用したことを覚えており、NAntほど強力ではなかったようです。本当にrakeを使用してビルドを行うためにチームにRubyを学習させたいですか?psakeは本当に自分のポートフォリオを固定するのに十分なほど成熟したプロジェクトですか?Powershellは「金属に近すぎる」ので、自分でビルドライブラリを作成して、それをそのまま使用するためにpsakeと同じようにする必要がありますか? 他に検討すべきツールはありますか?非常に複雑な.NETポートフォリオの保守に携わっていた場合、どのビルドツールを検討しますか?あなたのチームは現在何を使用していますか?

8
開発者はテスト段階に関与する必要がありますか?
従来のV字型の開発プロセスを使用しています。次に、要件、アーキテクチャ、設計、実装、統合テスト、システムテスト、および承認があります。 テスターは、プロジェクトの最初のフェーズでテストケースを準備しています。問題は、リソースの問題(*)が原因で、テストフェーズが長すぎ、時間の制約があるために短縮されることが多いということです(プロジェクトマネージャーは知っています...;))。開発者は必要に応じてユニットテストを行っています。 したがって、私の質問は簡単です。開発者がテスト段階に関与する必要があるかどうか、それはあまりにも「危険」ではありません。作業が完了したので、プロジェクトマネージャーに良い品質の誤った感覚を与えることになると思いますが、追加されたman.daysは何か価値がありますか?私は、開発者がテストを行うことに自信がありません(ここでは問題はありませんが、数日間に数回のクリックで中断するのは非常に難しいことは誰でも知っています)。 ご意見をお寄せいただきありがとうございます。 (*)あいまいな理由から、テスターの数を増やすことは現在のところオプションではありません。 (ちょうど前もって、それはプログラマーがテストを設計する際にテスターを助けるべきか?の複製ではなく、テストの準備ではなくテストの準備について話し、開発者の影響を回避します)

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