web-dev-qa-db-ja.com

コードが何もしないことを同僚に伝えるにはどうすればよいですか?

ここにいてください。 「何もしない」というコードは、次の関数のようなものを意味します。

void factorial(int n)
{
    int result = 1;
    for(int i = 1; i <= n; ++i)
    {
        result *= i;
    }
}

確かに、この関数はローカル変数を作成して値を計算しますが、プログラムを進めるためには何もしません。計算結果を利用する方法はなく、副作用もありません。

これは質問のための不自然な例ですが、私が参照するコードはより複雑になる可能性があることに注意してください。

そのようなコードに遭遇したとき、何かが足りないのではないかと心配するため、私は多くの場合、余分な時間を費やして何度かそれを実行します。私は高い道を行くか、バグを修正してそれで終わらせることができましたが、この減速が私と私のパフォーマンスに悪影響を与えることを心配しています。

だから、私は高い道を進み、チームが理解していると想定すべきですか、それともコードがあまり機能しないことを伝えるべきでしょうか?後者がより良いオプションである場合、どうやって私はそれを軽蔑したり無礼なことなく行うのですか?

34
AwesomeSauce

最も簡単な方法は、理解できない点から質問し、彼らの意見を聞くことです。 「あなたのコードはうんざりだ」と言うのはよくありません、「えーと、これを見たのですが、何をしているのか、なぜそれがしているのか本当に理解できません。どう思いますか?」または同様-あなたはあなたの懸念が何であるかを言ってあなたにそれをあなたに説明するように頼むか、あなたが正しいかどうかだけに彼らに尋ねることができます。

このようにして、あなたはそれらをソリューションの一部にすることができ、通常は問題を認識して自分で修正します(またはあなたが彼らのためにそれを行うことを申し出ることができます)。

あなたがそのようなコードを自分で書いたと私は確信しています。誰かがそれを指摘して、あなたがd'oh瞬間を持っているまで、あなたはそれを見ることができません。そのようなコードは、巨大で目立つエラーとしてではなく、私たちが時々作成する別のわずかな手間として扱うだけで十分です。

83
gbjbaanb

すべてのコードの目的は、最終的には何らかの形で世界に影響を与えることですプログラムの外部。メモリセルやCPUレジスタの内容を気にする人はいません。彼らは、印刷されたページまたは画面に表示される情報のみを気にします。コードが何も入力/出力せず、プログラムの状態を変更しないので、最終的にI/Oが発生する可能性がある場合は、定義上不要です。

しかし、これをどのように見るのですか?最も簡単な方法は、単体テストを行うことです。 isが計算される唯一の値が関数の外に出ることは決してないため、このコードは、計算される実際の階乗値をチェックするテストを満たすことができません。コードがすべきことをコード化するテストケースを作成するだけで、そうでないことを示すのは簡単になります。 (確かに、これが通常、テスト駆動開発を推奨する主な理由ではありませんが、この目的にも非常に適しています。)

14
Kilian Foth

ここにいてください。コードが「何もしない」と言うと、次の関数のようなものを意味します

このタイプのソースコードの正しい用語はincompleteです。別のプログラマーに言うこともできます「ソースコードを確認したところ、不完全な関数が見つかりました。その意図を明確にできますか?」

不完全な作業は、それを常にプロダクション製品に取り入れます。これが起こるには多くの考えられる理由があります。

  • 開発者が誤ってこれらの変更をプッシュしました。
  • 開発者は、後で完了するまで、機能をmockする必要がありました。
  • 開発者は作業を完了することができませんでしたが、とにかくそれをプッシュしました。

そのようなコードに遭遇したとき、何かが足りないのではないかと心配するため、私は多くの場合、余分な時間を費やして何度かそれを繰り返します。私は高い道を行くか、バグを修正してそれで終わらせることができましたが、この減速が私と私のパフォーマンスに悪影響を与えることを心配しています。

