タグ付けされた質問 「code-quality」

高品質のコードを書くためのベストプラクティスに関する質問。

8
Pythonicコードを効果的に書く方法を学ぶにはどうすればよいですか?
「pythonic」のグーグル検索を行うと、幅広い解釈が明らかになります。ウィキペディアのページは言います: Pythonコミュニティの一般的な新語法はpythonicです。これは、プログラムスタイルに関連した幅広い意味を持つことができます。コードがpythonicであると言うことは、Pythonのイディオムをうまく使用していること、自然である、または言語が流であることを示すことです。同様に、インターフェイスまたは言語機能についてpythonicであると言うことは、Pythonイディオムとうまく機能し、その使用が他の言語とうまく噛み合うと言うことです。 「unpythonic」という用語についても説明します。 対照的に、非Pythonコードの特徴は、PythonでC ++(またはLisp、Perl、Java)コードを記述しようとすることです。つまり、別の言語の形式の慣用的な翻訳ではなく、大まかな転写を提供します。pythonicityの概念は、読みやすさのPythonのミニマリスト哲学と密接に結びついており、「それを行うには複数の方法があります」アプローチを避けています。判読不能なコードまたは理解できないイディオムは、Pythonではありません。 「pythonic」という用語の意味は何ですか?実際にそれを効果的に適用する方法を学ぶにはどうすればよいですか?

13
ストーリーポイントを平均より4〜5倍増やしていますが、バグの発生率は半分です。グラフによれば、それはさらに2倍のバグだという。
そのため、トップレベルのプログラマーは、平均的なピアよりも1 桁以上優れたコードを生成できると一般に受け入れられています。 また、プログラマーにとって、コードで発生するエラーの割合は比較的一定であることも一般的に受け入れられています。 代わりに、コードの作成時およびコードの作成後に使用されるプロセスの影響を受ける傾向があります。(私が理解しているように)人間はかなり一定の割合で間違いを犯す傾向があります-優れたプログラマーはそれらの多くに気づくだけで、より迅速に修正します。 上記の両方の主張は、Steve McConnellによるCode Completeからのものであることに注意してください。したがって、異なる観点の問題ではありません。 だから私は最近、私のコードでこれを見始めました。私は、(チームが推定したストーリーポイントで測定して)同程度のコードの約4〜5倍のコードを、より高い品質(パフォーマンスメトリックとチェックイン後に行われた変更の数に基づく)で打ち出すことができます。しかし、私はまだ間違いを犯します。優れた単体テストと、コードが何をしているのかをよりよく理解し、コードレビューを行う際の問題に対するより良い目との間で、4〜5倍の数のバグを生成していません。 しかし、QAが発見したバグは、チームの他の開発者の約2倍です。ご想像のとおり、これはメトリック測定を行う技術者以外の人々にいくつかの問題を引き起こします(私のボスを読んでください) 私は、ピアの半分の割合でバグを生成している(そして2倍修正している)ことを指摘しようとしましたが、2倍のバグを生成しているというグラフがあると、それは大変な売りです。 それでは、生産性の向上がバグの増加につながるという事実にどう対処するのでしょうか?

10
初期段階でのプロトタイピングとクリーンコード
私は毎日の仕事になってしまう可能性のあるいくつかの個人的なプロジェクトに取り組みます。それは私に考えさせられました。 ただプロトタイプ-簡単に拡張できるように最適化とリファクタリングに膨大な時間を費やす可能性のある、動作する基本的なコードを書くだけです。 クリーンで最適化され、文書化されたコードを最初から記述します。しばらくしてから費用対効果が低下すると、削除されます。 更新: YAGNIとsunpechおよびM.Sameerの回答を組み合わせることは、私にとって完全に理にかなっています:)皆さん、助けてくれてありがとう。

10
「プレーンな古いデータ」クラスを使用する理由はありますか?
レガシーコードでは、データのラッパーにすぎないクラスが時々見られます。何かのようなもの: class Bottle { int height; int diameter; Cap capType; getters/setters, maybe a constructor } オブジェクト指向についての私の理解は、クラスはデータの構造であり、そのデータを操作する方法だということです。これは、このタイプのオブジェクトを除外するようです。私にとって、それらはstructsオブジェクト指向の目的に勝るものではありません。コードの匂いかもしれませんが、必ずしも悪いとは思いません。 そのようなオブジェクトが必要になる場合はありますか?これが頻繁に使用される場合、デザインが疑わしいですか?

