共同プログラマーによって行われるまだ実装されていないメソッドをどのように扱うか?


45

これは、チームでの作業方法に関する質問です。

最近、私は6人のチームで最初の大規模(〜80クラス、Java)プログラミングプロジェクトに取り組みましたが、コードに継続的に取り組んでいたのは4人だけでした。私たちは早い段階で行われる作業を配布しましたが、ある時点で、私は共同プログラマーの1人によってまだ実装されていないメソッドを呼び出す必要がありました。これに対処するための推奨される方法はどうですか?

私が見たオプション、私はそれらのどれも本当に好きではありませんが:

  1. 自分の書き込み//TODO及び方法がその間に実装されているかどうかを確認するために、後のコード行を再訪。

  2. 対応するチームメンバーにそれを実装するよう頼む。

  3. まだ実装されていないものの明確な説明を含むカスタムruntimeExceptionをスローします。(少なくとも、何が足りないかを見つけるために長い時間を探す必要はありません)

  4. するために必要なメソッドを追加し、そのクラスとそれらの書き込み//TODOメッセージ本文に、おそらくも彼らにその変更についての簡単なメッセージを送信します。(これはもう私の問題ではありませんが、その間にこのメソッドで作業していた場合、迷惑なマージ競合が発生する可能性があります)

  5. 実際に作業を行うコードを記述する前に、すべての抽象クラスまたはインターフェースを定義します。(これらのインターフェイスは頻繁に変更されたため、うまく機能しませんでした)


51
他の誰かが書いたメソッドを必要とするワークフローは適切ではないと思います。機能に取り組んでいます。その機能にメソッドが必要な場合は、実装します。2人で1つの機能を実装する場合は、ペアになるか、統合および通信が頻繁に行われるため、ペアになっているように見えます。
陶酔

8
@Euphoric複数回、非常に大きな新機能が比較的短い時間枠内で開発され、ユーザーインターフェース、ビジネスロジック、およびAPIレイヤーを同時に処理するために異なるタスクに分割する必要がある状況に遭遇しました。そうしないと、締め切りに間に合わない可能性があります。UIで作業する人は、インターフェイスとしてBLへのデータアクセスメソッドとコマンドのみを宣言し、他の人がUIだけで作業しながら実装を行えるようにする場所です。
アンディ

15
@DavidPackerあなたが説明するのは、その問題を解決する唯一の方法ではありません。垂直スライス、頻繁な統合、小さな機能はすべて、各人が別々の部分で作業する水平スライスよりも優れたソリューションです。
陶酔

3
@Euphoric私はあなたにこれ以上同意できません。可能であれば、重要ではない部分の複雑な新機能(つまり、UXを改善するだけですぐには必要ない機能)を取り除く方法を採用します。悲しいことに、あなたが言及したオプションではなく、機能の除去も不可能な場合があります。ビジネスは、開発者はそうだと言います。したがって、あなたのポイントは堅実ですが、ビジネスのニーズを満たすために何らかの機能の作業分割を行う必要がある状況に誰かが遭遇する可能性があります。
アンディ

2
何について話して、彼はそれを処理したいどのように彼に?
アガンジュ

回答:


5

それは興味深い質問であり、答えはあなたが思うより簡単かもしれません。

簡単に言えば、仮定を検証するテストを作成します。あなたが実装を行うか、あなたの仲間のプログラマーかは関係ありません

長い答え。

リストするオプションはいずれもやや受動的であり、遅かれ早かれ戻ってコードを再確認する必要あります(存在する場合)。

  • コメントは、実装を担当する相手が読んで処理する必要があります。それまではコードをコンパイルできません。コードリポジトリでそのような状態をチェックすると、継続的インテグレーションパイプラインは機能せず、とにかく悪い習慣です... 壊れたコードをチェックインしないでください
  • ランタイム例外はより良いように見えますが、それでも毒性があります。なぜなら、仲間のプログラマーは、チェックを行わずに実装がすでに行われ、システムも不安定な状態のままであると想定できるからです。メソッドがそれほど頻繁にトリガーされない場合、プロダクションコードが破損する可能性があります...悪い習慣も... 「実装されていない」例外をチェックインしないでください
  • メソッドやスタブの実装を仲間のプログラマー待つのも大変です。それはあなたのワークフローとあなたの仲間のプログラマのワークフローを壊します。彼らが病気で、会議中に、コーヒーブレイク中に何が起こるか、あなたはあなたの時間を待って過ごしたいですか?... 必要がない場合は誰かを待たないでください
  • 欠落しているメソッドを実装することは、間違いなく前進するための最良の方法です。しかし、実装がユースケース全体を満たさず、仲間のプログラマーがそれを修正または変更する必要がある場合はどうなりますか?あなたと彼らは、それがあなたの意図と互換性があることをどのように確認しますか?答えは簡単です。意図を検証、説明、文書化するテストを作成します。テストが中断した場合、簡単に気付くことができます。その方法で変更を行う必要があり、機能が壊れる場合は、すぐに表示されます。あなたには、コミュニケーションを取り、何をすべきかを決定する理由があります。機能を分割しますか?実装の変更など... テストで十分に文書化されていないコードはチェックインしないでください

