私は、存在しないと思われる問題を修正するコードを確認するように依頼された立場にあります。
私より年上であるフィクサーは彼の修正が必要であると主張しますが、それは私にとってC++の洗練にすぎないようです。導入プロセスの一部はコードレビューであり、小規模企業の2番目に高いエンジニアとして、変更をレビューすることが期待されています。
レビュー担当者は元のコーダーと同じくらいコードの変更に責任があると私は信じており、私はこの変更に対する責任を受け入れたくありません。このレビューを拒否するにはどうしますか?
変更なしで失敗し、変更で成功するテストケースを要求します。
彼がそれを作成できない場合は、それを正当化として使用します。
彼が作成できる場合は、テストが無効である理由を説明する必要があります。
レビュアーは客観的である必要があります。
確認する前に問題のコードについて意見を述べたことは明らかであり、あなたとフィクサーがポジションを賭けているようです。もしそうなら、あなたは客観的に現れるのが難しいでしょう、そしてさらに難しい時間being客観を持つでしょう。それはプロセスを助けません、そして、あなたがすることができる最良の、最も客観的なことはあなたが問題に近すぎるという理由で頭を下げることであるかもしれません。
チームアプローチを検討してください。
自分を削除できない場合は、他の複数のエンジニアに同時にコードをレビューしてもらうことができます。コードを拒否する必要があるか、拒否しないことに同意してもらえます。彼らがあなたに同意した場合、それはもはやあなたと修正者だけではなく、チームが修正を客観的に見て、それを受け入れないことを決定したというより強力な主張をすることができます。一方、修正を受け入れることを決定した場合、それもチームの決定になります。言うまでもなく、できる限りのオープンマインドで参加し、合理的な議論以外の方法で他のチームメンバーの意見に影響を与えてはいけません。重要:後で悪い結果が出た場合は、「まあ[〜#〜] i [〜#〜]と言ってチームをバスの下に投げず、常に悪いコードだと言っていましたが、私は他のチームメンバーを上回っています。」
拒否はコードレビュープロセスの自然な部分です。
コードレビュープロセスは、より多くの高齢者からのゴム印修正にはありません。コードの品質を保護および改善するためにあります。正しい理由、つまり修正によってコードが改善されないという理由で修正を拒否しても、何も問題はありません。コードを率直に検討した後も、修正によって実証可能な問題のリスクや重大性が軽減されないと感じた場合は、拒否する必要があります。それは個人的なものではなく、あなたの正直な意見です。フィクサーが同意しない場合は、それでも問題ありません。その時点で、経営者が理解することが問題になります。正直で、オープンで、プロフェッショナルであることを忘れないでください。
責任は両方向を切ります。
問題があるとは思わないので、この変更の責任を負いたくないとおっしゃっていました。ただし、あなたが間違っていてis問題がある場合、問題を回避したコードを拒否する責任を負うことに気付く必要があります。
メモを取る
レビュープロセスの記録されたログを保管しておくと、事実を正確に保つのに役立ちます。疑わしい問題や修正などを測定するために実行する可能性のあるテストのレビュー、説明、および結果を検討しながら、考えや懸念事項を書き留めます。問題がエスカレートした場合は、問題をサポートするために何をしたかを記録します。ポジション。問題が将来再び発生する場合(おそらく、修正プログラムが彼自身のビューにアタッチされている場合)、あなたはあなたの記憶を揺さぶるものがあります。
反論の可能性があることに対する拒絶と抗弁の理由を書き留めてください。次に、担当者と合理的に話し合い、必要に応じて管理者にエスカレーションします。
十分なドキュメント(コードリスト、テスト結果、およびobjective引数を含む)があれば、十分にカバーされます。
あなたはフィクサーでいくつかの悪意を引き起こしますので、問題がそれだけの価値があることを確認してください(つまり、非フィックスは害を引き起こしますか?)
また、定着液が所有者に何らかの関係がある場合は、この答えを忘れてください。
最近のLinkedInニュースでは、傲慢に見えるのではなく、職場での紛争解決と謙虚さについての記事がありました。悲しいことに、私は現在リンクを見つけることができませんが、一般的な要旨は、対立しない方法で質問を形成しようとすることでした。あなたが傲慢であることを私が暗示するので、これをとらないでください、それは記事が書かれた方法です。
とにかく、彼が彼の仮定が間違っていることを上級プログラマーに伝えることは、彼が防御的なアプローチをとり、彼の反応であなたを攻撃することにつながるだけです。ただし、理解の欠如の観点から、なぜ問題が存在すると彼が信じているのかという疑問を投げかけると、彼/彼女はその問題についてよりオープンに話すようになるでしょう。
したがって、「問題が存在しないので、これを確認する必要はありません」と言うのではなく、「これを適切に確認するには、問題を理解する必要があります。あなたからそれを説明してください。視点?"
例として、この記事では、大人が直面しているキューブを除いて、顔がすべて1色である立方体を大人が持ち上げた場合に子供に与えられたテストについて説明しました。大人が見ている顔の色を子供たちに尋ねたところ、5歳未満の子供は、大人が自分とは違う見方をしていることを理解できなかったため、ほとんどの場合、見た色を言います。
C/C++は未定義の動作でいっぱいになる場合があります。片手でそれが予期しない動作につながる可能性があるので、それは悪いです。一方、それは積極的な最適化を可能にし、通常C/C++を使用しているときは速度に興味があります。
壊れるテストケースを書くのは難しいかもしれません-それはもう存在しない奇妙なアーキテクチャまたはコンパイラを含むかもしれません。また、賢明なアーキテクチャで「問題を引き起こしてはならない」ように、seemになる場合もあります。
ただし、ある時点でプラットフォームを変更します(たとえば、モバイルに移行したいので、ARMに移植するか、速度を上げてGPUを使用したい)。この時点で、開始する可能性があります。 コンパイラを新しいバージョン に更新するのと同じくらい簡単です(そして、あなたはそれを/必要とするかもしれません)。
問題のあるコードは次のとおりです。
_int d[16];
int SATD (void)
{
int satd = 0, dd, k;
for (dd=d[k=0]; k<16; dd=d[++k]) {
satd += (dd < 0 ? -dd : dd);
}
return satd;
}
_
最後の反復中に_d[++k] => d[++15] => d[16]
_がアクセスされます。通常、次の要素は(Cメモリモデルではなくページングの観点から)正当なメモリであるため、些細なコンパイラでさえ奇妙な動作をする実行可能ファイルを生成しませんでした。テストケースを書く唯一の方法は、C(おそらくVM)とまったく同じメモリモデルのプラットフォームを見つけることでした。
ただし、gcc 4.8プレリリースでは、_d[++k]
_がすべてのループで実行されることがわかりました。したがって、_k < 16
_でなければ、アクセスは違法となり、コンパイラに供給されるプログラムの合法性は契約の一部となります。したがって、ループ条件は、仮定が与えられた場合は常に真なので、無限ループになります。これは奇妙に聞こえるかもしれませんが、完全に合法的な最適化でした-system("dd if=/dev/zero of=/dev/sda"); system("format c:")
を発行することもループの正しい置き換えになります。あなたが行動を示すことを選ぶことができるもっと微妙な方法があります。たとえば、 Transactional Memory についての講義中に、2つのスレッドが同じ値をインクリメントすると、プレゼンターが何度か間違った値を取得しようとしたことを覚えています。
ただし、一部の言語とは異なり、C/C++は標準化されているため、このような論争は客観的なソースを参照して行うことができます。
一般に、チームがC/C++で作成している場合、標準を用意しておくと便利です。チームのエキスパートでさえ、時々奇妙なことを見つけることができます。
これは、この特定のレビューよりも、チームポリシーの問題のように聞こえます。私が9人のチームで大規模なソフトウェアショップで働いていたとき、レビュアーのフラットアウトはコードに対する拒否権を持っていて、これは私たち全員が尊重した標準でした。私たちは才能があり、十分に精通していました-viz。 「成熟」しているが、「熟練した」というより「子供っぽくない」という意味で-チームリーダーは、慎重な期間に議論に移ることなく、常に合意に達することができると合理的に期待できる。
単にあなたの投稿でのあなたの言語に基づいて、私はあなたに、あなたがこの議論に委ねられるような方法でこの状況に近づこうとしているように聞こえると警告するかもしれません。多分それは「知的オナニー」かもしれませんが、おそらく彼または彼女がそれをした理由があるでしょう、そしてあなたへの負担はその問題を解決するより簡単な方法を考え出すことでしょう-そしてそのような方法が存在しないなら、コメントで文書化する理由オナニーコードは実際には必要でした。
提出者に、彼のコードが問題を修正したことの証明を示します。彼がテストして証拠を示すことができる場合、あなたは間違っている人であり、あなたの不満をやめて対処しなければなりません。彼が問題があるという主張を裏付ける証拠を提示できず、彼のパッチが問題を修正したという証拠を提示できない場合、私は彼をドローリングボードに送り返します。
もちろん、これには敏感な内部の政治性があるかもしれません。しかし、これは私が(おいしい)行く方法です。