web-dev-qa-db-ja.com

理解できないコードを確認するにはどうすればよいですか?

私は会社の発展を改善する役割を与えられました。私が最初に始めたかったのは、これまでここで行われたことがないコードレビューです。

私たちの会社には3人のプログラマーがいます。私はWebプログラマーです。私の既知の言語は主にPHP、ActionScript、JavaScriptです。他の2人の開発者はVB.netで内部アプリケーションを作成しています

私たちはコードレビューを数週間行っています。 VBコードを理解するのは難しいと思います。そのため、彼らが何をしているのかを言うとき、ほとんどの場合、私は自分の言葉をその言葉で理解しなければなりません。

見た目がおかしい場合は、自分の意見を説明し、私が知っている言語の1つで対処する方法を説明します。

時々私の提案は歓迎されますが、「これはthis言語でそれを行う最良の方法です」または「それはthis言語には適用されません」などのことを何度も言われます"またはその性質の同様のもの。

これは本当かもしれませんが、言語を知らなければ、これらの主張を確認または反論する方法がわかりません。

可能な解決策の1つは、より良いコードレビューを実行できるようにvbを学ぶことです。私はvbを学ぶことに本当に興味がありません(特に私が自分のプロジェクトのために学習しようとしている他のテクノロジーのリストがあるので)、これを最後の手段として保持したいと思いますが、それはオプションです。

私が思いついたもう1つのアイデアは、どちらもC#に関心があり、私もそうだということです。それらは、.netと私に関連しているので、それらは私が知っている言語に類似しているため、それらに関連しています。しかし、それは私たち全員にとって新しいことです。ペットのC#.netプロジェクトで共同作業し、そこから他のコードをレビューする私たち全員の利点について考えました。

また、コンサルタントを雇ってコードレビューを依頼する可能性もあると思います。

この状況で私は何を勧めますか?.

25
JD Isaacks

他のことを学びたいというあなたの個人的な欲求は、あなたが今あなたの仕事のために実際に何が必要かを学ぶために後退するべきです。 VB.netを学ぶ。たくさんの質問をすることで、その言語がわかっているときに理解できないレビューコードを効果的にコード化できます(通常、これは、言語を知っていて、その動作を理解できない場合、コードが適切に記述されていないことを示しています。なぜ)。しかし、コードを理解していなくても、最善の方法は、コードを説明してもらい、説明の過程でバグが表示されることを期待することです。それだけでレビューで自分のコードにバグを見つけたわけではありませんが、コードレビューの最も効果的な方法ではありません。コードレビューは今やあなたの仕事の一部です、それを扱い、効果的にそれを行うために学ぶ必要があることを学びます。

あなたが学んでいる間、彼らがこの言語でそれを行う方法とはうまくいっていないと彼らが言うとき、彼らにそれが使用するのに良いテクニックであると言っている情報源を見せさせます。コードレビューで正当化するかどうかは、その逆ではありません。また、これらのリンクが表示されるようになると、言語がよくなります。

22
HLGEM

実際、私は上記のすべてに同意しません。 JS/PHP/ActiopnScriptを使用すると、プログラミング言語の内容とその機能について基本的に理解できます。実際、VBとJSの間には多くの類似点があると私は主張します。しかし、それは私のポイントではありません。あなたが言語に非常に精通している場合でも、何かを見落としがちです。他の誰かの思考プロセスを追おうとするので、レビューがすべきことは、プログラマが彼が何をしたのか、そしてその理由を説明する機会をプログラマに提供することです。

友人はかつてこれを「管理人理論」と説明しました:誰か、誰でも、管理人でさえ詳細を説明することにより、プログラマーはコードの弱点を自分自身に公開します。これはもちろん、レビューの最終目標です処理する。ただし、コードを完全かつオープンに説明する必要があります(開発者が防御的である場合、レビューは機能しません)。

13
fishywiki