あなたの自信と仕事の効率は、他の人が生み出した仕事とは何の関係もありません。ビジネスのプロセス、ソースコードの品質、品質保証、および管理スタイルは、お客様の管理範囲外です(それらを変更することが業務の一部でない限り)。それらのことを、自分自身のパフォーマンスと価値をどのように認識するかとは別にしてください。

だから、私は高い道を進み、チームが理解していると想定すべきですか、それともコードがあまり機能しないことを伝えるべきでしょうか?後者がより良いオプションである場合、どうやって私はそれを軽蔑したり無礼なことなく行うのですか?

ここで求めていることは、コンピュータプログラミングとは何の関係もありません。

https://workplace.stackexchange.com/ でこれを尋ねます

チームで効果的に作業する方法についての答えが得られるでしょう。

  • あなたの努力の100%をあなたの仕事に注ぎなさい。あなたが最善を尽くしたなら、誰もあなたを非難することができません。あなたができること以上のことを期待するのは、愚かな管理です。すばやく仕事をしようとすると、失敗するのが早くなります。
  • チームメンバーと建設的にコミュニケーションします。声を出して自分を表現します。
  • チームメンバーの意見に耳を傾けます。
  • 孤独な狼にならないでください。チームが問題を修正するのを助けます。
  • チームメンバーとオープンに共有します。あなたのアイデア、考え、懸念を共有してください。誰かが尋ねるまで待ってはいけません。共有する努力をしてください。
  • 助けを申し出る。不完全な作業を見つけた場合。それを終了することを申し出ます。
  • より柔軟に。問題について文句を言うのではなく。なぜこれらの問題が存在するのかをよく考え、それらを受け入れます。プロジェクトでストレスを感じているほとんどの人は、自分が変更できないものに対してそれをしています。
  • 常に他のチームメンバーに敬意を払い、協力的で正直であること。同じ結果が得られない可能性がありますが、これらの特性のvalueを学習します。
11
Reactgular

何も存在しないか、コードが表すシステムの範囲外で参照されている場合、それは役に立ちません。システム全体の周りに線を引き、頑固な開発者にそれが実際に交差した場所を指摘するように要求するだけです。

1
Erik Reppen

開発者にコードレビューセッションでコードを説明するよう依頼し、彼の思考プロセスはどうだったかを尋ねます。彼が余分な行動を認識しているかどうかを確認してください。そうでない場合は、具体的に質問してください。多分少し遠回りですが、対立的ではありません。

1
user1666620

この減速が私と私のパフォーマンスに悪影響を及ぼすことを心配しています。

見つけたコードの改善があなたに悪い影響を与えている場合、あなたが見つけた問題をどのように提起するかよりも、チームにはるかに大きな問題があります! OK、壊れていない場合はhaveで修正しませんが、純粋な冗長コードの場合は、削除して単純化することをお勧めします。時間の見積もりすべきは、コードを理解し、発見した問題を修正する実際の現実に基づいています。危機的状況にあり、それができない場合、答えは「頭を下げて最高のものを望みます」ですが、それはまれです。

冗長コードはあなたが見つけることができる最悪の問題ではありませんが、それは誰がそれを書いたか(または冗長になるように変更したか)の考えの誤りを示しています。そのため、アクセスするコードで発見した他の潜在的なリファクタリングと少なくとも同じくらい注意を払う必要があります。

私は高い道を進み、チームが理解していると仮定します

いいえ。あなたはチームの一員であり、理解していないので、誰もが理解しているわけではありません。誰もが知っているより高い謎があると思い込まないでください。より可能性が高いのは、誰もがそのようになりたいとは思わないであろうし、他の誰もがそれに気づいていないか、それを改善するために動いていないかのどちらかです。またはあなたは間違っています。後者の場合、あなたはあなたの間違いの説明から利益を得るでしょう、前者の場合、誰かがそれを扱うことから利益を得るでしょう。

コードがあまり機能しないことを伝える必要がありますか?

