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

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

4
読み取りループを終了する方法はどれですか?
読むアイテムの数が不明なリーダーを繰り返し処理する必要があり、そのための唯一の方法は、最後まで読み続けることです。 これは多くの場合、無限ループが必要な場所です。 ブロック内のどこかに or ステートメントtrueがなければならないことを示すalways があります。breakreturn int offset = 0; while(true) { Record r = Read(offset); if(r == null) { break; } // do work offset++; } あり、二重ループ方式の読み取りが。 Record r = Read(0); for(int offset = 0; r != null; offset++) { r = Read(offset); if(r != null) { // do …

2
インラインコードコメントの最適なアプローチは何ですか?
20年前のレガシーコードベースにリファクタリングを行っており、同僚とコードのコメント形式(plsql、java)について議論しています。 コメントにはデフォルトの形式はありませんが、ほとんどの場合、人々はコメントで次のようなことをします。 // date (year, year-month, yyyy-mm-dd, dd/mm/yyyy), (author id, author name, author nickname) and comment 私が望む将来および過去のコメントの提案された形式は次のとおりです。 // {yyyy-mm-dd}, unique_author_company_id, comment 私の同僚は、コメントだけが必要であり、過去および将来のすべてのコメントをこの形式に再フォーマットする必要があると言います。 // comment 私の議論: メンテナンス上の理由から、いつ、誰が変更を行ったかを知ることが重要です(この情報はSCMにあります)。 コードは生きており、そのために歴史があります。 変更日付がないと、SCMツールを開いて長いオブジェクト履歴を検索しないと、変更がいつ導入されたかを知ることができないためです。 著者は非常に重要であるため、著者の変更は著者の変更よりも信頼できる 敏ility性の理由、SCMツールを開いてナビゲートする必要はありません 人々は、最近作成または変更されたものよりも、誰かが15年前にしたことを変更することを恐れます。 等 私の同僚の議論: 歴史はSCMにあります 開発者は、コード内のコードの履歴を直接認識してはなりません。 パッケージの長さは15,000行になり、構造化されていないコメントはこれらのパッケージを理解しにくくします 最善のアプローチは何だと思いますか?または、この問題を解決するためのより良いアプローチがありますか?

3
コードでシンプルさを定義および測定するにはどうすればよいですか?
読みやすさに関するシンプルさに関する以前の質問には、コードのシンプルさの定義と理解が間違っている可能性が非常に高いことがわかりました。 コードでシンプルさを定義するにはどうすればよいですか?コードのシンプルさを測定するために、どのソフトウェア測定およびメトリックが利用可能ですか?

11
コードの匂いがするときはどうすればよいですか?
私は初心者プログラマーであり、自分のプロジェクトに取り組んでいるときは、自分のコードの設計が最善ではないという感覚を常に感じます。この感覚は嫌いです。物事を調べるのに時間を費やすことになりますが、その後、選択するデザインパターンや抽象クラスまたはインターフェイスを使用するタイミングなど、多くの詳細に簡単に圧倒されます。一度にすべてのことを少し学習しようとするのですか?

4
開発マネージャーは、「目標の傾向」をどのように処理する必要がありますか?
最初に用語を作成します: コード目標の調整:午前中にコードをチェックアウトし、他の開発者が前日にファイルごとに行ったすべての変更(特に最初に開発したコードファイル)を静かにレビューし、フォーマット、ロジック、変数名の変更、リファクタリングを修正します長いメソッドなど。その後、VCSに変更をコミットします。 このプラクティスには、私が特定したいくつかの長所と短所がある傾向があります。 Pro:コードの品質/可読性/一貫性が維持されることが多い Pro:他の開発者が元のコードにあまり慣れていないため、いくつかのバグが修正されています。 Con:多くの場合、目標を設定する開発者の時間の無駄です。 Con:前日、バグのないコードを書いたと考えていた開発者が、髪を引っ張る怒りを引き起こすバグをときどき紹介します。 コン:他の開発者は、過度つべこべで悪化し、目標入札のコードに貢献嫌いし始めます。 免責事項:公平を期すために、私は実際には開発マネージャーではなく、実際に「目標管理」を行っている開発者です。 私の防御では、これを正当な理由で行っていると思います(非常に大きなコードベースを油を塗ったマシンに保つため)。また、マネージャーがこの問題に対処する必要があることも間違いなく心配しています。 あなたがマネージャーだったら、この問題にどのように対処しますか? 更新:これがあまりにもローカライズされているという意味ではありませんが、一部の人は質問しているので、おそらくいくつかの背景が明らかになるでしょう。私は3年前に巨大なプロジェクト(200K LoC)を割り当てられましたが、最近(1年前)にプロジェクトに追加された開発者が追加されました。通常、製品の全体的な安定性について回答する必要があります。コードベースのコアアーキテクチャ部分に驚くほど変更が加えられると、特に緊張します。この習慣は、最初は他の開発者の貢献について楽観的だったために発生しましたが、数週間後までは発見されない深刻な問題を引き起こす過大なミスを引き起こしました。しばしばこれらの

3
リフレクションを通じてプライベートメソッドが呼び出される状況に対処する必要がありますか?
ライブラリを作成するとき、同じクラスの他のメソッドではなく、リフレクションを通じて別のライブラリによって呼び出されたときに、プライベートメソッドが期待どおりに動作することを確認する必要がありますか? たとえば、プライベートメソッドが以下をprivate DoSomething(int number)期待している場合: number は、ゼロ以外の正の整数であり、次のとおりです。 プライベート変数string abcはnullではなく、空の文字列でもありません。 そして、完全に、これらの2つの条件が一致しない場合、い失敗します。クラスのすべてのメソッドが常に空でない値を割り当てて、をabc呼び出す前にこれらの失敗を処理する必要がありDoSomething、これに正の非ゼロ整数を渡します方法? 言い換えると、リフレクションによる安全でない呼び出しから保護されていないコードは低品質コードと見なすことができますか、それともリフレクションを使用して呼び出しが何も中断しないことを保証する呼び出し元に属しますか? 注:私の質問は、ライブラリの標準セットのみを対象としています。これは、高度に安全でなければならないコード(つまり、予期しない動作やクラッシュをさせるためにリフレクションを使用することに興味がある場合)をカバーしません。 ¹他の開発者がこのメソッドを壊さないようにするための十分な単体テストがあるため、クラスが正しく文書化されているため

11
コード生成はコード品質を向上させますか?
コード生成を主張して、コード品質を向上させる方法の例を探しています。コード生成の意味を明確にするために、私のプロジェクトについてのみ説明します。 XMLファイルを使用してデータベーススキーマ内のエンティティの関係を記述するため、エンティティの追加、削除、変更に使用できるORMフレームワークとHTMLフォームの生成に役立ちます。 私の考えでは、人的エラーが減るため、コードの品質が向上します。何かが正しく実装されていない場合、モデル内で破損します。これは、より多くの生成コードが破損するため、エラーがより早く表示される可能性があるためです。 コード品質の定義を求められたので、これを明確にしましょう。つまり、ソフトウェア品質です。 ソフトウェア品質:相互に影響するのは、1つの属性ではなく、効率、変更可能性、読みやすさ、正確さ、堅牢性、理解可能性、使いやすさ、移植性などの多くです。

5
高い基準は必然的にフラストレーションをもたらしますか?
私は自分自身をプログラミング言語愛好家だと考えています。悪いコード、特に自分のコードを見つけると、理解しにくく、変更しにくく、テストするのが難しくなります。 私の同僚はよく知りません、または気にしません。自分でコードの品質を上げることができないことに不満を感じています。 コードの品質と保守性が自分の基準に達していないときに不満を感じるのは普通ですか?もしそうなら、どのように対処しますか?

8
ソフトウェアエンジニアが一定期間品質保証エンジニアとして働かなければならないのは良い考えだと思いますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 そうだと思います。どうして? 私は、QAエンジニアよりも優れていると信じている多くのソフトウェアエンジニアに出会いました。しばらくQAエンジニアの仕事をし、それが独自で価値のあるスキルセットであることに気付くと、この信念を癒すのに役立つと思います。 ソフトウェアエンジニアが自分のプログラムをテストする能力が高ければ高いほど、ソフトウェア開発ライフサイクルの残りの部分でコードを作成する際に発生する時間のコストが少なくなります。 ソフトウェアエンジニアがプログラムがどのように壊れるかを考える時間を長くすればするほど、これらのケースを開発中に考慮する頻度が高くなり、最終製品のバグが減少します。 ソフトウェアエンジニアの「完全な」定義は常に興味深いものです。QAエンジニアとして時間を費やしている場合、この定義はソフトウェアの設計者により密接に一致する可能性があります。 誰かが雇われているポジションではないポジションで働くことは間違いなくその開発者を失うためのレシピであると認識しているので、私は小さな時間枠を念頭に置いて上記の提案をします。 皆さんはどう思いますか?

9
コピーアンドペーストされたテストコード:これはどれほど悪いですか?
私の現在の仕事は、主に私たちが取り組んでいるさまざまなアプリケーションのGUIテストコードを書くことです。ただし、テスト内で多くのコードをコピーして貼り付ける傾向があることがわかりました。この理由は、テストしている領域は、繰り返しが必要なほど似ている傾向があるが、コードをメソッドまたはオブジェクトにカプセル化するほど似ていない傾向があるためです。クラスやメソッドをより広範囲に使用しようとすると、テストの保守が面倒になり、最初から書くのが完全に難しくなることがあります。 代わりに、通常、あるセクションからテストコードの大きな部分をコピーして別のセクションに貼り付け、必要な小さな変更を加えます。オブジェクト指向の原則や関数を使用するなど、構造化されたコーディング方法は使用しません。 テストコードを書くとき、他のコーダーはこのように感じますか?DRYとYAGNIの原則に従うことは明らかですが、テストコード(とにかくGUIテスト用の自動化されたテストコード)を使用すると、これらの原則に従うことが難しくなることがわかります。または、より多くのコーディングの練習とより良い全体的なシステムが必要ですか? 編集:私が使用しているツールはSilkTestで、4Testと呼ばれる独自の言語です。同様に、これらのテストは主にWindowsデスクトップアプリケーション用ですが、このセットアップを使用してWebアプリもテストしました。

6
印刷の使用法/ヘルプ(--help)のベストプラクティスと考えられるものは何ですか?
UNIXのCLI用のツールを作成する場合、プログラムにヘルプや使用法を出力するにはどうすればよいですか? 私は通常を使用しますがfprintf(stderr, "help text here");、それにはいくつかの問題があります。 まず、を使用すべきかどうかはわかりませんstderr。大丈夫ですか、それとも使用すべきstdoutですか? ご想像のとおり、ヘルプテキストは非常に長く、ツールのオプションの数によって異なります。今、私は通常、"strings like that\n"2番目のパラメータにいくつかを入れます。ただし、これにより、ソースコードが50行以上のヘルプテキストで埋められます。簡単に管理できるものではありません。代わりに何をすべきですか? ツールがCまたはCに似た言語で記述されていない場合、可能であればhere-docsを使用する傾向があります(最も顕著なのはPerlです)。私はCでそれを使用できませんが、私が使用できるようなものがありますか? 私はそれを入れて検討していたheaderfile.hの内側には#define HELP "help text here"、私は野生の中でそれを見たことがない、私は実際にそれを使用する必要があるかどうかわかりません。 理想的には、テキストを外部ファイルに入れて含めることができます。#includeただし、そのために使用するのは間違っているようです。どうすればいいですか? アイデアは、ヘルプテキストを用意して、簡単に管理できるようにすることです。ソースコード内に配置することは、あまり便利ではありません。

5
bool / intを返し、実際のオブジェクトを出力パラメーターとして持つメソッドがあるのはなぜですか?
私の会社のコードベース(.NET 3.5アプリケーション)のいたるところに次のコードパターンがあります。 bool Foo(int barID, out Baz bazObject) { try { // do stuff bazObject = someResponseObject; return true; } catch (Exception ex) { // log error return false; } } // calling code BazObject baz = new BazObject(); fooObject.Foo(barID, out baz); if (baz != null) { // do stuff …

4
論理的に手続き型のソフトウェアをオブジェクト指向言語で記述する最もクリーンな方法
私は電気技師で、一体何をしているのかわかりません。私のコードの将来のメンテナーを保存してください。 最近、機能が論理的に「手続き型」である(C#の)いくつかの小さなプログラムに取り組んでいます。たとえば、その1つは、さまざまなデータベースから情報を収集し、その情報を使用して一種の要約ページを生成し、印刷してから終了するプログラムです。 これらすべてに必要なロジックは約2000行です。以前の開発者が行っていたように、私はそれらすべてを1つにmain()詰め込んで#regionsで「クリーンアップ」したくありません(シャダー)。 ここに私がすでに満足していないいくつかの試みがあります: DatabaseInfoGetter、SummaryPageGenerator、PrintUtilityなど、機能の粗いビットごとに静的ユーティリティを作成します。メイン関数を次のようにします。 int main() { var thisThing = DatabaseInfoGetter.GetThis(); var thatThing = DatabaseInfoGetter.GetThat(); var summary = SummaryPageGenerator.GeneratePage(thisThing, thatThing); PrintUtility.Print(summary); } 1つのプログラムでは、インターフェイスも使用しました int main() { /* pardon the psuedocode */ List<Function> toDoList = new List<Function>(); toDoList.Add(new DatabaseInfoGetter(serverUrl)); toDoList.Add(new SummaryPageGenerator()); toDoList.Add(new PrintUtility()); foreach (Function f in toDoList) f.Do(); } …

6
スクラムと安定した開発は矛盾を作りますか?
私は5チーム、合計約40人の開発者からなる開発グループの一員です。私たちは3週間のスプリントでスクラム方法論に従っています。継続的な統合セットアップ(Jenkins)があり、ビルドパイプラインには数時間かかります(広範な自動テストのため)。基本的に、開発プロセスはうまく機能します。 ただし、新しいスプリントを開始してから数日後、ビルドが不安定になり、スプリント終了の「コミットが停止する」まで揺れたままになることがあります。これの悪影響は、パイプラインのはるか下のビルドステップ、特にUI / Webtestsが数日間実行されないことです(「グリーン」ビルドでのみトリガーされるため)。その結果、新しく導入されたバグは、スプリントの非常に遅い段階でのみ検出されることがよくあります。 各コミットは、テストの基本セットに対して検証されます。確認されると、コードレビュー後に変更がマスターにプッシュされます(Gerrit) 基本的な単体テストは30分ごとに実行され、期間は10分未満です 統合テストは2時間ごと、1時間ごとに実行されます UI / Webtestsは、成功した統合テストで数時間実行されます スプリント中のビルドの安定性の責任者(スプリントごとに責任が渡される)によっては、ビルドを安定させるための中間的なアドホックな「コミット停止」が存在する場合があります。 だから、私たちが欲しい: 開発チームは、スプリント中に変更を開発してコミットします 後続のビルド結果にはほとんど意味がないため、ビルドステップが失敗した場合に放棄するビルドプロセス 開発者にタイムリーに質の高いフィードバックを提供するビルドプロセス (2)を考えると、ポイント(1)と(3)は互いに矛盾しているように見えます。誰もこれに対処する良い方法を持っていますか? (現在、ポイント(2)を緩めており、失敗したビルドステップでもビルドの継続を許可しています。それが品質にどのように影響するかについて、まだフィードバックがありません。) ありがとう、サイモン

4
機能ブランチの作業中にコード品質を改善する必要があります
あなたが見つけたよりも良い状態にコード/キャンプサイトを残すことについてのこの記事が本当に好きです -コードの清潔さを維持するための現実の現実的なアプローチのようです。 また、機能を単独で開発する方法として機能ブランチが本当に好きなので、気に入らない場合は簡単にマージできないなどです。 ただし、機能ブランチで作業しているときにifいコードを見つけた場合、修正する必要がありますか? それを修正するには多くの欠点があるように感じます: ブランチをマージして戻すと、diffが乱雑になり、変数名の変更や関数の抽出が乱雑になります 機能が放棄された場合、クリーンアップコミットをチェリーピック(近くのコードが変更されて乱雑なマージが行われた方法に応じて機能する場合と機能しない場合があります)、再実行、または単に放棄する必要があります。 反対に、ファイルにいるときに実行しないと、ブランチをマージする数日後に実行するのを忘れることになります。 私はこれが意見に基づいていると警告されました(タイトルに含まれている事実から外れていると思いますshould)が、答えがあると感じています(確かに人々は両方のアプローチを使用しているので答えが必要です)。また、についての質問development methodologiesは話題になっており、ある程度の意見が必要だと思います。

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