ショートバージョン

  1. コードレビューは、レビュー対象者andの両方がレビュー担当者が学ぶチャンスであることを忘れないでください。
  2. 質問としてのフィードバックのフレーズ。
  3. 知識の欠如がフィードバックの提供を妨げないようにしてください(#2を実行している限り)。
  4. 「好みのレビュー」を避けるか、少なくとも自分の好みであり、必ずしも同意する必要がないことを明確にしてください。
  5. 「アームチェアコードレビューア」ではなく、パッチの提出を試みてください。

長いバージョン

まず第一に、コードのレビューは、レビュー対象者が学ぶ機会ではないことを覚えておいてください。また、レビュー担当者が学ぶ機会でもあります。実際、新しいプログラマーがコードのレビューを始めて、コードの感触を得られるようにする組織がいくつかあります。

これを念頭に置いて、私が常に一般的に有用であると思っていたコードレビューのアドバイスが1つありますが、特にあなたの立場に関連しています。意見を述べるのではなく、質問の形式でフィードバックしてください。言い換えると、「このコードはうんざりです!」と言う代わりに、「なぜこのようにコードを記述する代わりに、このようにコードを記述したのか...」と言うことができます。

私があなたに与えるもう一つのアドバイスは、あなたの知識の欠如があなたを後退させないようにすることです。間違っていると思われる何かがあり、レビュー対象者から手で波打つような回答を受け取った場合は、控えないでください(少なくとも知識が不足しているためではありません)。 1つの言語で優れたコードを作成するものと、他の言語で優れたコードを作成するものとの違いはほとんどありません。はい、特定の言語には、優れたコードを作成するのに役立つさまざまなイディオムがあります。しかし、それらのイディオムはそれ自体で終わるのではなくtoolsであることを理解することが重要です。

次に、「選好レビュー」を行わないようにします。これは私(そして他の多くの人々)が非常に意識的に努力しなければならないことです。言い換えれば、「あなたはxをやりましたが、私はy "の方が好ましい」というレビューを避けるようにしてください。さて、好みを述べることには何の問題もありませんが、あなたはそれらをそのように明確にラベル付けし、相手が自由に意見を異にすることができることを書き留めるべきです。言語ごとに異なるほとんどのものがこのカテゴリに分類されるため、これは重要です。

最後に、分散バージョン管理システムを使用していますか?役立つかもしれない1つのことは、コードの問題点を指摘するだけでなく、コードを記述した方法でコードを書き直してテストし、パッチを送信することです。これは、単に「アームチェアコードレビューア」ではなく、コードの改善に本当に興味があることを示し、言語をよりよく学ぶ機会を与えてくれます。加えて、「これを行うべきだと思います」に同意する方が、「ここに私がそれを実行する方法を示し、同意する場合はここにパッチを置く」よりも、通常、反対する方が簡単です。必ずしも必要 DVCSである必要はないと思いますが、確かに役立ちます。

8
Jason Baker

問題に焦点を当てておらず、不十分な解決策を考え出しました。開発を改善するタスクが与えられ、解決策はコードレビューの担当者(自分)を置くことです言語を理解していません。誰があなたのコードをレビューしていますか?あなたが言語を学ぶまで、なぜ彼らはお互いをレビューできないのですか?

より即座に改善するために選択できる他の問題領域がなければなりません。このように、彼らはあなたに煙を吹くだけで、何も改善されません。

新しい開発を誰も理解していない言語(C#)に向けるのは、特に皆さんが悪い習慣を持っている場合は、返済に長い時間がかかります。

設計に焦点を当てます(これは言及されています)。現在のコードを維持するのが難しい場合は、VBのリファクタリングツールを調べてください。基本的なプラクティスの多くは同じです。

7
JeffO

本当にわからないものを「校正読み取り」することはできますが、十分にreviewすることはできません。私はCの能力が非常に高く、C++をよく知っていますが、C#で何かを検討することを夢見ていません。

多くのテストを通じてコードを実行し、何が問題であるかを説明することに特化している企業もあるので、コンサルタントを導入する必要はありません。

それでも、結果を解釈するのは言語を知っている個々の開発者次第です。たとえば、コードレビュー担当者がprintf()の戻り値を使用しないと私に指示した場合、私はそれらを不思議に見て、彼らの飲酒を質問し、「それでは、コンソールに何も出力されない場合、どうすればよいですか。参考になりますか?」

あなたが考慮したいと思うかもしれないことは、他の誰かが彼らのドメインで効果的である間、あなたがあなたのドメインで効果的であることができるように、部門とチームリードを設定することについてあなたの上司と話すことです。

それでも、監査のためにサードパーティを使用できるかもしれません。 合法的な懸念に注意を向けるほとんどのプログラマーは、たとえ私が(printf()の例で私がするような)偽物を片付けたとしてもです。

5
Tim Post

あなたが理解していない何かについてのガイダンスを提供することは、あなたがよく知っているように、盲人を導く盲人に似ています。

1つのアプローチは、コードベースの静的分析の前に対処する FxCop および StyleCop などのlintツールを使用することです。これは、ツールから生成されるレポートを議論するための開始点を提供します。

別のアプローチは、コードレビューをデザインレビューに変えることです。デザインレビューでは、コードが作成されるよりもずっと前に問題が明らかになることはほとんどありません。プログラマーがデザインを持っている場合、彼らは彼らから作業することができ、一般的に彼らのアプローチにおいてはるかに効率的であり、これによりバグが減少します。デザインが存在しない場合、そのアプローチはアドホックになり、コードはバグ数の増加に悩まされます。コードレビューで問題が浮上する前に、それぞれに実装する具体的なデザインがあることを確認して、問題をデザインレビューでキャッチします。ここでUMLはあなたの友達であり、 mlet などのツールは高速で迅速に使用できます。

4
Aaron McIver

悪いニュースは、コードレビューに効果的に参加するには、VBを学ぶ必要があるということです。 VBはある種のプロジェクトで使用することも役立ちます(必ずしもプロダクション用ではありません)。

良い知らせは、これを行っても、C#に移行しても、学習した内容の一部が引き続き役立つことです。

4
Larry Coleman

査読を行うときは常に守るべきだと思うことは次のとおりです。

「私はこのコードを維持する次の人です!」

レビューへの準備の一環としてそうすることができるようにそれを十分に理解する必要があり、あなたの仕事は、それを維持するためにコードを十分に理解することが必要以上に面倒になった欠陥を元のプログラマーに認識させることです。

VBでプログラミングできない場合は、コードを保守できず、査読者になる資格がありません。

3
user1249

適切なコードレビューは、言語を理解する必要があるもの-言語、APIとライブラリの適切な使用、スタイル、変数名など-およびコードが問題をどのように解決するか-良いコメント、適切なアーキテクチャ、関連する設計についてですパターン、すべてのエラーケースなどを考慮します。コードレビューを初めて開始するときは、前者に集中する傾向があります。彼らは見やすく、選びやすいです。 (例:変数名が気に入らない。XXXXスタイルの名前を使用する必要があります。)

コードが問題をどれだけうまく解決するかに重点が置かれている場合、コードレビューはより価値があります。現在、最初の領域ではそれほど多くの価値を提供できないため、問題の解決方法ではなく、問題の解決策について質問し、アドバイスを提供することに集中してください。

もちろん、両者の間には重複があります。 VB.NETを知っていると、たとえば、特定の状況で特定のデザインパターンが適切ではない理由に関するアドバイスを提供できます。

何よりも、この段階では謙虚になってください。変更プロセスは難しいです。 VB.NETの第一人者であったとしても、変更は容易ではないでしょう。コードレビューを使用していない人は、最初はそれを好きではありません。他の人にあなたのコードを見てもらうのは難しい経験です。価値を確認するには時間がかかります。賛同を得るための素晴らしいプロセスですが、時間がかかります。

1
Wayne Johnston

理解できないコードをレビューするべきではありません。それは、開発者が行った奇妙に見えるすべてのことを説明しなければならない開発者を困らせるだけです。

コーディングガイドラインを選択/定義し、これらのガイドラインに照らしてコードを確認する方法。ガイドラインに準拠していないものがある場合は、開発者に説明を求めることができます。

私は既存のガイドラインを選択することから始めます(私はVB.netコーディング標準を知りませんが、グーグルは私にくれました:

stylecop like tools for VB .net を使用します

NDepend でソースを分析します(循環の複雑さ、長さ、深さなどに関するルールがあります)

選択した標準にコードが準拠していると言える場合でも、機能が正しいことや、適切なOOP原則を使用しているコードについては何も説明されていません。しかし、少なくとも何か。

1
KeesDijk

コードを直接見るのではなく、テストに重点を置くようにシフトできますか?コードレビューを放棄するつもりはありませんが、最初は、これらの内部アプリに、何が起こっているのかをデコードするのに役立つ十分なテストを行うほうが理にかなっているかもしれません。ここでの考え方は、テストによって機能の一部に少し慣れるのにも役立つということです。私はこれを別の道と考えています。ここでの考え方は、レビューは後で返され、概要/アップフロントセッションを行ってから少し休憩する価値があるため、いくつかの部分で行うことができるということです。休憩は翌日か2日までなので、質問に戻ってディスカッションを行う前に、コードなどを考えて一晩中眠りたい人のために十分な時間があります。これが常に現実的であるとは限らないのであれば、何が起こるかを試してみる価値があるかもしれません。

もちろん、すでにテストを行っている場合、残念ながらそれほど意味がありません。もう1つの考えは、VB.Netでこれが特定の方法で行われていると彼らが主張している場所の例を示すことです。これは、小さなコード標準から一部に変化することを想像できるので、この質問をより明確にするのに役立つ可能性があるためです。 VB.Netがある意味でどのように構築されたかの心臓部。

0
JB King

VBの基本を学んでも、言語のすべての機能を知らないままコードレビューを実行しても、その言語での安全でない機能の使用を検出することはできません。

Python 2のinput()関数が実際に入力を評価してからそれを返す前に、文字列以外の入力タイプを簡単に解析できるようにすることを知らなかったとします。次に、コードLinuxシステムで__import__('os').execl('/bin/sh', '/bin/sh')のようなものを入力してPythonプロセスをシェルに変換することを可能にする)任意のコード実行に対して脆弱です。代わりに、raw_input()は未処理の入力データを取得するために使用されます。

言語のすべての機能を認識せずにコードレビューを実行しようとすると、言語で特定の手順を実行するためのより良い方法を実現できなくなるだけではありません。また、有害なセキュリティ欠陥につながる可能性があります。

0
Arcanum