チームがコードの「所有権」についてどのように感じているかに応じて、正しいことは単にそれを修正し、(変更が意味をなさない場合)変更がレビューされたときにそれを話し合うことです。あるいは、変更を進める前にそれについて話し合う明らかな人物である、チーム内の誰かがいるかもしれません。作者か、特定の責任を持つ誰かです。あなたが誰かに話しかけたとき、それが所有者であろうとコードレビューアーであろうと、残っていることは何を言うかを決めることだけです。

腰からまっすぐ撮影するのが快適な場合:

「このコードは何もしません」

「あなたは結果を返すのを忘れました、私はそれを修正しますか?」

「このvoid関数には副作用がありません。何のためですか?」

当然これは失礼とみなされるかもしれません、それは本当に人との関係に依存します。より外交的になることができます:

「このコードは何をしますか?」

「結果はどこかに必要ですか、それともこの部分をスキップできますか?」

「これは間違っているように見えるので、すべてを理解したかわかりません」

「お手数をおかけして申し訳ありませんが、この数行のコードを理解することができませんでした。この関数では何も実行しないように思われるので、なぜだろうと思っていました。誤解している、または将来の方向性をサポートするためにそこにあるのではないかと思う。その場合、コメントを追加して何を説明するのに役立つか疑問に思っていた」.

当然のことながら、最後の例は、非常に礼儀正しく、単純な言い争いの間に細い線を引きます。そのようにしゃべる人もいれば、皮肉なGitのような人もいます。

個人的には、「これは何も返さないはずなの?」とよく行きます。 「いいえ」の答えを期待しています。私の現在の同僚はそうすることができるので、それは意図的にやや失礼/冗談ですが、見落とし以外には何も非難しません。そして、答えが理由で「はい」である場合、十分に公正です。私にとってもう1つの一般的なオプションは、「これは何かを返すはずだ」です。どちらも私に言っていただければ幸いです。

1
Steve Jessop

私は担当者が足りないので、コメントとしてこれを投稿したいと思いました。

私の世界では、コード化された要件を文書化された要件または派生した要件に直接追跡できない場合、2週間ごとまたは必要に応じて行われるチームレビューのためにフラグを立てます。

    // REVIEW: 05/19/2015
    // Can't find the need for this code. Perhaps it's been orphaned? 
    // Need to identify the requirement associated or remove it.
    public static bool WouldYouLikeToDance(this Person you, Person dancePartner)
    {
        // determine minimum acceptable attractiveness
        int minAcceptable = you.SelfWorthAndRespect - (you.CountDrinksConsumed() * 0.10);

        return (minAcceptable <= dancePartner.Attractiveness);           
    }

私は彼らに直接直面しないことが最善であると思います。匿名で懸念を特定し、彼らがあなたのために同じようにすることを期待するだけです。グループレビュー中に、有効なものを誤って識別していないことを確認するためのコントロールとしてチームを検討することができます。全体的な目標は、コードの品質と副作用として、各開発者とチーム全体のスキルセットを向上させることです。

1
Code.Combustion

このコードがコードレビュー中に表示された場合、問題はほとんどないようです。それが何をするのか明確ではないというフィードバックを提供し、単体テストを要求するだけです。

コードのレビュー中でない場合は、当面の問題を修正する方法だけでなく、プロセスの変更に関してより深い解決策を探すこともできます。

次のいずれかがこれを拾う可能性があります。

  • コンパイル時の適切な警告レベルと、コードに対するゼロ警告要件。
  • コードレビュープロセス
  • 十分な単体テストカバレッジ。
  • コメント基準

さて、あなたがこの問題を抱えているという純粋な事実は、おそらくあなたのチームメンバーの何人かはコードを読むのが得意ではないことを示唆しています。残念ながら、現実の世界では非常に一般的です。

上記のプラクティスは非常に強力なチーム(コメントについては議論の余地があります)でも役立ちます。

ただし、上記のプラクティスについては、弱いチームで特に役立つ便利な点があります。彼らはそれが個人的になることなくコードの品質を改善するのに役立つフレームワークを提供します。

0
Keith