十分なレベルのテストを達成するには、2つの分野を確認することをお勧めします。

  1. TDD-テスト駆動開発-これにより、意図を説明し、十分にテストすることができます。また、まだ実装されていないメソッドやクラスを(インターフェイスを使用して)モックまたは偽造することもできます。コードとテストは引き続きコンパイルされ、他のプログラマーのコードとは独立して独自のコードをテストできます。(参照:https : //en.wikipedia.org/wiki/Test-driven_development

  2. ATDD-受け入れテスト駆動開発-これにより、機能全体をテストするのに役立つ外側のループ(TDDループの周り)が作成されます。これらのテストは、機能全体が実装された場合にのみ緑色に変わるため、フェローが作業を完了すると自動的にインジケーターが表示されます。あなたが私に尋ねるなら、かなりきちんとした。

警告:あなたの場合、私は単純な受け入れテストを書くだけで、ビジネス側の多くを持ち込もうとはしません。機能が必要とするシステムのすべての部分をまとめる簡単な統合テストを作成します。必要なのはそれだけです

これにより、コードを継続的統合パイプラインに配置して、信頼性の高い実装を作成できます。

そのトピックをさらに詳しく知りたい場合は、次のリンクを確認してください。


103

スタブを要求します。

または自分で書いてください。いずれにせよ、あなたとあなたの同僚は、インターフェースとその使用方法について同意する必要があります。その合意は、スタブに対して開発できるように比較的固められる必要があります-言うまでもなく、ユニットテスト用に独自のモックを作成できます...


25
^^これ。インターフェイスを適切に使用している場合、他の人がそれらを書き終えるまで、実装は必要ありません。
ロバートハーベイ

13
そして、さらにロバートさんのコメントにあなたは正しく、あなたはしているつもりが悪い時間を持っている...よく、特に複数の人の間で分割できるように設計プロジェクトでのインターフェイスを使用していない場合
corsiKa

1
Javaにヘッダーファイルがないのは残念です。C / C ++の世界では、最初にAPIを作成してすべてのヘッダーを記述することができますが、実装の不足はリンカーにとって問題になります。(少し簡素化して、ABIがリンカの問題であるためには、一定のままにする必要があります)。
ウェストールマン

16
@WesToleman面白いことに、Javaについての私のお気に入りの1つは、ヘッダーファイルがないことです。ロバートとcorsiKaが言及した「インターフェース」は、その役割を完全に満たします。最初にAPIを作成し、インターフェイスを記述します。具体的な実装の欠如はコンパイラにとって問題ではありません。
GrandOpener

1
@WesTolemanそれはあなたにとってうまくいきますか?私の耳では、ウォーターフォールスタイルによく似ていますが、この「重要なパラメーター」を見逃していることに気付いたら、インターフェイスをさらに更新する必要があると思いますか?
netigger

6

あなたの状況では、私はその機能に責任を持つチームメンバーと話します。彼らはその機能の開発を優先する立場にあるので、あなたはより早くそれを使い始めることができます。

私はあなたの4番目の選択肢を避けます。あなたはすべてのコードを書いたので、あなたが言っているように、あなたはもはやそれをあなたの問題とは考えていません。次に、同僚は関数の実装を記述しますが、もはやそれを彼らの問題とは見なしません。あなたが書いたコードが正しく動作することを実際にテストするのは誰ですか?


その関数のAPIを要求する必要があります。これにより、1つ以上のインターフェースが生成されます。入力に基づいて初期テストケースを設計できるように、このインターフェイスを使用する必要があるため、これを一緒に行うことをお勧めします。実際の実装は、次に、(可能なAPIの変更を含む)後に来ることができる
するThorbjörnRavnアンデルセン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.