web-dev-qa-db-ja.com

コプログラマーが行う、まだ実装されていないメソッドを処理する方法は?

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

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

私が見たオプションですが、どれも好きではありません。

  1. 自分を書く//TODOそして、このコード行を後で再確認して、メソッドが実装されているかどうかを確認します。

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

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

  4. 必要なメソッドをtheirクラスに追加し、それらを//TODOをメッセージ本文に含めます。その変更について簡単なメッセージを送信することもできます。 (今はもう私の問題ではありませんが、それまでにこの方法で作業していると、厄介なマージの競合が発生する可能性があります)

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

45
lucidbrot

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

簡単に言えば、仮定を検証するテストを記述します。実装するかプログラマー仲間であるかは関係ありません

長い答え。

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

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

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

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

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

注意:あなたの場合、私は単純な受け入れテストのみを記述し、ビジネスサイドの多くを取り込もうとはしません。機能に必要なシステムのすべての部分をまとめた簡単な統合テストを記述します。必要なのはそれだけです

これにより、コードをContinous Integrationパイプラインに配置して、信頼性の高い実装を生成できます。

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

5
Jesko R.

スタブを要求します。

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

103
svidgen

あなたの状況では、私はその機能の責任を負うチームメンバーに話します。彼らはその機能の開発に優先順位を付けて、より早く使用を開始できる立場にあるかもしれません。

私はあなたの4番目のオプションを避けます。すべてのコードを記述したので、あなたが言うように、それを問題とは見なしなくなりました。その後、同僚が関数の実装を記述し、それが問題であるとは見なしなくなります。あなたが書いたコードが正しく機能することを実際にテストするのは誰ですか?

6
Pete