データベース、ユーザーインターフェイス、クラウドなどのさまざまなレイヤーで構成されるプラットフォーム(たとえば、JavaまたはWin32または.NET))上にプラットフォームを設計するとします。
これで、すべてのチームが製品の作成に取り組んでいます。たとえば、データベースは他のチームとの関係に重点を置いていないため、統合を行うときにさまざまな問題が発生します。
さて、これらは安定したバグのないプラットフォームを実現するための私の質問です:
すべてのレイヤーを統合しながら、関連するオーバーヘッドが少なく、このプロセスを自動化する他の方法があることをどのように確認できますか?
また、ある特定のチームが他のチームによって提供されたAPI呼び出しを使用していて、他のチームがまだAPI呼び出しの準備ができていない場合は、DEADLOCKが発生します。そのような状況を乗り越える方法は?
たとえば、さまざまなチームの進捗状況を監視し、フィードバックを受け取りたいと思います。そのような活動に利用できる自動化はありますか?
すべてのレイヤーを統合しながら、関連するオーバーヘッドを削減するにはどうすればよいでしょうか。
パフォーマンス測定とプロファイリング。
また、このプロセスを自動化する他の方法はありますか?
いいえ。良いデザインは本当に大変な作業です。
ある特定のチームが他のチームによって提供されたAPI呼び出しを使用していて、他のチームがまだAPI呼び出しの準備ができていない場合、DEADLOCKが発生します。そのような状況を乗り越える方法は?
悲しいことに。できません。 API呼び出しを作成しているチームは、APIスイートを細かく分割し、最初に重要な部分を提供する必要があります。
API呼び出しを使用しているチームは、重要性に基づいて作業を細かく分割する必要があります。彼らは最初に重要な部分に焦点を合わせる必要があります。彼らは自分たちの優先順位をAPIプロデューサーに伝える必要があります。
たとえば、さまざまなチームの進捗状況を監視し、フィードバックを受け取りたいと思います。そのような活動に利用できる自動化はありますか?
これを自動化しないでください。
実際に毎日実際の人と話をします。
各チーム内で毎日スクラムミーティングを行います。これは15分で、プロジェクトが劇的に改善されます。
チームリーダーの間で毎日スクラムオブスクラムを行います。これは15分で、プロジェクトが劇的に改善されます。
あなたのチームは、不十分な管理やその他の問題に苦しんでいるようです。典型的なアジャイルプロジェクトでは、技術スペシャリストのサブチーム(チームAはデータベースのみ、チームBはWebサービスのみ、チームCはGUIのみなど)が嫌われていることがわかります。
理想的には、ユーザーのニーズを満たすソフトウェア(ユーザーストーリー)を作成するためのチームが存在する必要があります。そのチームの他の細分化は受け入れられません。そのチームのすべてのリソースshouldユーザーストーリーを割り当て、データベースからGUIまですべてのレイヤーでそれを完了することができます。確かに一部の開発者には長所と短所がありますが、チームは必要に応じて互いに助け合うことができるはずです。
あなたのチームは解散し、現在チーム間の調整が不足しています。チームの再編成は難しいか不可能かもしれないことを私は知っているので、ここにいくつかの他の提案があります:
回答1:統合の問題を解決する良い方法は、各レイヤー間の適切な通信を検証する一連の統合テストを作成することです。統合テストが正しく行われると、いずれかのレイヤーで障害が発生した場合に通知されます。おそらく、Webサービスは展開されていませんか?おそらく、テスト環境では最新のデータベース変更がデプロイされていませんか?等...
回答2:他のチームに完了する前に強制的に完了することはできません。統合テストは、他のチームが完了したかどうかを事前に通知します。ただし、この時点の前に、依存するレイヤーが完了する前にコードと機能を検証できるように、レイヤーでコードの独立した単体テストを作成する必要があります。
回答3:問題追跡、またはチームのすべてのメンバーが公開しているその他のプロジェクト管理ツールが必要です。開発者として、私はプロジェクト管理ツールを調べて、どのタスクと問題が未解決、進行中、または完了しているかを確認できるはずです。
1)すべてのレイヤーを統合しながら、関連するオーバーヘッドが少なく、このプロセスを自動化する他の方法があることをどのように確認できますか?
システム全体のアーキテクトグループが必要です。ただし、インターフェイスを設計するだけではないことを確認してください。彼らはチーム間の議論を促進するべきであり、インターフェースは、それが合理的に操作/実装するのが合理的に簡単であることに双方が同意した場合にのみ解決されるべきです。また、設計は柔軟である必要があります。そのため、チームが変更を要求した場合は、関係するすべてのチームと迅速に話し合い、合意または拒否する必要があります。
2)また、ある特定のチームが他のチームによって提供されたAPI呼び出しを使用していて、他のチームがまだAPI呼び出しの準備ができていない場合、DEADLOCKが発生します。そのような状況を乗り越える方法は?
インターフェースがどのように機能するかについて事前に同意する場合(前のポイントを参照)、ユニットテスト用のモックバージョンを作成するか、最悪の場合、しばらくの間仕様に合わせてプログラムを作成できます。
3)たとえば、さまざまなチームの進捗状況を監視し、フィードバックを受け取りたいと思います。そのような活動に利用できる自動化はありますか?
S.Lottがすでに言ったように、あなたは毎日人々と話をしなければなりません。各チームで毎日スクラムミーティングを行い、チームリーダー(プロジェクトリーダー全体と)で毎日スクラムミーティングを行います。アーキテクトは、少なくともチームリーダーの会議、おそらくすべての会議に参加する必要があると思います。そうすれば、アーキテクトはインターフェイスに影響を与える可能性のある問題を常に認識しています。