4
git-flowおよびgithubを使用したコードレビュー
通常のgitとgithubを使用して、マスターブランチに取り組んでいる機能ブランチのプルリクエストを作成するだけで、コードレビューを行うことができます。git-flowでコードレビューを行うにはどうすればよいですか?「git flow feature finish`」のようなワークフローでは、コードレビューが実際に行われる場所と、git-flowまたはgitがそのレビューを容易にする方法について混乱しています。

15
クリエイティブコーディングの何がそんなに悪いのですか?[閉まっている]
ボブ・ロスが今夜「ハッピー・ツリー」をペイントするのを見ていましたが、最近、自分のコードについて何が私にストレスを与えているのかがわかりました。 こことStack Overflowの人々のコミュニティは、不完全さのあらゆる気まぐれを拒否しているようです。私の目標は、スキルを向上させることにより、立派な(したがって、保守可能で機能する)コードを書くことです。それでも、私は創造的にコーディングしています。 「創造的にコーディングする」ことの意味を説明しましょう。 プロジェクトの最初のステップは、多くの場合、座ってコードを打ち消すことです。より大きなものについては、あちこちで少し計画を立てていますが、ほとんどの場合は飛び込みます。 プロジェクトで他のピースを作成している他の人と一緒に作業している場合を除き、クラスを図に示していません。それでも、それは確かに私が最初にすることではありません。私は通常、大規模なプロジェクトに取り組んでおらず、ビジュアルが非常に便利だとは思いません。 私が書いた最初のコードは、何度も何度も書き直され、元のハックをテスト、簡素化、やり直し、再利用可能、論理的、効率的なものに変換します。 このプロセスの間、私はいつも掃除しています。未使用のコードを削除し、明らかでないものはコメントします。私は常にテストしています。 私のプロセスは、プロの開発者コミュニティで受け入れられるものの粒に反するようであり、その理由を理解したいと思います。 悪いコードに関する不満のほとんどは、誰かが元従業員の混乱に巻き込まれていることであり、修正するには多くの時間とお金がかかったことです。私が理解していること。最終結果が最初からすべてを計画することで得られるものに似ていることを考えると、私のプロセスが間違っていることは理解できません。(少なくとも、それは私が見つけたものです。) この問題に対する私の不安は最近非常にひどく、私が取り組んでいる特定の問題を解決するためのすべての方法についてすべてがわかるまでコーディングをやめました。言い換えれば、私はほとんどコーディングを完全にやめました。 問題についてのあなたの意見がどうであれ、私はあなたの意見に心から感謝します。 編集: 回答ありがとうございます。私はそれらのそれぞれから何かを学びました。あなたはすべて最も役に立ちました。

6
大きなファイルのリファクタリングを処理する最良の方法は何ですか?
現在、残念ながらソフトウェア品質ガイドラインが常に守られているわけではないファイルを含む、より大きなプロジェクトに取り組んでいます。これには、明らかに複数の異なる機能を含む大きなファイル(2000〜4000行を読む)が含まれます。 次に、これらの大きなファイルを複数の小さなファイルにリファクタリングします。問題は、彼らがとても大きいので、異なるブランチの複数の人々(私を含む)がこれらのファイルで作業していることです。ですから、これらのリファクタリングを他の人々の変更とマージすることが難しくなるので、私は実際に開発とリファクタリングから分岐することはできません。 もちろん、全員がマージしてファイルを開発し、ファイルを「フリーズ」し(つまり、誰もファイルを編集できないようにする)、リファクタリングしてから「フリーズ解除」する必要があります。しかし、リファクタリングが完了するまでこれらのファイルに対する作業を基本的にすべて停止する必要があるため、これもあまり良くありません。 だから、リファクタリングする方法がありますか、他の誰かに作業を停止することを要求しないでください(長い間)、または開発のために機能ブランチをマージして戻しますか?

13
「良いコード」を書くとはどういう意味ですか?[閉まっている]
で、この質問、私はあなたが良いコードを書くことから悪いライター妨げているかどうかを尋ねました。答えの多くは「良いコードの意味に依存します」で始まりました。 「良いコード」と「悪いコード」という用語は非常に主観的なもののようです。私は一つの見方をしているので、他人の見方とは非常に異なるかもしれません。 「良いコード」を書くとはどういう意味ですか?「良いコード」とは何ですか?

8
IFステートメントの反転
それで、私は数年前からプログラミングをしていて、最近ReSharperをもっと使い始めました。ReSharperが私に常に示唆していることの1つは、「 'if'ステートメントを逆にして入れ子を減らす」ことです。 このコードがあるとしましょう: foreach (someObject in someObjectList) { if(someObject != null) { someOtherObject = someObject.SomeProperty; } } そして、ReSharperは私がこれを行うことを提案します: foreach (someObject in someObjectList) { if(someObject == null) continue; someOtherObject = someObject.SomeProperty; } ReSharperは、ネストがどれだけ進んでいるかに関係なく、IFを反転させることを常に提案するようです。この問題は、少なくともいくつかの状況でネストするのが好きだということです。私にとっては、特定の場所で何が起こっているのかを読み、理解するのが簡単に思えます。これは常にそうではありませんが、私は時々より快適なネストを感じます。 私の質問は、個人的な好みや読みやすさ以外に、ネストを減らす理由はありますか?パフォーマンスの違いや、私が気付いていない他の何かがありますか?

6
クラスメンバーを優先するか、内部メソッド間で引数を渡すか
クラスのprivate部分内に、複数のprivateメソッドで使用される値があると仮定します。人々はこれをクラスのメンバー変数として定義することを好むか、それを各メソッドへの引数として渡すことを好みますか?そしてなぜですか? 一方で、クラスの状態(つまり、メンバー変数)を減らすことは一般に良いことであるという議論を見ることができましたが、クラスのメソッド全体で同じ値が繰り返し使用されている場合、それは理想的ですクラスの状態としての表現の候補。コードが他に何もないとしても見た目にきれいになるようにします。 編集: 提起されたコメント/質問のいくつかを明確にするために、私は定数について話しているのではなく、これは特定のケースに関連するものではなく、他の人に話している仮説にすぎません。 OOPの角度をしばらく無視すると、私が念頭に置いていた特定のユースケースは次のようになりました(擬似コードを簡潔にするために参照によるパスを想定しています) int x doSomething(x) doAnotherThing(x) doYetAnotherThing(x) doSomethingElse(x) つまり、複数の機能に共通する変数がいくつかあるということです-私が念頭に置いていた場合、それは小さな機能の連鎖によるものでした。OOPシステムでは、これらがすべてクラスのメソッドである場合(たとえば、大きなメソッドからメソッドを抽出することによるリファクタリングが原因)、その変数はそれらすべてに渡されるか、クラスメンバーになる可能性があります。

9
コードの「建設的な」批判はどの時点で役に立たなくなりますか?
私は最近、ジュニア開発者として始めました。チームで最も経験の浅い人の1人であると同時に、私は女性でもあります。男性が支配的な環境で働くことには、あらゆる種類の課題が伴います。私は自分の仕事に対して不当な教訓的な批判をしすぎているように感じるので、最近問題を抱えています。最近の出来事の例を挙げましょう。 チームリーダーは忙しくて、私が作ったいくつかのブランチをプッシュすることができなかったため、週末まで彼らに連絡しませんでした。私は自分のメールをチェックしましたが、実際には作業を行うつもりはありませんでした。変数名に基づいて2つのブランチが拒否され、エラーメッセージがわかりやすくなり、いくつかの値が構成ファイルに移動しました。 これに基づいてブランチを拒否することは有用ではないと思います。週末に多くの人が働いていましたが、私が働くとは言いませんでした。事実上、変更を行って再送信する時間がなかったため、一部の人はおそらくブロックされました。私たちは非常に時間に敏感なプロジェクトに取り組んでおり、クライアントにとって透過的なものに基づいてコードを完全に拒否することは役に立たないと思われます。私は間違っているかもしれませんが、時間があればパッチタイプのコミットでこの種のことを処理する必要があるようです。 今、私はいくつかの環境ではこれが標準であることがわかります。しかし、批判は平等に分配されているようには見えず、それが私の次の問題につながるものです。これらの問題のほとんどの原因は、私が誰か他の人が書いたコードベースにいて、最小限の侵入を試みているという事実によるものでした。ファイルの他の場所で使用されている変数名を模倣していました。私がこれを述べたとき、私は「他人を真似しないで、正しいことをしてください」と率直に言われました。これはおそらく私が言われたかもしれない最も有用なものです。すでにチェックインされているコードが受け入れられない場合、何が正しいか、何が間違っているかをどのように伝えるのですか?混乱の原因が基礎となるコードに由来するものであった場合、私はそうは思わない 私はこの状況で本当に選び抜かれ、イライラしていると感じています。期待される標準に従うことについてはずっと良くなったし、たとえば、以前は行方不明だったエラーチェックを追加するためにコードの一部をリファクタリングするとき、私はそうしなかったと言われただけでイライラするエラーを十分に冗長にします(これに基づいてブランチは拒否されました)。そもそも追加したことがない場合はどうなりますか?それがとても間違っていた場合、どのようにして最初にコードに入りましたか?だからこそ、私はあまりにもひたむきだと感じています。私は常にこの既存の問題のあるコードにぶつかって、模倣したりリファクタリングしたりしています。私がそれを模倣するとき、それは「間違っている」。そして、それをリファクタリングするなら、私は十分なことをしないことを恐れる(そして、私がずっと行くなら、バグを導入するなど)。繰り返しますが、これがこのような問題である場合、コードがコードベースにどのように侵入するかわかりませんが、 とにかく、どうすればこれに対処できますか?私は女性だとトップで言ったことを覚えておいてください、そして、これらの人は他の人のコードをレビューしているとき、通常は礼儀について心配する必要はないと確信しています、そしてそれは私に生産性を低下させています。私はそれについて上司に話したら、彼は私が環境などを扱うことができないと思うだろうと心配しています。

4
クラスメソッド定義を注文する最も人間に優しい方法は?
どのクラス定義でも、メソッド定義はさまざまな方法で並べられています:アルファベット順、最も一般的な使用法に基づいた時系列、可視性でアルファベット順にグループ化、ゲッターとセッターでグループ化されたアルファベット順など。新しいクラスの作成を開始すると、私はすべてを入力する傾向があり、クラス全体の記述が完了したら順序を変更します。そのメモについて、私は3つの質問を持っています: 順序は重要ですか? 「最高の」注文はありますか? 私はそうではないと思うので、異なる順序付け戦略の長所と短所は何ですか?

19
他の人が非常に複雑なソリューションを構築したとき、コードレビューで何と言いますか?[閉まっている]
先日、チームの誰かが書いたコードをレビューしました。ソリューションは完全には機能せず、デザインは複雑でした-不要な情報の保存、不要な機能の構築を意味し、基本的にコードには金メッキのような不要な複雑さがたくさんあり、存在しない問題を解決しようとしました。 この状況では、「なぜこのようにしたのですか?」 答えは、他の人がそのようにしたいと感じていることです。 次に、これらの機能のいずれかがプロジェクト仕様の一部であるかどうか、エンドユーザーが使用できるかどうか、または追加データがエンドユーザーに提示されるかどうかを尋ねます。 答えはいいえだ。 そこで、不必要な複雑さをすべて削除することをお勧めします。私が通常得る答えは、「それはすでに終わっています」です。 私の見解では、それは行われておらず、バグがあり、ユーザーが望むことを行わず、メンテナンスコストは、私が提案したより簡単な方法で行われた場合よりも高くなります。 同等のシナリオは次のとおりです。 同僚が10秒以内にResharperで自動的に実行できたコードを手作業でリファクタリングするのに8時間かかります。当然のことながら、手作業によるリファクタリングは疑わしい品質であり、十分にテストされていないため、信頼できません。 繰り返しになりますが、私は「既に完了しています」という応答を受け取ります。 この態度に対する適切な対応は何ですか?

9
コーディング時に解析によって麻痺を克服するにはどうすればよいですか?
新しいプロジェクトを始めるとき、私はしばしばすぐに実装の詳細について考え始めます。「DataBaseHandlerはどこに配置しますか。どのように使用する必要がありますか?それを使用するクラスはいくつかの抽象スーパークラスから拡張する必要があります..?インターフェイスを使用する必要がありますか?を含むクラスで使用する抽象化のレベルリクエストを送信してデータを解析する方法は?」 拡張性と再利用性のためにコーディングしたいので、私は長い間行き詰まってしまいます。しかし、完全に実装する方法について過去の考えを得るのはほとんど不可能だと感じています。 そして、「ネジを締めて、やるだけだ!」と言うと、コードが整理されていないため、抽象化のレベルが混在しているなどの理由で、レンガの壁にすばやくぶつかります。 新しいプロジェクトを立ち上げながら、拡張性の高い論理/モジュール構造をセットアップするためのテクニック/方法は何ですか? - - EDIT - - まあ、これはすでに答えを受け入れるのが難しいタイプの質問ですが、いくつかのコンセンサスがあるかどうかを確認して、より多くのフィードバックを取得したいです。TDDは本当にクールに聞こえますが、率直に言って、JUnitなどの使用方法をもっと理解することを意味してきました。同時に、TDDのファンは、TDDに関連する1つの正当な点が特定の問題は、TDDが実際に設計の問題に対処していないように見えることです。確かに、TDDは自分がやりたいことを定義するのに役立ち、徐々にその方法を進めることができますが、ユニットテストをすべて通過できるさまざまな全体的なデザインパターン/構造があります。それだけです:単一のUNITSをテストします。私は少し混乱していると思います...私は知らない。多分、私' ありがとう!

12
コードカバレッジは「十分」ですか?
ここで私の仕事でコードカバレッジのプッシュを開始し、考えさせられました。 コードカバレッジの収益が減少する時点に達するのはいつですか?良好なカバレッジと十分でないことの間のスイートスポットは何ですか?作成しているプロジェクトのタイプ(WPF、WCF、Mobile、ASP.NETなど)によって異なりますか(これらは私たちが書いているC#クラスです)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.